目标检测算法笔记 (三) One-Stage 算法 YOLO 系列算法

目录

  • 简介
  • YOLOv1
  • YOLOv2
  • YOLOv3
  • 网络总结

简介

YOLO全拼是You Only Look Once。作者的目标是实现速度很快同时尽可能保持精度的目标检测网络,其去掉了非常耗时的生成RPN网络(对于实时检测的要求来说),直接把目标检测作为两个任务:目标区域预测、类别预测。实现了使用了一个网络直接预测物体边界和类别概率,即end-to-end,虽然精度与Two-Stage算法存在差距,但是从其速度和整体简洁程度上来说,其非常适合工程实现。

YOLO算法是一个系列,所以这里简要展示一下,之后具体分别介绍。

名称 速度 精度
YOLOv1 45fps 最低
YOLO9000 40fps 普通
YOLOv3 51ms 较高

YOLOv1

实现思路
  1. 将图像分成S x S个grid,如果一个目标的中心落入一个grid,此grid就负责检测该目标
  2. 每一个grid都预测B个标定框,其中每个框参数为( x , y , w , h , c o n f i d e n c e x, y, w, h, confidence x,y,w,h,confidence),其中 x , y x, y x,y代表相对grid的目标中心预测坐标, w , h w, h w,h代表目标框相对整个图像的预测宽高, c o n f i d e n c e ( 论 文 公 式 以 P r ( O b j e c t ) ∗ I O U p r e d t r u t h ) 表 示 confidence(论文公式以Pr(Object) * IOU_{pred}^{truth})表示 confidence(Pr(Object)IOUpredtruth)代表预测的bbox的置信度
  3. 每一个grid还预测C个条件类别概率 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(ClassiObject),其中C是物体类别数量
  4. 这样在测试时每个条件类别概率可以乘以盒子的置信度得到分类别的置信度预测: P r ( C l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I O U p r e d t r u t h = P r ( C l a s s i ) ∗ I O U p r e d t r u t h Pr(Class_i|Object) * Pr(Object) * IOU_{pred}^{truth} = Pr(Class_i) * IOU_{pred}^{truth} Pr(ClassiObject)Pr(Object)IOUpredtruth=Pr(Classi)IOUpredtruth

在这里插入图片描述

逻辑上如上图所示,可以看到最后预测数据是一个S x S x (B * 5 + C)的张量。至此预测部分到此结束。

网络结构

整个过程可以建模层回归问题,作者使用了卷积神经网络来实现。通过初始卷积层从图中提取特征,然后接全连接层来预测。

在这里插入图片描述

网络结构灵感来自GoogleLeNet模型,参数为S = 7,B = 2以及C = 20,所以最后数据格式为7 x 7 x 30。可以看出YOLOv1非常简洁。

损失函数

公式为:
L o s s = λ c o o r d ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 ] + λ c o o r d ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 ] + ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j ( C i − C ^ i ) 2 + λ n o o b j ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j ( C i − C ^ i ) 2 + ∑ i = 0 S 2 1 i o b j ∑ c ∈ c l a s s e s ( p i ( c ) − p ^ i ( c ) ) 2 Loss = \begin{aligned} \lambda_{coord} \sum_{i=0}^{S^2} \sum_{j=0}^B 1_{ij}^{obj} [{(x_i - \hat{x}_i)}^2 + {(y_i - \hat{y}_i)}^2] \\ + \lambda_{coord} \sum_{i=0}^{S^2} \sum_{j=0}^B 1_{ij}^{obj} [{(\sqrt{w_i} - \sqrt{\hat{w}_i})}^2 + {(\sqrt{h_i} - \sqrt{\hat{h}_i})}^2] \\ + \sum_{i=0}^{S^2} \sum_{j=0}^B 1_{ij}^{obj} {(C_i - \hat{C}_i)}^2 \\ + \lambda_{noobj} \sum_{i=0}^{S^2} \sum_{j=0}^B 1_{ij}^{obj}{(C_i - \hat{C}_i)}^2 \\ + \sum_{i=0}^{S^2} 1_{i}^{obj} \sum_{c\in classes} {(p_i(c) - \hat{p}_i(c))}^2 \end{aligned} Loss=λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2]+λcoordi=0S2j=0B1ijobj[(wi

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值