目标检测算法(YOLOv3)
目标检测算法(YOLOv3)
YOLOv3在YOLOv2的基础上,改良了网络的主干,利用多尺度特征图进行检测,改进了多个独立的Logistic regression分类器来取代softmax来预测类别分类.
论文题目:YOLOv3: An Incremental Improvement
主干网络
YOLOv3提出了新的主干网络: Darknet-53 ,从第0层到第74层,一共有53层卷积层,其余均为Resnet层.
和Darknet-19相比,Darknet-53去除了所有的maxpooling层,增加了更多的1X1和3X3的卷积层,但因为加深网络层数很容易导致梯度消失或爆炸,所以Darknet-53加入了ResNet中的Residual 块来解决梯度的问题.
由下图的Darknet-53架构可以看到共加入了23个Residual block.
由于加深了网络层数,Darknet-53相比Darknet-19慢了许多,但是Darknet-53处理速度78fps,还是比同精度的ResNet快很多,YOLO3依然保持了高性能.
多尺度预测
YOLOv3借鉴了FPN的方法,采用多尺度的特征图对不同大小的物体进行检测,以提升小物体的预测能力.
YOLOv3通过下采样32倍 16倍和8倍得到3个不同尺度的特征图,例如输入416X416的图像,则会得到13X13(416/32),26X26(416/16) 以及52X52(416/8),这3个尺度的特征图.如下所示:
每个尺度的特征图会预测出3个Anchor prior, 而Anchor prior的大小则采用K-means进行聚类分析(YOLOv3延续了YOLOv2的作法). 在COCO数据集上,按照输入图像的尺寸为416X416,得到9种聚类结果(Anchor prior的wxh): (10X13),(16X30),(33X23),(30X61),(62X45),(59X119),(116X90),(156X198),(373X326)
不同大小特征图对应不同的Anchor prior
- 13X13的特征图(有较大的感受野)用于预测大物体,所以用较大的Anchor prior 即(116X90),(156X198),(373X326)
- 26X26的特征图(中等的感受野)用于预测中等大小物体,所以用中等的Anchor prior 即(30X61),(62X45),(59X119)
- 52X52的特征图(较小的感受野)用于预测小物体,所以用较小的Anchor prior 即(10X13),(16X30),(33X23)
网络结构
我们先来看YOLOv3的网络结构如下所示:
- 若输入416X416的图像,在79层卷积后,会先经过32倍的下采样,在通过3X3,1X1的卷积层后,得到13X13的特征图(第82层)
- 为了实现能够检测小物体,借鉴了FPN的方法,将第79层13X13的特征图进行上采样,与第61层的特征图进行合并(concat),在经过16倍的下采样以及3X3,1X1的卷积后,得到26X26的特征图(第94层)
- 接着第91层26X26的特征图再次上采样,并与第36层26X26的特征图进行合并(concat),在经过8倍下采样以及3X3,1X1的卷积层后,得到52X52的特征图(第106层)
YOLOv2 VS YOLOv3
- YOLOv2采用passthrough结构来检测小物体的特征,而YOLOv3采用3个不同尺度的特征图来进行检测
- YOLOv2预测输出的bounding box共有13X13X5=845个, 而YOLOv3有13X13X3+26X26X3+52X52X3=10647个
YOLOv1 VS YOLOv2 VS YOLOv3
- YOLOv1在特征图(7X7)的每一个网格里预测出2个bounding box以及分类概率值,每个bounding box预测5个值
- YOLOv1总输出为 7X7X(2X5+20)
- YOLOv2在特征图(13X13)的每一个网格里预测5个bounding box(对应5个Anchor Box),每个bounding box预测出5个值以及分类概率值
- YOLOv2总输出为 13X13X5X(5+20)
- YOLOV3在3个特征图的每一个网格中预测出3个bounding box(对应3个Anchor prior),每个bounding box预测5个值以及分类概率值(YOLOv3采用的为COCO数据集,共有80类)
- YOLOv3总输出为13X13X3X(5+80)+26X26X3X(5+80)+52X52X3X(5+80)
框的预测
YOLOv3使用Logistic regression来预测每个bounding box的confidence,以bounding box与gt的IOU为判定标准,对每个gt只分配一个最好的bounding box.通过利用这种方式,在做Detect之前可以减少不必要的Anchor进而减少计算量.
- 正样本: 将IOU最高的bounding box, confidence score设置为1
- 忽略样本: 其他不是最高IOU的bounding box 并且IOU大于阈值(0.5),则忽略这些bounding box, 不计算loss
- 负样本: 若bounding box 没有与任一gt对应,则减少其confidence score
为什么YOLOv3要将正例confidence score设置为1?
- 因为confidence score是指该bounding box是否预测出一个物体的置信度,是一个二分类.并且在学习小物体时,有很大程度会影响IOU.如果像YOLOv1使用bounding box与gt的IOU作为confidence,那么confidence score始终很小,无法有效学习,导致检测的Recall不高.
为什么存在忽略样本?
- 由于YOLOV3采用了多尺度的特征图进行检测,而不同尺度的特征图之间会有重合检测的部分.
- 例如检测一个物体时,在训练时它被分配到的检测框是第一个特征图的第三个bounding box, IOU为0.98, 此时恰好第二个特征图的第一个bounding box与该gt的IOU为0.95,也检测到了该gt,如果此时给其confidence score强行打0,网络学习的效果会不理想.
类别的预测
YOLO之前都是使用softmax去分类每个bounding box,但softmax只适用于单目标多分类(甚至类别是互斥的假设),而预测目标里可能有重叠的标识(属于多个类并且类别之间有相互关系),比如Person和Women
因此YOLOv3改采用多个独立的Logistic regression分类器(可以对多标识进行多分类预测)替代,使用二分类交叉熵作为损失函数,并且保证准确率不会下降.
损失函数
1、bounding box中心点坐标xy与宽高
- 一样沿用YOLOv2的offset做计算
- (bxi,byi)(b_{xi},b_{yi})(bxi,byi) 为gt框的中心点坐标, (b^xi,b^yi)(\hat{b}_{xi},\hat{b}_{yi})(b^xi,b^yi)为预测框的中心点坐标
- (bwi,bhi)(b_{wi},b_{hi})(bwi,bhi)为gt框的宽和高, (b^wi,b^hi)(\hat{b}_{wi},\hat{b}_{hi})(b^wi,b^hi)为预测框的宽和高
- 1xiobj1^{obj}_{xi}1xiobj 为第i个网格中第j个bounding box是否为正例,若是则输出1,否则为0
- λcoord=5\lambda_{coord}=5λcoord=5使模型着重于物体定位能力
2、bounding box物体的置信度
- 1xiobj1^{obj}_{xi}1xiobj 为第i个网格中第j个bounding box是否为负例,若是则输出1,否则为0
- 若是忽略样例(不是正例及负例),则皆输出0 (不产生任何loss)
- 无物体的系数λnobj=5\lambda_{nobj}=5λnobj=5使得模型专注于有物体的识别,并降低找到没有物体的情形
YOLOv3在bounding box坐标与宽高的loss 计算时多乘了(2−bwi∗bhi)(2-b_{wi}*b_{hi})(2−bwi∗bhi)系数并且在confidence score跟class的损失函数中使用二分类的交叉熵,如下所示:
YOLOv2 VS YOLOv3
模型评价
由下图可以看到:若采用COCO AP做为评价标准,YOLOv3在处理608X608图像速度可以达到20FPS;若采用COCO mAP50做评估标准, YOLOv3的表现达到57.9%,与RetinaRet的结果相近,并且速度快4倍,在实现相同准确度下YOLOv3要显著地比其他检测方法快.
总结
本文介绍了YOLO V3的网络架构和相应的具体实现细节,重点介绍了利用多尺度特征图进行检测以及利用多个独立的Logistic regression分类器来取代softmax来预测类别分类.
目标检测算法(YOLOv3)相关推荐
- 论文阅读笔记 | 目标检测算法——PP-YOLO
如有错误,恳请指出. 文章目录 1. Introduction 2. Related Work 3. PP-YOLO 3.1 Architecture 3.1.1 Backbone 3.1.2 Det ...
- 目标检测算法——YOLOv4
以下内容如有错误,恳请指出. 而且查阅参考的资料也有点多,参考链接若有遗落,也恳请指出,会立刻补上 文章目录 1.YOLOv4简介 2.YOLOv4相关工作 1)对象检测模型 2)Bag of fre ...
- 使用PyTorch从零开始实现YOLO-V3目标检测算法 (一)
原文:https://blog.csdn.net/u011520516/article/details/80222743 点击查看博客原文 标检测是深度学习近期发展过程中受益最多的领域.随着技术的进步 ...
- 使用pytorch从零开始实现YOLO-V3目标检测算法 (二)
原文:https://blog.csdn.net/u011520516/article/details/80212960 博客翻译 这是从零开始实现YOLO v3检测器的教程的第2部分.在上一节中,我 ...
- 使用PyTorch从零开始实现YOLO-V3目标检测算法 (四)
原文:https://blog.csdn.net/u011520516/article/details/80228130 点击查看博客原文 这是从零开始实现YOLO v3检测器的教程的第4部分,在上一 ...
- 使用PyTorch从零开始实现YOLO-V3目标检测算法 (三)
原文:https://blog.csdn.net/u011520516/article/details/80216009 点击查看博客原文 这是从零开始实现YOLO v3检测器的教程的第3部分.第二部 ...
- 3目标检测的准确率_吊打YOLOv3!普林斯顿大学提出:CornerNetLite,基于关键点的实时且精度高的目标检测算法,已开源!...
点击上方"CVer",选择"星标"和"置顶" 重磅干货,第一时间送达 前戏 最近目标检测方向,出了很多很棒的paper,CVer也立即跟进报 ...
- YOLOv3目标检测算法——通俗易懂的解析
目录 YOLOv3目标检测算法 前沿 一.YOLOv3 二.损失函数 YOLOv3目标检测算法 前沿 前两篇文章我们讲了下关于YOLOv1和YOLOv2的原理,有不懂的小伙伴可以回到前面再看看: YO ...
- 目标检测算法模型YOLOV3原理及其实战 课程简介
前言 在移植目标检测算法模型到海思AI引擎上运行的过程中,深切感受到理解和掌握算法模型原理的重要性. 基于此,我出了一门专门来讲目标检测算法模型原理及实战的课程.虽然讲的是YOLOV3模型,但是对理解 ...
最新文章
- ubuntu切换python3_Ubuntu 18.04 切换使用Python3
- 利用AOP实现对方法执行时间的统计
- git使用,Git的skil-map
- Netty与Spring WebSocket
- Spring Data JPA教程第一部分:配置
- JTA的含义及应用简介
- 基于redis(v3.2+)实现“附近的人”功能
- 学习设计模式系列之一:单例模式
- SharePoint 2013 的HTML5特性之响应式布局
- mac打开软件显示没有权限不能打开
- 屏幕录像专家 V2013 + 注册机(屏幕录像)
- 智能家居 (9) ——人脸识别摄像头安装实现监控功能
- 校园网ensp模拟搭建
- 用”虚短“和”虚断“分析运放电路
- Guns二次开发(十四):集成 ueditor 富文本编辑器
- BZOJ 3162 / Luogu P4895: 独钓寒江雪 树hash+DP
- 第一代GCN: Spectral Networks and Locally Connected Networks on Graphs
- php图形验证码验证,php图片验证码代码
- 英文字母替换加密(大小写转换+后移1位)PTA
- 【演武厅】表达式求值实例