关键词:Object Detection、Regional Proposal、R-CNN
Object Detection 与Regression的区别
每一张图片中的对象的数量是不一定的,可能有X个,那么输出就是 X * 4 个数字。
在机器学习中,分类和回归是解决所有问题的两种思路。所以Object Detection不是Regression,所以尝试下分类。
在图片中画出一个个的区域,然后输入到CNN的分类器中去进行识别就可以解决Object Detection的问题了。
问题是:怎么控制这个框画多大呢?
最直接的答案:不控制,随机尝试,画框后,把框中的数据输入到分类器中,进行分类。
也就引出另一个问题:如果使用CNN去画如此多数量的框(Localization),然后去分辨框中事物的类别(Classification),计算成本太高?
Solution:缩小检索范围。
Region Proposals
方案描述:在图片中找到一些整体相似的结构,然后输出所有可能存在目标对象的区域,最后进行分类。运行的速度很快,因为它不关心框中是什么对象,只是有可能是一个对象,就框出来。
在Region Proposal中,Selective search是很有名的一个算法:
它从像素入手,将颜色或者纹理相近的像素进行合并,然后不断合并范围,然后在这个过程中,不断进行画框。减少了无意义的Localization。
Region Proposals算法排名
讲师说他一般使用EdgeBoxes,因为运算速度很快,一张图片,大概0.3s,Selective Search大概需要10s
R-CNN Region Based CNN
1. 用regional proposal的某个算法,从图片中画出N个可能包含对象的框
2. 把这些框裁剪成同样大小
3. 使用CNN进行特征学习
4. 使用SVM进行分类(如果目标只有一个类:猫,那么用一个二分类的SVM就可以,如果是多类,可以用多分类的SVM,或者对每一个目标,训练一个二分类的SVM)
5. 这里还有一个Bbox reg:其实是一个线性回归模型,主要是对裁剪出来的图片进行微调的,见训练步骤Step5.
R-CNN的实际训练步骤
具体可见下图,以下为个人语言描述:
1. 现在一个预训练好的分类模型(如,基于ImageNet的,因为它有1000个类别)
2. 将最后一个全连接层(分类器)删除掉,然后新增自己的FC层,进行初始化。
3. 将Regional Proposal框中的所有特征都存储起来(问题:太耗存储)
4. 对于这些存储好的特征,使用SVM进行训练(正例:是猫,反例:不是猫)
5. Regional Proposal截取的特征不一定是完美的,所以使用一个线性回归算法,对于第三步中存储的特征进行调整,使用“correction factor”使这些特征,更能凸显我们的训练目标。
注:PPT有一点问题,倒数第二章图片的标记错误