https://www.bilibili.com/video/BV1Vg411V7bJhttps://www.bilibili.com/video/BV1Vg411V7bJ

yolo3的性能

以0.5为步长,计算IoU从0.5到0.95的map.yolo3在速度上确实是一骑绝尘,在准确度上也在可接受的范围内

在IoU=0.5,大分辨率输入的前提下,yolo3就是一个又快又准的模型了,是一个非常恐怖的存在。中科院的SSD似乎也不差

影响推理速度的因素是什么??首先就是模型的规模

backbone-darknet53

和Yolo2一样的策略,分为分类网络和定位网络。在进行分类训练的时候,需要在卷积网络后加上全局平均池化,全卷积,softmax.在进行定位训练的时候,拿掉这三个结构,加上多尺度训练需要的passthrough结构。yolo3进行了更全面的多尺度融合训练,有3个passthrough结构

 在精度上,yolo3和resnet不相上下,但是速度要比resnet快很多。较之yolo2,毫无疑问,yolo3的网络规模更大,FPS就降下来了

 yolo3会输出3个尺度的feature map.他们的channel都是255,因为yolo3每个grid cell有3个anchor,coco数据集有80个类,对于每个预测框,和yolo1,yolo2一样,都是输出5个值。所以255 = 3 * (5 + 80)

上面说每个grid cell有3个anchor,实际上是9个anchor,只是给每个最后输出的feature map 分配3个anchor.但我不理解的是,分辨率小的feature map分配的反而是大的anchor,说是用它取处理大目标???

都是一样的,都是在描述yolo3的结构图

 

在yolo2中,我提到具体是怎么得到多尺度的照片的,我认为就是resize,在确定好当前训练的样本尺度之后,直接进行resize

像coco、VOC这样的数据集,样本的尺寸并不是像cifar那种32*32的固定尺寸,所以要以他们为基础进行多尺度训练,我估计就是resize

进一步对网络结构话,第一次提到neck。注意区别于yolo2中出现的bottleneck结构,他是先降维再升维的操作,而neck结构是用于多尺度融合训练的,作用就是将进行的所有特征融合的操作统称为neck层,或者叫特征金字塔feature pyramid

注意啊,以上这三个分辨率的feature map实际上是一个grid cell的输出,不对不对不对

应该是这样,yolo3应该是将样本做了三种grid cell的划分13*13,26*26,52*52,每种划分的grid cell都会生成3个预测框,实际上总的预测框数量就变成了10647

实际上总的anchor数量是9个,每种分辨率的feature map分配三种anchor

这也就是yolo3进一步提升了对小目标和密集目标的识别准确率。其实在yolo1的时候,我们大概也能想到要增加预测框的数量,但是如果采用RCNN那种硬扩充的方式,势必会带来速度上的问题。实际上yolo2也确实硬扩充了预测框的数量,但是相对比较保守,将总量提到了900左右,还加入了anchor机制改善了模型的定位能力,极大地增加了recall检出目标的能力。

毫无疑问,yolo3想出了一种更好地扩充预测框数量的方式,充分复用了之前验证过了良好结构

我认为这是yolo对神经网络本质思想的又一次挖掘,这三个分辨率的feature map实际上是你中有我我中有你的状态,他仍然是单阶段的,如果说RCNN的rigion proposal做到10000出头,我估计性能直接就负数了

这张图就解答了我刚才的问题,为什么分辨率更大的feature map要分配更小的anchor, 非常直观的说明了这一点

还是yolo3的结构图

这张图用batch_size来描述处理后的feature map的尺寸挺容易让人无解的>.<

 这张图更加形象地说明了yolo3是如何进行输出的,和yolo2的差异

之前结构图的输入是416*416,那么输出的feature map的三个分辨率是13,26,52

现在的输入是608*608,输出的feature map的三个分辨率是19,38,76

也就是说输入图像越大,那么预测框的数量就越多,这种功能是其他模型所不具备的,我认为这就是对神经网络本质的充分利用

yolo2只有在进行分类训练的时候在全局平均池化的基础上才能允许任意尺度的输入,当模型分类、定位训练结束之后,推理阶段,包括定位训练阶段都没有机制来实现任意尺度的输入

其实仔细想来,yolo2要是真想实现yolo3这样效果完全是可以的,因为网络结构允许他这样做。只是说他最终只会输出一个feature map,当前是固定分辨率13*13

我们再讨论这个grid cell的划分: 

回顾yolo1,yolo2对于grid cell的划分,我也是逐步领会到他并不是RCNN的技术路线,yolo并没有对图像进行实际的分割,它只是一种设计模型的参数,它真实的作用是对输出的分辨率进行限制,设计的网络最终的输出必须保证是这个规定好的分辨率,无论使用多少的卷积、池化、bottleneck、1*1卷积、passthrough、FC,就是说这个参数最终只是体现在输出上

比如说yolo1,7*7的grid cell规定了FC的输出层输出是一个7*7*30 = 1470维的向量,并且需要reshape成一个7*7*30的tensor

yolo2,13*13的grid cell规定了训练完成的全卷积网络最后要输出一个分辨率为13*13的feature map,channel数为125

到了yolo3,甚至都没有明确去说明grid cell的划分,而是沿用并扩展了yolo2的思路,最终要输出3种分辨率的feature map,13*13,26*26,52*52

在yolo2,已经彻底解决多尺度训练这个问题,最终训练完成的网络就是一个全卷积网络

终于,到了yolo3开始正式提出关于正负样本选取的问题,应该说这个问题肯定是一直存在的,但是之前两个版本的论文并没有花任何的篇幅来讨论这个正负样本的选取。yolo2倒是提了一嘴,anchor机制虽然在map的提升上没有什么效果,但是极大地提升了recall,recall以及precision的计算就需要用到正负样本

在RCNN的论文中,提到了他是如何去规定正负样本。之前我也专门弄过这个概念,正负样本就是一个相对的概念,正 是由我们本次训练的目的来确定的

《focal loss》这篇文章专门讲了正负样本的选取问题

子豪兄说,在yolo3中规定如果某个anchor 与ground truth的IoU最大,那么这个anchor就是一个正样本。这是否就意味着,正样本的个数就是我的模型所预测的目标个数,这个数量可能是少于ground truth中标注的目标个数,他们的比值就能得到一个有意思的评价指标

以yolo1为例,在前向推断中,推断完成之后会产生98个预测框,如果要计算recall或者precision,那么就需要去比较7*7*30tensor当中的置信度参数,以这个为基准确定正负样本的个数。如果说这98个预测框包括的实际目标比较多,那正样本的个数肯定就会多

在yolo1中似乎并没有说将与ground truth IoU最大的预测框设定为正样本,yolo1只是在计算置信度时需要用到预测框和ground truth的IoU,每个grid cell的置信度不会单纯的设为0或者是1。分为两个部分:

1.训练阶段。通过比较每个grid cell的两个预测框的置信度的大小,来得出loss function的相应标签值,这个标签值就只有0,1

2.预测后处理阶段。预测框的置信度要用来计算自己的全类别概率,不存在直接使用置信度进行比较的情况

为什么会构建三个尺度、三个方面的损失函数???

从前文中,loss function的结构来看,它需要遍历每个grid cell的每个预测框,而我们输出了三种分辨率的feature map,自然也就需要三个尺度的loss function

关于yolo3的学习相关推荐

  1. 【华为云技术分享】物体检测yolo3算法 学习笔记(1)

    [摘要] YOLO作为一个one-stage目标检测算法,在速度和准确度上都有杰出的表现.而YOLO v3是YOLO的第3个版本(即YOLO.YOLO 9000.YOLO v3),检测效果,更准更强. ...

  2. 【华为云技术分享】物体检测yolo3算法 学习笔记2

    先来看一下yolo3的结构图: 1.主体网络darknet53 最左边的这一部分叫做Darknet-53, (1)它最重要特点是使用了残差网络Residual,darknet53中的残差卷积就是进行一 ...

  3. Pytorch搭建yolo3目标检测平台

    学习前言 源码下载 yolo3实现思路 一.预测部分 1.主题网络darknet53介绍 2.从特征获取预测结果 3.预测结果的解码 4.在原图上进行绘制 二.训练部分 1.计算loss所需参数 2. ...

  4. 滴普技术荟:基于深度学习的云边一体化OLED屏缺陷自动光学检测技术

    作者:阎胜利 中科院博士 助理研究员,从事光电成像系统总体及算法研究,现为滴普科技 2048事业部 技术品牌专家 一.要解决的主要问题 OLED (Organic Light-Emitting Dio ...

  5. 学习记录01:使用pyqt5搭建yolo3目标识别界面

    使用pyqt5搭建yolo3目标识别界面 已有重制版,yolo3检测界面重制版,更简单,完善. 由于这是我第一次写这种博客,其目的也不是为了赚取积分,主要是为了记录我的学习过程中的一些方法,以便以后我 ...

  6. 机器视觉实用工具集NO.10——使用深度学习模型(yolo3)实现物体检测工具

    目录 前言 opencv+YOLO3实现物体检测 python源码 前言 OpenCV 3.3版本之后提供了对主流深度学习主干网络框架的加载支持.opencv给我们提供了一个应用成熟深度学习模型的便捷 ...

  7. linux 下搭建yolov3错误,Ubuntu20.04+cuda11.1+yolo3 目标检测 深度学习系统 真正从0搭建 包含各类可能遇到的错误...

    本篇文章包含内容较多,请参照目录浏览,在每一部分结束或,有该部分可能遇到的问题 0.开始本教程前请先备份电脑中的重要文件!!!! 一.Ubuntu20.04 搭建 更详细的内容请参照该博客:https ...

  8. 目标检测学习————Keras搭建yolo3目标检测平台

    Keras搭建yolo3目标检测平台 源码下载 yolo3实现思路 一.预测部分 二.训练部分 训练自己的yolo3模型 参考原文出处 点击进入https://blog.csdn.net/weixin ...

  9. 海思AI芯片(Hi3519A/3559A)方案学习(十七)开发板上运行yolo3模型的代码分析

    前言 前面的博客系列 已经介绍了如何将caffemodel转换成wk文件,如何将jpg文件转成bgr格式数据以及如何在PC上仿真模型推理等,基于这些基础,本文来结合代码分析如何在板子上推理yolov3 ...

  10. YOLO3 + Python3.6 深度学习篇(上)- Transfer Learning 迁移学习

    何为 YOLO(You Only Look Once) YOLO [点击] 充满青春暗示的另一面,更是一个强大物体检测算法的简称,其算法结合了速度与准确度,近期更推出了第三版的 model 供大家参考 ...

最新文章

  1. A站、B站、C站、D站、E站、F站、G站、H站、I站、J站、J站、L站、M站、N站…Z站?...
  2. spark 源码分析之十八 -- Spark存储体系剖析
  3. Python 面向对象 —— 多重继承
  4. HDU 2665 Kth number(主席树静态区间第K大)题解
  5. 字符串分隔为二维数组,二级和三级指针的应用案例
  6. mysql 对日期的处理函数_MySQL日期处理函数
  7. Linux一些有用的操作
  8. cad小插件文字刷_CAD实用小插件,这是一串让你效率提升相见恨晚的代码!
  9. 虚拟机SSH免密登录配置
  10. 4.22 使用裁切命令裁剪图片 [原创Ps教程]
  11. 网络协议和浏览器到网络简单攻防实现的探索(二)
  12. platfrom设备驱动框架
  13. 移动收款功能(未完成,无参考价值)
  14. 【数据库实验】镶嵌查询
  15. 使用迅搜制作站内搜索引擎-安装篇
  16. Exchange用户邮件状态跟踪
  17. IMS/SIP - GCF IMS相关认证测试如何通过看case procedure来得知哪些field/IE必须带?
  18. 论文:学习用于分子构象生成的梯度场
  19. 计算机的英语作文模板,计算机英文模板 简历
  20. 什么是Service

热门文章

  1. 渐进记号 Asymptotic Notations-------geeksforgeeks 翻译
  2. 宝马屏幕共享android,宝马屏幕共享功能怎么用
  3. CrossApp_01
  4. xmlspy2014 安装与破解
  5. 注意,因为这样操作,zoom登录不上了
  6. cad设计师证书怎么考
  7. 引入网易云音乐播放器卡片
  8. 130多个免费接口全部开放,涵盖天气数据、环境数据、旅游景点数据、位置数据、雷达、云图等等,可在线直接提供服务,免费的服务接口
  9. python提取身份证信息查询_Python+Opencv身份证号码区域提取及识别实现
  10. launchpad乐器_一起认识 Launchpad 系列——中篇