YOLOv1 随笔

作者: zidea | 来源:发表于2020-10-17 21:44 被阅读0次

YOLO 系列

<img src="./image/../images/ironman_evolution.jpg">

YOLOv1

<img src="images/yolov1_cover.jpeg">

  • 作者 AlexAB

计算机视觉

随着深度学习中卷积神经网络的发展,掀起了一次目标检测的浪潮,逐渐趋近于成熟

目标检测

<img src="images/object_detector_01.jpeg">

  • 语义分割
  • 单目标检测
  • 多目标检测
    • 实例分割
    • 目标检测
单目标

我们要做目标检测,先看一下计算机视觉可以做那些图像那些识别问题。目标检测从 2012 年目标检测人提升了一倍,图像目标是什么,还需要对其进行定位,单目标任务,同时输出 1000

  • softmax 损失
  • L2 损失||\hat{x} - x^{8}||^2 +

可以选择一个,然后分出两个 head 分别做分类任务和回归任务,可以定位
<img src="images/object_detector_02.png">

多目标(区域)

adaboost 就足够快可以通过滑动窗口来做人脸检测

目标检测任务
  • 输入图像
  • 输出一个目标所属类别的概率以及表示出该目标在图像位置
    • xywh
    • cwh
    • xyxy
目标检测思路
  • 生成局部区域图像
  • 对区域图像进行分类任务
滑动窗口(slide window)

这种方式进行目标检测的缺点很明显,运算量大,所以耗时在当前算力下无法投入到生产,对于每张图片都等同生成一个小型的数据集.

<img src="images/yolov2_001.jpeg">

目标检测中的问题和难点
  • 如何生成区域图像
  • 如何表示一个预测结果
  • 如何表示多个预测结果

我们如何将这生成局部区域图像和对区域图像进行分类两个任务结合在一起,如何更精准地生成区域图像。其实图像检测一路走来大家对生成区域图像花费很多心思。
<img src="./images/yolov1_cover_02.jpeg">

YOLOv1

如何准备数据集

  • 类别信息
  • 位置信息

网络结构

  • 输入图像
  • 输出向量表示预测结果 [c,x,y,w,h]
    <img src="images/yolov1_001.jpeg">

训练

训练网络,多组输出与位置强相关, 按空间位置来映射 N = W^{\prime} \times H^{\prime}

用每一个对应框进行预测,只需要

  • 一个目标出现在多个框(中心点)
  • 多个目标出现在同一个框(不同尺度的框)
    \begin{bmatrix} [c,x,y,w,h] & [c,x,y,w,h] & \cdots &[c,x,y,w,h] \\ [c,x,y,w,h] & [c,x,y,w,h] & \cdots &[c,x,y,w,h] \\ \vdots & \vdots & \vdots & \vdots\\ [c,x,y,w,h] & [c,x,y,w,h] & \cdots &[c,x,y,w,h] \\ \end{bmatrix}
loss_total = 0
for img in images:
    for i in range(0,7):
        for j in range(0,7):
            loss_ij = (c_hat - c_true)**2 + 
            c_true (x_hat - x_true)**2 +  
            c_true (y_hat - y_true)**2 +  
            c_true (w_hat - w_true)**2 +  c_true(h_hat - h_true)**2
            loss_total + loss_ij

<img src="images/yolov1_007.png"/>
<img src="images/yolov1_008.png"/>
<img src="images/yolov1_009.png"/>
<img src="images/yolov1_011.png"/>

loss = (\hat{c} - c^{*})^2 + c^{*}(\hat{x} - x^{*}) + c^{*}(\hat{y} - y^{*}) + c^{*}(\hat{w} - w^{*}) + c^{*}(\hat{h} - h^{*})

  • c \in [0,1]
  • x,y,h,w \in [1,416]
    这样问题就是因为置信度loss 值与边界框位置信息的loss 存在不平衡问题,因此需要引入一个权重来进行调整。

loss = \lambda(\hat{c} - c^{*})^2 + c^{*}(\hat{x} - x^{*}) + c^{*}(\hat{y} - y^{*}) + c^{*}(\hat{w} - w^{*}) + c^{*}(\hat{h} - h^{*})
而且这里 w 和 h 与 x 和 y 也表示不同属性还需要进一步进行处理

loss = \lambda(\hat{c} - c^{*})^2 + c^{*}(\hat{x} - x^{*}) + c^{*}(\hat{y} - y^{*}) + c^{*}( \sqrt{\hat{w}} - \sqrt{w^{*}} ) + c^{*}( \sqrt{\hat{h}} - \sqrt{h^{*}})

因为只需要计算有物体的放框

IOU和NMS

<img src="images/iou_001.jpg">
可能输出预测框数量要大于实际目标数量,可以通过 IOU 可以去掉一些冗余的候选框,通过将两个重合度比较高的候选框计算为一个候选框。我们实际上可以用 IOU 来判断两个框。

找到置信度最高框,然后利用 IOU 去掉与置信度最高框(抑制掉),还剩下没有被抑制掉,然后在没有被抑制掉的框找到置信度最高的框,然后计算 IOU 来去掉和这个框,NMS(非极大值抑制)

多分类

loss = \lambda(\hat{c} - c^{*})^2 + c^{*}(\hat{x} - x^{*}) + c^{*}(\hat{y} - y^{*}) + c^{*}( \sqrt{\hat{w}} - \sqrt{w^{*}} ) + c^{*}( \sqrt{\hat{h}} - \sqrt{h^{*}}) + c^{*}\sum_i^cls (\hat{y_i} - y_i^{*})^2

<img src="images/yolov1_003.jpeg"/>

<img src="images/yolov1_002.jpeg"/>

损失函数

<img src="images/yolov1_006.png">

  • S 是 7,grid 数量
  • B 两个框
  • \mathbb{1}_{i,j}^{obj}

YOLOv1 中的问题

  • 小目标检测
  • 多目标

相关文章

  • YOLOv1 随笔

    YOLO 系列 YOLOv1 作者 AlexAB 计算机视觉 随着深度学习中卷积神经网络的发展,掀起了一次目标检测...

  • 详解 YOLOv2

    YOLOv2 简单回归 YOLOv1 yolov1 中存在问题 yolo 难以应付小目标 yolo 漏检,也就是召...

  • YOLOv1——YOLOv5

    YOLOv1 YOLOv1提出单阶段anchor-free的目标检测方法将图像分为SxS的grid cell,每个...

  • YOLOv1, SSD

    YOLOv1, SSD 今年四月份的时候,在一个研究院实习时学习了YOLOv1, SSD系列Object Dete...

  • YoloV1

    YOLO(You Only Look Once)是一种基于深度神经网络的对象识别和定位算法,其最大的特点是运行速度...

  • Yolov1

    贴两个yolov1写的比较好的链接: 目标检测|YOLO原理与实现:https://zhuanlan.zhihu....

  • yolo

    https://pjreddie.com/darknet/yolo/ 一、是什么从YOLOv1到YOLOv3,目标...

  • detection_layer层的实现

    detection_layer对应Yolov1的实现,理解detection_layer的实现主要需要理解Yolo...

  • [图像算法]-死磕YOLO系列,YOLOv2的自我修养

    前言 系列文章:死磕YOLO系列,YOLOv1 的大脑、躯干和手脚[https://www.jianshu.com...

  • YOLOv1学习笔记

    YOLO 全称You Only Look Once,属于目标检测算法的One-Stage算法,One-Stage和...

网友评论

    本文标题:YOLOv1 随笔

    本文链接:https://www.haomeiwen.com/subject/oinfmktx.html