第一部分:训练已有的voc datasets 搞清楚该算法的模型训练流程

Darknet是Joseph维护的开源的神经网络框架,使用C语言编写:https://pjreddie.com/darknet/yolo/

Darknet快速,易于安装,同时支持CPU和GPU计算:项目源码可以在github :https://github.com/pjreddie/darknet

1 初步使用darknet进行预测

1.1 安装框架

git clone https://github.com/pjreddie/darknet.git
cd darknet
make

1.2 测试

使用YOLO提供的模型利用darknet进行预测,在如下地址下载yolov3.weights的权重文件(模型)

wget https://pjreddie.com/media/files/yolov3.weights
#执行
./darknet detect cfg/yolov3.cfg yolov3.weights data/person.jpg

1.3 改变检测阈值

YOLO只会把置信度超过0.5的对象定位出来,你可以修改这一阈值。执行命令的时候指定-thresh参数即可:

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg -thresh 0.5

上面的设置是:即使置信度是0.5也将目标显示定位出来 。

1.4 配置GPU

程序跑通之后,需要了解一些基本的配置
打开makefile可以看到如下内容(在这之前,要安装anaconda并配置环境)

GPU=1
CUDNN=1
OPENCV=0
OPENMP=0
DEBUG=0
......

如果想要指定使用哪块显卡,你可以在命令行中附加参数-i用阿里指定你想使用的显卡序号,例如:

./darknet -i 1 imagenet test cfg/alexnet.cfg alexnet.weights

你也可以使用CUDA进行编译,使用CPU进行计算,使用-nogpu参数即可:

./darknet -nogpu imagenet test cfg/alexnet.cfg alexnet.weights

2 对YOLO训练VOC数据集

这里可以探索一下如何使用YOLO训练其他数据集

2.1 下载数据

wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
tar xf VOCtrainval_11-May-2012.tar
tar xf VOCtrainval_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar

上面的数据下载到一起后,解压会同时存在与VOCdevkit/目录

2.2 生成VOC数据集的标签

VOCdevkit的目录结构大致如下

drwxrwxrwx 2 root root 266240 Nov  6  2007 Annotations
drwxrwxrwx 5 root root   4096 Nov  6  2007 ImageSets
drwxrwxrwx 2 root root 274432 Nov  6  2007 JPEGImages
drwxrwxrwx 2 root root  20480 Nov  6  2007 SegmentationClass
drwxrwxrwx 2 root root  20480 Nov  6  2007 SegmentationObject
drwxr-xr-x 2 root root 274432 Jan  8 04:30 labels

xml文件作为标签是很繁琐和复杂,在VOCdevkit  同级目录下运行 python脚本,下面运行官方提供的脚本生成指定格式的label文件。

wget https://pjreddie.com/media/files/voc_label.py
python voc_label.py

根据每张图片对应的xml文件,会分别在VOCdevkit/VOC2007/labels/VOCdevkit/VOC2012/labels/位置生成对应于每张图片的.txt文件,作为图片的标签,例如

16 0.437 0.764 0.446 0.466666666667
# 符合如下形式
<object-class> <x> <y> <width> <height>

object-class代表类别,x\y\width\height代表图片的相对位置和高宽。
根目录下面则多了几个txt文件:

这些txt文件汇总了所需训练或者验证的图片的绝对路径,后面训练的时候需要用到
合并这些训练集:

cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt

2.3 修改训练的配置和下载预训练权重

打开cfg/voc.data文件修改训练集和测试集文件的路径

classes= 20
train  = /root/yolo/darknet/vocdata/train.txt
valid  = /root/yolo/darknet/vocdata/2007_test.txt
names = data/voc.names
backup = backup

然后下载预训练权重

wget https://pjreddie.com/media/files/darknet53.conv.74

2.4 训练VOC模型

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74   2>1 | tee visualization/train_yolov3.log ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpus 0,1,2,3# visualization 训练过程可视化./darknet detector train ./cfg/voc.data ./cfg/yolov3-voc.cfg darknet53.conv.74 2>1 | tee visualization/train_yolov3.log

2.4.1 训练过程 train_yolov3.log 可视化

python3 extract_log.py
python3 visualization_loss.py
python3 visualization_iou.py
#!/usr/bin/python
#coding=utf-8
#该文件用于提取训练log,去除不可解析的log后使log文件格式化,生成新的log文件供可视化工具绘图
import inspect
import os
import random
import sys
def extract_log(log_file, new_log_file, key_word):with open(log_file, 'r') as f:with open(new_log_file, 'w') as train_log:for line in f:#去除多GPU的同步log;去除除零错误的logif ('Syncing' in line) or ('nan' in line):continueif key_word in line:train_log.write(line)f.close()train_log.close()extract_log('./2048/train_log2.txt', './2048/log_loss2.txt', 'images')
extract_log('./2048/train_log2.txt', 'log_iou2.txt', 'IOU')
#!/usr/bin/python
#coding=utf-8import pandas as pd
import numpy as np
import matplotlib.pyplot as plt#根据自己的log_loss.txt中的行数修改lines, 修改训练时的迭代起始次数(start_ite)和结束次数(end_ite)。
lines = 4500
start_ite = 6000 #log_loss.txt里面的最小迭代次数
end_ite = 15000 #log_loss.txt里面的最大迭代次数
step = 10 #跳行数,决定画图的稠密程度
igore = 0 #当开始的loss较大时,你需要忽略前igore次迭代,注意这里是迭代次数y_ticks = [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4]#纵坐标的值,可以自己设置。
data_path =  '2048/log_loss2.txt' #log_loss的路径。
result_path = './2048/avg_loss' #保存结果的路径。####-----------------只需要改上面的,下面的可以不改动
names = ['loss', 'avg', 'rate', 'seconds', 'images']
result = pd.read_csv(data_path, skiprows=[x for x in range(lines) if (x<lines*1.0/((end_ite - start_ite)*1.0)*igore or x%step!=9)], error_bad_lines=\
False, names=names)
result.head()
for name in names:result[name] = result[name].str.split(' ').str.get(1)result.head()
result.tail()for name in names:result[name] = pd.to_numeric(result[name])
result.dtypes
print(result['avg'].values)fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)###-----------设置横坐标的值。
x_num = len(result['avg'].values)
tmp = (end_ite-start_ite - igore)/(x_num*1.0)
x = []
for i in range(x_num):x.append(i*tmp + start_ite + igore)
#print(x)
print('total = %d\n' %x_num)
print('start = %d, end = %d\n' %(x[0], x[-1]))
###----------ax.plot(x, result['avg'].values, label='avg_loss')
#ax.plot(result['loss'].values, label='loss')
plt.yticks(y_ticks)#如果不想自己设置纵坐标,可以注释掉。
plt.grid()
ax.legend(loc = 'best')
ax.set_title('The loss curves')
ax.set_xlabel('batches')
fig.savefig(result_path)
#fig.savefig('loss')

训练完成后权重保存在 backup 文件夹内,依据训练情况可手动停止训练
-gpu 0可指定 GPU 训练, -gpus 0,1,2,3 可指定多 GPU训练

2.4.2 训练参数详解

Avg IOU:当前迭代中,预测的box与标注的box的平均交并比,越大越好,期望数值为1;
Class: 标注物体的分类准确率,越大越好,期望数值为1;
obj: 越大越好,期望数值为1;
No obj: 越小越好;
.5R: 以IOU=0.5为阈值时候的recall; recall = 检出的正样本/实际的正样本
0.75R: 以IOU=0.75为阈值时候的recall;
count:正样本数目。 1: 1452.927612, 1452.927612 avg, 0.000000 rate, 1.877576 seconds, 32 images
第几批次,总损失,平均损失,当前学习率,当前批次训练时间,目前为止参与训练的图片总数
1: 指示当前训练的迭代次数
1452.927612: 是总体的Loss(损失)

结果:

50200: -nan, nan avg, 0.000010 rate, 0.083617 seconds, 50200 images
Saving weights to backup/yolov3-voc.backup
Saving weights to backup/yolov3-voc_final.weights

3. 测试

./darknet detector test ./cfg/voc.data ./cfg/yolov3-voc.cfg ./backup/yolov3-voc_30000.weights ./data/test.jpg./darknet detector demo ../cfg/voc.data ./cfg/yolov3-voc.cfg ./backup/yolov3-voc_30000.weights ./data/test.mp4

第二部分:根据所需要数据训练更有针对性的模型

yolov3(一:模型训练)相关推荐

  1. alexeyab darknet 编译_【目标检测实战】Darknet—yolov3模型训练(VOC数据集)

    原文发表在:语雀文档 0.前言 本文为Darknet框架下,利用官方VOC数据集的yolov3模型训练,训练环境为:Ubuntu18.04下的GPU训练,cuda版本10.0:cudnn版本7.6.5 ...

  2. YOLOV3目标检测模型训练实例

    YOLOV3目标检测 从零开始学习使用keras-yolov3进行图片的目标检测,比较详细地记录了准备以及训练过程,提供一个信号灯的目标检测模型训练实例,并提供相关代码与训练集. DEMO测试 YOL ...

  3. 基于UA-DETRAC车辆数据集在windows10系统下yolov3模型训练

    数据集:DETRAC UA-DETRAC数据集来自于北京和天津不同的24个区域道路的监控中的截图,且为车辆的俯拍角度,适用于城市的道路监控. 链接:https://pan.baidu.com/s/1H ...

  4. yolov3模型训练并部署到K210(零基础也可)

    1.yolov3模型训练 2.部署到K210 文章有点长,是因为很细节. 首先建一个新文件夹(要以英文命名)再在文件夹中建如下两个文件夹(images是用来放原照片的,xml是用来放标志后的照片的). ...

  5. YOLOV3 模型训练及模型部署(YOLO动态链接库的封装和调用)

    YOLOV3 模型训练及模型部署(YOLO动态链接库的封装和调用) 一. 配置环境 windows10 + VS2017 community cuda10.0.130_411.31 cunn-10.0 ...

  6. 【转发】实现yolo3模型训练自己的数据集总结

    原文链接:实现yolo3模型训练自己的数据集总结 经过两天的努力,借鉴网上众多博客,在自己电脑上实现了使用yolo3模型训练自己的数据集并进行测试图片.本文主要是我根据下面参考文章一步步实施过程的总结 ...

  7. 【模型训练】YOLOv7反光衣检测

    [YOLOv7&yolov5&yolov3]反光衣检测 1.YOLOv7反光衣检测模型训练 2.模型验证 3.模型和数据集下载网盘链接 1.本项目采用YOLOv7算法实现对反光衣的检测 ...

  8. 笔记 | 百度飞浆AI达人创造营:深度学习模型训练和关键参数调优详解

    笔记 | 百度飞浆AI达人创造营:深度学习模型训练和关键参数调优详解 针对特定场景任务从模型选择.模型训练.超参优化.效果展示这四个方面进行模型开发. 一.模型选择 从任务类型出发,选择最合适的模型. ...

  9. 深度学习模型训练和关键参数调优详解

    深度学习模型训练和关键参数调优详解 一.模型选择 1.回归任务 人脸关键点检测 2.分类任务 图像分类 3.场景任务 目标检测 人像分割 文字识别 二.模型训练 1.基于高层API训练模型 加载数据集 ...

最新文章

  1. Bicolor的使用
  2. 外界对程序员的误解究竟有多深?
  3. 如何给你的web项目加入log4net支持
  4. 没有PARAMETER ID,想 call TRANSACTION
  5. VTK:地标变换用法实战
  6. Zookeeper02_zk集群搭建
  7. docker运行随机分配端口
  8. Zookeeper--ZAB与Paxos算法联系与区别
  9. uninitialized_copy测试代码示例
  10. java闭包lambda,(lambda)函数闭包捕获了什么?
  11. 7-19 输出全排列 (20 分)
  12. 有没有好的公文写作范文素材,求助各位网友?
  13. 视频教程-屏幕录像专家录制超清视频教程-Windows
  14. windows防火墙
  15. Beginning Auto Layout Tutorial in iOS 7: Part 1
  16. selenium 模拟人工登录 高德开发者平台(python)
  17. c语言subscripted_C语言里的 [Warning] assignment from incompatible pointer type 是什么意思啊...
  18. 用pyqt5+matplotlib实现简易拟合曲线功能
  19. 2021年低压电工考试题库及低压电工免费试题题库
  20. Ubuntu 18.04 重置网络与配置网路(虚拟机网络丢失问题)

热门文章

  1. linux 内核调试信息在哪里,Linux kernel debug技巧----开启DEBUG选项
  2. java response.write_response设置编码方式 print和write方法的对比
  3. 如何删除linux的root权限,永久删除现代Linux的root权限
  4. flux java_FluxJava 新增 RxJava2 的支援功能
  5. 【点云StatisticalOutlierFilter】python-pcl:去除离群点
  6. 机器学习——模型测试与评估方法与指标
  7. Open3d学习计划—高级篇 8(网格变形)
  8. OpenGL如何处理多个纹理
  9. VS2019生成C++开发的exe文件可以在无VS的PC上运行的方法
  10. UnicodeDecodeError: 'utf8' codec can't decode byte 0xb1 in position 0: invalid start byte