object detection是要在图像中识别到物体,并定位的算法,即图像识别+定位。classification+localization。
这个问题可不是那么容易解决的,物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,物体还可以是多个类别。
如下所示:
识别分类任务是CNN网络来完成;定位的任务有专门的算法!
定位思路1:看做机器学学习回归问题
看做回归问题,我们需要预测出(x,y,w,h)四个参数的值,从而得出方框的位置,方框用4个数字表达,使用欧式距离计算损失函数。
计算与真实的xywh的欧式距离,真实的4个数训练时需要标记。
具体可以把最后全连接层1000类改为20类,rename下;
以上是两个模型,分别解决分类和定位的两个问题。
只训练头部比全部训练效果差2%~3%;
这里需要进行两次fine-tuning: 第一次在ALexNet上做,第二次将头部改成regression head,前面不变,再做一次fine-tuning
接在最后一个卷积层的后边---VGG,Overfeat;
接在最后一个全连接层之后--RCNN,Deeppose;
regression太难做了,应想方设法转换为classification问题。 regression的训练参数收敛的时间要长得多,所以上面的网络采取了用classification的网络来计算出网络共同部分的连接权值。
标注也需要多个,每个部位各有4个数;
把人体拆分成若干关节,两个点代表关节,所有关节标记起始点方向,预测角度!
定位思路2:取图像窗口预测得分
根据得分的高低,我们选择了右下角的黑框作为目标位置的预测。 注:有的时候也会选择得分最高的两个框,然后取两框的交集作为最终的位置预测。
总结一下思路: 对一张图片,用各种大小的框(遍历整张图片)将图片截取出来,输入到CNN,然后CNN会输出这个框的得分(classification)以及这个框图片对应的x,y,h,w(regression)。
优化时间:优化前--
优化后:把全连接层改为卷积层,这样可以提提速。
全连接层耗时最多,改为权重共享w的卷积层--思路如下:
多个物体的识别定位:
把回归->分类问题!如下:
问题是:框在哪----移动太多了?框多大---大小?----量级很大!
只能找出可能含有物体的候选框,比如选1000个候选框,这些框之间是可以互相重叠互相包含的,这样我们就可以避免暴力枚举的所有框了。
---边缘策略!
问题是候选框的选择方法:
分割?选择性搜索?如下:
以下是各种选定候选框的方法的性能对比:
基于以上思路,RCNN算法被发明用于object detection,技术的演进如下,SppNET是一个承前启后的算法: RCNN->SppNET->Fast-RCNN->Faster-RCNN。
1.R-CNN
R是region即边缘,速度不快!用的是上边边缘策略!
先拿到框框,再resize框的大小,再卷积拿到框框里的特征,放到SVM分类器中分类。
RCNN的步骤:
步骤一:训练(或者下载)一个分类模型(比如AlexNet)
步骤二:对该模型做fine-tuning 将分类数从1000改为20 去掉最后一个全连接层
步骤三:特征提取 提取图像的所有候选框(选择性搜索) 对于每一个区域:修正区域大小以适合CNN的输入,做一次前向运算,将第五个池化层的输出(就是对候选框提取到的特征)存到硬盘
步骤四:训练一个SVM分类器(二分类)来判断这个候选框里物体的类别 每个类别对应一个SVM,判断是不是属于这个类别,是就是positive,反之nagative 比如下图,就是狗分类的SVM
步骤五:使用回归器精细修正候选框位置:对于每一个类,训练一个线性回归模型去判定这个框是否框得完美。
2.Fast R-CNN
在R-CNN上的改进:把2000个卷积改成一次映射;
3.Faster R-CNN
在最后一个卷积神经网络后边,加了个slide woindow,窗口做后续的分类
https://www.cnblogs.com/skyfsm/p/6806246.html
|