目标检测(七)之YOLO v3

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/StardustYu/article/details/98883870

一、论文相关信息

  1.论文题目

    YOLOv3: An Incremental Improvement

  2.论文时间

    2018年

  3.论文文献

     论文文献

  4.论文源码

     pytroch

二、论文背景及简介

    YOLO v3没有太多创新,只是将一些别的地方的比较好的点融合到了YOLO v2里面,使得YOLO v2获得了比较好的提升。YOLO v3主要在三个方面对YOLO v2进行了改进。

  • 利用多尺度特征进行对象检测
  • 修改了基本网络结构
  • 对象分类用Logistic取代了softmax。

同时,作者把该篇论文当作技术报告来写,emmmm,画风很…搞笑。

三、YOLO v3的一系列改进

   1、Predictions Across Scales(多尺寸特征)

     我们知道YOLO v2以及之前的版本都是对下采样32倍后的特征图进行操作。同时,为了实现细粒度检测,作者将前两层预测出来的特征图连接到了输出上。作者正是在这方面拓展,分别对下采样16倍以及下采样8倍的特征图动手。
     我们先来梳理一下,假设输入为416 * 416,则相应的下采样32倍、16倍、8倍的特征图分别是(13,13),(26,26),(52,52)
     当按YOLOv2的网络结构,获得(13,13)的特征图后,对该特征图进行上采样得到(26,26)的特征图,同时将前面生成的(26,26)的特征图加到该特征图上,这样便实现了YOLO v2的passthrough,加强了细粒度检测。同理,再次上采样得到(52,52)的特征图,再把网络前面的(52,52)的特征图加上。那么,我们最后,就获得了三个大小的特征图((13,13),(26,26),(52,52)),
然后,我们分别再三个特征图上进行正常的处理(检测框的预测)
     但要注意的是,YOLO v2中对特征图进行预测时,是由piror anchor的,那么我们不同大小,不同细粒度的三个特征图该如何选择anchor呢?
     作者通过K均值聚类,这次设K=9,分别在三个尺寸(大中小)上选取不同的尺寸。最终作者得到的尺寸为(10×13),(16×30),(33×23),(30×61),(62×45),(59×119),(116×90),(156×198),(373×326)。正好用在三个不同的特征图上。
     当然,由于(13,13)的特征图下采样32倍,感受野大,因此能够预测大物体的可能性大,因此使用三个大的anchor来对该特征图处理。(26,26),(52,52)的依次选择中、小的anchor。
     该方法极大的解决了YOLO v2对小物体预测难的问题。看一下实验结果数据。

   2、Feature Extractor

     作者借鉴了流行的resNet的思想,给原来的darkNet添加了残差连接,并将网络扩大到了53层,极大的提高了精确度。
在这里插入图片描述
在这里插入图片描述

   3、Class Prediction

     还有一个问题就是,有些数据集中图片的标签有多个,比如女人和人。而softmax基本默认为单标签输出,因此使用Logistic 来代替softmax来实现多标签分类。

四、实验结果

在这里插入图片描述
     在精度上比SSD高,且时间比SSD快三倍

五、优缺点

     根据实验结果,我们可以可以看到YOLO v3相比于YOLO v2极大的提高了精度,但相比于RetinaNet。精度还是不行,不过速度很快。
     相比于YOLO v2,可以看到YOLO v3极大的提高了小物体预测的精度。

猜你喜欢

转载自blog.csdn.net/StardustYu/article/details/98883870