记录:复现Pytorch搭建YoloV4Tiny目标检测平台

本文介绍如何使用Pytorch搭建YoloV4-Tiny目标检测平台,包括预训练权重预测、训练VOC数据集得到权重的过程及网络结构解析。

站在各位巨人的肩膀上,记录和整理。
参考
1、https://github.com/bubbliiiing/yolov4-tiny-pytorch
2、睿智目标检测35——Pytorch搭建YoloV4-Tiny目标检测平台
3、Pytorch 搭建自己的YoloV4目标检测平台(Bubbliiiing 深度学习 教程)
4、可视化yolov4-tiny和yolov4网络结构图
5、关于YOLOv3的一些细节
6、【论文理解】理解yolov3的anchor、置信度和类别概率
7、史上最详细的Yolov3边框预测分析
8、深度学习小技巧-mAP精度概念详解与计算绘制(Bubbliiiing 深度学习 教程)
9、YOLO3输出张量解码过程
10、睿智的目标检测10——先验框详解及其代码实现
11、睿智的目标检测31——非极大抑制NMS与Soft-NMS

一、结果

先把结果跑通,了解步骤以及训练流程。

1 预训练权重预测

给这位博主一个star吧,他值得,b站和csdn博客同名。
https://github.com/bubbliiiing/yolov4-tiny-pytorch

  • 下载预训练权重(yolov4_tiny_weights_voc.pth和yolov4_tiny_weights_coco.pth)。
  • 下载权重放置于model data文件夹下。
  • 检查yolo.py中的model_path和classes_path路径是否正确,以及是否一一对应。
    - 例如,如果使用coco预训练权重,相应代码应是如下所示:
    -“model_path” : ‘model_data/yolov4_tiny_weights_coco.pth’
    - “classes_path” : 'model_data/coco_classes.txt’
  • 在img文件夹放置sample.jpg图片。
  • 运行predict.py,输入img/sample.jpg,会显示预测结果。

在这里插入图片描述

2 自己训练VOC数据集得到权重

需要知道:训练集和验证集的比例、各种txt的含义。
这里测试是用一张照片进行测试的,使用测试集进行批量测试会在MAP的绘制中介绍。

训练流程

  • 下载训练集:VOC2007+2012训练集
    链接: https://pan.baidu.com/s/16pemiBGd-P9q2j7dZKGDFA 提取码: eiw9
  • VOC数据集格式
    - Annotions(存放xml标签文件)
    - ImageSets/Main(存放train.txt和trainval.txt)
    - JPEGImages(存放数据集的照片)
  • 把下载好的VOC2007文件夹放入项目的VOCdevkit文件夹
  • 运行VOC2007文件夹下的voc2yolo4.py,可以在ImageSets/Main得到4个txt文件
    - 注意:voc2yolo4.py中设置trainval_percent=1train_percent=1
    - trainval_pecent=1表示该数据集所有照片用于训练和验证,至于划分训练和验证集的比例在train.py中会进行划分。train_percent不需要设置。
    - 其中test.txt和val.txt是空的,训练不会用到。
    - train.txt和trainval.txt中是数据集照片的id号。
  • 运行项目根目录下的voc_annotation.py会生成2007_train.txt
    - 运行之前,先检查代码中的classes列表,是不是对应voc的类别。
    - 其中存放的信息:【图片位置绝对路径、真实框的位置、类别】
  • 运行根目录下的train.py
    - 运行之前首先检查其中的classes_path是否是model_data/voc_classes.txt
    - 代码中的**model_path = “model_data/yolov4_tiny_weights_coco.pth”**我理解为在这个coco预训练权重的基础上进行训练的。
    - val_split = 0.1即为数据集的90%用于训练,10%用于验证。
  • 等待迭代100Epoch。
    - 一个Epoch是遍历一次训练集,每迭代一次以后,会进行一次验证集的验证。
    - 在log文件夹下会保存权值,好像是每个epoch保存2次,最后这个log文件夹里会有很多pth文件,取最后一个loss值最低的,代替之前的预训练权重进行预测。
    - 每个pth文件20多M的样子,可以更改代码,少保存一些,减轻内存负担。

在这里插入图片描述

使用训练好的权重预测

  • 检查yolo.py中的model_path和classes_path路径是否正确,以及是否一一对应。
    相应代码应是如下所示:
    -“model_path” : ‘log/Epoch100-Total_Loss7.1953-Val_Loss8.3221.pth’
    - “classes_path” : 'model_data/voc_classes.txt’
  • 在img文件夹放置sample.jpg图片。
  • 运行predict.py,输入img/sample.jpg,会显示预测结果。

在这里插入图片描述

二、原理

跑通以后,了解算法原理。
整体网络结构

全部38层网络可视化:可视化yolov4-tiny和yolov4网络结构图

1 backbone

主干网络:CSPdarknet53 Tiny(用于特征提取

具体的shape变化,请看代码注释。

  • 照片输入尺寸:416×416×3
  • 首先进行两次卷积【conv、bn、leakly relu】操作。
  • 然后进行三次残差块(残差块中,池化会压缩图片宽和高,concat会使通道数翻倍)的操作。
  • 再进行一次卷积【conv、bn、leakly relu】操作。
  • 最后输出两个shape【feat2:(13,13,512)feat1:(26,26,256)】,作为加强特征提取网络部分的输入。

CSPdarknet53 Tiny的2个特点
1、使用了CSPnet结构
在这里插入图片描述

  • CSPnet就是将原来的残差块的堆叠进行了一个拆分,拆成左右两部分: 主干部分继续进行原来的残差块的堆叠;
  • 另一部分则像一个残差边一样,经过少量处理直接连接到最后。 因此可以认为CSP中存在一个大的残差边。

2、进行通道的分割

  • 在CSPnet的主干部分,CSPdarknet53_tiny会对一次3x3卷积后的特征层进行通道的划分,分成两部分,取第二部分。
  • 利用主干特征提取网络,我们可以获得两个shape的有效特征层,即CSPdarknet53_tiny最后两个shape的有效特征层,传入加强特征提取网络当中进行FPN的构建。

BasicConv对应结构图中的DarknetConv2D_BN_Leakly操作,包括卷积、批标准化、leakly激活函数。
通道输入为in_ch,通道输出为out_ch。
在这里插入图片描述
残差块结构:
残差块结构
残差块代码,残差块中,池化会压缩图片宽和高,concat会使通道数翻倍

在这里插入图片描述
CSPdarknet53 tiny,可以验算一下shape是如何变化的。最后返回feat1和feat2的shape。
在这里插入图片描述

2 neck

连接部分:FPN特征金字塔(用于特征融合
FPN会将最后一个shape的有效特征层卷积后进行上采样,然后与上一个shape的有效特征层进行堆叠并卷积。
在这里插入图片描述

3 detection head

检测头:YOLO head(用于检测分类

1、在特征利用部分,YoloV4-Tiny提取多特征层进行目标检测,一共提取两个特征层,两个特征层的shape分别为(26,26,256)、(13,13,512)。
2、输出层的shape分别为(13,13,75),(26,26,75),最后一个维度为75是因为该图是基于voc数据集的,它的类为20种,YoloV4-Tiny只有针对每一个特征层存在3个先验框,所以最后维度为3x25。

  • 先验框:也叫anchor,后面介绍。
  • 25的由来:x,y,w,h+confidence+num_classes即4+1+20=25,【框的位置参数,框的置信度,类别和】

yolo head包括一个3×3卷积(conv,BN,leakly)进行特征整合一个普通1×1卷积(进行通道数的调整)
在这里插入图片描述
YoloBody包括FPN和yolo head两个部分。shape的变化写在如下注释中。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值