参考:http://t.csdnimg.cn/C1Ml2
参数
train代码
model = YOLO('ultralytics/cfg/models/v8/yolov8.yaml')
model.load('yolov8n.pt')
.yaml是指按照你自己设定重新训练模型,从零开始。
.pt文件是在预训练模型的基础上进行训练,yolov8n.pt预训练的是coco数据集中的80个类别,如果你的检测目标就在这80个中,那么你接下来的训练相当于提升了原来的检测能力;如果不在这80个中的话,其实还是相当于从头训练,时间也会更长一些。
device='CUDA'
这是选择运行的设施,如果有N卡,安装了cuda的pytorch,就可以选cuda,如果没有就选cpu,或者直接注释掉也不影响
data='dataset/NWPU-10.yaml'
指定数据集.yaml文件路径,通常用相对路径
epochs=11,
batch=1,
epoch是指训练的轮数,原则上讲轮数越多,模型的学习就越透彻充分,但也要避免过拟合的情况
batch是指每个批次的图像数量,在训练过程中,数据会分成多个批次进行处理。一般认为batch越大越好。因为我们的batch越大我们选择的这个batch中的图片更有可能代表整个数据集的分布,从而帮助模型学习。但batch越大占用的显卡显存空间越多,所以还是有上限的。如果设置为-1,则会自动调整批次大小,至你的显卡能容纳的最多图像数量。
patience = 50,
早停的等待轮数,我设置的这个就是:如果等待了50轮,发现模型的性能还是没有提升的话,就提前停止训练进程。这是避免过拟合的一个手段。
数据集文件
我通常把数据集yaml文件放在dataset目录内,即数据集文件的同目录下,这样可以使用相对路径直接指向数据集
path: NWPU-10 # dataset root dir
train: images/train # train images (relative to 'path') 128 images
val: images/val # val images (relative to 'path') 128 images
path指向数据集图片的文件夹
train指向训练集图像文件夹
val指向验证集图像文件夹
这里只填写了图像的路径,在实际运行的时候会自动在图像文件夹下寻找标签文件夹
还有另外一种yaml文件写法(根据下载的数据集格式选择用哪种写法)
train: /home/wzh/data/hat/trainval.txt
val: /home/wzh/data/hat/valid.txt
nc: 2
names: ['hat','person']
这里的txt文件里是每张图片的路径,注意是绝对路径!!!
resume='/home/data/yolov8-main/runs/train/exp4/weights/last.pt',
resume是指如果上一次训练异常中断了,可以给它中断前的训练结果,让它接着上一次继续训练。平时不用的时候注释掉就好了
cache=True,
决定数据加载时是否使用缓存,使用缓存可以加快数据读取速度
workers=8,
数据加载时的工作线程数。在数据加载过程中,可以使用多个线程并行地加载数据,以提高数据读取速度。这个参数确定了加载数据时使用的线程数,具体的最佳值取决于硬件和数据集的大小。
optimizer='SGD',
选择要使用的优化器
close_mosaic=10,
可以指定一个整数值,表示在训练的最后第几个轮次中禁用mosaic增强。
val = True
是否在训练过程中进行验证
clone一下Git上的改进代码
参考:http://t.csdnimg.cn/Khqxx
首先下载Git和TortoiseGit两个软件
(在TortoiseGit下载页面有语言包可以下载,我选择了Chinese simple,其实就是汉化包啦~语言包要点击安装一下,然后在安装软件页面有选择语言的下拉框,就可以看到了)
安装成功之后上github上clone代码的git地址
然后找到本地准备存放代码的文件夹右键选择git克隆
成功!!!!
代码改进
终于到了最关键的一步了
参考:http://t.csdnimg.cn/V7gjy
按步骤来吧~
1.首先找到要插入代码的文件,一般是在ultralytics/nn/modules/block.py里注册要使用的新模块,也有一些在conv.py中注册的模块,这个自己把握
2.在py文件中插入要改进的模块代码
3.在py文件的最头头有个这个👇
在这个all的括号里加上自己改进的模块名
4.检查ultralytics/nn/modules/init.py文件中的写法,如果是这样的👇
那就要依次把改进的模块名写进去~加在哪个py文件了就加在哪块,all也要加
如果是这样的👇
那就不用加了,*就是全部了
5.找到ultralytics/nn/tasks.py文件,在前边引用部分,这一条加上自己的改进模块,如果跟我一样是星号的话,就不用管了(插一句~深切的感受到了代码一定要兼容性高!不然一点改动就要通篇更新!)
然后就是在下面,我是大概759行的位置,找到这样的代码,同样是在里边添加模块名
6.因为添加了新的模块,训练使用的yaml文件也就不通用了,所以要根据自己的代码新建一个yaml文件,新建在ultralytics/cfg/models/v8路径下
然后在原yolov8的网络层进行替换或者添加
至此!!就结束了~
后边我自己实践一下,看看哪些改进策略搭配起来比较好~如果有进展再更新吧!