Object Detection · RCNN (2)

在这里的Fine tune中,需要判定Region Proposal属于哪种目标分类,在VOC的训练集中,有bounding box和对应的分类标注,RBG他们是检查每个Region Proposal与训练集中bounding box的重叠率,如果Region Proposal和bounding box重叠率大于阈值(经过实验,选了0.5),则认为这个Region Proposal的分类为bounding box对应的分类,并且用这个对应的bounding box作为Fine tune的输入。

但是这些输入大小不一,需要调整到目标输入尺寸224x224,在附录A中讨论了很多的预处理方法,

Preprocess

A. 原图
B. 等比例缩放,空缺部分用原图填充
C. 等比例缩放,空缺部分填充bounding box均值
D. 不等比例缩放到224x224
实验结果表明B的效果最好,但实际上还有很多的预处理方法可以用,比如空缺部分用区域重复。

训练时,采用0.001的初始学习率(是上一步预训练的1/10),采用mini-batch SGD,每个batch有32个正样本(各种类混在一起),96个负样本进行训练。

Object category classifiers

每个类对应一个Linear SVM二分类器(恩,很简单的一个SVM,没有复杂的kernel),输入是CNN倒数第二层的输出,是一个长度为4096的向量,SVM根据这个特征向量和标签进行学习,调整权重,学习到特征向量中哪些变量对当前这个类的区分最为有效。

训练SVM的数据和Fine tuning训练CNN的数据有所不同,直接使用将PASCAL VOC训练集中的正样本,将与bounding box重叠率小于0.3的Region Proposals作为背景(负样本),这个重叠率也是调参比较出来的;另一方面,由于负样本极多,论文采用了hard mining技术筛选出了难分类负样本进行训练。不过这样的话,SVM和CNN的正负样本定义就不同了,SVM的正样本会少很多(那些重叠率大于0.5的bounding box就没用上了)。

附录B中解释,其实一开始RBG他们是用SVM的正负样本定义来Fine tune CNN的,发现效果很差。SVM可以在小样本上就达到比较好的效果,但CNN不行,所以需要用上更多的数据来Fine tune,重叠率大于0.5的Region Proposals的数据作为正样本,可以带来30倍的数据,但是加入这些不精准的数据的代价是,检测时位置不够准确了(因为位置有些偏差的样本也被当做了正样本)。

于是会有一个很自然的想法,如果有很多的精确数据,是不是可以直接用CNN加softmax输出21个分类,不用SVM做分类?RBG他们直接在这个分类方式上fine tune,发现这样做的准确率也很高(50.9%),但是不如用SVM做分类的结果(54.2%),一方面是因为正样本不够精确,另一方面是因为负样本没有经过hard mining,但至少证明,是有可能直接通过训练CNN来达到比较好的检测效果的,可以加快训练速度,并且也更加简洁优雅。

Bounding-box regression

这部分是在附录C展开阐述的(CVPR篇幅限制)。首先,为每个类训练一个bounding box regressor,类似DPM中的bounding box regression,每个类的regressor可以为每个图输出一个响应图,代表图中各个部分对这个类的响应度。DPM中的Regressor则是用图像的几何特征(HOG)计算的;不同于DPM,RCNN-BB中这种响应度(activation)是用CNN来计算的,输入也有所不同,DPM输入是原图,输出是响应图(从而得到bbox的位置),RCNN-BB的Regressor输入是Region Proposals的位置和原图,输出是bounding box的位置。

定义一个region proposal的位置为P=(Px, Py, Pw, Ph),x,y为region prosal的中心点,w,h为region proposal的宽高,对应的bounding box的位置为G=(Gx,Gy,Gw,Gh),Regressor的训练目标就是学习一个P->G的映射,将这个映射拆解为四个部分:

P->G

其中,dx(P),dy(P), dw(P), dh(P)是四个线性函数,输入为P经过前面说的fine tune过的CNN后得到的pool5特征,输出为一个实数

Object Detection · RCNN

训练就是解一个最优化问题,求出四个w向量,使得预测的G和真实的G相差最小,用差平方之和代表距离,化简后的形式为:

Train Regressor

其中,

Target variable

跟前边的四个映射是对应的,
同时加上了对w的l2正则约束,抑制过拟合

训练得到四个映射关系后,测试时用这四个映射就能够对预测的Region Proposals位置做精细的修正,提升检测框的位置准确率了。

至此,整个训练和测试过程就介绍完毕了。

玄学时间

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwyfxj.html