YoloV1算法

来源:B站霹雳吧啦Wz

学习路线

网络讲解
读原文
跑作者代码
分析代码:网络搭建,数据处理,损失计算

生成bbox

image.png
1)将一幅图像分成SxS个网格(grid cell),如果某个object的中心落在这个网格中,则这个网格就负责预测这个object。
2)每个网格要预测B个bounding box,每个bounding box除了要预测位置之外,还要附带预测一个confidence值。每个网格还要预测c个类别的分数。
S = 7 B = 2 C= 20 30个channel
xywh均为相对值,(0,1)
confidence:可以理解为Pr(Object) * IoU,Pr(Object)取0或者1,有无目标
Pr ⁡ ( C l a s s i ∣ O b j e c t ) ∗ Pr ⁡ ( O b j e c t ) ∗ I O U pred  truth  = Pr ⁡ ( C l a s s i ) ∗ I O U pred  truth  \operatorname{Pr}\left(\right. Class_{i} \mid Object) * \operatorname{Pr}(Object) * \mathrm{IOU}_{\text {pred }}^{\text {truth }}=\operatorname{Pr}\left(\right.Class\left._{i}\right) * \mathrm{IOU}_{\text {pred }}^{\text {truth }} Pr(ClassiObject)Pr(Object)IOUpred truth =Pr(Classi)IOUpred truth 

网络结构

image.png
image.png

损失函数

bounding box损失
λ coord  ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj  [ ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 ] + λ coord  ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj  [ ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 ] \begin{array}{l}\lambda_{\text {coord }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj }}\left[\left(x_{i}-\hat{x}_{i}\right)^{2}+\left(y_{i}-\hat{y}_{i}\right)^{2}\right] \quad+\lambda_{\text {coord }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj }}\left[\left(\sqrt{w_{i}}-\sqrt{\hat{w}_{i}}\right)^{2}+\left(\sqrt{h_{i}}-\sqrt{\hat{h}_{i}}\right)^{2}\right]\end{array} λcoord i=0S2j=0B1ijobj [(xix^i)2+(yiy^i)2]+λcoord i=0S2j=0B1ijobj [(wi w^i )2+(hi h^i )2]
后面开根号为了提升小目标的检测效果,若不改变,偏移相同距离误差一样大,是不合理的。应该小目标的更大一些
image.png
confidence损失
+ ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj  ( C i − C ^ i ) 2 + λ noobj  ∑ i = 0 S 2 ∑ j = 0 B 1 i j noobj  ( C i − C ^ i ) 2 \begin{array}{l}+\sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj }}\left(C_{i}-\hat{C}_{i}\right)^{2} +\lambda_{\text {noobj }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {noobj }}\left(C_{i}-\hat{C}_{i}\right)^{2}\end{array} +i=0S2j=0B1ijobj (CiC^i)2+λnoobj i=0S2j=0B1ijnoobj (CiC^i)2
前面计算正样本损失,后面计算负样本损失
classes损失
+ ∑ i = 0 S 2 1 i obj  ∑ c ∈  classes  ( p i ( c ) − p ^ i ( c ) ) 2 +\sum_{i=0}^{S^{2}} \mathbb{1}_{i}^{\text {obj }} \sum_{c \in \text { classes }}\left(p_{i}(c)-\hat{p}_{i}(c)\right)^{2} +i=0S21iobj c classes (pi(c)p^i(c))2

缺点:
对小目标检测很差
没有鲁棒性,对于新的尺寸的目标效果也很差
错误原因来自于定位不准确

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLOV1算法是一种目标检测算法,它与传统的目标检测算法不同,采用了一阶段的端到端的方式进行目标检测。该算法将目标检测问题设计为回归问题,通过输入图片到一个神经网络中,输出得到物体的边界框和分类概率等信息。\[2\] 在改进的YOLOV1算法中,主干网络使用了ResNet50,并使用了pytorch框架的1.7.1版本。本文通过代码实现了改进的YOLOV1算法,并对代码中的函数进行了讲解和备注,以帮助读者更好地理解代码的含义。然而,本文只展示了部分代码,完整的代码可以通过GitHub进行下载。\[1\] 对于理解YOLOV1算法的一些细节,如bounding box的生成和如何确定哪个bounding box负责哪个grid cell等问题,有些地方可能在文字或视频讲解中难以理解。因此,通过下载相关代码并阅读代码,可以更进一步地了解YOLOV1算法的实现细节。\[3\] #### 引用[.reference_title] - *1* [YOLOV1(pytorch) 代码讲解](https://blog.csdn.net/ing100/article/details/125155065)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [YOLOv1学习笔记以及代码介绍](https://blog.csdn.net/weixin_45731018/article/details/127335775)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值