目标检测算法

YOLO

Ross Girshick —— Facebook AI Research (RBG大神)
论文阅读:You Only Look Once: Unified, Real-Time Object Detection
https://blog.csdn.net/u010167269/article/details/52638771

制约RCNN框架内的方法精度提升的瓶颈是将dectection问题转化成了对图片局部区域的分类问题后,不能充分利用图片局部object在整个图片中的context(上下文)信息。可能RBG也意识到了这一点,所以他最新的一篇文章YOLO(http://arxiv.org/abs/1506.02640)又回到了regression的方法下
https://www.zhihu.com/question/35887527
来自 <https://blog.csdn.net/hrsstudy/article/details/70305791> 

将输入图像划分为S*S的栅格,每一个栅格预测B个bounding boxes,以及这些bounding boxes的confidence scores。
confidence scores反映了模型对于这个栅格的预测:该栅格是否含有物体,以及这个box的坐标预测的有多准。 
公式定义如下: 

如果这个栅格中不存在一个 object,则confidence score应该为0;否则的话,confidence score则为 predicted bounding box与 ground truth box之间的 IOU

每一个栅格还要预测C个 conditional class probability(条件类别概率):Pr(Classi|Object)。即在一个栅格包含一个Object的前提下,它属于某个类的概率。 

在测试阶段,将每个栅格的conditional class probabilities与每个bounding box的 confidence相乘:

这样即可得到每个bounding box的具体类别的confidence score
来自 <https://blog.csdn.net/hrsstudy/article/details/70305791> 
 

SSD

SSD(Single Shot MultiBox Detector)
(1)two-stage方法,如R-CNN系算法,其主要思路是先通过启发式方法(selective search)或者CNN网络(RPN)产生一系列稀疏的候选框,然后对这些候选框进行分类与回归,two-stage方法的优势是准确度高;
(2)one-stage方法,如Yolo和SSD,其主要思路是均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,然后利用CNN提取特征后直接进行分类与回归,整个过程只需要一步,所以其优势是速度快,但是均匀的密集采样的一个重要缺点是训练比较困难,这主要是因为正样本与负样本(背景)极其不均衡(参见Focal Loss),导致模型准确度稍低。
 

(1)采用多尺度特征图用于检测
所谓多尺度采用大小不同的特征图

(2)采用卷积进行检测
与Yolo最后采用全连接层不同,SSD直接采用卷积对不同的特征图来进行提取检测结果。

(3)设置先验框
在Yolo中,每个单元预测多个边界框,但是其都是相对这个单元本身(正方块),但是真实目标的形状是多变的
SSD借鉴了Faster R-CNN中anchor的理念,每个单元设置尺度或者长宽比不同的先验框,预测的边界框(bounding boxes)是以这些先验框为基准的,在一定程度上减少训练难度。
https://zhuanlan.zhihu.com/p/33544892
 

RCNN、fast-RCNN、faster-RCNN

rbg主页有代码
http://www.rossgirshick.info/

Fast RCNN(2015年)
基础:RCNN
简单来说,RCNN使用以下四步实现目标检测: 
a. 在图像中确定约1000-2000个候选框 
b. 对于每个候选框内图像块,使用深度网络提取特征 
c. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类 
d. 对于属于某一特征的候选框,用回归器进一步调整其位置

改进:Fast RCNN
图像归一化为224×224直接送入网络。 

 

roi_pool层:将特征图上大小不一的候选区域转变为大小统一的数据,送入下一层。

 
cls_score层用于分类,输出K+1维数组p,表示属于K类和背景的概率。 
bbox_prdict层用于调整候选区域位置,输出4*K维数组t,表示分别属于K类时,应该平移缩放的参数。
https://blog.csdn.net/shenxiaolu1984/article/details/51036677

 

ROI Pooling的作用是对不同大小的region proposal,从最后卷积层输出的feature map提取大小固定的feature map。
因为全连接层的输入需要尺寸大小一样,所以不能直接将不同大小的region proposal映射到feature map作为输出,需要做尺寸变换。
https://blog.csdn.net/u014380165/article/details/72851319

Fast-RCNN的速度瓶颈在Region proposal上,于是RBG和Kaiming He一帮人将Region proposal也交给CNN来做,提出了Faster-RCNN。
Faster-RCNN中的region proposal netwrok实质是一个Fast-RCNN,这个Fast-RCNN输入的region proposal的是固定的(把一张图片划分成n*n个区域,每个区域给出9个不同ratio和scale的proposal,即9个anchor),输出的是对输入的固定proposal是属于背景还是前景的判断和对齐位置的修正(regression)。Region proposal network的输出再输入第二个Fast-RCNN做更精细的分类和Boundingbox的位置修正。
https://www.zhihu.com/question/35887527

<https://blog.csdn.net/shenxiaolu1984/article/details/51152614> 
 
边框回归(Bouding Box Regression):是对RegionProposal进行纠正的线性回归算法,目的是为了让Region Proposal提取到的窗口与目标窗口(Ground Truth)更加吻合。

Region Proposal(候选区域),就是预先找出图中目标可能出现的位置,通过利用图像中的纹理、边缘、颜色等信息,保证在选取较少窗口(几千个甚至几百个)的情况下保持较高的召回率(IoU,Intersection-over-Union)。

Faster R-CNN:
1、RPN(区域生成网络)提取RP;
2、CNN提取特征;
3、softmax分类;
4、多任务损失函数边框回归。
多任务学习:看重任务之间的联系,通过联合学习,既考虑到了任务之间的差别,又考虑到任务之间的联系,这也是多任务学习最重要的思想之一。

Faster-R-CNN算法(2015年)由两大模块组成:
1.RPN候选框提取模块;
2.Fast R-CNN检测模块
 

Faster R-CNN将Region Proposal也交给CNN来做,这才提出了RPN(Region Proposal Network)区域建议网络用来提取检测区域,它能和整个检测网络共享全图的卷积特征,使得区域建议几乎不花时间。

RPN网络的组成形式可以表示为VGG16+RPN(13个可共享的卷积层) 或者 ZF(5个可共享的卷积层)
reg层(bbox回归层):预测proposal的anchor对应的proposal的(x,y,w,h)
cls层(box分类层):判断该proposal是前景(object)还是背景(non-object)。


根据ground truth label和这些anchor之间的关系生成rpn_lables。box_target通过_compute_targets()函数生成,这个函数实际上是寻找每一个anchor最匹配的ground truth box。
 

R-CNN、Fast R-CNN、Faster R-CNN三者关系

 <https://blog.csdn.net/qq_17448289/article/details/52871461> 

anchor:对应一个尺度和长宽比
一般是在最末层的 feature map 上再用3*3的窗口去卷积特征。当3*3的卷积核滑动到特征图的某一个位置时,以当前滑动窗口中心为中心映射到原图的一个区域,以原图上这个区域的中心对应一个尺度和长宽比,就是一个anchor了。
faster rcnn 使用3种尺度和3种长宽比(1:1;1:2;2:1),则在每一个滑动位置就有 3*3 = 9 个anchor

在RPN网络中,我们需要重点理解其中的anchors概念。
https://blog.csdn.net/jiachen0212/article/details/79693661

anchor作用:我们通过滑动窗口和anchor,成功得到了 51x39x9 个原始图片的proposal。接下来,每个proposal我们只输出6个参数:每个 proposal 和 ground truth 进行比较得到的前景概率和背景概率(2个参数);由于每个 proposal 和 ground truth 位置及尺寸上的差异,从 proposal 通过平移放缩得到 ground truth 需要的4个平移放缩参数。
https://www.zhihu.com/question/42205480


多任务损失函数:

https://blog.csdn.net/qq_17448289/article/details/52871461

从编程实现角度学习 Faster R-CNN(附极简实现)pytorch

来自 <http://baijiahao.baidu.com/s?id=1589261050358948182&wfr=spider&for=pc> 


Faster RCNN ========================================================================

Tensorflow实现Faster RCNN

来自 <https://blog.csdn.net/juezhanangle/article/details/78926696> 
 

Mask-RCNN

 

通过在 Faster-RCNN 的基础上添加一个分支网络,在实现目标检测的同时,把目标像素分割出来(实例分割/语义分割)。
其中 黑色部分为原来的 Faster-RCNN,红色部分为在 Faster网络上的修改:
1)将 Roi Pooling 层替换成了 RoiAlign;
2)添加并列的 FCN 层(mask 层)(图中的Lmask);

 Mask-RCNN 的几个特点:
1)在边框识别的基础上添加分支网络,用于 语义Mask 识别;
2)训练简单,相对于 Faster 仅增加一个小的 Overhead,可以跑到 5FPS;
3)可以方便的扩展到其他任务,比如人的姿态估计 等;
4)不借助 Trick,在每个任务上,效果优于目前所有的 single-model entries;

技术要点1 - 强化的基础网络
通过 ResNeXt-101+FPN 用作特征提取网络

技术要点2 - ROIAlign
解决了仅通过 Pooling 直接采样带来的 Mis-alignment 对齐问题

技术要点3 - Loss Function
平均二值交叉熵
https://blog.csdn.net/linolzhang/article/details/71774168

发展历程
https://www.leiphone.com/news/201704/GEJU2kNeqGDpizN2.html

ROIpooling和ROI Align
https://blog.csdn.net/Julialove102123/article/details/80567827

语义分割与实例分割的区别
像素级别的语义分割,对图像中的每个像素都划分出对应的类别,即实现像素级别的分类; 
实例分割不但要进行像素级别的分类,还需在具体的类别基础上区别开不同的实例。
 
https://blog.csdn.net/lanyuxuan100/article/details/70800246

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WX Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值