R CNN
有一篇文章写的比较详细,先放在前面
文章链接https://blog.csdn.net/shenxiaolu1984/article/details/51066975
流程:
1.通过选择性搜索算法获取2k个候选区域
2.将候选区域进行合并,获得一些感兴趣区域
3.将感兴趣区域直接resize为一个固定的大小,并送入一个神经网络
4.将神经网络的倒数第二层输出作为输入,放入svm中,输出分类
5.对合适分类的图像进行边框回归得到候选区域
缺点:
对候选区域resize,降低了准确率
对不同大小的物体的检测做的不是很好
一些训练细节
1,2使用ss获取候选区域较难复现
3中训练cnn,输入为一张图片,输出为softmax的分类, 训练时可以使用训练集中IOU>0.6的图像
5中时先将前4步做完,再去训练最后那一个神经网络
一个要重点掌握的知识点
边框回归
做边框回归的时候,神经网络的输出不是一个简单的回归框,而是
Input:
RegionProposal→P=(Px,Py,Pw,Ph)
感兴趣区域的CNN输出
Output:
需要进行的平移变换和尺度缩放
设Gx,Gy,Gw,Gh为真实值
tx=(Gx−Px)/Pw
ty=(Gy−Py)/Ph
tw=log(Gw/Pw)
th=log(Gh/Ph)
tx = w1*p + b1
ty = w2*p + b2
tw = w3*p + b3
th = w4*p + b4
边框回归的loss是最小二乘 ,使用L2正则化
为什么要使用这种形式
不是说别的形式不行,我曾经训练过一个边框回归神经网络,输出的是预测的(x,y,w,h),但是训练时收敛较慢
其实神经网络中当输出在0-1之间时,网络的收敛比较快
一个更重要的原因是
神经网络具有尺度不变性
而且,对于不管是线性回归还是神经网络,它本质上都是一个函数
有一篇博客写的比较好
https://blog.csdn.net/zijin0802034/article/details/77685438