yolov3(一:模型训练)
第一部分:训练已有的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
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数据集
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数据集的标签
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
./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(一:模型训练)相关推荐
- alexeyab darknet 编译_【目标检测实战】Darknet—yolov3模型训练(VOC数据集)
原文发表在:语雀文档 0.前言 本文为Darknet框架下,利用官方VOC数据集的yolov3模型训练,训练环境为:Ubuntu18.04下的GPU训练,cuda版本10.0:cudnn版本7.6.5 ...
- YOLOV3目标检测模型训练实例
YOLOV3目标检测 从零开始学习使用keras-yolov3进行图片的目标检测,比较详细地记录了准备以及训练过程,提供一个信号灯的目标检测模型训练实例,并提供相关代码与训练集. DEMO测试 YOL ...
- 基于UA-DETRAC车辆数据集在windows10系统下yolov3模型训练
数据集:DETRAC UA-DETRAC数据集来自于北京和天津不同的24个区域道路的监控中的截图,且为车辆的俯拍角度,适用于城市的道路监控. 链接:https://pan.baidu.com/s/1H ...
- yolov3模型训练并部署到K210(零基础也可)
1.yolov3模型训练 2.部署到K210 文章有点长,是因为很细节. 首先建一个新文件夹(要以英文命名)再在文件夹中建如下两个文件夹(images是用来放原照片的,xml是用来放标志后的照片的). ...
- YOLOV3 模型训练及模型部署(YOLO动态链接库的封装和调用)
YOLOV3 模型训练及模型部署(YOLO动态链接库的封装和调用) 一. 配置环境 windows10 + VS2017 community cuda10.0.130_411.31 cunn-10.0 ...
- 【转发】实现yolo3模型训练自己的数据集总结
原文链接:实现yolo3模型训练自己的数据集总结 经过两天的努力,借鉴网上众多博客,在自己电脑上实现了使用yolo3模型训练自己的数据集并进行测试图片.本文主要是我根据下面参考文章一步步实施过程的总结 ...
- 【模型训练】YOLOv7反光衣检测
[YOLOv7&yolov5&yolov3]反光衣检测 1.YOLOv7反光衣检测模型训练 2.模型验证 3.模型和数据集下载网盘链接 1.本项目采用YOLOv7算法实现对反光衣的检测 ...
- 笔记 | 百度飞浆AI达人创造营:深度学习模型训练和关键参数调优详解
笔记 | 百度飞浆AI达人创造营:深度学习模型训练和关键参数调优详解 针对特定场景任务从模型选择.模型训练.超参优化.效果展示这四个方面进行模型开发. 一.模型选择 从任务类型出发,选择最合适的模型. ...
- 深度学习模型训练和关键参数调优详解
深度学习模型训练和关键参数调优详解 一.模型选择 1.回归任务 人脸关键点检测 2.分类任务 图像分类 3.场景任务 目标检测 人像分割 文字识别 二.模型训练 1.基于高层API训练模型 加载数据集 ...
最新文章
- Bicolor的使用
- 外界对程序员的误解究竟有多深?
- 如何给你的web项目加入log4net支持
- 没有PARAMETER ID,想 call TRANSACTION
- VTK:地标变换用法实战
- Zookeeper02_zk集群搭建
- docker运行随机分配端口
- Zookeeper--ZAB与Paxos算法联系与区别
- uninitialized_copy测试代码示例
- java闭包lambda,(lambda)函数闭包捕获了什么?
- 7-19 输出全排列 (20 分)
- 有没有好的公文写作范文素材,求助各位网友?
- 视频教程-屏幕录像专家录制超清视频教程-Windows
- windows防火墙
- Beginning Auto Layout Tutorial in iOS 7: Part 1
- selenium 模拟人工登录 高德开发者平台(python)
- c语言subscripted_C语言里的 [Warning] assignment from incompatible pointer type 是什么意思啊...
- 用pyqt5+matplotlib实现简易拟合曲线功能
- 2021年低压电工考试题库及低压电工免费试题题库
- Ubuntu 18.04 重置网络与配置网路(虚拟机网络丢失问题)
热门文章
- linux 内核调试信息在哪里,Linux kernel debug技巧----开启DEBUG选项
- java response.write_response设置编码方式 print和write方法的对比
- 如何删除linux的root权限,永久删除现代Linux的root权限
- flux java_FluxJava 新增 RxJava2 的支援功能
- 【点云StatisticalOutlierFilter】python-pcl:去除离群点
- 机器学习——模型测试与评估方法与指标
- Open3d学习计划—高级篇 8(网格变形)
- OpenGL如何处理多个纹理
- VS2019生成C++开发的exe文件可以在无VS的PC上运行的方法
- UnicodeDecodeError: 'utf8' codec can't decode byte 0xb1 in position 0: invalid start byte