RCNN 系列解读
先放一个大神博客吧,膜拜~
http://www.rossgirshick.info/
有空还需要把细节和补充材料review一下!
参考:
https://cloud.tencent.com/developer/news/281788
其他人的博文整理:
https://www.cnblogs.com/yhyue/p/9247962.html
https://blog.csdn.net/briblue/article/details/82012575
目标检测前沿及回顾(2018)
脉络清晰,有延伸
关于目标检测的论文集锦参看下面这个GitHub:
https://github.com/hoya012/deep_learning_object_detection
零、R-CNN之前的故事
-
HoG特征 梯度直方图
参考:HoG特征
① 对图像进行预处理,主要是伽马矫正和灰度化,尽量去除光照的影响
② 对原图中的每一点,计算其梯度值,得到其梯度的大小和方向
例如,水平方向梯度gx:做水平差分;竖直方向梯度gy:做竖直差分。
总的梯度大小g = sqrt(gx2+gy2)
总的梯度方向θ = arctan(gx/gy)
③ 计算梯度直方图
将8x8大小的区域划分为一个cell,其元素共有8x8x2=128个关于梯度的值,将其按角度分到9个bin中,这9个bin是将180度划分为9份得到。这样,就得到一个长度为9的数组(梯度的直方图)。一般来说,观察梯度方向的主要分布范围,就可以大致认为该8x8区域的具有某个方向的边缘。HoG是对边界敏感,对灰度变化平坦的区域不敏感。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UvMmOvNR-1586676325899)(en-resource://database/2775:1)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EJhlpGAa-1586676325901)(en-resource://database/2777:1)]
④ 以4个cell为一个block进行归一化,进一步降低光照影响。
一个block事实上对应16x16的区域。4个cell,每个cell经过梯度直方图计算已经转化为一个长度为9的vector,现在一个block相当于包含一个长度为4x9=36的vector。这里的归一化,就是对这个长度为36的向量进行归一化。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4wJ9nQW6-1586676325906)(en-resource://database/2773:1)]
⑤ 得到HoG特征向量
注意block是在整张图上滑动的,因此对于64x128的图像,共7x15个block。
因此一张图像的HoG向量为7x15x36 = 3780
得到HoG特征向量之后,一般用svm进行分类。 -
sift特征
包含了候选特征提取、特征描述两个部分。其中特征描述为重点,因为特征提取可以用很多方法实现,并不是sift的核心。
① 特征提取
a 候选关键点
通过高斯尺度差分(DoG)实现,DoG是高斯金字塔和差分金字塔的结合。所谓高斯金字塔,是多组图像金字塔,在每组金字塔中,图像尺寸不变,也就是分辨率相同,但高斯核的方差按一定比例增长,也就是模糊程度不同。在不同组之间,尺寸每次减半,也就是进行步长为2的下采样。而差分金字塔,就是高斯金字塔中,同一组内的相邻图像两两差分形成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d4RNPCrI-1586676325909)(en-resource://database/2779:1)]
对DoG的图像进行归一化,可以看到差分图像所蕴含的特征。并且有的特征是在不同模糊程度、不同尺度下都存在的,这些特征正是sift要提取的特征。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wTUaXhdp-1586676325911)(en-resource://database/2781:1)]
b 关键点定位
通过DoG筛选出候选关键点后,对这些关键点进行精确的拟合,来进一步确定位置和尺度
② 特征描述
类似简易版hog
https://www.cnblogs.com/wangguchangqing/p/4853263.html
- selective search
① 分割
先按一定方法将图像分割为许多小快,然后使用贪心策略,计算每两个相邻区域的相似度,然后每次合并最相似的两块,将这其中每次产生的图像块都保留下来,这样就得到了图像的分层表示。
② 区域合并-如何检测相似性
采样三种多样性策略来增加候选区域,避免并不相似区域被错误合并,或者相似区域没有被合并到。
- 多种颜色空间
- 多种相似度度量,如颜色、纹理、大小、重叠
- 通过改变阈值初始化原始的区域,阈值大,则分割的区域少
③ 给区域打分
给定权重,相同区域多次出现权重叠加,计算所有目标区域的分数,排序。
④ 性能评估
通过算法计算得到的包含物体的Bounding Boxes与真实情况(ground truth)的窗口重叠越多,那么算法性能就越好。
一、R-CNN
Rich feature hierarchies for accurate object detection and semantic segmentation | [CVPR’ 14] |
参考:
https://blog.csdn.net/wopawn/article/details/52133338(非常详细的解读了rcnn各个部分是如何训练,如何选择和构造样本,以及输入输出形式。(重点关注bbox回归的部分))
创新点:
1.采用CNN网络提取图像特征,从经验驱动的人造特征范式HOG、SIFT到数据驱动的表示学习范式,提高特征对样本的表示能力;
2.采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题。
编辑于2019/12/26
**在AlexNet在ImageNet上获得成功之后,R-CNN作者思考是否能将其用到目标检测领域的Pascal VOC数据集上来。由于目标检测的数据集较少,采用了迁移学习的方法,即对ImageNet上的预训练模型进行fine-tune。于是R-CNN的基本思路为:
- 通过selective research在图片上生成2k个region proposal
- 将所有proposal缩放(warp)到227x227,依次送入特征提取网络获得一个4096维特征(细节:warp时对各区域进行膨胀,也就是人为添加了边框,每个box向外扩张了16个像素)
- 将特征输入每个类别的SVM进行分类,每个类别的SVM给所有特征向量进行单独打分。也就是说,现在的每个region proposal都有针对每个类别的分数;而每****一类别,在每个region proposal上都有一个得分
- 对每个类别,分别使用NMS进行候选框筛选,拒绝掉一些和高分区域IOU大于阈值的候选框
- 分类完毕,进行bbox regression **
CNN和SVM各自的训练策略:
- 特征提取网络是AlexNet(5个卷积,3个全连接)的迁移学习;
特征提取器CNN训练时,输入网络的proposal(bbox参数,xywh),如果其和真实标注的框IoU>0.5就认为时positive,否则认为是negtive;学习率设维初始化训练时的1/10;每轮SGD迭代,使用正负例样本数维32:96 - 分类器SVM训练时,完全重合的认为是groudtruth,IoU<0.3的认为是背景,其余丢弃(注意这个0.3的阈值选择很重要,是在[0.1,0.2,0.3,0.4,0.5]中网格搜索得到的;训练时采用hard negtive mining策略,也就是每次迭代时,将损失函数最高的。
关于为什么CNN和SVM训练时使用正负样本比例不同的一个讨论:
(简而言之就是CNN需要大样本来避免过拟合,而阈值宽松一点能提供更多样本;而svm适合小样本学习,故使用更严格的阈值)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-juxNzikf-1586676325914)(en-resource://database/1263:1)]
此外,作者还讨论了为什么单独训练一个svm分类器,而不是使用cnn层的fc层(见补充材