训练
1.了解yolov7数据集格式
datasets 自定义名称
GuaiWu-PC 标签名称(打算用游戏怪物来测试,暂不支持中文,稍后再处理。)
images/train 存放所有训练图片
images/val 存放所有验证图片
labels/train 存放images-train训练图片处理之后的txt数据
labels/val 存放images-val验证图片的txt数据
train_list.txt 存放images-train 目录下所有图像文件的路径
val_list.txt 存放images/val目录下所有图像文件的路径
2.截图工具
推荐个截图工具ShareX,开源免费的软件,支持自动定时截图,遮挡截图,录像等功能,原生支持中文。
3.准备图片
图片尺寸 这里选择图片尺寸640*640官方默认的尺寸,暂时没有搞明白图片尺寸和训练效果的关系,但实际训练中图像尺寸过大,在我的1070 8G显卡中会出现显存出错的现像。
图片数量 最好要二三百张以上,工作量太大,因为我的每张图片对像数量多,这里选择50张测试下有没有效果。
4.准备路径文件
在图片所在文件夹地址栏输入CMD回车,命令行敲入命令:DIR *.png /s/b>train_list.txt 即可生成,(这里是单一png文件,如果有其它类型文件,比如jpg,DIR /s/b>train_list.txt生成所有文件路径,删除最后一行此文件本身的路径.txt)把此文件剪切到标签目录下)。同样方法生成val_list.txt剪切到标签目录下。
5.数据标注工具labelImg
下载安装labelImg,进行我们的虚拟环境。执行安装命令,容易出现安装失败的原因是网络超时下载失败。翻之。。。
activate yolo
pip install labelimg
安装完成后输入 labelimg 启动。
常用的功能:
“Open” 打开单个图像
“Open Dir” 打开文件夹
“Change Save Dir” 保存的路径
“Next Image” 切换到下一张图像
“Prev Image”切换到上一张图像
“Verify Image”校验图像,
“Save” 保存图像
“yolo/PascalVOC” 切换格式
“Create RectBox”画标注框
“Duplicate RectBox”重复标注框
“Delete RectBox”删除标注框
“Zoom In” 放大图像
“Zoom Out” 缩小图像
“Fit Window”图像适用窗口
“Fit Width”图像适应宽度。
一般操作的顺序:“open file ”或”Open Dir” —-“create rectbox ” —-“输入类别名称 “—-“change save dir ”—-“Save”。
开始每张图像手动标注,存储位置选择labels下的同名文件夹。标注时尽可能的主体和边框四边相切。
标注完成后,会生成相同文件名的txt标注文件
6.配置相关文件
在配置之前我们先打开之前安装的PyCharm,改中文,file–settings–plugins–搜索框中输入Chinese–安装简体中文插件即可。
添加解释器:打开yolov7这个项目,提示要下载安装相关依赖模块时,取消。文件–设置–项目-yolov7-解释器。选择之前安装好环境python3.8路径即可。
1.模型配置文件:yolov7/cfg/training/yolov7.yaml
,把nc数量修改为你数据集总共的目标数量,因为我们只标记了一种怪物,所以改成1。
2.数据集的配置文件:yolov7/data/coco.yaml 把coco.yaml复制出来一份重命名,这里改为GuaiWu-PC.yaml,编辑此文件。
download: bash ./scripts/get_coco.sh 此行注释掉,以防代码自动下载数据集。
train的位置为train_list.txt的路径
val的位置为val_list.txt的路径
nc改为数据集目标总数
test这行注释掉,我们没有测试数据集
name修改为我们的标签名称,多个标签用”,”隔开。这里暂不支持中文,这个回头再修改。
正式训练
在yolov7文件夹的地址栏输入cmd,并且输入activate yolo 进入虚拟环境,输入训练指令
python train.py --weights weights/yolov7_training.pt --cfg cfg/training/yolov7.yaml --data data/GuaiWu-PC.yaml --device 0 --batch-size 8 --epoch 100
常用参数
--weights weights/yolov7_training.pt # 接收预训练模型路径的参数
--cfg cfg/training/yolov7.yaml # 接收模型配置文件的参数
--data data/GuaiWu-PC.yaml # 接收数据配置文件的参数
--device 0 # GPU/CPU训练,若1块,则0;2块则:0,1若CPU,则cpu;留空不指定的话,他会自动检测。
--batch-size 8 # 一次读图像数量,按照自己GPU内存大小大致确定,-1将时自动调节;一般为2的次方。
--epoch 300 # 训练次数,默认300
--view-img # 检测的结果实时的显示出来,一般不用,占用资源
--img 640 640 # 输入图片尺寸默640 640
--workers 8 #装载时cpu所使用的线程数,默认8,并不是越大越好,太大时gpu处理不过来,如果GPU未占满,适当调高。
出问题,爆显存,大意想要占用多少显存但是不够这样。
batch-size改为4
python train.py --weights weights/yolov7_training.pt --cfg cfg/training/yolov7.yaml --data data/GuaiWu-PC.yaml --device 0 --batch-size 4 --epoch 100
训练成功了。
会在yolov7\runs\train\exp(x)\生成结果
weights下训练好的模型,一般使用best.pt去进行推理。包括best.pt和last.pt,以及默认25epoch保存一次模型,以及保存最后5个epoch的模型
训练结果分析评估改进(太长了)
推理:
我们已经获得了自己训练出来的权重了,那么这个时候推理,其实跟之前检测的道理是一样的,唯一变换的就是我们的权重文件和自己检测的照片 .
把刚才生成的best.pt文件复制一份到weights文件夹
datasets文件夹下面建立一个test文件夹,截几张新图片放到test。
python detect.py --weights weights/best.pt --source datasets/test
准确率并不满意,可能只训练了100次以及训练图片太少的原因。
明天加大图像数量以及训练次数,再测试结果。
评论0