趁着服务器在训练数据集,过来写篇帖子记录一下训练过程。
不断更新中…
需要的工具
本地计算机安装:
远程服务器环境配置:
需要的文件
git clone https://github.com/pjreddie/darknet.git
cd darknet
GPU=1
CUDNN=1
OPENCV=0
OPENMP=0
DEBUG=0
更改nvcc位置,不然会报错
CC=gcc
CPP=g++
NVCC= /usr/local/CUDA/bin/nvcc ##原来是nvcc,改成你的nvcc文件所在位置
AR=ar
ARFLAGS=rcs
结束后保存makefile文件并退出
(如果用记事本编辑直接保存关闭)
vim makefile #进入文档
键盘按a 进行编辑,编辑完按键盘左上角esc退出便捷模式
:wq #在文件底部输入,意思是保存修改并退出
在darknet文件下下make一下
make
预处理pre_code代码,需要自取
链接:https://pan.baidu.com/s/1XjaWF5AAeKy_ciPFKPVXYw
提取码:mubn
数据集代码
链接:https://pan.baidu.com/s/1qnyAfp5TPsxgL0C2UTZRWQ
提取码:3cy7
全部解压缩
数据集压缩包里的jpg图片拷贝到JPEGImages目录下。将标注txt文件拷贝到Annotations目录下
打开pre_code文件夹
依次运行以下文件。
使用 rename.py 对图像文件和标注文件进行重命名,修改一下你的路径,很简单,看一下程序就行了。
运行main.py 进行转换,注意修改程序中的路径。稍微读一下程序,注意需要新建对应文件夹Annotations_否则会报错。
visdrone的标注方式与yolo标注不一样。这个步骤是将annotations中的txt将标注转换为VOC格式的xml.
运行 trainnamelist.py 形成了列表txt。对训练集和测试集图片进行随机划分,并把路径写入txt文件中。
如果后面发现需要修改.txt文件里图片的路径,则可以用以下代码。
不需要修改什么,直接用就可以。
# 替换txt 文件中的内容
def file_replace(filename, rep_part, new_part):
f = open(filename)
count = 0
content = []
for eachline in f:
count += eachline.count(rep_part)
eachline = eachline.replace(rep_part, new_part)
content.append(eachline)
choice = input('%s文件中共有%d处的%s,要全部替换成%s吗?(yes or no)' % (filename, count,
rep_part, new_part))
if choice in ['YES', 'Yes', 'yes']:
f.close()
f1 = open(filename, 'w')
f1.writelines(content)
f1.close()
print('全部替换成功!')
else:
f.close()
print('没有选择替换')
filename = input('请输入目标文件名:')
rep_part = input('请输入需要被替换的内容:')
new_part = input('请输入需要新的内容:')
file_replace(filename, rep_part, new_part)
运行label.py就会在目录下生成一个labels文件夹,三个txt文件。
至此,准备工作结束。
classes= 10 #共10类
train = /home/user/darknet/VOC/train.txt #生成的训练数据集索引txt文件
valid = /home/user/darknet/VOC/val.txt
names = data/voc.names
backup = backup #训练过程中产生的weighs权重文件和backup断点保存在backup下
./cfg/yolov3-voc.cfg 修改
注释掉test参数 打开train参数
[net]
# Testing
#batch=1
#subdivisions=1
# Training
batch=64 #越大训练效果越好,前期可以设置32 有利于快速收敛,否则batch太大前期收敛较慢,训练5000轮后可以变为64
subdivisions=64 #根据自己GPU的显存来设置 一般为8的倍数:8.16.32,意思是一次扔训练的图片数量。
#如果subdivisions = 1 就是一个batch训练64张图片
#如果subdivisions = 32 就是一个batch训练2张图片
#......
有关学习率问题,建议一开始稍微大一些,之后根据训练参数再调小。
1000轮前学习率自动变化,之后可以手动调参。
0.01训练1000轮;
0.005训练1000轮;
改为0.001一直训练;
learning_rate=0.001
burn_in=1000
max_batches = 5020 #50200
policy=steps
steps=40000,45000
scales=.1,.1
convolutional]
size=1
stride=1
pad=1
filters=45 #调为45 计算公式=3*(class+5)
activation=linear
[yolo]
mask = 6,7,8
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=10 # 改为10类
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=1 #GPU不行的可以变为0,每轮随机图片训练
[convolutional]
size=1
stride=1
pad=1
filters=45 #调为45 计算公式=3*(class+5)
activation=linear
[yolo]
mask = 3,4,5
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=10 #改为10类
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=1
[convolutional]
size=1
stride=1
pad=1
filters=45 #调为45 计算公式=3*(class+5)
activation=linear
[yolo]
mask = 0,1,2
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=10 #改为10类
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=1
pedestrian
people
bicycle
car
van
truck
tricycle
awning-tricycle
bus
motor
基本改结束了。
查看一下所有修改的文件是不是unix格式,
vim train.txt
页面底部有文件格式 dos 或者 unix.
如果是dos格式的话,程序会报错,需要将dos格式的文件改为unix格式
很简单,两句话就可以。
sudo apt-get install dos2unix #首先安装一下dos2unix 命令
dos2unix [文件1] [文件2] [文件3]
下载预训练模型,因为这是纯卷积结构,可以作为预训练模型。
cd ./scripts
wget https://pjreddie.com/media/files/darknet53.conv.74
回到darknet文件夹开始训练
cd ./darknet
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
中途暂停 Ctrl + z
停止训练 Ctrl + c
修改完文件需要重新make 一下
make clean
make
修改何时输出weighs权重文件
./darknet/examples/decetor.c
第138行
if((i>=10000 && i%6000==0) || (i < 1000 && i%100 == 0)){
linux基本操作文件夹命令大全
https://www.linuxcool.com/
参考自:
https://blog.csdn.net/qq_21578849/article/details/84980298
https://blog.csdn.net/daisy_d_/article/details/105748051
https://blog.csdn.net/weixin_42747301/article/details/96636614
https://blog.csdn.net/lumingha/article/details/89038863#_373
https://blog.csdn.net/weixin_43091087/article/details/103850546
https://blog.csdn.net/lilai619/article/details/79695109
https://blog.csdn.net/StrongerL/article/details/81023603