Yolo-You Only Look Once

YOLO算法采用一个单独的CNN模型实现end-to-end的目标检测:

  1. Resize成448448,图片分割得到77网格(cell)
  2. CNN提取特征和预测:卷积部分负责提取特征。全链接部分负责预测:
  3. 过滤bbox(通过nms)

    • YOLO算法整体来说就是把输入的图片划分为SS格子,这里是33个格子。
    • 当被检测的目标的中心点落入这个格子时,这个格子负责检测这个目标,如图中的人。
    • 我们把这个图片输入到网络中,最后输出的尺寸也是SSn(n是通道数),这个输出的SS与原输 入图片SS相对应(都是33)。
    • 假如我们网络一共能检测20个类别的目标,那么输出的通道数n=2
    (4+1)+20=30。这里的2指 的是每个格子有两个标定框(论文指出的),4代表标定框的坐标信息, 1代表标定框的置信度, 20是检测目标的类别数。
    • 所以网络最后输出结果的尺寸是SSn=3330。
    关于标定框:
    • 网络的输出是S x S x (5*B+C) 的一个 tensor(S-尺寸,B- 标定框个数,C-检测类别数,5-标定框的信息)。
    • 5分为4+1:
    • 4代表标定框的位置信息。框的中心点(x,y),框的高宽 h,w。
    • 1表示每个标定框的置信度以及标定框的准确度信息。
    一般情况下,YOLO 不会预测边界框中心的确切坐标。它预测:
    •与预测目标的网格单元左上角相关的偏移;
    •使用特征图单元的维度进行归一化的偏移。
    例如: 以上图为例,如果中心的预测是 (0.4, 0.7),则中心在 13 x 13 特征图上的坐标是 (6.4, 6.7)(红色单 元的左上角坐标是 (6,6))。
    但是,如果预测到的 x,y 坐标大于 1,比如 (1.2, 0.7)。那么预测的中心坐标是 (7.2, 6.7)。注意该中心在红色单元右侧的单元中。这打破了 YOLO 背后的理论,因为如果我们假设红色框负责预测目 标狗,那么狗的中心必须在红色单元中,不应该在它旁边的网格单元中。 因此,为了解决这个问题,我们对输出执行 sigmoid 函数,将输出压缩到区间 0 到 1 之间,有效 确保中心处于执行预测的网格单元中。
    每个标定框的置信度以及标定框的准确度信息:
    左边代表包含这个标定框的格子里是否有目标。有=1没有=0。 右边代表标定框的准确程度, 右边的部分是把两个标定框(一个是Ground truth一个是预测的标 定框)进行一个IOU操作,即两个标定框的交集比并集,数值越大,即标定框重合越多,越准确。

    我们可以计算出各个标定框的类别置信度(class-specific confidence scores/ class scores): 表达的是该标定框中目标属于各个类别的可能性大小以及标定框匹配目标的好坏。
    每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box 的class-specific confidence score。



    • 其进行了二十多次卷积还有四次最大池化。其中3x3卷积用于提取特征,1x1卷积用于压缩特征,最后将图像 压缩到7x7xfilter的大小,相当于将整个图像划分为7x7的网格,每个网格负责自己这一块区域的目标检测。
    • 整个网络最后利用全连接层使其结果的size为(7x7x30),其中7x7代表的是7x7的网格,30前20个代表的是预测 的种类,后10代表两个预测框及其置信度(5x2)。


对每一个网格的每一个bbox执行同样操作: 7x7x2 = 98 bbox (每个bbox既有对应的class信息又有坐标信息)


得到每个bbox的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的 boxes进行NMS处理,就得到最终的检测结果。

排序后,不同位置的框内,概率不同:

以最大值作为bbox_max,并与比它小的非0值(bbox_cur)做比较:IOU

递归,以下一个非0 bbox_cur(0.2)作为bbox_max继续比较IOU:

最终,剩下n个框。
得到每个bbox的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。

对bb3(20×1)类别的分数,找分数对应最大类别的索引.---->class bb3(20×1)中最大的分---->score

根据不同类划分不同的框:

Yolo的缺点:
•YOLO对相互靠的很近的物体(挨在一起且中点都落在同一个格子上的情况),还有很小的 群体检测效果不好,这是因为一个网格中只预测了两个框,并且只属于一类。
•测试图像中,当同一类物体出现不常见的长宽比和其他情况时泛化能力偏弱。

Yolo2

1.Yolo2使用了一个新的分类网络作为特征提取部 分。
2. 网络使用了较多的3 x 3卷积核,在每一次池化操 作后把通道数翻倍。
3. 把1 x 1的卷积核置于3 x 3的卷积核之间,用来压 缩特征。
4. 使用batch normalization稳定模型训练,加速收 敛。
5. 保留了一个shortcut用于存储之前的特征。
6. 除去网络结构的优化外,yolo2相比于yolo1加入 了先验框部分,最后输出的conv_dec的shape为 (13,13,425):
• 13x13是把整个图分为13x13的网格用于预测。
• 425可以分解为(85x5)。在85中,由于yolo2常 用的是coco数据集,其中具有80个类;剩余 的5指的是x、y、w、h和其置信度。x5意味着 预测结果包含5个框,分别对应5个先验框。

Yolo3

YOLOv3相比于之前的yolo1和yolo2,改进较大,主要 改进方向有:
1、使用了残差网络Residual
2、提取多特征层进行目标检测,一共提取三个特征 层,它的shape分别为(13,13,75),(26,26,75), (52,52,75)。最后一个维度为75是因为该图是基于voc 数据集的,它的类为20种。yolo3针对每一个特征层 存在3个先验框,所以最后维度为3x25。
3、其采用反卷积UpSampling2d设计,逆卷积相对于 卷积在神经网络结构的正向和反向传播中做相反的运 算,其可以更多更好的提取出特征。

代码实现:

在资源中
实现结果如下

Tensorflow框架:目标检测Yolo思想相关推荐

  1. yolov3网络结构图_目标检测——YOLO V3简介及代码注释(附github代码——已跑通)...

    GitHub: liuyuemaicha/PyTorch-YOLOv3​github.com 注:该代码fork自eriklindernoren/PyTorch-YOLOv3,该代码相比master分 ...

  2. 目标检测YOLO系列------YOLO简介

    目标检测YOLO系列------YOLO简介 1.为什么会出现YOLO算法 2.YOLO算法会逐渐成为目标检测的主流吗     YOLO以及各种变体已经广泛应用于目标检测算法所涉及到的方方面面,为了梳 ...

  3. 目标检测-Yolo框架

    文章目录 基本概念 目标检测 目标检测算法分类 目标检测原理 数据表示 效果评估 非极大值抑制(NMS) Yolov Yolov1 基本思想 网络结构 优点与缺点 YOLOV2 与YOLOV1区别 Y ...

  4. keras框架:目标检测Faster-RCNN思想及代码

    Faster-RCNN(RPN + CNN + ROI)概念 Faster RCNN可以分为4个主要内容: Conv layers:作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基 ...

  5. [目标检测]YOLO原理

    1 YOLO 创新点: 端到端训练及推断 + 改革区域建议框式目标检测框架 + 实时目标检测 1.1 创新点 (1) 改革了区域建议框式检测框架: RCNN系列均需要生成建议框,在建议框上进行分类与回 ...

  6. 目标检测 | YOLO系列超全讲解v1,v2,v3

    前言 一.YOLOv1 1. 网络结构 2. 实现方法 3. 损失函数 4. 缺点 二.YOLOv2 1. 网络结构 2. 改进方法 3. YOLO9000 4. 网络训练细节 三.YOLOv3 1. ...

  7. 目标检测 YOLO系列算法

    文章目录 1. YOLO算法 1.1 Yolo算法思想 1.2 Yolo的网络结构 1.2.1 网络输入 1.2.2 网络输出 1.7X7网格 2x30维向量 1.3 Yolo模型的训练 1.3.1训 ...

  8. 【目标检测-YOLO】博客阅读:Introduction to the YOLO Family

    阅读收获 本文是博客:https://pyimagesearch.com/2022/04/04/introduction-to-the-yolo-family/ 的翻译. 好吧!其实在这里面并没有太多 ...

  9. 目标检测Yolo与SSD算法比较

    目标检测近年来已经取得了很重要的进展,主流的算法主要分为两个类型(参考RefineDet):(1)two-stage方法,如R-CNN系算法,其主要思路是先通过启发式方法(selective sear ...

最新文章

  1. 疫情之下,村干部们的智慧越来越...
  2. 嵌入式中的 *(volatile unsigned int *)0x500 解释
  3. java类中定义索引器,C#面向对象基础——字段、属性和索引器
  4. 转tigase 安装
  5. 03 | 事务隔离:为什么你改了我还看不见
  6. C++ volatile关键字说明
  7. vbs向指定的日志文件添加日志
  8. 生日小助手的详细规划——本博文随时更新,持续有效……
  9. php 锁屏,fcode-页面九宫格自动锁屏js插件
  10. 怎么在pyqt界面上添加新菜单栏选项_PyQt创建菜单栏、工具栏
  11. 强联通分量:Tarjan缩点
  12. vbr,cbr,abr区别
  13. (附源码)Springboot工程技术研究中心小程序 毕业设计 201738
  14. 《内功修炼系列》之-递归从入门到入土(收藏版)
  15. linux中有一个备份程序,技术|SBackup: 一个Linux下的简单备份软件
  16. PHP简洁小猫咪图床源码 带12个图床接口
  17. 8.5.4. Interval Input
  18. 淘宝双十二活动复盘——Mysql数据分析+Tableau可视化
  19. 吾爱破解工具箱 v 1.0
  20. Centos操作系统vim升级到9.0版本

热门文章

  1. C++静态成员和静态方法
  2. 传输层:IP 地址解析 路由转发
  3. STL源码剖析面试问题
  4. 【Leetcode | 顺序刷题】数学目录
  5. 如何保证Redis与数据库的双写一致性?进阶加薪全靠它!
  6. redis的源码编译安装+发布订阅+RDB持久化
  7. 【codeforces 103E】 Buying Sets
  8. 解决阿里云服务器磁盘报警
  9. Atitit.异步的实现模式attilax大总结
  10. javascript面试题以及对所涉及到的知识点的总结