YOLOv3理解附github代码

我会从以下实现的角度理解YOLOv3,附上github代码 https://github.com/XingZeng307/YOLOv3。(真正从头实现一遍代码才能发现无穷多的细节需要去推敲,如果有错误麻烦指出,谢谢!)

YOLO简介

  • 定义:YOLO是目标检测算法,用来识别图片中的物体,并且找到它们的位置,并且用边框给它们标出来。如图所示(note: 我用的数据集是关检测衣服的衣领类型的,所以这里是单目标检测)
    在这里插入图片描述

标准深度神经网络结构

在这里插入图片描述

# 伪码
def model(x, y, num_iters):
	paras = initialize_paras()
   	for i in range(num_iters):
       pred = model(x, paras)
       cost = loss(pred, y)
       grads = backward(cost)
       paras = update_paras(grads)

YOLO的结构完全和以上的标准结构一致
我们需要做的是:

  1. YOLO模型结构(也就是我们的神经网络结构)
  2. 定义YOLO的输入x输出y(prediction)分别是什么,以及格式,以便后面计算loss
  3. 定义loss function,因为计算loss需要target,所以需要将训练数据集中的target的格式转换成和prediction的格式一致。
  4. 训练模型 (forward -> loss -> back prop -> update para)
  5. 检测新的图片

YOLOv3 model architecture (对应代码yolov3.py)

YOLO的模型架构是它的一个精华所在!!!
附上我自己手绘的一张图,花了很长时间,字迹有点潦草,希望不要介意。但是确实很用心画的一张YOLO v3的很完整的网络结构图!
Yolov3 architecture

  • 1. 输入输出:当然,用于目标检测,输入是一张图(e.g. [256 X 256 X 3])或者一个batch,输出是检测到的物体的类以及其位置,表示为 [x, y, w, h, confidence, classes],x, y, w, h是表示的是预测的边框(中心点➕宽➕高),confidence表示我有多自信在这个边框里面有物体object,但前提是我有object,如果没有object,confidence则为0,最后classes是one-hot-encoding,表示的是预测的这个物体object属于哪一个类别。(note: 图中最后输出的[32 X 32 X 255],[16 X 16 X 255], [8 X 8 X 255]之后会解释怎么与[x, y, w, h, confidence, classes]相关)

  • 2. 中间结构 (精髓所在):
    2.1 ResBlock的思想,在图中为short layer, 用于训练深层网络
    2.2 金字塔结构思想,大目标,小目标现在通吃!(之前YOLO1的一个缺点就是对小目标检测不准确),在图中为route之后concat,把前后特征

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值