项目地址

Abstract

该技术报告主要介绍了作者对 YOLOv1 的一系列改进措施(注意:不是对YOLOv2,但是借鉴了YOLOv2中的部分改进措施)。虽然改进后的网络较YOLOv1大一些,但是检测结果更精确,运行速度依然很快。在输入图像分辨率为320*320时,YOLOv3运行耗时22ms,mAP达到28.2,这和SSD一样精确,但是速度比SSD快三倍。当我们使用旧的检测指标0.5 IOU mAP(IOU阈值取为0.5,然后比较mAP)时,YOLOv3依旧表现得相当好。在一个 Titan X上,YOLOv3耗时为51ms,AP50为57.9,而RetinaNet耗时198ms,AP50为57.5。可见,二者的性能相近,但是YOLOv3的速度是RetinaNet的3.8倍快。

2. The Deal

报告中对YOLOv1的改进大多数来自于别人的good ideas,同时也有作者自己的贡献,比如训练了一个新的比其它分类器性能要好的classifier network。下面就详细描述各个改进措施:

2.1 Bounding Box Prediction

和YOLOv2一样,YOLOv3使用dimension clusters(k-means聚类的结果)作为anchor boxes(锚箱)来预测bounding boxes。网络为每个bounding box预测4个坐标,即txtytwth。如果某cell相对图像左上角的偏置offsets是(cxcy)并且预测的bounding box对应的先验知识width和height分别为pwph,那么预测到的bounding box的实际坐标为:

式中,txty是相对于所在cell的offsets,logistic回归函数将txty约束在0-1范围内,这样保证了每个cell预测到的bounding boxes位于当前cell内。

训练时使用误差平方和损失(Sum of squared error loss)。因此,如果ground-truth box(真实的box)对应的预测坐标是 t,那么相应的梯度(gradient)就是预测坐标减去ground-truth box的真实坐标:t-t*t*可以通过反转上述公式很容易地计算出,如下:

式中,b*是bounding box对应的ground-truth box的实际坐标;t*是根据实际坐标推算出来的该bounding box对应的理想输出

YOLOv3使用logistic regression为每个bounding box预测一个objectness score(用来表示该bounding box包含一个object的可能性)。在训练时,如果该bounding box对应的prior(即anchor box)与一个ground truth box的IOU高于其它任何bounding box prior,那么该bounding box的objectness score就被置为1;如果该bounding box对应的prior不是最好的但是又确实与一个ground truth box的IOU高于设定的阈值,那么该bounding box会被忽略。论文中作者使用的阈值是0.5。另外,YOLOv3在训练时为每个ground truth object只分配一个bounding box prior(相当于一个bounding box,因为每个cell有k个bounding box prior,每个bounding box prior对应一个bounding box)。如果一个bounding box没有分配到ground truth object,那么在计算定位损失和分类损失时它不会被考虑在内,也就是说只有包含ground truth object的bounding box才会参与训练损失的计算。

2.2 Class Prediction

YOLOv3使用多标签分类为每个bounding box均预测属于各个类别的概率,但是作者没有使用softmax,而是简单地使用了独立的 logistic classifier。体现在网络结构上就是将softmax层替换为一个1*1 卷积层 + logistic激活函数的结构。作者在训练时也使用binary cross-entropy 来计算分类损失。

作者之所以使用 logistic classifier而不是softmax,主要是因为在某些复杂的训练数据集或应用场景中,类别标签labels是有重叠的(比如Woman and Person),而Softmax的使用前提是每个box只属于一类,这与实际情况往往不符。logistic classifier正好能够帮助网络适应这种分类,更好地对数据进行建模。

2.3 Predictions Across Scales

通常一幅图像包含各种不同的objects,且有大有小。因此,网络必须具备能够检测出不同大小物体的能力。在网络中,网络越深,特征图就会越小,所以越往后小的物体越难检测出来。SSD的做法是:在不同深度的feature map中直接检测目标。这样小的物体会在相对较浅的faeture map中被检测出来,而大的物体会在相对较深的feature map中被检测出来,从而达到检测不同scale目标的目的。然而这样的做法忽视了一个问题,那就是不同深度的feature maps所包含的信息不是绝对相同的。比如,浅层的feature map主要包含低级的特征(如物体边缘、颜色、初级位置信息等),而随着网络层加深,feature maps中的高等信息(如物体的语义信息:汽车、猫、狗等)逐渐增多。所以在不同深度的feature map中检测不同尺寸的objects的做法虽然听起来比较合理,但是实际上可能效果并不好

目前实现多重scale的主流方法主要有以下几种:

  • (a) :先为一幅图像建立图像金字塔,然后将不同级别的金字塔图像输入到网络当中,用于不同scale物体的检测。显而易见,这样做会导致训练和测试的速度比较慢
  • (b) :检测只在最后一个feature map上进行,所以该方法无法检测不同大小的物体
  • (c) :在不同深度的feature map上均进行检测。SSD采用的就是这种方法。另外可以看到,每个feature map获得的特征仅来自于之前的层,之后的层的特征无法获取并利用
  • (d) :FPN(特征金字塔网络)。与(c)相似,不同的是,当前层的feature map会与更深层的feature maps经过上采样后连接,这样当前层的feature map就可以利用深层的特征,以提高检测精度

YOLOv3在 3 种不同的尺度上预测 B 个boxes(每个尺度对应 B/3 个boxes)。YOLOv3使用类似于 feature pyramid network(特征金字塔网络)的方法提取 3 中不同尺度的特征。从网络中的 base feature extractor(Darknet-53)开始,作者添加了若干层卷积层。其中最后一层卷积层(第一个 scale)输出一个3-d tensor,这个张量包含了 bounding box coordinates,objectness score 和 class predictions。比如在COCO数据集上,每种scale预测3个boxes,那么输出的张量为 N*N*[3*(4+1+80)],包含4个 bounding box offsets,1 个objectness prediction 和 80 个 class predictions

接着对倒数第二层卷积层输出的 feature map 进行 2x 上采样(upsample),再将前面卷积层的 feature map 与上采样后的结果进行拼接(Concatenation)。这样做能够从经过上采样的feature map中获得更加有意义的语义信息(semantic information),也能从前面的feature map中获得更细粒度的信息(finer-grained information)。之后再添加一些卷积层来处理拼接后的feature map,最终输出一个类似的 3-d tensor(第二个scale。与之前相比,size扩大两倍)

再次使用相同的方式可以获得第三个scale(size 再扩大两倍)。因此,基于第三个scale的预测得益于网络中所有prior computation和来自于低层的细粒度特征(fine-grained features)。

在YOLOv3中,作者采用和YOLOv2相同的方法 k-means clustering 来确定bounding box priors(即anchor boxes),之后将确定的 9 个clusters 平均分配给 3 种scales。比如在COCO数据集上得到的 9 个clusters为:(10*13),(16*30),(33*23),(30*61),(62*45),(59*119),(116*90),(156*198),(373*326)。需要注意的是,9个clusters在分配时深层的feature map应该得到最大的3个clusters,浅层的feature map应该得到最小的3个clusters。这是因为深层的feature map是用来检测大目标的,而浅层的feature map是用来检测小目标的。

2.4 Feature Extractor

YOLOv3使用一种新的网络作为 base feature extractor 来提取特征,该网络是基于 YOLOv2使用的 Darknet-19 和流行的残差网络设计的。作者在网络中除了使用了连续的 3*3 卷积层和 1*1 卷积层,还使用了一些shortcut connections,而且该网络结构显著变大。因为该网络有53层卷积层,所以被称为 Darknet-53,其具体结构如Table 1所示:


      可以发现,Darknet-53主要由上图中不同颜色的Residual Blocks构成。同时应该能够发现,所有Residual Blocks中的kernel size相同,且第一层卷积层的filters数量是第二层的2倍,随后又是第三层的1倍,依此循环若干次。残差的操作流程如下:

Darknet-53比Darknet-19强大很多,而且仍旧比ResNet-101 或 ResNet-152 高效。Table 2是各分类模型在数据集ImageNet的对比:

      从表中可知,Darknet-53的性能可以与最先进的分类器媲美,但是需要更少的浮点运算,速度也更快。此外,Darknet-53每秒的浮点运算次数也是最高的,这说明该网络的结构能够与GPU更好地统一,使得网络的evaluate更快,更高效。

至此,YOLOv3网络的大致结构已经知晓,如下:

再详细点的结构图如下所示:

更详细的网络结构图如下:

2.5 Training

YOLOv3 的训练没有像R-CNN那样使用hard negative mining,类似的也没有,而是依旧直接在整幅image上训练。此外,训练过程中还使用了multi-scale training,lots of data augmentation,batch normalization 以及其它所有的标准措施。当然,YOLOv3在训练和测试时都使用了Darknet neural network framework(Darknet-53)

3. How We Do

在这部分作者将YOLOv3与众多模型在COCO数据集上的检测结果进行了比较,如 Table 3 所示,表中AP50即预测时IOU阈值取为0.5,同样AP75为IOU阈值等于0.75;AP(S,M,L)分别是检测小、中、大目标时的mean AP:

      从表中第三列可知,当从旧的 mAP检测指标(AP50,即IOU=0.5时的mAP)比较各模型的性能时,YOLOv3表现得很强,它几乎可以与RetinaNet相媲美,并且超过SSD的variants很多。这说明YOLOv3是一个很强大的detector,擅长为objects生成合适的boxes。但是,当IOU阈值增加时(比如增加到0.75,即AP75),YOLOv3的性能下滑明显,这说明YOLOv3很难将 boxes 与 object 完美对齐。也就是说,YOLOv3能够很快地为objects确定大概的boxes,但是精度不是非常高。

从表中第四列可知,通过multi-scale prediction,YOLOv3在检测小目标时有相当高的 mAPS(尤其与YOLOv2相比),但是在检测中等目标和大目标时性能相对变差。这与YOLOv1很难检测小目标但是中大目标检测效果较好的特性完全相反。作者在报告中提到,出现在这个问题的具体原因还需要进一步的研究。

作者还绘制了各模型在AP50时检测精度与速度的曲线,如Fig.3所示。从图中可知,在预测时IOU阈值选择为0.5的话,YOLOv3拥有比其它检测系统显著的优势,也就是说,此时YOLOv3比其它模型又快又准。

4. Things We Tried That Didn’t Work

这部分记录了一些作者在改进YOLOv1时尝试了但是没有起作用的措施:

尽管上述策略没有起作用,但是不排除还有一些技术能够继续改进YOLOv3只是作者没有发现,也不排除作者没有正确使用以上策略的可能。

5. What This All Means

作者在这部分以及报告后面的部分着重于对COCO metric侧重强调边框定位准确性的批评,因为他认为定位精度足够即可,没有太大必要追求过高的定位精度

YOLOv3是一个 good detector,不仅快,还很准确。可是YOLOv3在COCO数据集上测试时,IOU metric取为0.5-0.95的话,mAP并不太好。相反,当使用 old detection metric(IOU=0.5)时,YOLOv3的表现非常好。既然如此,那有必要更换 metrics 吗?

事实上,人类很难区分0.3-0.5之间的IoU值,也就是说最终预测到的边框位置与ground truth box的IoU在0.3-0.5时,人类在感觉上没有明显的区别。所以在测试时,虽然没有ground truth box进行比较,但是只要有一定的精度保证,即使定位边框的精度不太高也没有多少影响

6. YOLOv3-tiny

具体结构如下:

参考资料

目标检测(七)YOLOv3: An Incremental Improvement的更多相关文章

  1. 深度学习论文翻译解析(一):YOLOv3: An Incremental Improvement

    论文标题: YOLOv3: An Incremental Improvement 论文作者: Joseph Redmon Ali Farhadi YOLO官网:YOLO: Real-Time Obje ...

  2. 目标检测:yolo-v3与faster-rcnn

    一. 算法背景 1. 机器视觉实际应用往往涉及包含多个物体的复杂场景,基于深度卷积神经网络的特征提取器,需要结合其他算法来准确定位多个目标,并进行识别. 2. 工业领域,目标检测算法在安防和质检系统都 ...

  3. [YOLO]《YOLOv3: An Incremental Improvement》笔记

    相比较于前两篇论文,个人感觉YOLO3作者有点来搞笑的!!!虽然加了一些新的点子进来,但是,论文的开头是这样的: 简单理解就是作者花了很多时间玩Twitter去了,所以没有做啥研究!!!! 然后: 你 ...

  4. 论文阅读笔记三十二:YOLOv3: An Incremental Improvement

    论文源址:https://pjreddie.com/media/files/papers/YOLOv3.pdf 代码:https://github.com/qqwweee/keras-yolo3 摘要 ...

  5. AI佳作解读系列(二)——目标检测AI算法集杂谈:R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3

    1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...

  6. 目标检测网络之 YOLOv3

    本文逐步介绍YOLO v1~v3的设计历程. YOLOv1基本思想 YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这 ...

  7. 从YOLOv1到YOLOv3,目标检测的进化之路

    https://blog.csdn.net/guleileo/article/details/80581858 本文来自 CSDN 网站,作者 EasonApp. 作者专栏: http://dwz.c ...

  8. 手把手教你用深度学习做物体检测(七):YOLOv3介绍

    YOLOv3 论文:< YOLOv3: An Incremental Improvement > 地址: https://arxiv.org/pdf/1804.02767.pdfyolov ...

  9. 【转】目标检测之YOLO系列详解

    本文逐步介绍YOLO v1~v3的设计历程. YOLOv1基本思想 YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这 ...

随机推荐

  1. 日志分析工具 Log Parser

    微软的Log Parser, 下载地址 https://www.microsoft.com/en-us/download/details.aspx?id=24659 支持多种文件格式的分析,输入输出, ...

  2. git上传本地Intellij idea 项目到码云的git仓库中

    .安装git客户端 Window下安装git客户端. 二.配置Intellij idea中的Git/ GitHub 打开Preference-- Version Control. 下拉选择Github ...

  3. Atitit 华为基本法 attilax读后感

    Atitit 华为基本法 attilax读后感 “精神对物质的比重是三比一” 认可拿破仑的这句格言 在20多年中国商业和企业史上,一个最基本.也是最大的现象就是,为什么"中国制造" ...

  4. SQL Server 各种时间业务处理

    1.SQL 生成随机字符串作为流水号 ), ) --年月日时分秒 ), ),'-','') ), ),':','') --随机英文字符 ))),) ) --英文加数字 随机五位数字 )))) ))), ...

  5. tensorflow 笔记13:了解机器翻译,google NMT,Attention

    一.关于Attention,关于NMT 未完待续... 以google 的 nmt 代码引入 探讨下端到端: 项目地址:https://github.com/tensorflow/nmt 机器翻译算是 ...

  6. 【GMT43智能液晶模块】例程十三:FATFS实验——文件操作

    实验原理: STM32F429上带有SDIO控制器,GMT43液晶模块上将SDIO连接到TF卡座.本实验 将Micro SD卡插入TF卡座上即可.通过FATFS创建test.txt文件,并且写入数据0 ...

  7. 解决java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.robolectric.annotation.Config.application()

    Deleting the .gradle folder worked for me too. Odd. Guessing some high level caching going on somewh ...

  8. Http url MVC Request Query Form 传参专贴

    一.工具区 [参考]postman中 form-data.x-www-form-urlencoded.raw.binary的区别--转 二..net MVC 三..net WebForm 四.Java ...

  9. maven jdk 版本配置

    一种是配置 pom.xml,一种是配置 settings.xml. 方式一:settings.xml 配置 打开 %maven%/conf/settings.xml 文件并编辑它(%maven% 表示 ...

  10. 安装Oracle Database 11g 找不到文件“WFMLRSVCApp.ear” .

    在64位Windows 7 系统下安装Oracle Database 11g 的过程中,出现提示:“未找到文件D:\app\Administrator\product\11.2.0\dbhome_1\ ...