浏览量: 203 次浏览

YOLOV3训练模型

2020年2月24日 0 作者 Nie Hen

YOLOv3 pytorch训练代码

代码地址 github链接
中文参考 链接
英文参考 链接

将代码地址 中的代码下载下来

数据预处理

  1. 找数据集或者爬虫找需要中相应类的图片
  2. 使用labelImg 进行对图片标注 分类(快捷键w 创建矩形 d 上一张图片 a下一张图片)
  3. 对图片和对应的xml文件分类。 分为 训练集 测试集 验证集 。
    A. 训练集用来训练模型 ;验证集 要调参 调整一些参数;测试集是拿来测试模型的,根据模型的反馈值和实际值来得出模型的效果)
    B. 中文参考博客中博主写了一个makeText代码,需要将所有的图片放到data/images,xml文件放到data/Annotations 文件夹中
    C. 代码中按照比例将原图片分为训练集和不训练,其中不训练的又分为验证集和测试集。按照比例(0.9 0.9)和随机实现,分别把文件名字写入到 data/ImageSets文件夹下 trainval.txt’没有参与训练的数据集
    test.txt测试集 train.txt 训练集 val.txt 验证集
    enter description here
  4. 将数据转换为Darknet格式
    A. 每个图像的 标签文件必须通过简单地更换可定位/images/.jpg与/labels/.txt在其路径名。保存在data/labels 文件夹中
    enter description here
    B. 每个图像一个文件。每个对象是一行。每行都是classs x_center y_center weidth height
    框坐标要严格按照标准化的xywh格式 (0到1)。类是从classes的索引。
    enter description here =600*100
    C. 中文参考博客中也已经有了相应的代码 其中需要把 classes中改为相应的xml中的标签
    enter description here =700*100

修改配置文件

  1. 在data文件夹下新建rbc.names 写入类别
    enter description here = 300*100
  2. 在data文件夹下新建 rbc.data 配置训练的数据
    添加下面这些内容
    > classes=1
    train=data/train.txt
    valid=data/test.txt
    names=data/rbc.names
    backup=backup/
    eval=coco

其中的classes改成相应的类数
3. 对cfg文件进行修改
cfg文件夹下有四类cfg文件
其中 yolov3.cfg 效果最好 yolov3-spp.cfg 次之 yolov3-tiny.cfg 效果一般
对需要使用的cfg文件打开
搜索[yolo] 把出来的结果(每个都要改)下面的classes改为相应的类数
并且把[yolo]上面挨着的[convolutional] 下面的filters改为 3×(classes+5)的值
(每个框预测3个 有5个值 xywh truth)
net 下面的batch 是一次送进去的图片数 数量大会导致显卡不够 数量小精度会不够好
4. train.py为特定任务更新超参数,例如LR,LR调度程序,优化程序,扩充设置,multi_scale设置等。可以不改

训练模型

把数据预处理 和 修改相应配置文件后就可以进行训练代码了
使用命令

python train.py –data-cfg data/rbc.data –cfg cfg/yolov3-tiny.cfg –epochs 10

enter description here =800*200
其中的epochs是迭代次数 训练好的模型会保存最好的那个 best.pt 在weights文件夹中
如果出现

shape ‘[128, 64, 3, 3]’ is invalid for input of size 59726

很有可能就是配置文件cfg文件没有改好

enter description here = 400*400

训练结果可视化

训练的结果保存在了 results.txt 文件中
project文件夹中utils代码中可以对results.txt文件进行解析并展示
在终端调用命令

python -c ‘from project.utils import *;plot_results() ‘

enter description here
就可以调用utils代码中的plot_results()函数 将结果保存在项目文件夹下

测试

预测的图片要放到 data/samples 输出结果会放到 Output文件夹中
测试命令

python detect.py –data-cfg data/rbc.data –cfg cfg/yolov3-tiny.cfg –weights weights/best.pt

enter description here
里面的很多参数可以进行修改
对视频进行检测识别

python detect.py –images ~/torch_code/yolov3-master/chendulingvideo2.mp4 –weights weights/best.pt

enter description here
但是不是会显示出来的识别 逐帧识别 把结果保存到Output文件夹中(之前代码中的yolov3.weights 放到那里也可以使用 )

如果需要使用GPU训练 配好cuda 显卡驱动会自动cpu转为gpu
代码中指定使用的显卡
train.py中
在 if torch.cuda.device_count() > 1: 下面这句代码添加个参数
model = torch.nn.parallel.DistributedDataParallel(model,device_ids=[0,1,2])
(指的是使用三块显卡)
在 if name ==’main‘:下面
加上 os.senviron[“CUDA_VISIBLE_DEVICES”]=’5,6,7’
(指的是使用显卡中的索引为 5 6 7 的显卡)
enter description here

ImageNet

知乎参考 https://zhuanlan.zhihu.com/p/42696535 
csdn一个博客提供了下载地址 https://blog.csdn.net/xunan003/article/details/82905396
ImageNet官网 http://www.image-net.org/profile
注册学校电子邮箱账户方法 http://ic.zzuli.edu.cn/2019/0423/c8913a196221/page.htm
学校邮箱登录地址 http://kys.zzuli.edu.cn/cas/login?service=http%3A%2F%2Fcampus.zzuli.edu.cn%2Fportal-pc%2Flogin%2FpcLogin

使用第二个代码

参考代码 github
是在一个模型的基础上再次训练 这样可以提高效果
enter description here
在config文件夹中 执行脚本文件 bash create_custom_model.sh 输入类数
会根据类数修改yolov3.config 本质上跟上面代码是一样的 同时创建出yolov3-custom.config
修改custom.data 添加一些信息 (例如)
enter description here
进入data文件夹 里面的custom 里面是训练放置的图片和label (txt格式) 修改classes.names 添加类名
需要创建train.txt valid.txt 训练集和验证集需要的图片路径
enter description here

输入命令进行训练 python train.py –epochs 50 –model_def config/yolov3-custom.cfg –data_config config/custom.data
enter description here
可以根据参数进行修改

目前还没解决的问题 每次迭代loss的保存 以及目前跑只使用一块显卡 这个不知道怎么改代码 需要再学习

效果比第一个要好的多。