目标检测复盘 -- 5. YOLO v1-v3

news/2024/7/10 0:55:29 标签: 目标检测, YOLO, 计算机视觉

YOLO_v1_0">YOLO v1

论文思想

应该怎么理解呢?其实相比较于RCNN系列,YOLO系列没有RPN这种模块了,而是直接输出或者叫做直接回归出来结果,最终的输出是一个特征图,大小为7 * 7 * [ (4+1) * 2 + 20],这个尺寸又怎么理解呢?7*7是特征图大小,4是bounding box的x,y,w,h,1是confidence,*2的意思是每个pixel地方预测两个bounding box,最后的20代表20个类别得分(如下方网络结构那张图所示)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意点

预测的xy值是限定在负责预测pixel的框的中间,是一个相对坐标,宽高也是一个相对值,相对整个图像而言,xywh都是0到1之间的一个数值,confidence在训练的时候值为 P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)* IOU_{pred} ^{truth} Pr(Object)IOUpredtruth,Pr那一项如果有目标则为1,没有目标则为0。

这里的网络输出的直接是bounding box的位置,YOLOv1是没有anchor概念的,不想Faster RCNN或者SSD最终的结果是对anchor的微调,这里直接的输出就是bounding box

网络结构

在这里插入图片描述

损失函数

损失函数,注意这里主要采用误差平方和作为loss,为了让小目标更敏感,这里对数据进行了开方,这样小目标更敏感,大目标相对没那么敏感

在这里插入图片描述

YOLOv1_17">YOLOv1存在的问题:

  1. 对群体性的小目标检测效果比较差(因为每个cell有两个bounding box,且属于同一个类别,最后选择confidence高的留下来)
  2. 对于训练集没有出现过的目标的长宽比效果比较差(没有anchor的原因,直接回归有更大
    的定位误差)

在这里插入图片描述

YOLO_v2_23">YOLO v2

YOLOv2进行了很多尝试,最终的效果相比YOLOv1也提升了很多

Better部分

  • BN,能够加速模型收敛,也起到了正则化的作用,所以可以移除掉dropout方法
  • 高分辨率,YOLOv1使用了224*224,v2使用了448*448的图片,使用大分辨率能够提升约4个点
  • 使用基于achors的方法,v1由于定位偏差比较大,所以最终bounding box效果不好,再者,使用anchor也更容易收敛,主要是提高了模型的召回率(查全率)
  • 使用kmeans方法生成priors,就是Faster RCNN中的anchor、SSD中的default box,带来了约5个点的提升
    在这里插入图片描述
  • 在Faster RCNN中的位置求解如下,坐着发现,在训练的早起,模型不是非常稳定,原因是生成的xy可以在图像中的任意位置,所以在YOLOv2中,对求解公式进行调整,最终结果是将预测的偏移量 t x t_x tx限定在0到1之间,也就是限定在那个pixel上
    在这里插入图片描述
  • 更精细的特征,最终的feature map的大小是13*13,YOLOv2将13*13和之前的26*26分辨率的特征图进行了融合(simply adding a passthrough layer,使用concat的方式),这样对小目标更友好,使用的paathrough方法如下,这个方法在很多模型中都很常见(YOLOv5的slice模块)

在这里插入图片描述

  • 多尺度训练,每迭代10个batch,尺寸就变换一次,也可以提升模型的鲁棒性

Faster部分

YOLOv2使用darknet19作为骨干网络,包含19个卷积层,最终结构如下:
(注意,如果使用BN,那么卷积中的bias就不起任何作用)
模型最终输出为(4+1+20)* 5,5个bounding box,每个bounding box有4个尺寸参数和一个confidence再加上20个类,
至于正负样本以及损失函数,和YOLOV1一样,并没有做出改变
在这里插入图片描述

YOLO_v3_43">YOLO v3

YOLO v3使用Darknet53作为backbone,结构如下:
图中发现,darknet53和resnet152相比,accuracy基本一致,但是速度翻倍,这里darknet53是没有最大池化层的,下采样是采用卷积的方式来进行的,darknet53卷积参数更少,所以更快
在这里插入图片描述

YOLO v3的head,输出有3个head,三个尺度的预测

在这里插入图片描述

注意,这里边界框的预测和v2一样,是相对于网格的左上角坐标,而在FasterRCNN和SSD中,是相对于anchor中心点的偏移
在这里插入图片描述

样本匹配

一个GT分配一个正样本,对于那些大于一定阈值且不是最好的样本选择忽略。如果一个样本没有分配给GT的话,那么不计算样本的定位损失和类别损失,只计算objectness,也就是confidence的计算
在这里插入图片描述
但是上面这种方法只有很少的样本参与到计算,不利于模型收敛,在u版的实现中,样本匹配策略如下:
有多个模板,当模板和gt的IOU大于某一阈值,则被认为是正样本,如果多个模板都满足要求,则将gt分配给多个anchor作正样本输入
在这里插入图片描述

损失计算

三部分组成
在这里插入图片描述

置信度损失

逻辑回归使用二值交叉熵损失,
在这里插入图片描述

类别损失

也是二值交叉熵

在这里插入图片描述
类别损失的理解 ,注意图中的类别之和不为1,因为是binaray cross entropy,而不是sotmax cross entropy,所以和不为1
在这里插入图片描述

定位损失

需要经过转换,然后使用平方和作为loss,注意这里要把gt值转换成和预测值一样的量来进行loss计算,而不是直接使用xywh
在这里插入图片描述


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

相关文章

POWERLINK协议在stm32单片机+w5500移植成功经验分享

连续折腾了多个晚上,又趁周末又花了一天时间,终于把powerlink协议移植成功到单片机上啦。本想放弃,但想了下不管我能不能用上,结个尾吧,分享给有需要的人。放弃并不难,但坚持一定很酷。为了移植测试这个协议…

C++爱好者的自我修养(15):数据类型转换(千字总结)

数据类型转换 1.引言2.C Primer介绍的转换规则2.1 初始化和赋值进行的转换2.2 以{}方式初始化时进行的转换(C11)2.3 表达式中的转换2.4 传递参数时的转换2.5 强制类型转换 3.强制类型转换运算符(来自GPT-3.5-turbo)3.1 static_cas…

Redis数据库简介

1.Redis数据库介绍 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 2.Redis数据库特性 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加…

Arcgis小技巧【13】——和数据统计相关的各种工具

在Arcgis中可以通过属性表中字段的【统计】功能或使用统计相关的工具对属性表进行数据统计。 在Arcgis工具箱中有一组【统计分析】工具集,不仅包含对属性数据执行标准统计分析(例如平均值、最小值、最大值和标准差)的工具,也包含…

115.删除有序数组中的重复项 removeDuplicatesFromSortedArray

文章目录 题目描述解题思路代码详解运行截图 题目描述 题目链接 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元…

区块链 -- 什么是叔父块?

叔块是没有被挖掘到规范链上的块。当两个或多个矿工几乎同时产生块时,就会创建叔叔块。 什么是叔块? 叔叔块是指没有被挖掘到规范链上的块。在区块链上只能挖掘和确认一个规范的块。剩下的块就是叔叔块。当两个或多个矿工几乎同时产生块时,就…

不要再来问我小学、初中毕业想出去学习编程找到工作的问题了,你要做就去做,结果自己扛着就行了!

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&#x1…

Redis的ZipList和QuickList和SkipList和RedisObject(未完成)

ZipList:压缩列表,为了节省内存而设计的一种数据结构 ZipList是一种特殊的双端链表,是由一系列的特殊编码的连续内存块组成,不需要通过指针来进行寻址来找到各个节点,可以在任意一端进行压入或者是弹出操作,并且该操作…