写在前面:
对于目标识别领域的发展,RCNN-FAST-FATER-YOLO-SSD-YOLO9000
对于rcnn和fast 二者使用selective search的算法进行图像的强硬分割,并将分割的图像作为提议选取进行cnn的网络训练。而faster进行了在原有的fast的基础上加入了rpn,现在分开来说说。
RCNN
对于rcnn使用svm进行分类,并使用bbox进行位置精修。网络结构示意图及训练过程如下
RCNN算法分为4个步骤
- 使用SS算法生成2k个提议选区
- 对每个提议选区进行深度网络的特征提取,可以使用(vgg,axlenet,googlenet等)
-将每个提议选区的特征送入每一类的SVM 分类器,判别是否属于该类,存在多少个类,对应多少个svm分类器
- 使用bbbox回归器精细修正候选框位置
详细点---------
- 使用selective search的方法在测试图片上提取2000个region propasals ,将每个region proposals归一化到227x227;
- 在CNN中正向传播,将最后一层得到的特征提取出来;
- 对于每一个类别,使用为这一类训练的SVM分类器对提取的特征向量进行打分,得到测试图片中对于所有region proposals的对于这一类的分数,再使用贪心的非极大值抑制去除相交的多余的框
- 非极大值抑制(NMS)先计算出每一个bounding box的面积,然后根据score进行排序,把score最大的bounding box作为选定的框,计算其余bounding box与当前最大score与box的IoU,去除IoU大于设定的阈值的bounding box
- 重复上面的过程,直至候选bounding box为空,然后再将score小于一定阈值的选定框删除得到一类的结果
-
合并规则
优先合并以下四种区域:
- 颜色(颜色直方图)相近的
- 纹理(梯度直方图)相近的
- 合并后总面积小的
- 合并后,总面积在其BBOX中所占比例大的
rcnn的弊端:
- 使用ss得到提议选区,一张图可以得到2000个region proposal,这里面涉及到大量的重复计算
- 对图像分分类使用的是svm的方法,并且每一个分类对应一个svm来判断选区内是否为该种类,与深度学习格格不入
Fast rcnn
对比rcnn,fast主要针对rcnn存在的上述弊端进行了改进,
通过网络结构可以就看出,fast的的方法如下:
- .使用ss算法对图像产生2k个提议选区,得到选区的位置
- 将整张图像进行深度网络的特征提取,深度网络仍然采用vgg,alexnet或者Googlenet,并去除掉深度网络的最后面的全连接层,只保留最后一层feature map,一般情况下,该深度网络会事先在数据集上进行与训练,已缩短目标识别网络的训练时间;
- 使用第一步ss算法得到的位置,并使用roipooling的方法得到region proposal在该featuremap上的位置,并将该位置的feature map的信息作为后续网络结构的输入
- 将上一步region proposal 进行平铺
- 连接两个全连接层,分别进行分类和回归,对于分类,采用softmax;对于位置回归采用bbox损失函数计算。
损失函数
损失函数包含两部分,使用多任务损失函数的方式.
分类损失函数+回归损失函数
分类损失函数使用log损失函数:Lcls=-log Pu只判断正样本的损失损失函数
回归损失函数使用smoothL1损失函数:Lreg=R(t-t*),其中smoothL1 损失函数的定义如下
对于回归损失函数中的输入量t和t*表示的是预测的位置与ground truth的位置。
fast的弊端
对于fast的主要存在提议选区的问题,在原来的fast的基础上加入了rpn网络。