RCNN
提升思路:
减少CNN次数,太耗时,但是不减少框的数目
联合训练
注意点
1.onehot向量 0,0,0,1,0,0,0,0,0,0,用来代表分类后的类别,表示属于第四类。
2.检测模型的输入是一个图像矩阵,输出是目标位置的大小,比如(x,y,w,h)
3.检测问题实际上就是一个遍历操作,遍历所有位置,遍历所有大小
4.模型提升方向:速度、精度
5.同性缩放:未失真(一般padding是用0来填充);异性缩放:会失真(用周围像素来填充),简单来讲就是横纵直接拉伸
6.RCNN实现检测的三个阶段:
生成候选区域2000个——>对候选区域进行分类——>对分类后的候选区域进行修正
框架
分类模型的前向计算过程:
img3->cbrp16->cbrp32->cbrp64->cbrp128->[…]-fc256-fc[10]
3通道的彩色图像—>16个通道的特征图->…—>onehot
检测器的前向计算过程:
图片—>SS算法—>Alexnet2—>分类器—>NMS—>线性回归得到T
重点理解
1.选择性搜索:针对性的提取一些框,基于图像分割的方法初始化原始区域,将图像分割成很多很多很小的块,然后使用贪心算法,计算两个相邻区域的相似度,然后合并最相似的两块,知道最终剩下一张完整的图片(小的不断拼接变大)
2.分类器的训练:
正样本就是我们标注的框(ground truth box),负样本就是利用与正样本的IOU从2000个区域中筛选,正负样本缩放到同样大小,保存为数据集。
1).在Imagenet上训练Alexnet,得到alesnet_0
2).在SS算法区分正负样本后进行微调,在alexnet0上添加一个分类头,主要训练分类头,少量训练Alexnet0,训练完成得到Alexnet1,完成版本0的分类器。
3).用在alexnet0提取特征,用传统方法svm做分类器,完成版本1的分类器。
4).用在alexnet1提取特征,用传统方法svm做分类器,完成版本2的分类器。
5).将IOU改成0.5,得到Alexnet2。
3.NMS 非极大值抑制:
可大大减少预测框的个数,根据置信度选取得分最高的框,然后再抑制掉与该框重合度较高的框,再在剩下的非抑制框中重复执行,知道最后没有被剩下的框。
4.修正已经得到的框:
法一:alexnet提取特征,训练回归器,直接返回标注框的位置和大小。缺点是没有直接用到SS算法的结果。
法二:用线性回归器来预测偏移量(标注框和预测框之间),也就就是(x,y,w,h)——>(tx,ty,tw,th)——>X=x+wtx,Y=y+hty,W=wexp(tw),H=hexp(th)
5.为何选用pool5来进行bbox回归?
CNN具有位置对齐性,保留位置关系 ,而通过fc7之后的特征不再保留位置信息。CNN的特征既可用来分类,也可用来回归。
6.一类中直接预测了300个框,如何选择最终的2目标?
方法一:通过聚类分成两类,在每一类中选择置信度最高的框。在不知图像中有几个目标时,不知道目标的类别数,因此不可取。
方法二:根据框的重合度来完成,两两遍历,认为重合度较大的那些框表示同一个物体。
存在问题
1、在SS的过程中,要得到2000个框,每个框都要经过CNN,再经过3次SVM,最后的候选框在乘以4倍。
2、四个组件单独发挥作用,没有联合训练,难以进一步优化。
提升思路
1、尽量减少CNN次数,耗时。
2、尽量进行联合训练,进一步优化。