目标检测——YOLOv2算法解读

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

YOLO系列其他文章:

  • YOLOv1通俗易懂版解读
  • SSD算法解读

文章目录

  • 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可以预测标记之外的类别。


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数据集的训练对策相同。


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.mzph.cn/news/742974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记一次生产慢sql索引优化及思考

记一次生产慢sql索引优化及思考 问题重现 夜黑风高的某一晚,突然收到一条运营后台数据库慢sql的报警,耗时竟然达到了60s。看了一下,还好不是很频繁,内心会更加从容排查问题,应该是特定条件下没有走到索引导致&#x…

[论文精读]Dynamic Coarse-to-Fine Learning for Oriented Tiny Object Detection

论文网址:[2304.08876] 用于定向微小目标检测的动态粗到细学习 (arxiv.org) 论文代码:https://github.com/ChaselTsui/mmrotate-dcfl 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&…

支付模块-基于消息队列发送支付通知消息

消息队列发送支付通知消息 需求分析 订单服务作为通用服务,在订单支付成功后需要将支付结果异步通知给其他对接的微服务,微服务收到支付结果根据订单的类型去更新自己的业务数据 技术方案 使用消息队列进行异步通知需要保证消息的可靠性即生产端将消息…

深入了解 大语言模型(LLM)微调方法

引言 众所周知,大语言模型(LLM)正在飞速发展,各行业都有了自己的大模型。其中,大模型微调技术在此过程中起到了非常关键的作用,它提升了模型的生成效率和适应性,使其能够在多样化的应用场景中发挥更大的价值。 那么&…

服务器命令

服务器命令 服务器命令top查看任务 服务器命令 top查看任务 、ps 命令 ps 命令是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和它所运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。总之大部分信息都是可以通过执行…

pytorch模型转onnx格式,编写符号函数实现torch算子接口和onnx算子的映射,新建简单算子--模型部署记录整理

对于深度学习模型来说,模型部署指让训练好的模型在特定环境中运行的过程。相比于软件部署,模型部署会面临更多的难题: 运行模型所需的环境难以配置。深度学习模型通常是由一些框架编写,比如 PyTorch、TensorFlow。由于框架规模、依…

掌握Go语言:深入encoding/gob包的高效数据序列化

掌握Go语言:深入encoding/gob包的高效数据序列化 引言理解Gob和它的使用场景Gob的概念和设计目标Gob的适用场景和优势 开始使用Gob基本的Gob编码和解码示例代码编码(序列化)解码(反序列化) Gob编码高级应用自定义类型的…

【Java语言】遍历List元素时删除集合中的元素

目录 前言 实现方式 1.普通实现 1.1 使用【for循环】 方式 1.2 使用【迭代器】方式 2.jdk1.8新增功能实现 2.1 使用【lambda表达式】方式 2.2 使用【stream流】方式 注意事项 1. 使用【for循环】 方式 2. 不能使用增强for遍历修改元素 总结 前言 分享几种从List中移…

基于 K8s 容器集群的容灾架构与方案

作者:庄宇 在设计系统架构时,我们必须假设任何组件和任何基础设施可能会在任何时间失效,例如:自然灾害,电力中断,网络中断,错误的系统变更等。为了应对挑战,我们必须设计合适的容灾…

在centos8中部署Tomcat和Jenkins

参考链接:tomcat安装和部署jenkins_jenkins和tomcat-CSDN博客 1、进入centos中 /usr/local 目录文件下 [rootlocalhost webapps]# cd /usr/local2、使用通过wget命令下下载tomcat或者直接在官网下载centos版本的包后移动到centos中的local路径下 3、下载tomcat按…

VUE3内置组件Transition的学习使用

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统RuoYi-Nbcio亿事达企业管理平台 gitee源代码地址 后端代码:…

详解Postman使用

简介: 1.简介 PostMan,一款接口调试工具。 特点: 可以保留接口请求的历史记录 可以使用测试集Collections有效管理组织接口 可以在团队之间同步接口数据 1.简介 PostMan,一款接口调试工具。 特点: 可以保留接口请求…

从0到1入门C++编程——12 演讲比赛流程管理系统

文章目录 一、创建类并显示菜单二、退出管理系统三、开始演讲比赛四、查看往届记录五、清空比赛记录六、案例源代码 演讲比赛流程管理系统 比赛规则:演讲比赛共有12个人参加,比赛分两轮进行,第一轮为淘汰赛,第二轮为决赛。每名选手…

HTML万字学习总结

html文本标签特殊符号图片音频与视频超链接表单列表表格语义标签(布局) html文本标签 标签简介根目录规定文档相关的配置信息&#xff08;元数据元素表示文档的内容表示那些不能由其它 HTML 元相关元素&#xff08;(<base>、<link>, <script>、<style>…

今日AI:GPT-4.5意外曝光可能6月发布、UP主借AI识别情绪播放量186万、全球首个AI程序员诞生

欢迎来到【今日AI】栏目!这里是你每天探索人工智能世界的指南&#xff0c;每天我们为你呈现AI领域的热点内容&#xff0c;聚焦开发者&#xff0c;助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解:AIbase - 智能匹配最适合您的AI产品和网站 &#x1f4e2;一分钟速…

如何拆解技术瓶颈的难点

以大化小的思路 解决一个一个小问题从而解决最终问题 三段论&#xff1a; 抽象能力 职责领域划分 分层构建解决方案 案例&#xff1a;全局分布式事务的解决方案 抽象能力&#xff1a;全局分布式 是由一个个小的事务组合而成的&#xff0c;其中一个分布式事务出现问题&#xff…

探索考古文字场景,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建文本考古场景下的甲骨文字符图像检测识别系统

甲骨文是一种非常历史悠久的古老文字&#xff0c;在前面我们基本上很少有涉及这块的内容&#xff0c;最近正好在做文字相关的项目开发研究&#xff0c;就想着基于甲骨文的场景来开发对应的检测识别系统&#xff0c;在前文中我们基于YOLOv5、YOLOv7和YOLOv9开发构建了在仿真数据…

激活函数Mish

paper&#xff1a;Mish: A Self Regularized Non-Monotonic Activation Function official implementation&#xff1a;https://github.com/digantamisra98/Mish 背景 在早期文献中&#xff0c;Sigmoid和TanH激活函数被广泛使用&#xff0c;随后在深度神经网络中失效。相比于…

Springboot的配置文件及其优先级

配置文件 内置配置文件 配置文件的作用&#xff1a;修改SpringBoot自动配置的默认值&#xff1b;SpringBoot在底层都给我们自动配置好&#xff1b;SpringBoot使用一个全局的配置文件&#xff0c;配置文件名是固定的&#xff1a; application.propertiesapplication.yml 以上…

网络建设与运维培训介绍和能力介绍

1.开过的发票 3.培训获奖的证书 4合同签署 5.实训设备