目标检测——YOLOv2算法解读

news/2024/7/10 1:29:58 标签: 目标检测, YOLO, 算法

论文:YOLO9000: Better, Faster, Stronger
作者:Joseph Redmon, Ali Farhadi
链接:https://arxiv.org/pdf/1612.08242v1.pdf
代码:http://pjreddie.com/yolo9000/

YOLO系列其他文章:

文章目录

  • 1、算法概述
  • 2、YOLOv2细节
    • 2.1 Better
    • 2.2 Faster
    • 2.3 stronger(利用YOLOv2训练YOLO9000)
  • 3、创新点和不足


1、算法概述

YOLO9000,能检测超过9000类的目标,是YOLOv2的延伸,这里只介绍YOLOv2的部分。YOLOv2利用多尺度方式训练可以适应不同尺寸大小的输入,它能在VOC2007测试集上以67FPS的推理速度达到76.8%mAP,大尺寸输入下,以40FPS的推理速度达到78.6%mAP,相对于Faster R-CNN和SSD算法有较大提升。最后作者提出了一种目标检测与分类联合训练的方法,利用该方法作者同时在COCO检测数据集和ImageNet分类数据集上训练出了YOLO9000,YOLO9000可以预测标记之外的类别。


YOLOv2_16">2、YOLOv2细节

2.1 Better

与基于区域提议的R-CNN系列方法相比,YOLO的召回率相对较低。因此,作者主要关注在保持分类准确性的同时提高召回率和定位准确率。现在大多数方法普遍趋向于更大、更深的网络,更好的性能通常取决于训练更大的网络或将多个模型集成在一起。但作者不屑于这样做,他在YOLOv1的基础上一步一步通过实验改进最终得到YOLOv2,实验结果如下:
在这里插入图片描述


Batch Normalization
通过加入batch normalization,YOLOv1可以提升2%mAP,它可以正则化模型,即使去除原有的dropout也不会造成过拟合。

Hight Resolution Classifier
现在的检测算法都是用分类网络作为检测网络的主干,首先用分类网络在ImageNet上进行预训练得到预训练模型,而自AlexNet开始,大多数分类网络输入都是256x256的,而YOLOv1是用224x224大小的输入训练分类网络,而用448x448大小的输入训练检测网络,这就导致分类网络和检测网络输入分辨率不匹配;YOLOv2的分类网络以448x448的分辨率先在ImageNet上进行Fine Tune 10个epochs,让网络有时间调整它的参数,好让其能更好的运行在新分辨率上,最终给模型带来了4%mAP的提升。

Convolutional With Anchor Boxes
YOLOv1使用全连接层直接预测Bounding Boxes的坐标值。Faster R-CNN的方法只用卷积层与Region Proposal Network来预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。作者发现通过预测偏移量而不是直接预测坐标值能够简化问题,让神经网络有个参考坐标,学习起来更容易。所以作者最终去掉了YOLOv1中的全连接层,使用Anchor Boxes来预测 Bounding Boxes。同时,作者去掉了网络的Pooling层,使得输出更高的分辨率,输入图片尺寸由原来的448x448调整为416x416,这样做是作者想有一个奇数大小的特征图,因为通常来说比较大的物体,往往会占据图像的中心,所以最好在中心有一个位置来预测这些物体;416x416大小的图像经过32倍下采样会得到13x13大小的特征图用于最后的预测。使用Anchor Box会让精确度稍微下降,但用了它能让YOLO从预测98个框到能预测出大于一千个框,提升召回率recall达到88%,mAP达到69.2%。

Dimension Clusters
当Anchor boxes与YOLO一起使用时,Anchor boxes设置可以通过两种方式,手工设置和网络学习,作者通过在训练集上使用k-means聚类算法聚类训练集的bounding boxes来计算设置Anchor boxes的宽高以及数量。最终在模型复杂性与高召回率之间权衡之后,选择聚类分类数K=5。
在这里插入图片描述

Direct location prediction
YOLO使用anchor boxes进行训练时,在迭代初期会出现训练不稳定问题,大部分的不稳定性来自于对矩形框的(x,y)坐标位置预测。基于anchor boxes直接预测(x,y)坐标的公式如下:
在这里插入图片描述
如果tx的预测值为1,x的预测结果将是向右偏移该anchor box的宽度,相反,如果tx为-1,x的预测结果将向左偏移同样的量。这个公式是不受约束的,所以任何anchor box都可以在图像中的任何一点结束。在随机初始化的情况下,模型需要较长的稳定时间才能预测出合理的偏移量。
相比预测偏移量,作者还是采用YOLO的方式,预测相对于网格单元位置的位置坐标。这会将真实坐标框限制在0-1的范围之内,作者用sigmoid激活函数将最后的预测转换到这个范围之内。该网络在输出特征图的每个单元格上预测5个边界框,每个边界框又预测5个值,tx,ty,tw,th和to,假设一个网格单元对于图片左上角的偏移量是cx,cy,Bounding Boxes Prior的宽度和高度是pw,ph,那么预测的结果见如下公式:
在这里插入图片描述

回归坐标框的示意图如下图所示:
在这里插入图片描述
由于我们约束了位置预测,因此参数化更容易学习,使网络更稳定。使用维度聚类和直接预测边界框的中心位置可以提高精度,与锚框版本相比,YOLO提高了近5%mAP。

Fine-Grained Features
经过之前的调整,YOLO用于预测的特征图大小变为13x13,这个尺寸对于检测图像中的大目标足够了,同时使用这种细粒度的特征对定位小目标的位置可能也有好处。Faster R-CNN和SSD算法都用了多个特征图来做预测,而作者没有采用这种方式,他只是在26x26特征图大小后面添加了一个贯通层(passthrough layer)。贯通层通过将相邻的特征叠加到不同的通道来连接高分辨率特征和低分辨率特征,这有点似于ResNet中的identity映射。贯通层将26x26x512的特征图变成13x13x2048的特征图,YOLO中的检测器位于扩展后的特征图后面,所以它能取得细粒度的特征信息,这提升了YOLO 1%mAP的性能。

Multi-Scale Training
作者希望YOLOv2能在不同输入大小的图片上运行,所以将这多尺度训练应用在训练阶段。作者采用每10个batches就随机调整输入图片大小,图片大小按32的大小排列如下{320,352,…,608},这种机制迫使神经网络学会在各种输入维度上进行良好的预测。这意味着相同的网络可以预测不同分辨率的探测结果。网络在较小的尺寸下运行速度更快,因此YOLOv2在速度和准确性之间提供了一个简单的权衡。小尺寸输入,精度稍低但速度快,大尺寸输入,精度高但速度会慢一点,结果如下:
在这里插入图片描述

Further Experiments
YOLOv2在VOC2012和COCO数据集上实验结果如下:
在这里插入图片描述
在这里插入图片描述


2.2 Faster

大多数检测算法都用VGG16作为主干网络,但是它太复杂了,224x224分辨率下要做30.69 billion次浮点运算,相比于YOLO采用的Googlenet网络,它比VGG16更快,同样分辨率下只需做8.52 billion次浮点运算,精度只低2%左右。

Darknet-19
作者基于现有知识重新设计了一个分类网络,比如采用3x3卷积,池化层后通道加倍,采用全局平均池化用来预测,用1x1卷积来调整通道数量,用batch normalization来稳定训练过程、加速收敛和正则化模型。最终的模型被作者命名为Darknet-19,拥有19个卷积层和5个最大池化层,它只需要5.58 billion次浮点运算,其结构参数设置如下:
在这里插入图片描述

Training for classification
网络训练在ImageNet1000类分类数据集,用随机梯度下降法用初始学习率为0.1训练了160epochs,训练完成后,又用448x448的分辨率,以学习率为0.001微调了10个epochs。

Training for detection
网络去掉了最后一个卷积层,而加上了三个3x3卷积层,每个卷积层有1024个Filters,每个卷积层紧接着一个1x1卷积层,这个1x1的卷积层会将输入通道压缩到我们输出所需要的通道数量,对于VOC数据集,对于每个网格单元网络会预测五个Bounding Boxes,每个Bounding Boxes预测5个坐标和20个类别分数,所以一共有125个Filters。数据扩充方法与YOLO和SSD一样都采用随机裁剪、颜色抖动等等,对于COCO数据集,与VOC数据集的训练对策相同。


YOLOv2YOLO9000_73">2.3 stronger(利用YOLOv2训练YOLO9000)

作者提出了一种分类和检测数据联合训练的机制。该方法使用带标注框的图像来学习特定于检测的信息,比如边界框坐标预测和对象以及如何对常见对象进行分类;使用仅带有类别信息的图像来扩展它可以检测的类别的数量。在同时利用检测数据集和分类数据集进行训练时,当网络遇到带有标注框图像时,YOLOv2会进行完整的梯度反向传播进行训练,但当网络遇到仅带有类别信息的图片时,网络只会反向传播类别信息部分的梯度。
但是检测数据集只有粗粒度的标记信息,像“猫”、“ 狗”之类,而分类数据集的标签信息则更细粒度,更丰富。比如狗这一类就包括“哈士奇”、“牛头梗”、“金毛狗”等等。所以如果想同时在检测数据集与分类数据集上进行训练,那么就要用一种一致性的方法融合这些标签信息。再者,用于分类的方法,大多数采用softmax,而softmax是类别之间互斥的,这就导致检测数据集中的“狗”类与分类数据集中的“哈士奇”、“金毛狗”这些类别要互斥,这与实际情况是不符合的。最终作者用WordTree 把数据集合中的类别映射到分层树中的同义词上,如图:
在这里插入图片描述
作者训练的时候使用WordTree混合了COCO检测数据集与ImageNet中的Top9000类,混合后的数据集对应的WordTree有9418个类。


3、创新点和不足

创新点
1、基于v1的版本做了很多改进,batch normalization,提高分类器训练分辨率,候选框聚类,多尺度训练。

不足
1、相对于Faster R-CNN和SSD,YOLOv2还是没有采用多个特征图预测,文中也没提及为什么没有采用多个特征图预测,只是说通过passthrough layer能达到相似效果,但是从后面的YOLO系列算法设计来看,多个特征图做预测还是有帮助的。


http://www.niftyadmin.cn/n/5427060.html

相关文章

volatile关键字用处和场景?

什么是volatile关键字 在C语言和Java中,它是一种特殊的类型修饰符,用来告诉编译器该变量可能会被意外地改变。这样,每次存取该变量时,编译器都不会对其进行缓存优化,而是直接从内存中读取或写入,提供了对特…

Leetcode刷题笔记——动态规划(背包问题)篇

Leetcode刷题笔记——动态规划(背包问题)篇 一、0-1 背包问题 0-1背包问题简介 有 n 件物品和一个最多能背重量为 w 的背包。第 i 件物品的重量是 weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包…

深入解析C++树形关联式容器:map、set及其衍生容器的使用与原理

文章目录 一、引言二、关联式容器的中的 paira.pair 的创建及使用b.pair 间的比较 三、 map 与 set 详解1. map 的基本操作2. set 的基本操作3.关联式容器的迭代器 四、 multimap 与 multiset 的特性五、关联式容器的使用技巧与注意事项1. 键值类型的选择与设计2. 自定义比较函…

苹果电脑下载crossover对电脑有影响吗 crossover mac 好用吗CrossOver虚拟机 CrossOver打游戏

苹果电脑下载crossover对电脑有影响吗? 在苹果电脑下载安装crossover对电脑没有什么影响,并且可以解决macOS系统不能安装Windows应用程序的问题。相较于虚拟机和双系统而言,crossover安装软件更简单,占用内存也更小。下面我们来看…

Linux 开机启动Springboot程序

一、实现思路 1.编写启动Bash脚本、停止Bash脚本。 2.通过Linux注册服务,实现开机启动。 二、编写Bash脚本 1.启动脚本(重启适用) 创建/web/start.sh文件(文件位置可以自定义),写入内容: #!/bin/sh # jar包路径 …

Elastic boosting的使用

boosting介绍 Boosting查询允许您降低与负面查询匹配的文档的相关性评分 boosting语法 GET /_search {"query": {"boosting": {"positive": {"term": {"text": "apple"}},"negative": {"term&q…

【Leetcode】top 100 矩阵

73 矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 方法一:拷贝出一个同样大小的矩阵,根据拷贝矩阵在原矩阵上修改元素; 空间复杂度O(mn) 方法二&…

【Emgu CV教程】9.4、形态学常用操作之闭运算

文章目录 一、相关概念1.什么叫闭运算2.闭运算的函数 二、演示1.原始素材2.代码3.运行结果 一、相关概念 1.什么叫闭运算 上一篇讲开运算,这一篇讲闭运算。与开运算相反,闭运算是先进行膨胀后进行腐蚀。回忆一下,膨胀有什么特点&#xff1f…