R-CNN

R-CNN由Ross Girshick于2014年提出,R-CNN首先通过选择性搜索算法Selective Search从一组对象候选框中选择可能出现的对象框,然后将这些选择出来的对象框中的图像resize到某一固定尺寸的图像,并喂入到CNN模型(经过在ImageNet数据集上训练过的CNN模型,如AlexNet)提取特征,最后将提取出的特征送入到SVM分类器来预测该对象框中的图像是否存在待检测目标,并进一步预测该检测目标具体属于哪一类。

虽然R-CNN算法取得了很大进展,但缺点也很明显:重叠框(一张图片大2000多个候选框)特征的冗余计算使得整个网络的检测速度变得很慢(使用GPU的情况下检测一张图片大约需要14S)。

为了减少大量重叠框带来的冗余计算,K.He等人提出了SPPNet

SPPNet

SPPNet 提出了一种空间金字塔池化层(Spatial Pyramid Pooling Layer, SPP)。它的主要思路是对于一副图像分成若干尺度的图像块(比如一副图像分成1份,4份,8份等),然后对每一块提取的特征融合在一起,从而兼顾多个尺度的特征。SPP使得网络在全连接层之前能生成固定尺度的特征表示,而不管输入图片尺寸如何。当使用SPPNet网络用于目标检测时,整个图像只需计算一次即可生成相应特征图,不管候选框尺寸如何,经过SPP之后,都能生成固定尺寸的特征表示图,这避免了卷积特征图的重复计算。

相比于RCNN算法,SPPNet在Pascal-07数据集上不牺牲检测精度(VOC-07, MAP=59.2%)的情况下,推理速度提高了20多倍。
和RCNN一样,SPP也需要训练CNN提取特征,然后训练SVM分类这些特征,这需要巨大的存储空间,并且多阶段训练的流程也很繁杂。除此之外,SPPNet只对全连接层进行微调,而忽略了网络其它层的参数。

为了解决以上存在的一些不足,2015年R.Girshick等人提出Fast RCNN

Fast RCNN

Fast RCNN 网络是RCNN和SPPNet的改进版,该网络使得我们可以在相同的网络配置下同时训练一个检测器和边框回归器。该网络首先输入图像,图像被传递到CNN中提取特征,并返回感兴趣的区域RO1,之后再RO1上运用RO池化层以保证每个区域的尺寸相同,最后这些区域的特征被传递到全连接层的网络中进行分类,并用Softmaxi和线性回归层同时返回边界框。

Fast RCNN 在VOC-07数据集上将检测精度MAP从58.5%提高到70.0%,检测速度比RCNN提高了200倍。

Fast RCNN 仍然选用选择性搜索算法来寻找感兴趣的区域,这一过程通常较慢,与RCNN不同的是,Fast RCNN处理一张图片大约需要2秒,但是在大型真实数据集上,这种速度仍然不够理想。那么问题来了:“我们可以使用CNN模型来直接生成候选框吗?",基于此,Faster RCNN的提出完美回答这一问题。

Faster RCNN

Faster RCNN 是第一个端到端,最接近于实时性能的深度学习检测算法,该网络的主要创新点就是提出了区域选择网络用于生成候选框,能极大提升检测框的生成速度。该网络首先输入图像到卷积网络中,生成该图像的特征映射。在特征映射上应用Region Poposal Network,返回object proposals和相应分数。应用Rol池化层,将所有proposals修正到同样尺寸。最后,将proposals传递到完全连接层,生成目标物体的边界框。

虽然Faster RCNN的精度更高,速度更快,也非常接近于实时性能,但它在后续的检测阶段中仍存在一些计算冗余;除此之外,如果IOU阈值设置的低,会引起噪声检测的问题,如果IOU设置的高,则会引起过拟合。

YOLOV1

网络架构

将输入的图像分为S*S的格子,对于每个格子为中心给出两个先验框,对于置信度高的格子(即位于物体中心的格子)通过回归任务将两个先验框调整至合适的大小,然后选择IOU指标较大的框作为预测结果。

  • 网络输入:448×448×3的彩色图片
  • 隐藏层:由若干卷积层和池化层组成,用于提取图片的抽象特征
  • 全连接层:由两个全连接层组成,用来预测目标的位置和类别概率值
  • 网络输出:得到7×7×30的预测结果

注:关于 7×7×30的预测结果,是指将图像分为7*7的网格,同时在30中,1~5代表第一个先验框的(x,y,w,h)以及置信度c,6~10代表第二个先验框,11~30代表对应20个类别的预测概率。

总的来说,将网格数量定义为S*S,定义B个先验框,预测C个类别,那么输出结果即为S×S×(5×B+C)的矩阵向量

损失计算

损失函数主要分为三部分:坐标预测损失置信度预测损失类别预测损失

特点

优点:

  1. 检测速度非常快,标准版本的YOLO可以每秒处理 45 张图像;YOLO的极速版本每秒可以处理150帧图像。这就意味着 YOLO 可以以小于 25 毫秒延迟,实时地处理视频。对于欠实时系统,在准确率保证的情况下,YOLO速度快于其他方法。
  2. 实时检测的平均精度是其他实时监测系统的两倍。
  3. 迁移能力强,能运用到其他的新的领域(比如艺术品目标检测)。

缺点:

  1. 对相互靠近的物体,以及很小的群体检测效果不好,这是因为一个网格只预测了2个框,并且都只属于同一类。
  2. 由于损失函数的问题,定位误差是影响检测效果的主要原因,尤其是大小物体的处理上,还有待加强。(因为对于小的bounding boxes,small error影响更大)。
  3. 对不常见的角度的目标泛化性能偏弱。

YOLOV2

YOLOv2采用Darknet-19 作为特征提取网络,Darknet-19 的整体结构如下:

Darknet-19

  1. 与VGG相似,使用了很多3×3卷积核;并且每一次池化后,下一层的卷积核的通道数 = 池化输出的通道 × 2。
  2. 在每一层卷积后,都增加了批量标准化(Batch Normalization)进行预处理。
  3. 采用了降维的思想,把1×1的卷积置于3×3之间,用来压缩特征
  4. 在网络最后的输出增加了一个全局平均池化(global average pooling)层。
  5. 整体上采用了19个卷积层,5个池化层。
Darknet-19 与 YOLOv1、VGG16网络对比
VGG-16 YOLOv1 Darknet-19
大多数检测网络框架都是以VGG-16作为基础特征提取器,它功能强大,准确率高,但是计算复杂度较大,所以速度会相对较慢。因此YOLOv2的网络结构将从这方面进行改进。 基于GoogLeNet的自定义网络(具体看上周报告),比VGG-16的速度快,但是精度稍不如VGG-16。 速度方面,处理一张图片仅需要55.8亿次运算,相比于VGG306.9亿次,速度快了近6倍。精度方面,在ImageNet上的测试精度为:top1准确率为72.9%,top5准确率为91.2%。

YOLO v2使用DarkNet19作为特征提取网络,该网络比YOLO v2所使用的VGG-16要更快。

特点

1、在卷积或池化之后,激活函数之前,对每个数据输出进行标准化。

Batch Normalization 简称 BN ,意思是批量标准化。2015年由 Google 研究员在论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》中提出。

BN 对数据进行预处理(统一格式、均衡化、去噪等)能够大大提高训练速度,提升训练效果。基于此,YOLOv2 对每一层输入的数据都进行批量标准化,这样网络就不需要每层都去学数据的分布,收敛会变得更快。

2、引入 Anchor Box 机制:在YOLOv1中是直接对边界框的位置(x, y, w, h)进行预测,这会导致网络在前期训练时非常困难,很难收敛。YOLOv2引入了 Anchors box 机制,希望通过提前筛选得到的具有代表性先验框Anchors,使得网络在训练时更容易收敛。

3、Convolution With Anchor Boxes:YOLOv1 有一个致命的缺陷就是:一张图片被分成7×7的网格,一个网格只能预测一个类,当一个网格中同时出现多个类时,就无法检测出所有类。针对这个问题,YOLOv2做出了相应的改进:

  • 将YOLOv1网络的FC层和最后一个Pooling层去掉,使得最后的卷积层的输出可以有更高的分辨率特征。
  • 缩减网络,用416×416大小的输入代替原来的448×448,使得网络输出的特征图有奇数大小的宽和高,进而使得每个特征图在划分单元格的时候只有一个中心单元格(Center Cell)。YOLOv2通过5个Pooling层进行下采样,得到的输出是13×13的像素特征。
  • 借鉴Faster R-CNN,YOLOv2通过引入Anchor Boxes,预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。
  • 采用Faster R-CNN中的方式,每个Cell可预测出9个Anchor Box,共13×13×9=1521个(YOLOv2确定Anchor Boxes的方法见是维度聚类,每个Cell选择5个Anchor Box)。比YOLOv1预测的98个bounding box 要多很多,因此在定位精度方面有较好的改善。

4、使用聚类方法选择Anchors:YOLOv2 使用 K-means 聚类方法得到 Anchor Box 的大小,选择具有代表性的尺寸的Anchor Box进行一开始的初始化。

5、Fine-Grained Features:细粒度特征,可理解为不同层之间的特征融合。YOLOv2通过添加一个Passthrough Layer,把高分辨率的浅层特征连接到低分辨率的深层特征(把特征堆积在不同Channel中)而后进行融合和检测,以此来提高对小目标的检测能力。

6、【不足】YOLO v2算法只有一条检测分支,且该网络缺乏对多尺度上下文信息的捕获,所
对于不同尺寸的目标检测效果依然较差,尤其是对于小目标检测问题。

YOLOV3

YOLOv3 借助残差网络的思想,YOLOv3 将原来的 darknet-19 改进为darknet-53。其中darknet-53主要由1×1和3×3的卷积层组成,每个卷积层之后包含一个批量归一化层和一个Leaky ReLU,加入这两个部分的目的是为了防止过拟合。卷积层、批量归一化层以及Leaky ReLU共同组成Darknet-53中的基本卷积单元DBL。因为在Darknet-53中共包含53个这样的DBL,所以称其为Darknet-53。

与darknet-19对比可知,darknet-53主要做了如下改进:

  • 没有采用最大池化层,转而采用步长为2的卷积层进行下采样。
  • 为了防止过拟合,在每个卷积层之后加入了一个BN层和一个Leaky ReLU。
  • 引入了残差网络的思想,目的是为了让网络可以提取到更深层的特征,同时避免出现梯度消失或爆炸。
  • 将网络的中间层和后面某一层的上采样进行张量拼接,达到多尺度特征融合的目的。

结构特点

  1. 为了能够预测多尺度的目标,YOLOv3 选择了三种不同shape的Anchors,同时每种Anchors具有三种不同的尺度,一共9种不同大小的Anchors。借鉴特征金字塔网的思想,YOLOv3设计了3种不同尺度的网络输出Y1、Y2、Y3,目的是预测不同尺度的目标。由于在每一个尺度网格都负责预测3个边界框,且COCO数据集有80个类。所以网络输出的张量应该是:N ×N ×[3∗(4 + 1 + 80)]。由下采样次数不同,得到的N不同,最终Y1、Y2、Y3的shape分别为:[13, 13, 255]、[26, 26, 255]、[52, 52, 255]。
  2. YOLOv3 对比YOLOv1中的损失函数可以知道:位置损失部分并没有改变,仍然采用的是sum-square error的损失计算方法。但是置信度损失和类别预测均由原来的sum-square error改为了交叉熵的损失计算方法
  3. YOLOv3在类别预测方面将YOLOv2的单标签分类改进为多标签分类,在网络结构中将YOLOv2中用于分类的softmax层修改为逻辑分类器。为实现多标签分类就需要用逻辑分类器来对每个类别都进行二分类。逻辑分类器主要用到了sigmoid函数,它可以把输出约束在0到1,如果某一特征图的输出经过该函数处理后的值大于设定阈值,那么就认定该目标框所对应的目标属于该类。
  4. 【不足】YOLOv3采用MSE作为边框回归损失函数,这使得YOLO v3对目标的定位并不
    精准,之后出现的IOU,G1OU,D1OU和COU等一系列边框回归损失大大改善了YOLOv3。

YOLOV4

YOLOV4组成结构 CSPDarknet53(主干网络)

将原来的Darknet53与CSPNet进行结合。

使用MIsh激活函数代替了原来的Leaky ReLU。

SPP附加模块(颈) SPP来源于这篇论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition,在YOLOv4中,作者引入SPP,是因为它显著地增加了感受野,分离出了最重要的上下文特征,并且几乎不会降低的YOLOv4运行速度。
 PANet路径聚合(颈) 使用PANet代替YOLOv3中的FPN作为参数聚合的方法,针对不同的检测器级别从不同的主干层进行参数聚合。并且对原PANet方法进行了修改, 使用张量连接(concat)代替了原来的捷径连接(shortcut connection)。
 YOLOv3(检测头) 继承了YOLOv3的Head进行多尺度预测,提高了对不同size目标的检测性能。

YOLO v4在输入端,引入了Mosaic数据增强、cmBN、SAT自对抗训练

特点

与其它先进的检测器相比,对于同样的精度,YOLOv4更快(FPS);对于同样的速度,YOLOv4更准(AP)。
YOLOv4能在普通的GPU上训练和使用,比如GTX 1080Ti和GTX 2080Ti等。
论文中总结了各种Tricks(包括各种BoF和BoS),给我们启示,选择合适的Tricks来提高自己的检测器性能。

YOLOV5

YOLOv5官方代码中,一共给出了5个版本,分别是 YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLO5x 五个模型。

Yolov5s网络是Yolov5系列中深度最小,特征图的宽度最小的网络。后面的3种都是在此基础上不断加深,不断加宽。YOLOv5s 和YOLOv4一样,对输入的图像进行Mosaic数据增强

骨干网路部分主要采用的是:Focus结构、CSP结构。其中 Focus 结构在YOLOv1-YOLOv4中没有引入,作者将 Focus 结构引入了YOLOv5,用于直接处理输入的图片。

网络的颈部,采用的是:FPN+PAN结构,进行丰富的特征融合,这一部分和YOLOv4的结构相同。

对于网络的输出,遵循YOLO系列的一贯做法,采用的是耦合的Head。并且和YOLOv3、YOLOv4类似,采用了三个不同的输出Head,进行多尺度预测。

Yolov5的作者将获取数据集的最佳anchors这一步骤嵌入到整体代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值

YOLOv5为了避免将原图直接resize成统一大小,造成目标变形,采用了灰度填充的方式统一输入尺寸。

YOLOv5定位部分的损失函数使用了GIOU函数。

参考文献

YOLO系列算法精讲:从yolov1至yolov5的进阶之路(2万字超全整理)

R-CNN系列算法精讲:R-CNN —》Fast R-CNN —》Faster R-CNN 进阶之路

YOLO-YOLOV5算法原理及网络结构整理

从R-CNN到Faster-RCNN再到YOLOV5,目标检测网络发展概述相关推荐

  1. rcnn 回归_基础目标检测算法介绍:CNN、RCNN、Fast RCNN和Faster RCNN

    每次丢了东西,我们都希望有一种方法能快速定位出失物.现在,目标检测算法或许能做到.目标检测的用途遍布多个行业,从安防监控,到智慧城市中的实时交通监测.简单来说,这些技术背后都是强大的深度学习算法. 在 ...

  2. 【ffmpeg裁剪视频faster rcnn自动检测 via】全自动实现ffmpeg将视频切割为图片帧,再使用faster rcnn将图片中的人检测出来,最后将检测结果转化为via可识别的csv格式

    目录 前言 一,ffmpeg 自动裁剪 1.1 目录结构 1.2 cutVideoToImage.sh 1.2 myVideo 1.3 myVideo15mins 1.5 myFrames 1.6 运 ...

  3. 实例分割模型Mask R-CNN详解——从R-CNN,Fast R-CNN,Faster R-CNN再到Mask R-CNN

    转载自 jiongnima 原文链接 https://blog.csdn.net/jiongnima/article/details/79094159 Mask R-CNN是ICCV 2017的bes ...

  4. 实例分割模型Mask R-CNN详解:从R-CNN,Fast R-CNN,Faster R-CNN再到Mask R-CNN

    Mask R-CNN是ICCV 2017的best paper,彰显了机器学习计算机视觉领域在2017年的最新成果.在机器学习2017年的最新发展中,单任务的网络结构已经逐渐不再引人瞩目,取而代之的是 ...

  5. # 经典目标检测识别方法概述RCNN/FAST/FASTER RCNN/MASK RCNN/SSD/DSSD/YOLO V1/YOLO V2等

    经典目标检测识别方法概述@陈子逸 经典目标检测识别方法概述 由于水硕期间自学了一些目标探测的方法,这里做一个概述,肯定有不完美的地方,还请指正一起进步. 综述 1.分别简单描述一下RCNN系列: 在我 ...

  6. Cascade R-CNN: High Quality Object Detection and Instance Segmentation(级联R-CNN:高质量目标检测与实例分割)

    Cascade R-CNN: High Quality Object Detection and Instance Segmentation Zhaowei Cai, and Nuno Vasconc ...

  7. 详解两阶段3D目标检测网络 Voxel R-CNN:Towards High Performance Voxel-based 3D Object Detection

    本文介绍一篇两阶段的3D目标检测网络:Voxel R-CNN,论文已收录于AAAI 2021. 这里重点是理解本文提出的 Voxel RoI pooling. 论文链接为:https://arxiv. ...

  8. ​ICCV 2021丨Oriented R-CNN:面向旋转目标检测的 R-CNN

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 本文转载自:中国图象图形学学会CSIG Oriented R-CNN:有向目标检测 谢星星 , 程塨  ,  ...

  9. faster r-cnn训练、测试、检测(含批量检测图片)

    faster r-cnn(tensorflow版本)训练VOC数据集.测试.检测指南 使用的faster r-cnn代码github地址 https://github.com/endernewton/ ...

最新文章

  1. github使用教程及小问题
  2. rsyslog服务日志报错分析1
  3. typeof和instanceof 运算符
  4. arcgis api for javascipt 加载天地图、百度地图
  5. python超出列表范围,(Python)列表索引超出范围 - 迭代
  6. 王兴最好的半年结束了
  7. LeetCode_104.二叉树的最大深度
  8. Boost:计算一些tail统计数据,插入数据,更新数据
  9. css表格文字超数量就竖排_求助!!一个非常棘手的问题。就是文字竖排显示的问题...
  10. ctypes python_Python ctypes 使用总结
  11. 微软程序员利用测试账户套现千万美元,或面临 20 年监禁
  12. JavaFX图表(五)之气泡图
  13. java查找链表中间元素_如何通过Java单次查找链表的中间元素
  14. python能做什么工作-谁适合学Python?学了Python可以做什么工作?
  15. OpenCV 文字绘制——cv::putText详解
  16. 社交网络营销之传统营销VS社交网络营销
  17. Luogu1886 滑动窗口 /【模板】单调队列
  18. 我是程序员,我在小区“收垃圾”
  19. PDF连接服务器信息,远程连接服务器.pdf
  20. 利用python爬取租房信息网_Python3爬虫实战:以爬取小猪短租租房信息为例

热门文章

  1. 2022重庆最新建筑施工电工(建筑特种作业)模拟考试题库及答案
  2. 邮箱验证登录-全面详解(学习总结---从入门到深化)
  3. java将汉字转成拼音并按照首字母排序的有效方法。
  4. 培训效果评价技术(转载)
  5. android qq语音按钮,Android 仿QQ/微信语音功能。
  6. 如何在json格式上传文件?
  7. JS案例-仿京东放大镜效果
  8. matlab中unidpdf,matlab poisspdf
  9. 卷积神经网络图像尺寸预处理-----图像裁剪
  10. 哈工大计算机专业毕业论文,哈工大毕业论文格式模板.doc