目录
创建目录结构
下载需要的文件
yolov4.conv.137 放到darknet-master\build\darknet\x64目录下
Anaconda3-2020.11-Windows-x86_64.exe 直接运行安装
一. 安装标注数据集工具LabelImg
开始菜单那打开 Anaconda Prompt (Anaconda3)
1. 创建虚拟环境
conda create -n env_LabelImg_20201206 python=3.8
2. 激活虚拟环境
activate env_LabelImg_20201206
3. 安装LabelImg
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install labelImg -i https://pypi.tuna.tsinghua.edu.cn/simple/
4. 启动LabelImg
LabelImg
二. 使用LabelImg标注图片
1. Open Dir打开目录,选中图片
2. Create RectBox框选目标
3. 切换保存格式YOLO
4. Change Save Dir切换保存结果到 darknet\x64\data\voc\VOCdevkit\VOC2007\labels ,结果是YOLO训练用到的 与图片关联的txt文件 和 类别文件classes.txt
三. 生成训练集文件 train.txt
创建python脚本 make_train_txt.py ,并保存在 darknet-master\build\darknet\x64\data\voc\VOCdevkit\VOC2007\make_train_txt.py
import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
myRoot = r'D:\soft\Ai\darknet-master\build\darknet\x64\data\voc\VOCdevkit\VOC2007'#这里是你项目对应的目录
imageRoot = myRoot + r'\JPEGImages'
def getFile_name(file_dir):
L=[]
for root, dirs, files in os.walk(file_dir):
print(files)
for file in files:
if os.path.splitext(file)[1] == '.jpg':
L.append(os.path.splitext(file)[0]) #L.append(os.path.join(root, file))
return L
image_ids_train = getFile_name(imageRoot)
list_file_train = open(myRoot +r'\ImageSets\Main\train.txt', 'w')
for image_id in image_ids_train:
list_file_train.write(imageRoot + '\\%s.jpg\n' % (image_id))
list_file_train.close()
运行make_train_txt.py 生成的训练文件在ImageSets\Main\目录下
四. 配置yolov4-obj.cfg
复制cfg/yolov4-custom.cfg 并重命名为cfg/yolov4-obj.cfg
做如下修改:
1 更改batch为batch=64
2 更改subdivisions为subdivisions=16
3 更改max_batches为classes数*2000,但是不要少于4000,例如这里有classes=2,那么max_batches=4000
4 更改steps为max_batches的80%,90%,这里steps=3200,3600,再设置神经网络尺寸width=416 height=416,或者其他32的倍数。
5 在cfg的3个[yolo]里面,将classes=80改为你的classes数目,这里为classes=5,三个都要改
6 在每个[yolo]前面有个[convolutional],注意有两个,在[yolo]顶上那个里面改,将里面的filters=255改为filters=(classes+5)*3 这里filters=(2+5)*3=21,注意每个都要改。
五. 配置yolov4-obj.data
classes= 2
train = data/voc/VOCdevkit/VOC2007/ImageSets/Main/train.txt
valid = data/voc/VOCdevkit/VOC2007/ImageSets/Main/test.txt
names = data/voc/VOCdevkit/VOC2007/labels/classes.txt
backup = backup/
保存到 data/yolov4-obj.data
六. 开始训练
.\darknet.exe detector train data/yolov4-obj.data cfg/yolov4-obj.cfg yolov4.conv.137 -map
七. 测试
.\yolo_console_dll.exe data/voc/VOCdevkit/VOC2007/labels/classes.txt cfg/yolov4-obj.cfg backup/yolov4-obj_last.weights 008766af0b28da4033824cdff3410716.mp4
训练结果会在backup目录下生成权重文件yolov4-obj_last.weights