一、R-CNN算法简介
R-CNN算法流程
1、将一张图像生成1k-2k个候选区域(使用ss算法)
2、对于每个候选区域,使用深度网络来提取特征
3、将特征送入每一类的SVM分类器,判别是否属于该类。(有多少类别就有多少个SVM分类器)
4、使用回归器精细修正候选框位置
R-CNN算法缺陷
1、测试速度慢
2、训练速度慢,过程繁琐
3、训练所需的空间很大
FAST-R-CNN算法流程
文章图片
与R-CNN相比,训练时间快九倍,测试推理时间快213倍,准确率提升至66%
1、将一张图像生成1k-2k个候选区域(使用ss算法)
2、将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
3、将每个特征矩阵通过ROI pooling层缩放到7*7大小的特征图,接着将特征图展平通过一系列的全连接层得到预测结果
4、使用softmax输出预测概率,其具有N+1个概率分布;使用回归器调整候选框位置 。 loU:图像的交并比。
FASTER-R-CNN算法流程
文章图片
推理速度在GPU上达到了5fps(包括候选区域的生成)
1、将图像输入网络得到对应的特征图
2、使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得特征矩阵
3、将每个特征矩阵通过ROI pooling层缩放到7*7大小的特征图,接着将特征图展平通过一系列的全连接层得到预测结果
RPN+FAST-R-CNN
使用了RPN代替ss算法,或的速度上的提升。
Region Proposal Network
在特征图上使用滑动窗口生成一维向量,该向量分别连接两个全连接层,来输出目标概率以及边界框回归参数。通过特征图的中心点,生成anchor box, 然后
预测每个anchor box是前景还是背景的该率,anchorbox的尺寸根据经验得到
将输入图像首先生成k个anchorbox,对于RPN生成的候选框部分存在大量重叠,因此基于候选框的cls得分,采用非极大值抑制,loU设为0.7,这样每张图片只
剩下少部分候选框
训练数据的采样分为正负样本,规定anchor与实际标注的物体框之间的loU大于0.7即为正样本,低于0.3规定为负样本。位于两区间的anchor全部丢弃。
Faster-R-CNN训练过程:
原论文采用分别训练RPN以及Fast-R-CNN方法
1、利用Imagenet预训练分类模型初始化前置卷积网络层参数,并开始单独训练RPN网络参数
2、固定RPN网络独有的卷积层以及全连接层,再利用ImageNet预训练的分类模型初始化前置卷积网络参数,并利用RPN网络生成的目标建议框去训练Fast-R-CNN
网络参数
3、固定利用Fast RCNN训练好的前置卷积网络层参数,去微调RPN网络独有的卷积层以及全连接层参数。
4、同样保持固定前置卷积网络层参数,去微调Fast-RCNN网络的全连接层参数,最后RPN网络与Fast-RCNN网络共享前置卷积网络层参数,构成一个同一网络
网络结果:
文章图片
二、YOLO检测算法
文章图片
【深度学习论文研读|目标检测网络R-CNN系列与yolov1算法原理概述】YOLO算法属于one-stage(单阶段)检测算法:即就使用一个cnn网络做一个分类回归来获得结果。该方法的优势在于速度非常快,适合做实时检测任务。缺点是效果上不会太好。
mAP:算法效果评价指标,在检测任务中,精确值(precision)与召回值(recall),可以用真实的标签box与实际网络结果box进行对比,基于置信度(低于置信度的检测框将被丢弃)来得到结果。
m A P = a r e a ( P ? R 曲 线 ) ∈ [ 0 , 1 ] mAP=area(P-R曲线)∈[0, 1] mAP=area(P?R曲线)∈[0,1]
Yolo算法原理:
1、V1版本
在v1版本中,yolo网络将一张输入图片划分为许多的网格,然后对每个网格均进行预测其是否存在物体,对于图片中某一物体的中心网格(处于几何中心位置),该网格还需要预测该物体属于哪一种类。
注:在这一步,感觉有点和frcnn里面先判断前景还是背景的步骤有点相似
文章图片
根据中心点,来生成不同尺寸比例的box,用来框选检测到的物体,这些尺寸由经验获得例如1:2、2:1、1:1…
过滤掉低置信度的候选框 ,置信度即网络判断当前框内是存在物体的信心分数。
根据候选框与真实物体框(标签)的IoU(交并比)来获得最佳候选框。
网络整体架构:
文章图片
在v1版中,输入图像大小固定为448x448x3,原因是后续全连接层的参数是固定大小,根据矩阵乘法:
F = W ? x + b F=W*x+b F=W?x+b
权重矩阵必须满足能和卷积层输出的最终特征进行相乘。
损失函数:
文章图片
该损失函数有五项组成,可以将其划分为四部分,其中第一、二项作为第一部分称为位置误差公式,主要是对box框地位置进行调整,B表示生成框地数量,论文中设置为2;
第三项作为第二部分,称为含对象的置信度误差,该项可以对预测该网格内存在物体与真实该网格内存在物体做对比,生成损失函数;
第四项作为第三部分,负责对不含对象的置信度误差比对,与上部分功能内类,多出来的权重参数平衡样本不均衡问题(因为在获取到的样本中,背景要多于前景)
第五项作为第四部分,最后一项代表分类误差,即分类结果与真实结果比对。
在结尾处,作者阐述了yolov1算法的不足之处,由于每个网格仅仅只能预测分为一个类别,而且box只有两种,所以对于一些堆在一起的多个物体,就很难达到好的检测效果。而且出现在前景里面的小物体比如小鸟等,也没办法检测出来。
推荐阅读
- 土地利用数据|通过ArcGIS对GlobeLand30影像镶嵌拼接并去除黑边
- 数据结构与算法|堆排序python实现及时间复杂度分析
- C语言|求最小公倍数的三种方法(C语言)
- 人工智能|干货!人体姿态估计与运动预测
- 分析COMP122 The Caesar Cipher
- 计算机网络|计算机网络——DHCP协议详解
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)
- Linux|Linux--网络基础
- 网络|一文彻底搞懂前端监控