对目标检测的深度学习算法也不是很熟,这方面都快被大牛们写烂了,这里仅根据近期自己的理解小记一下,如有偏颇望不吝指正。
RCNN(Regions
with CNN features)系列是由RossB.Girshick于2014年提出,基于CNN良好的特征提取及分类性能,通过region
proposal实现目标检测。
首先上一张图,rcnn艰辛的进化历程,至于yolo,ssd后面再续吧...
第一行"24x"表示测试速度SPP相对于RCNN提速24倍左右,第二行每个框里的数据表示对应网络依然存在的问题。
下面讲解下每个网络的框架细节(网络框架均基于Alexnet):
RCNN:
有图才会更清晰
Rcnn流程框架
步骤:
1、input图像做预处理,缩放到224x224;
2、select search提取候选区域RP(region proposal);
3、每个RP通过crop/warp处理到固定大小尺寸,分别输入到CNN的卷积层进行卷积计算FM(feature map);
4、第五层卷积得到的FM,基于线下训练的SVM分类器进行class;
5、将FM送到全连接层fc,执行bounding box regression;
SPP主要工作
sppnet
显然由spp的主要工作可知:
1、开始阶段不再对region proposal 进行crop/warp的操作,而是将整张图片作为input输入;2、将RP的提取任务交给spatial pyramid pooling去做
这样做的目的一个是避免多次提取特征造成资源浪费,另外就是避免了crop/warp的形变带来的准确率下降。
实际上sppnet就是构造了一个多尺度金字塔池化层。
首先,input img 先经过select search算法获取约2k个RP的localtion;
其次,通过conv->pooling的stride、padding等操作将ss得到的RP映射到特征图conv5
然后,通过sppnet多个尺度(如4x4、2x2、1x1等)的网格对每个RP进行固定尺寸转换,以满足fc层的输入
sppnet提取的特征一方面用于svm的训练,另一方面做bbox的regression。
存在的问题:
1、依然采用svm做线下计算,我觉得这一步完全可以用softmax计算loss了,再与bbox reg并行。然而实际上在fastrcnn作者才开始这样考虑;
2、svm的线下计算存在磁盘空间的浪费
fast rcnn:
FastRcnn流程框架
fast rcnn的创新点简单说就是上面提到的一个是替换了svm,采用softmax,证明效果还是好点的,另外一个就是多任务
损失,将分类和回归的loss加权求和合并计算。
燃鹅,现在还是不能达到end2end的训练方式,不要忘了,还有个select search没有被统一起来,这个ss还是相对很耗时的,
据说2s/m(没有实测)。这就是接下来faster rcnn的任务了。
faster rcnn:
faster rcnn 的框架结构
faster rcnn主要针对耗时的ss进行改进,为了能统一到同一个网络架构下,实现end2end的训练方式,提出了RPN(region
proposal net),通过rpn反向映射锁定出一定的anchor区域作为RP。下面具体介绍下:
RPN:
最后还有两个loss层,这里的class-loss指代的不再是前景背景loss,而是真正的类别loss了,这个应该就很好理解了。而
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:目标检测之RCNN系列浅析 - Python技术站