YOLO v3算法详解「建议收藏」

YOLO v3算法详解「建议收藏」论文地址:YOLOv3:AnIncrementalImprovementYOLO算法详解,YOLOv2算法详解1.TheDeal接下来,从头梳理整个网络,如果对YOLO和YOLOv2不熟悉,可以看一下我之前的博客。1.1BoundingBoxPredictionYOLOv3沿用YOLO9000预测boundingbox的方法,通过尺寸聚类确定anchorbox。对每个boundingbox网络预测4个坐标偏移。如果featuremap某一单元偏移图片左上角坐标

大家好,又见面了,我是你们的朋友全栈君。

论文地址:YOLOv3: An Incremental Improvement

YOLO算法详解YOLO v2算法详解

1.The Deal

接下来,从头梳理整个网络,如果对YOLO和YOLO v2不熟悉,可以看一下我之前的博客。

1.1 Bounding Box Prediction

YOLO v3沿用YOLO9000预测bounding box的方法,通过尺寸聚类确定anchor box。对每个bounding box网络预测4个坐标偏移t_x,t_y,t_w,t_h。如果feature map某一单元偏移图片左上角坐标(c_x,c_y),bounding box预选框尺寸为p_w,p_h,即anchor尺寸,那么生成对预测坐标为b_x, b_y, b_w, b_h,此为feature map层级.而g_x,g_y,g_w,g_h为真值在feature map上的映射,通过预测偏移t_x,t_y,t_w,t_h使得b_x, b_y, b_w, b_hg_x,g_y,g_w,g_h一致。宽高回归采用指数的形式,防止出现负值。

YOLO v3算法详解「建议收藏」

YOLO v3算法详解「建议收藏」

 每个bounding box只对应一个目标得分,通过logistic回归计算。目标得分为1的情况:1.某个bounding box与ground truth的重合度比其他bounding box都高;2.某个bounding box与ground truth的重合度不是最大的,但是超过某个阈值(0.5)。

关于正负样本

github链接:GitHub – eriklindernoren/PyTorch-YOLOv3: Minimal PyTorch implementation of YOLOv3

在上面链接所提的YOLOV3实现代码中,定义mask以及conf_mask,其中mask负责bbox正样本,conf_mask负责bbox负样本。过程如下:

1、mask初始化为0,conf_mask初始化为1。

2、计算bbox与gt的IOU,当大于某一阈值时,conf_mask相应位置也会设置为0。

3、对于与gt最佳匹配的bbox,mask与相应位置会设置为1,conf_mask相应位置也会设置为1。

对于mask为1的位置都为正样本,而对于conf_mask-mask为1的位置为负样本。因此gt周围大于阈值的bbox会被无视。

1.2 Class Prediction

YOLO v3中每个bounding box都预测一组类别,与YOLO v2相同,与YOLO不同,YOLO在每个网格预测(2\times5+20)=30个参数。作者没有使用softmax损失。当一个目标仅属于一个类时,softnax比较适合,当某一目标分属于多个类时,需要用逻辑回归对每个类做二分类。

1.3 Predictions Across Scales

YOLO v3中预测3中不同尺寸box,所以在COCO数据集上输出张量为N\times N\times\left [ 3\ast \left ( 4+1+80 \right ) \right ],4表示4个坐标偏移,1表示包含目标得分,80表示数据集含有80个类别。

YOLO v2中通过passthrough层增加细粒度特性。YOLO v3中对前面两层得到的feature map进行上采样2倍,将更之前得到的feature map与经过上采样得到的feature map进行连接,这种方法可以让我们获得上采样层的语义信息以及更之前层的细粒度信息,将合并得到的feature map经过几个卷积层处理最终得到一个之前层两倍大小的张量。下面以YOLO v3网络结构图举例说明,原图在之前博客——深度学习-yolov3网络结构

79个卷积层得到13*13*512特征图,经过84卷积层得到13*13*256特征图,79与84卷积层也就是前面说的前两层,得到的13*13*256特征图进行上采样得到26*26*256特征图,与更之前层,也就是61层得到的26*26*512特征图进行合并,得到26*26*768特征图,再经过几个卷积得到26*26*18张量用于预测,尺寸为前一个预测张量13*13*18的两倍。对于COCO数据集,用于检测的卷积层的卷积核个数是255不是18,3*(4+1+80)=255。

YOLO v3算法详解「建议收藏」

我们再次执行相同的操作,预测新的尺寸,对于COCO数据集,YOLO v3预测输出三个尺寸为:18*18*255,26*26*255,52*52*255,因此在预测52*52*255输出时,受益于所有之前的计算以及网络前期的细粒度特性。

YOLO v2有5个尺寸预选框,YOLO v3有3个尺寸预选框,但是YOLO v3有3个输出检测层,所以YOLO v3的bounding box比YOLO v2还是要多,因为(13*13+26*26+52*52)*3  > 13*13*5。

YOLO v3沿用YOLO v2通过聚类的方法获得bounding box预选框尺寸,3种尺寸9个聚类结果,在coco数据集上9个聚类结果为:

(10*13); (16*30); (33*23); (30*61); (62*45); (59*119); (116*90); (156*198); (373*326)。这应该是按照输入图像的尺寸是416*416计算得到的。

1.4 Feature Extractor

YOLO v3所使用的特征提取的新网络集成了YOLO v2中网络 Darknet-19和新流行的残差网络(ResNet的residual结构)。该网络大量使用3*3与1*1卷积层依次连接的形式,并且添加了shortcut连接,所以其网络结构比复杂,有53个卷积层,因此YOLO v3特征提取网络称作Darknet-53.结构如下图:

YOLO v3算法详解「建议收藏」

Darknet-53只是特征提取层,源码中只使用了pooling层前面的卷积层来提取特征,因此multi-scale的特征融合和预测支路并没有在该网络结构中体现。

表二为Darknet-53与其他几个网络在ImageNet数据集上效果对比。可以看出 Darknet-53与ResNet-152效果差不多,但是速度快2倍。

YOLO v3算法详解「建议收藏」

1.5 Training

训练过程中作者使用多尺寸,数据增强,BN层等常规操作。

2. 实验结果

YOLO v3在COCO数据集上训练结果与其他检测算法比较如表3。原来YOLO v2对于小目标的检测效果是比较差的,通过引入多尺度特征融合的方式,可以看出YOLO v3的APS要比YOLO v2的APS高出不少。

YOLO v3算法详解「建议收藏」

 图三为各个模型在COCO数据集上mAP及速度比较。YOLO v3速度快,准确性高。在coco数据集上,在AP50评估标准上效果不错,但在AP between .5 and .95评估标准上,效果一般。

YOLO v3算法详解「建议收藏」

3. ThingsWe Tried That Didn’t Work

1. 将box宽度与高度与x,y偏移建立线性关系,发现模型不稳定。

2. x,y偏移用线性激活而非logistic激活函数,导致mAP下降。

3.Focal loss,导致mAP下降。

4. 两个IOU阈值设置。 Faster RCNN中,bounding box与ground truth的IOU大于0.7为正样本,小于0.3为负样本。作者使用同样的方法,但是效果并不好。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148669.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android 屏幕适配之框架(AndroidAutoSize)(今日头条)适配

    Android 屏幕适配之框架(AndroidAutoSize)(今日头条)适配AndroidAutoSize框架 1.链接https://github.com/JessYanCoding/AndroidAutoSize 2.使用 2.1.添加Gradle配置implementation’me.jessyan:autosize:1.1.2′  2.2.添加AndroidManifest配置<manifest>…

    2022年6月4日
    46
  • oracle的dba_oracle导出dmp

    oracle的dba_oracle导出dmp双语使用场景TheOracledatabaseadministrator(DBA)willconsidermanyfactorsrelatedtofailover,loadbalancing,andotherswhilecreatingandconfiguringanrac.───Oracle数据库管理员(DBA)在创建和配置rac时需要考虑与故障转移、负…

    2022年9月26日
    6
  • linux sigpipe信号,Linux下SIGPIPE信号及其处理「建议收藏」

    linux sigpipe信号,Linux下SIGPIPE信号及其处理「建议收藏」在Linux下写socket的程序的时候,如果尝试send到一个disconnectedsocket上,就会让底层抛出一个SIGPIPE信号。这个信号的缺省处理方法是退出进程,大多数时候这都不是我们期望的。因此我们需要重载这个信号的处理方法。调用以下代码,即可安全的屏蔽SIGPIPE:structsigactionsa;sa.sa_handler=SIG_IGN;sigaction(S…

    2022年5月29日
    45
  • Springboot导出Excel并下载[通俗易懂]

    Springboot导出Excel并下载[通俗易懂]一、引入相关依赖<!–数据导出excel–><!–https://mvnrepository.com/artifact/org.apache.poi/poi–>

    2022年8月16日
    5
  • PLSQL注册码,亲测,可用

    PLSQL注册码,亲测,可用注册码:ProductCode:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqzserialNumber:601769password:xs374ca1.登录PLSQL,选择取消2.选择帮助,注册3.在弹出的注册框内填写上面的注册码,点击注册即可使用

    2022年7月24日
    15
  • 蓝鲸bk-sops源码学习二:流程组件注册实现原理「建议收藏」

    蓝鲸bk-sops源码学习二:流程组件注册实现原理「建议收藏」研究背景自己的项目都是python3.6开发。想使用蓝鲸的流程系统,真是千难万难。魔改路上真是一路坎坷。由于BK-SOPS需要结合蓝鲸的一整套服务才能够运行,所以单独把标准运维的流程系统抽出来然后融合进自己的系统。看看蓝鲸标准运维的功能多元接入支持:标准运维对接了蓝鲸通知、作业平台、配置平台等服务,作为官方标准插件库提供服务,还支持用户自定义接入企业内部系统,定制开发标准插件。可视化流…

    2022年5月25日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号