使用YOLOv7训练自己的数据集


参考教程

前期工作

使用labelimg标注

  • 选择图片所在文件夹,并选择标注文件保存的文件夹。
  • 灵活使用快捷键,有些快捷键可以在菜单栏查看。
    W:生成框,按住鼠标左键拖动(或者右键点击生成矩形框),
    A/D:前/后一张图片,
    空格:高亮已经标注的图片,
    Ctrl+鼠标滚轮:放大缩小图片,
    Ctrl+F:把图片缩放到原来的大小,
    Ctrl+E:点击边界框之后按下Ctrl+E,编辑标签,
    Ctrl+S:保存,
    还可以在菜单栏改变边界框的颜色,
    左侧选项栏可以选择保存的标签文件模式,VOC模式就是xml,YOLO模式就是txt,还有json模式。
  • 在view里修改标注模式,选中auto save mode,这样标注完一张直接点下一张(或者按D)就自动保存。

参考

把文件放在对应位置

  • 把使用的图片放在yolov7-pytorch-master\VOCdevkit\VOC2007\JPEGImages文件夹下;
  • 把用labelimg标注产生的标签文件(格式为xml)的放在yolov7-pytorch-master\VOCdevkit\VOC2007\Annotations文件夹下;
  • 在yolov7-pytorch-master\model_data中增加一个txt文件,写入要预测的类别都是什么;
    在这里插入图片描述
  • 修改voc_annotation.py文件中的classes_path为上一条中txt文件的路径,根据数据集规模修改trainval_percent和train_percent,运行voc_annotation.py文件,生成下面的文件
    在这里插入图片描述
    在这里插入图片描述
    至此,准备工作完成。注意看里面的有些其他参数有可能也是需要改的,基本就改那些参数,每个参数都写了含义,根据情况选择修改。

训练

准备工作

装载云盘:

from google.colab import drive
drive.mount('/content/drive')

显示当前工作路径:

!pwd

修改路径:

%cd /content/drive/MyDrive/yolov7-pytorch-master

在这里插入图片描述

并更改运行时的类型使用GPU训练:
在这里插入图片描述

修改train.py文件中的几个参数,主要是:

  • model_path:对应你预测时使用的权重参数;
  • classes_path:对应你要预测类别存放的txt文件;
  • epoch和batch:根据训练集规模设置,一般要求step>50000,step=dataset_size/batch_size*epoch。
  • input_shape:输入图片的大小。
  • 大概就改这几个。

防止掉线

听说可以通过自动点击来减少掉线频率。
在Google colab的按F12,点击网页的控制台Console,粘贴如下代码回车即可:

function ConnectButton(){
	console.log("Connect pushed");
	document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click()
}
setInterval(ConnectButton,60000);

开始训练

运行train.py文件。

运行了3个多小时。
在这里插入图片描述

预测

修改yolo.py文件中的几个参数,主要是下面几个:

  • model_path:对应你预测时使用的权重参数,就是logs文件夹下我们自己训练好的权值文件;
  • classes_path:对应数据集所区分的类别对应的txt文件;
  • input_shape:输入图片的大小,与train.py中的一致;
  • letterbox_images:通过对图像添加灰条的方式保证图像的主体不发生失真;
  • nms_iou:nms(非极大值抑制)筛选一定区域内预测同一种类得分最大的框。
    nms设置得越小,筛选的越严格,最后的框数越少。
    运行predict.py文件
    输入图片路径,
    在这里插入图片描述

查看结果。

如果想预测一个文件夹下面的所有文件:
修改predict.py文件中的mode参数,默认遍历img文件夹,保存在img_out文件夹。

使用YOLOv7断点后继续训练

修改train.py中的两个参数:

  1. model_path:
    在这里插入图片描述

  2. init_epoch:
    在这里插入图片描述

使用colab调试

在第一行输入:

import pdb; pdb.set_trace() # debug mode

b / break 设定断点
c / continue 执行至断点
若无断点则直接全部执行
l / list 查看现在执行的程式码
s / step 进入函式
r / return 执行程式码直到从当前函式返回
q / exit 中止并退出 (跳出debug模式)
n /next 执行下一行
pp 列印变数的值
help 帮助

在(Pdb)后面输入这些命令去操作。

参考:【Colab】Debug的方法 - PDB

改变数据集之后需要修改的东西

1.把图片,标签和通过voc_annotation.py生成的ImageSets\Main都放在VOCdevkit\VOC2007文件夹下相应位置。
在这里插入图片描述
2.修改类别对应的文件,一般存放在model_data文件夹下,是个txt文件。
3.注意修改train.py中的冻结和解冻阶段的参数。
4.大致看一下train.py中的参数是否需要修改,其他就是参考前面训练时候的准备工作进行。

训练中的问题

问题:
训练几次都是开始不到3分钟就自动停止,几个报错都存在^C符号。

Epoch 1/450:  23% 6/26 [00:58<01:30,  4.51s/it, loss=10.3, lr=0.000125]^C

原因:
这种情况通常表示在训练过程中发生了一些错误或异常,导致程序被强制停止。在你提供的信息中,我看到了一个 “^C” 的符号,这通常表示程序被中断或强制终止。

可能的原因有很多,例如计算机资源不足,代码中存在错误或异常,数据集出现问题等等。下面是一些可能的解决方法:

  1. 检查代码是否存在错误或异常。可以查看程序的输出或日志文件,寻找异常或错误信息,或者使用调试工具来定位问题。

  2. 检查计算机资源是否充足。训练模型需要大量的计算资源,包括CPU、内存、显卡等。如果计算机资源不足,可能会导致程序运行缓慢或崩溃。可以尝试减少批处理大小、减小模型规模、使用更高效的算法等方式来减少计算资源的消耗。

  3. 检查数据集是否存在问题。数据集中可能存在缺失值、异常值、重复值等问题,这些问题可能会导致程序出现异常。可以对数据集进行预处理,例如填充缺失值、剔除异常值等。

  4. 尝试使用更稳定的训练方法。例如使用更小的学习率、更小的批处理大小、使用正则化等方式来提高模型的稳定性。

总之,这种情况可能是由于多种原因导致的,需要仔细检查程序和数据集,寻找问题所在,并尝试使用更稳定的训练方法来避免程序的崩溃。

解决:
train.py代码中的input_shape我设置的太大了,可能导致处理过程中计算资源不够,设置为[1120,1120],修改到[800,800]就好了。

猜你喜欢

转载自blog.csdn.net/ThreeS_tones/article/details/130044034