Yolov3算法详解

在本文开题处我们就说过,Yolo系列算法时一种典型的”一阶段”目标检测算法,这是Yolo最为出彩的设计,一次性即可完成对目标的定位和识别——这是RCNN等其他类型的目标检测算法所不能完成的。不过这也要求Yolo模型的输出结果中必须包含目标物体的定位信息和类别信息。

对于模型的输出,Yolov3算法在这一点上的设计堪称绝妙。

主干网络产生了3种不同的特征图,这三中特征图将被分别传入logistic层中,进而运算产生模型的输出。这里多问一句,为什么不使用softmax呢?这是因为softmax对每个框只产生一个分类,在目标检测任务中,存在多个目标物体重合的情况,也就是存在多个分类,softmax就不适用了,所以在Yolo算法中使用了logistic。

有多个输入自然就有多个输出,Yolov3主干网络的3中特征图分别经过logistic层后,也将产生3个输出。在介绍模型输出结果之前,我们有必要先说说Yolov3中应用到的另一种思想——分而治之。

目标检测任务极具挑战性的一个很大原因是因为原始图像中可能包含的目标物体大小不确定。对于这一难题,Yolov3算法的解决思路时将原始图像使用不同的粒度进行划分网格,例如划分为13×13、26×26、52×52的网格。13×13的大网格用于检测大的目标物体,26×26的网格用于检测中等的目标物体,52×52的网格用于检测小目标物体。有没有觉得13、26、52这几个数字很眼熟?没错,这是与主干网络输出的3种特征图的大小是一一对应的。在logistic层的输出结果中,对每个划分单元格都有一个对应的向量来描述目标检测的结果,即在该单元格是否有物体、物体的位置、物体的分类。

在logistic层的输出结果中具体是怎么来描述的检测结果的了?这还得从原始输入图像说起,我们从13×13的网格划分方式为例进行说明。如下图所示,我们将一张图像输入到模型中,13×13的单元格与主干网络的13×13×75的特征图对应,也就是说,13×13×75的特征图经过logistic层后的输出结果将包含$13×13=169$个单元格的检测结果,如图中红色框标识的单元格所示,将包含169个这种向量。每个向量又可以分为3个相同结构的子向量,每个子向量对应一个先验框的检测结果。

先验框是什么鬼,之前没说过呀?别急,现在说也不迟。我们之前所在目标检测任务中一大难点就是目标物体的大小是不确定的,但其实除了大小不确定外,位置也是不确定的,所以我们很难保证在同一个单元格中会不会有多个目标物体覆盖,也即是说,有可能一个单元格需要多个输出,对应可能的多个物体。Yolov3中规定,每个单元格输出3个结果,每个结果对应一个先验框(外文资料中称为Anchor Box,中文翻译各不相同,本文姑且称之为先验框),因为有三种网格划分,所以共有9种先验框。先验框的长宽是在建模前使用k-means对数据集中的标签框进行聚类,得到类别中心点的9个框,作为先验框。在Yolov3作者论文中提出3种尺寸的单元格对应的先验框分别为:

  • 13×13:(10×13), (16×30), (33×23)
  • 26×26:(30×61), (62×45), (59×119)
  • 52×52:(116×90), (156×198), (373×326)

Original: https://www.cnblogs.com/chenhuabin/p/13908615.html
Author: 奥辰
Title: Yolov3算法详解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/602823/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球