参考:
数据集处理
配置修改
python实用代码
git clone https://github.com/pjreddie/darknet
打开Makefile文件,需要开启哪个接口,就将哪个接口后边的0改为1就ok:
GPU=1 # 开启GPU接口
CUDNN=1 # CUDNN是用于深度神经网络的GPU加速库
OPENCV=1 # OPENCV接口(这里需要大家源码安装opencv)
OPENMP=1 # CPU的多线程
DEBUG=0 # DEBUG接口,暂时没发现这个有什么用处,就不开了
%cd darknet/
!make
!git clone https://github.com/ultralytics/yolov5 # clone repo
!pip install -qr yolov5/requirements.txt # install dependencies (ignore errors)
%cd yolov5
Annotations:样本标签.xml格式
ImageSets中只需建立Main文件夹,其中的文本文档后续会用test.py文件生成
JPEGImages:存样本图片
import os
import random
trainval_percent = 0.8 #训练集与验证集 占全体数据的比例
train_percent = 0.75 # 训练集 占训练集与验证集总体 的比例,可自己进行调整
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets/Main'
total_xml = os.listdir(xmlfilepath)
num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv) #根据指定的样本数,进行随机采样
train = random.sample(trainval, tr)
ftrainval = open('ImageSets/Main/trainval.txt', 'w')
ftest = open('ImageSets/Main/test.txt', 'w')
ftrain = open('ImageSets/Main/train.txt', 'w')
fval = open('ImageSets/Main/val.txt', 'w')
for i in list:
name = total_xml[i][:-4] + '\n' #去掉.xml,.jpg
if i in trainval:
ftrainval.write(name)
if i in train:
ftrain.write(name)#训练集
else:
fval.write(name)#验证集
else:
ftest.write(name) #测试集
ftrainval.close()
ftrain.close()
fval.close()
ftest.close()
运行后可以看到ImageSets中生成了对应的test.txt,train.txt,trainval.txt,val.txt。各文本文档中存的是对应集合样本图片去掉.jpg剩下的名字,如0060,0058,0059
根据需要修改darknet/scripts/voc_label.py中如下图中的部分,并运行文件
voc.label.py可以根据xml文件生成训练所需的label文件以及训练所用的2007_train.txt、2007_test.txt、2007_trainval,这个labels文件是直接跟Annoataions与JPEGImages是同目录的文件夹
因为我跑yolov5的时候,会报错说找不到labels,于是我把labels中的所有文件移到了JPEGImages文件夹中,所用代码如下:
import shutil
import os
def remove_file(old_path, new_path):
print(old_path)
print(new_path)
filelist = os.listdir(old_path) #列出该目录下的所有文件,listdir返回的文件列表是不包含路径的。
print(filelist)
for file in filelist:
src = os.path.join(old_path, file)
dst = os.path.join(new_path, file)
print('src:', src)
print('dst:', dst)
shutil.move(src, dst)
if __name__ == '__main__':
remove_file(r"/content/gdrive/My Drive/yolov5/darknet/scripts/VOCdevkit/VOC2007/labels", r"/content/gdrive/My Drive/yolov5/darknet/scripts/VOCdevkit/VOC2007/JPEGImages")
选中yolov5/models文件下需要用的模型,比如我这里采用yolo5s模型进行修改
只需要修改nc的值
pip install --ignore-installed PyYAML
!python train.py