You Only Look Once: Unified, Real-Time Object Detection

参考
Introduction
  • 再16年那会比较流行的算法可以分为两类,一类是基于Region Proposal的R-CNN系算法(R-CNN,Fast R-CNN, Faster R-CNN),它们是two-stage的,需要先使用启发式方法(selective search)或者CNN网络(RPN)产生Region Proposal,然后再在Region Proposal上做分类与回归。而另一类是Yolo,SSD这类one-stage算法,其仅仅使用一个CNN网络直接预测不同目标的类别与位置。第一类方法是准确度高一些,但是速度慢,但是第二类算法是速度快,但是准确性要低一些。

  • 作者将目标检测作为一个回归问题,回归到空间上分离的边界框和相关的类概率。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。

  • 用YOLO处理图像是简单而直接的。

    • image-20210803094202898
    • (1)将输入图像的大小调整为448×448
    • (2)在图像上运行单个卷积网络
    • (3)根据阈值以及置信度对模型的结果筛选
  • YOLO的特点如下

    • 极其快,同时精度远胜其他实时系统。
    • 能够从全局解析图片,从而使得背景预测错误更加少
    • 可以高度概括目标特点
Unified Detection
  • YOLOv1的流程大致可以划分为一下部分,图参考上图:

    • 首先将input划分为SxS大小的grid,如(1)所示
    • 经过卷积池化之后得到feature maps,然后对于每个grid,会去预测B个bbox(xywh),以及该bbox含有对象的置信度(conf),还有所有类的概率(C种类),因此每张图的输出就会有: S ∗ S ( B ∗ 5 + C ) S*S(B*5+C) SS(B5+C)个输出,作者在Pascal VOC 中选择B=2;S=7;C=20
Network Design
  • 受GooGleNet的启发(for image classification),YOLOv1的结构如下:

    • image-20210803153006390
  • 共24层conv layers,中间穿插基层Max pooling,最后接两层FC(全链接),直接输出上面提到的 S ∗ S ( B ∗ 5 + C ) S*S(B*5+C) SS(B5+C)个tensor

Training
  • 预训练:先在ImageNet 2012中进行预训练(只用前20个conv的结构)

  • 在最后一层layer中同时预测类别概率和bbox的边界,同时将结果归一化到 ( 0 , 1 ) (0,1) (0,1)

  • 激活函数使用Leaky ReLU

  • 在设计误差(loss)的时候使用了方差和(sum-squared error),

    • 这种方法易于优化,但会带来正负样本不平衡的问题(且绝大多数的时候background比obj多得多),因此作者又引入了两个权重系数,用于控制二者的比重: λ c o o r d \lambda_{coord} λcoord λ n o o b j \lambda_{noobj} λnoobj,分别表示有对象和没对象对loss的影响比重

    • 同时方差和对不同大小的对象的检测误差也是平均的,这个问题,同样的像素误差,在计算IOU的时候对大目标的时候是可以接受的范围,但对小目标则很不利,因此作者在预测的时候使用 $\sqrt{h} 和 和 \sqrt{w}$来替代原来的h和w(但是这个问题仍然存在,因此YOLO v1对小目标的检测依然不好)

    • LOSS式子:

      • L = λ 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 n o 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 ] L = \lambda_{coord} \sum^{S^2}_{i=0} \sum^{B}_{j=0} \mathbb 1_{ij}^{obj}[(x_i- \hat x_i)^2+(y_i- \hat y_i)^2] + \lambda_{coord} \sum^{S^2}_{i=0} \sum^{B}_{j=0} 1_{ij}^{obj}[(w_i- \hat w_i)^2+(h_i- \hat h_i)^2] + \sum^{S^2}_{i=0} \sum^{B}_{j=0} 1_{ij}^{obj}[(C_i- \hat C_i)^2] + \lambda_{noobj} \sum^{S^2}_{i=0} \sum^{B}_{j=0} 1_{ij}^{noobj}[(C_i- \hat C_i)^2] + \sum^{S^2}_{i=0} 1_{i}^{obj} \sum_{c \in classes} [(p_i(c) - \hat p_i(c))^2] L=λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2]+λcoordi=0S2j=0B1ijobj[(wiw^i)2+(hih^i)2]+i=0S2j=0B1ijobj[(CiC^i)2]+λnoobji=0S2j=0B1ijnoobj[(CiC^i)2]+i=0S21iobjcclasses[(pi(c)p^i(c))2]

      • 其中$1_{i}^{obj} $表示在cell i中是否有obj(有就return 1),同理$1_{ij}^{obj} $表示是在cell i中的第j个bbox预测是否可以作为““responsible”的预测(有就return 1),然后我找了张图可以参考一下:

  • 别的设置:

    • batch size = 64; momentum = 0.9; learning rate 从 1 0 − 3 10^{-3} 103到$10^{-2} $
    • droupout=0.5; data augmentation
Limitations of YOLO
  • YOLO对边界框预测施加了强大的空间约束,因为每个网格单元只能预测两个框,并且只能有一个类。这种空间约束限制了模型可以预测的附近对象的数量
  • 由于YOLO从数据中学习预测边界框,它很难推广到具有新的或不寻常的纵横比或配置的对象
  • YOLO还使用相对粗糙的特征来预测边界框,因为YOLO架构具有来自输入图像的多个下采样层。
  • 最后,当训练一个近似检测性能的损失函数时,损失函数在小边界框和大边界框中处理相同的错误。
    • 大方框中的小错误通常是良性的,但小方框中的小错误对IOU的影响要大得多。因此对小目标的检测效果不好
Experiments
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椰子奶糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值