目标检测笔记

############目标检测之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有几个问题:

  1. 为什么最后用SVM识别,而不用CNN(原论文考虑使用CNN,参加2.3节)
  2. Selective Search算不算RCNN的训练?不算
    其他作者点评RCNN:
    It generates category independent region proposals and extracts CNN features from the regions.
    Then it applies class-specfic classifiers to recognize the object category of the proposals.

FAST-RCNN有几个问题:

  1. ROI projection和ROI pooling啥关系?
    (ROI projection是将RoI映射到卷积后特征的对应区域;ROI projection是和FCN卷积同时进行的;ROI pooling在FCN之后;)
  2. 框回归的原理
    (SS获得的原始ROI坐标和真正的bbox标记坐标存在差异,通过该差异学习平移量和缩放量;)

Selective Search都不算RCNN、FAST-RCNN的训练;

FASTER-RCNN有几个问题:

  1. anchor box选定9个有没有必然性,换成更多更少会如何?
  2. anchor box和sliding window啥关系?
  3. FASTER-RCNN是end to end的吗?
    (We further merge RPN and Fast R-CNN into a single network by sharing their convolutional features)
    (we have also found that RPNs can be trained jointly with Fast R-CNN networks leading to less training time)

目标检测有哪些数据集:
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几个问题:

  1. 用anchor box替换grid机制,yolo还是一个Unified的模型吗,还是说变成一个multi stage的pipeline了
  2. yolo后面版本用anchor box替换grid,那和fastercnn还有啥区别呢

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基本原理:

  1. 假设我们有一些bbox和对应的置信度;首先选取置信度(score)最大的候选框,作为正式的检测框,将其加入检测结果集合,并从原集合移除;
  2. 从原集合移除与上一步检测框的IoU大于设定的threshold的候选框;
  3. 重复以上两步,直到原集合为空;

说明:

  1. NMS通过IOU的threshold来消除多余的region候选框;
    (threshold越小,消除的候选框越多;)
    (IOU越大,重叠的越多,越需要被消除;)
  2. 没相交的直接保留;
  3. IoU即intersection over union:重叠面积 /(面积1+面积2-重叠面积)
  4. 此外还有多类别nms;
  5. NMS在非proposal方法(如SSD、YOLO系列)中没有提升;

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原理)!!!


打赏一下作者:

目标检测笔记_第1张图片

你可能感兴趣的:(目标检测笔记)