历时4天,沐浴着22楼的阳光,围着服务器取暖,终于把权重文件给训练出来了,期间遇到一些问题,下面我会列举,以免大家走太多弯路;然后服务器配置还不正确,对于一个小白来说,简直崩溃,又去网上找了大量教程,终于把cuda版本改成了9.0,GPU能用了,但是opencv还是不能用,一会再去调一下。
先放最后的测试结果,训练的是表的类型,一共有180张图片(训练集+测试集),有s,m,l,xl,xxl五种类型,这个是m的,由于部分原因,没有训练到最后(所以只生成了yolov3_10000.weight)
1.下载yolov3的工程
git clone https://github.com/pjreddie/darknet cd darknet cd darknet
2.修改配置文件
vi Makefile GPU = 1 #如果想用GPU进行训练 CUDNN = 1 OPENCV = 1 然后保存, make
#记住一定要make才能生效
如果服务器配置都是好的,那基本会成功,不成功的话就检查一下cuda,cudnn,opencv这些版本是否兼容吧。
3.darknet里面有一个scripts文件夹,在scripts里面建一个VOCdevkit文件夹,然后在VOCdevkit里面建一个VOC2007文件夹,
然后在VOC2007里面建三个文件夹,分别为Annotations,ImageSets,JPEGImages,然后在ImageSets里面建一个
Main文件夹(这些是为了和下面的脚本文件路径)
scripts --VOCdevkit --VOC2007 --Annotations --ImageSets --Main --JPEGImages
Annotations中放所有的xml文件;JPEGImages中放所有的图片;Main中放train.txt和val.txt。
4.生成train.txt和val.txt
#这个小脚本是用来打开图片文件所在文件夹,把前149个用于训练的图片的名称保存在train.txt,后31个用于验证的图片保存在val.txt,这是一个python文件,别忘记自己修改路径,不能完全照搬,先看一下代码,修改好之后运行就会生成两个txt
import os from os import listdir, getcwd from os.path import join if __name__
== '__main__':
source_folder='/home/lijintao/darknet/scripts/VOCdevkit/VOC2007/JPEGImages/'#地址是所有图片的保存地点
dest='/home/lijintao/darknet/train.txt' #保存train.txt的地址
dest2='/home/lijintao/darknet/val.txt' #保存val.txt的地址
file_list=os.listdir(source_folder) #赋值图片所在文件夹的文件列表 train_file=open(dest,'a')
#打开文件 val_file=open(dest2,'a') #打开文件 for file_obj in file_list: #访问文件列表中的每一个文件
file_path=os.path.join(source_folder,file_obj) #file_path保存每一个文件的完整路径
file_name,file_extend=os.path.splitext(file_obj) #file_name
保存文件的名字,file_extend保存文件扩展名 file_num=int(file_name) #把每一个文件命str转换为 数字 int型
每一文件名字都是由四位数字组成的 如 0201 代表 201 高位补零 if(file_num<150): #保留149个文件用于训练 #print
file_num train_file.write(file_name+'\n') #用于训练前149个的图片路径保存在train.txt里面,结尾加回车换行
else : val_file.write(file_name+'\n') #其余的文件保存在val.txt里面
train_file.close()#关闭文件 val_file.close()
5.修改voc_label.py
sets=[('2007', 'train'), ('2007', 'val')] classes = ["s", "m", "l", "xl",
"xxl"] os.system("cat 2007_train.txt 2007_val.txt > train.txt")
#倒数第二行改成这样,最后一行删掉
6.执行voc_label.py
在scripts下生成了2007_train.txt 和 2007_val.txt,分别存放了训练集和测试集图片的路径。
7.下载预训练模型
wget https://pjreddie.com/media/files/darknet53.conv.74
8.修改cfg/voc.data
classes= 5 #classes为训练样本集的类别总数 train =
/home/lijintao/darknet/scripts/2007_train.txt #train的路径为训练样本集所在的路径 valid =
/home/lijintao/darknet/scripts/2007_val.txt #valid的路径为验证样本集所在的路径 names =
data/voc.names #names的路径为data/voc.names文件所在的路径 backup = backup
9.修改data/voc.names
s m l xl xxl #这个根据自己需要修改
10.修改cfg/yolov3-voc.cfg
[net] # Testing # batch=1 # subdivisions=1 # Training batch=64
subdivisions=8 #---------------修改 ...... [convolutional] size=1 stride=1 pad=1
filters=30 #---------------修改 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=5 #---------------修改 num=9 jitter=.3 ignore_thresh = .5 truth_thresh =
1 random=0 #---------------修改 ...... [convolutional] size=1 stride=1 pad=1
filters=30 #---------------修改 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=5 #---------------修改 num=9 jitter=.3 ignore_thresh = .5 truth_thresh =
1 random=0 #---------------修改 ...... [convolutional] size=1 stride=1 pad=1
filters=30 #---------------修改 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=5 #---------------修改 num=9 jitter=.3 ignore_thresh = .5 truth_thresh =
1 random=0 #---------------修改
标记的地方需要修改,classes是你的分类数,filters=3*(classes+5),random=0即关闭多尺度训练
如果还不是很清楚,可以看一下这篇blog <https://blog.csdn.net/lilai619/article/details/79695109>
11.开始训练
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
-gpus 0,1,2,3
12.开始测试
./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg
backup/yolov3-voc_10000.weights data/1.jpg
这样就生成了一开始的图片了。
这中间可能会遇到一些问题,要耐心分析并去网上多搜答案,我也是小白,如果有什么错误,还望大佬们不吝指正,不说了,修理服务器去了。
热门工具 换一换