############目标检测之RCNN系列###########
RCNN(2014)
Fast R-CNN(2015)
Faster R-CNN(2015、2017、unified)
yolo(2016、unified)
SSD(2016)
yolo2(2017)
yolo3(2018)
RCNN必须将区域框中的图像缩放到统一大小(具体是先框再缩放再卷积提取特征);
SPPNet使用ROI池化(具体是先整体卷积提取特征再框再ROI池化),得到长度一样的特征,因为只卷积一次效率高很多;
(SPPNet无需输入固定尺寸的图像,都可以生成长度固定的特征向量;
因为它是相对自己本身的长宽分割的,如长宽厚度分别为h、w、c,得到特征的总是16c+4c+c=21c,其中h、w已经被消掉了;)
(SPPNet让图像只需一次卷积提取特征;)
(SPPNet独立于具体的CNN结构,即任何CNN都可以使用SPPNet来改进;)
(ROI池化是SPPNet提出的;Pyramid pooling和RoI Pooling啥关系?一回事)
RCNN和SPPNet共同点:都使用Selective Search得到区域框,最后都使用SVM分类,特征都写到磁盘,都是multi-stage pipeline
(这里的SVM是多分类的,即one-vs-rest linear SVM;)
(RCNN和SPPNet整体上可看成3个阶段;)
FAST-RCNN不再使用SVM分类,而是使用神经网络,这样就可以同时训练特征提取网络和分类网络,比SPPNet效率更高
FAST-RCNN相对SPPNet,同时完成了提取特征、判断类别、框回归三项工作(不考虑proposal是single-stage的),见论文fig1
(首先假设得到了一个image和多个RoI(通过SS获得),然后先后进行FCN和RoI Pooling;)
(对每个RoI都有一组softmax和bbox回归的loss;但前面用于提取特征的FCN只有一个,被整个image使用;)
(每个RoI被映射为长度相同的特征向量,也叫RoI Pooling;)
(每个RoI位置由左上角坐标和宽高确定;)
(FAST-RCNN整体上可看成2个阶段;)
FASTER-RCNN相对FAST-RCNN,RPN网络取代了Selective Search,其中每个位置对应9种尺寸的anchor box即锚框,最后也有框回归和分类;训练方式多种多样
RPN(Region Proposal Networks)是一种几乎cost-free的region proposal,是一个FCN卷积网络,同时预测是否物体以及物体边界;
RPN先训练好,再给Fast R-CNN提供区域框(也可以一起交替训练);
RPN和Fast R-CNN合并成FASTER-RCNN,就算是一个网络(共享卷积特征、attention mechanisms);
网络主体采用VGG-16或resnet等;后面的Fast R-CNN仍然有RoI pooling;
RPN告诉Fast R-CNN该看哪个地方(attention mechanisms);
(The RPN module serves as the ‘attention’ of this unified network.)
RPN输入为任意size的image,输出为矩形框(每个框有是否包含物体的得分objectness score);
RPN不管类别,只是FASTER-RCNN的第一阶段,原论文fig2是整体,fig3是rpn;
RPN中,有一个小窗口,以类似滑动窗口的方式,在经过卷积后的特征输出上滑动,得到box回归层reg和box分类层cls;
通常取k=9个anchor box(3个尺寸、3个比例);
(常见的比例有1:1、1:2、2:1,常见的尺寸有128128、256256、512*512;)
由于每组anchor box是上下左右对称出现,所以RPN是translation invariant的;
(MultiBox利用k-means生成更多anchor,模型更大,且它不是translation invariant的;)
RPN也是一种处理多scale的方式(其他方式还有图像金字塔,即图像缩放,但耗时),RPN基于pyramid of anchors;
(图像金字塔是图像缩放(即pyramid of filters),而RPN是图像不动,anchor在动;)
reg和cls以一定的比例构成loss训练RPN;以BP和SGD训练RPN;
为了训练RPN和FAST-RCNN能够共享特征,有3种训练方式:交替训练(文中采用)、近似结合训练(合并成一个网络、固定前者)、非近似结合训练;
Selective Search原理:
https://blog.csdn.net/guoyunfei20/article/details/78723646 !!!
https://www.learnopencv.com/selective-search-for-object-detection-cpp-python/ !!!
https://www.cnblogs.com/zyly/p/9259392.html
https://blog.csdn.net/small_munich/article/details/79595257
https://www.cnblogs.com/zhengzhe/p/7783270.html
SS算法见原论文《Selective Search for Object Recognition》的Algorithm 1;
Algorithm 1描述如下:
step0:生成区域集R,见论文《Efficient Graph-Based Image Segmentation》
step1:计算区域集R里每个相邻区域的相似度S={s1,s2,…}
step2:找出相似度最高的两个区域,将其合并为新集,添加进R
step3:从S中移除所有与step2中有关的子集
step4:计算新集与所有子集的相似度
step5:跳至step2,直至S为空
(利用图分割算法得到初始region集合R,计算各个相邻region之间的相似性得到相似度集合S,
每次寻找最高的相似度并将对应的两个region合并;更新region集合R和相似度集合S;
直到S为空;最终得到的R集合就是所需的Region Proposal;整个过程是一个聚类过程;)
(根据‘相似度’有选择性的合并region,因此叫Selective Search)
(相似度的定义和计算是关键,由颜色相似度、纹理相似度、尺寸相似度、交叠相似度得到最终相似度;)
RCNN相关链接:
https://www.cnblogs.com/zf-blog/p/10095126.html
https://www.cnblogs.com/zf-blog/p/7273182.html
https://www.cnblogs.com/zf-blog/p/7286405.html
https://blog.csdn.net/shenxiaolu1984/article/details/51152614
https://blog.csdn.net/jiongnima/article/details/80016683 !!!
https://www.zhihu.com/question/35887527
https://blog.csdn.net/Bixiwen_liu/article/details/53840913
https://github.com/rbgirshick/rcnn
https://github.com/rbgirshick/fast-rcnn
https://github.com/rbgirshick/py-faster-rcnn
https://github.com/facebookresearch/Detectron
RCNN有几个问题:
FAST-RCNN有几个问题:
Selective Search都不算RCNN、FAST-RCNN的训练;
FASTER-RCNN有几个问题:
目标检测有哪些数据集:
PASCAL VOC dataset、COCO(a superset of PASCAL VOC)、 ILSVRC2013
https://blog.csdn.net/csdn_zhishui/article/details/84962587
http://cocodataset.org/#download
http://host.robots.ox.ac.uk/pascal/VOC/
https://www.cnblogs.com/antflow/p/7261859.html
https://blog.csdn.net/julialove102123/article/details/78330752
RCNN用了AlexNet、VGG;FAST-RCNN和FASTER-RCNN用了vgg16、Resnet;
yolo用了vgg16、darknet;
ssd用了vgg16等;
人脸识别领域的facenet和deepid3用了googlenet;
RCNN系列能做语义分割??
SSD、yolo都是目标检测;RCNN系列既能目标检测又能语义分割;
#########目标检测之yolo系列#########
yolo把目标检测当做单个回归问题,只有一个single network(同时预测bbox和物体类别概率),之前大多数方法把目标检测当做分类+回归问题,复杂的pipeline
yolo相对其他方法更少将背景当做物体,因为yolo有全局观
yolo对没有见过的场景或输入适应性更强,不容易奔溃
yolo将输入图像分为S*S网格,如果物体中心落入某网格,该网格就负责探测它;
每个网格预测B个bbox及score(该score表示有多大信心,该bbox有物体),每个bbox有5个预测值(中心点坐标、宽高、信心值),
每个网格还预测C个条件类别概率(当确定含有物体,是什么物体),该C个概率只和每个网格有关,和B个bbox无关;
B和C是两支路线,通过网格建立联系;
yolo相对Selective Search提出的bbox数量更少;selective search需要2s每张图(因此FAST RCNN实时性也是不行的);
yolo的网络结构受googleNet启发,24个卷积层和2个全连接层(更快版本只有9个卷积),1×1 reduction layers和3×3 convolutional layers代替inception;
在imageNet上预训练(一周时间),然后在PASCAL VOC 2007 and 2012上训练; Darknet framework;对小物体探测不是很好;
yolo也可以使用VGG-16训练,准确率高了,但实时性没有基于googleNet的好;
yolo的loss函数设计很讲究,是多项加权相加(惩罚分类错误和bounding box坐标错误),学习率先上升再减小,使用了dropout和数据增强;
yolo的重点就是网络结构(Fig3)和loss函数(公式3);
Fast R-CNN+YOLO准确率更高,实时性无法像YOLO一样;
YOLO9000意思是能探测超过9000种物体;比Faster RCNN with ResNet、以及SSD更好、更快;能同时在ImageNet(分类)和COCO(探测)数据集上训练;
YOLO9000目的是为了统一数据集(dataset combination method)、联合训练算法(joint training algorithm),实现物体识别和物体探测的统一;
YOLO9000 is a strong step towards closing the dataset size gap between detection and classification;
yolo2对yolo加了bn、使用更高图像分辨率、使用anchor boxes(提升了recall,但降低了mAP,从98个bbox变为1000个)、
选取折中的anchor boxes数量k=5(利用kmeans自动获取)、Direct location prediction、Fine-Grained Features、多种分辨率同时训练(Multi-Scale Training);
yolo2使用Darknet-19(19卷积、5池化)替代googleNet或vgg16;提出multi-label model合并数据集(imageNet的标记来自WordNet)即WordTree
yolo2中的WordTree是为了合并数据集,如imagenet和coco,解决label标记管理问题
yolo2是在imagenet和coco上训练的,现实中不会去重新训练吧,只是用它识别?
yolo3同样使用anchor boxes来预测bbox;使用multilabel classfication、独立的logistic classfiers、cross-entropy loss预测类别;
同样从different scales提取特征(feature pyramid networks),同样使用k-means clustering决定bbox数量;
yolo3使用新的杂交网络Darknet-53提取特征,基于yolo2、darknet19和新式残差网络,一共53个卷积层,比ResNet-101 or ResNet-152更高效;
之前对小物体准确率不高,yolo3现在对大物体不高(需要更多研究);秒杀SSD、 RetinaNet等;
关于yolo几个问题:
yolo相关链接:
https://pjreddie.com/darknet/yolo/ (yolov3)
https://pjreddie.com/darknet/yolov2/
https://pjreddie.com/darknet/yolov1/
############目标检测之ssd################
SSD和yolo一样,也是single shot detectors,比yolo快(但随后yolov2,yolov3应该超过了SSD),和Faster R-CNN一样准;
没有region proposals,但有default bounding boxes;预测物体种类score、框offset,基于不同scales、 分离aspect ratio提高准确率,适合低分辨率图像;
base network使用vgg16(其他网络也可以),feature layers作为辅助结构;loss由位置和自信值加权相加;
default boxes类似anchor boxes(可以针对数据集来设计default boxes);Hard negative mining,保持正负样本为3:1;
更多default box shapes更好(默认6个);SSD300 and SSD512 ;SSD对小物体特别难办(需要data augmentation);non-maximum suppression(nms);
SSD和yolo区别见论文fig2;(多加了几个特征映射层)
(论文第4节作者说明了SSD与Related Work,特别是faster rcnn、OverFeat、yolo的关系;)
相关链接:
https://github.com/weiliu89/caffe/tree/ssd
https://blog.csdn.net/denghecsdn/article/details/77429978
https://zhuanlan.zhihu.com/p/24954433
https://blog.csdn.net/weixin_40172297/article/details/80496553
https://blog.csdn.net/BlowfishKing/article/details/80485006
https://blog.csdn.net/weixin_42273095/article/details/81699352
https://blog.csdn.net/lanmengyiyu/article/details/79680022
NMS(Non-Maximum Suppression)抑制不是极大值的元素,可以理解为局部最大搜索(Local Maximum Search),是一种贪婪算法;
(NMS分为1D NMS和2D NMS;其中1D代表一个轴,它的邻居包括左右共2n+1个位置;2D代表两个轴即平面,它的邻居包括上下左右共(2n+1)*(2n+1)个位置;)
NMS在计算机视觉领域有着非常重要的应用,如视频目标跟踪、数据挖掘、3D重建、目标识别以及纹理分析等;
(NMS原论文Efficient Non-Maximum Suppression)
(Soft-NMS原论文Improving Object Detection With One Line of Code)
(Soft-NMS是解决当重叠度很高时,NMS会将较低置信度的框去掉(置信度改成0)的问题;做法是将置信度改为IoU的函数,而不是0;)
RPN是在NMS之后?不是吧
SS在NMS之前?yes or 都可以?
RCNN系列是proposal方法(利用RPN和SS),SSD、YOLO系列是非proposal方法;
NMS基本原理:
说明:
https://blog.csdn.net/qq_14845119/article/details/52064928 (opencv源码nonMaximumSuppression函数 )
https://github.com/watersink/nonMaximumSuppression (c、c++、matlab版本NMS)
https://github.com/ShaoqingRen/faster_rcnn/tree/master/functions/nms (faster_rcnn中的nms实现)
https://www.cnblogs.com/makefile/p/nms.html (NMS原理)!!!
打赏一下作者: