深度学习——卷积神经网络(目标探测)04
文章目录
目标探测
将目标探测任务转化为回归,分类问题
一种方式是:利用神经网络进行目标识别,同样的目标变为坐标值 – 回归问题
另一种方式:候选区域产生 – 分类思想
局部识别问题:比如一张图片有好几个动物
在很多位置尝试识别,能够完成识别的地方就是目标位置
找候选位置:
- 不同scale的sliding windows遍历所有位置
- 直接计算候选区域
DPM Deformable Parts Model
基本思想:提取图像特征,制作出激励模板,在原始图像滑动计算,得到激励效果图,根据激励分布确定目标位置。
- 产生多个模板,整体模板以及不同局部模板
- 不同模板同输入图片“卷积”产生特征图
- 特征图组合形成融合特征
- 对融合特征进行传统分类,回归,得到目标位置
优点:方法值观简单,运算速度快,适应运动物体变形
缺点:性能一般,人为设计激励特征工作量大,大幅度旋转无法适应稳定性差。
图片梯度计算
神经网络分类:R-CNN
R-CNN中的流程是先提proposal,然后CNN提取特征,之后用SVM分类器,最后再做bbox regression进行候选框的微调
基本思想: 对多个位置,不同尺寸,用卷积神经网络判断区域内图片是不是某物
候选位置提出方法:EdgeBox
-
分类器训练
-
Fine-tune分类模型
-
特征提取
-
单独目标探测器训练
-
单独目标回归器训练
-
分类器训练:直接用imageNet模型
-
Fine-tune分类模型
选择20类进行探测,最终目标21个(20+其他) -
特征提取
图片计算候选区域,候选区域切分图片变成输入大小,提取相应高级特征,存储特征 -
单独目标探测器训练
每一类单独训练一个SVM,为SVM准备正负样本
每一类单独训练,每一类训练数据平衡,每一类binary分类 -
单独目标回归器训练-基于候选区域微调
每一类单独训练,每一类训练数据平衡,每一类BBOX回归(和真值位置的regression,位置的微调)
评估方法
mAP:mean average precision 平均精度
IoU: Area of Overlap/Area of Union
优点:
- 利用了CNN高效识别能力,大大提高了性能
- 摆脱人为设计模板
- 分类+回归,有找到了精确位置的可能
缺点:
- 为了检测一个目标,所有候选区域计算,大量卷积运算缓慢
- SVM训练与CNN断裂,有效信息不能用于优化模型,not end-to-end
- 每一类单独训练,异常繁琐
Fast R-CNN
Fast R-CNN则是将候选框目标分类与bbox regression并列放入全连接层,形成一个multi-task模型。
共享卷积计算;完整训练(end-to-end);多目标一起学习
共享卷积计算
卷积计算保持空间位置
共同区域的卷积计算只需进行一次
切割候选区+提取特征图= 计算完整特征图+切割对应候选区
Rol Pooling 池化层
RoI池化层可以说是SPP(spatial pyramid pooling)的简化版,RoI池化层去掉了SPP的多尺度池化,直接用MxN的网格,将每个候选区域均匀分成M×N块,对每个块进行max pooling。从而将特征图上大小不一的候选区域转变为大小统一的特征向量,送入下一层。
max pooling
局部区域:100*50(4:2)
位置+类别 联合学习
cls_ score层用于分类,输出K+1维数组p,表示属于K类和背景的概率。 bbox_predict层用于调整候选区域位置,输出4*K维数组t,表示分别属于K类时,应该平移缩放的参数。
代价函数为:
候选区域生成-神经网络特征增加一组输出**RPN (Region Proposal Network)**候选区域网络
- 直接产生候选区域,无需额外生成
- 直接用于后序特征图切割
RPN的实现
Anchor
- 如果是VGG conv5作为特征图,3*3区域对应原始图像区域为:
4个pooling,16倍 - Anchor平移不变(较小的平移,pooling过程中忽略)
- Anchor同外接proposal区别数量:1-2个数量级减少,性能更高效,速度10X
- Anchor设计的借鉴意义:神经网络有能力找到最终量,也有能力找到很多中间量
神经网络回归:YoLo(附参考连接)
实时运行,精度稍微下降,定位精度较差
参考
YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。
YOLO检测网络包括24个卷积层和2个全连接层,其中,卷积层用来提取图像特征,全连接层用来预测图像位置和类别概率值。
YOLO将输入图像分成SxS个格子,每个格子负责检测‘落入’该格子的物体。若某个物体的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体。如下图所示,图中物体狗的中心点(红色原点)落入第5行、第2列的格子内,所以这个格子负责预测图像中的物体狗。
每个格子输出B个bounding box(包含物体的矩形区域)信息,以及C个物体属于某种类别的概率信息。
Bounding box信息包含5个数据值,分别是x,y,w,h,和confidence。其中x,y是指当前格子预测得到的物体的bounding box的中心位置的坐标。w,h是bounding box的宽度和高度。注意:实际训练过程中,w和h的值使用图像的宽度和高度进行归一化到[0,1]区间内;x,y是bounding box中心位置相对于当前格子位置的偏移值,并且被归一化到[0,1]。
confidence反映当前bounding box是否包含物体以及物体位置的准确性,计算方式如下:
confidence = P(object)* IOU, 其中,若bounding box包含物体,则P(object) = 1;否则P(object) = 0.
因此,YOLO网络最终的全连接层的输出维度是 SS(B5 + C)。
YOLO论文中,作者训练采用的输入图像分辨率是448x448,S=7,B=2;采用VOC 20类标注物体作为训练数据,C=20。因此输出向量为77*(20 + 2*5)=1470维。
维度远小于Fast R-CNN
损失函数
YOLO使用均方和误差作为loss函数来优化模型参数