用YOLOv5 跑通 TT100k 数据集

首先去GitHub上下载好YOLOv5这个项目,内容如下:

其中,detect.py是用来检测的,也就是运行yolo实现目标检测,其中有许多的参数可以进行设置 其中较为重要的参数,我来简单说明一下:

--weight 这里指定的模型的参数选择,在github上下好的里面有多个模型参数,点开model下面,可以看到有很多yaml配置文件,里面就记录着不同参数量的yolo模型,其中用的最多的就是yolov5s.yaml,因为v5s是最轻量的,同样也是大家用得比较多的。(这里已经是我训练好的参数了,所以和大家自己直接下载后的源代码有些差别)

--source 这里就是要进行yolo处理的数据了,看后面的help可知,yolo支持的格式有jpg,png,文件夹,视频,还有自己本地电脑的摄像头(这里default=0就可以了)

之后,就是train.py文件,这个文件就是自己选择数据集,之后进行训练的py文件。

 也是说一些关键一点的参数:

--weight 这里是初始化模型参数,在这个参数基础上进行训练,也就是加载预训练参数(这里其实我有点迷糊,因为我训练完之后发现,yolo并不认得以前的图片了,只认得这些新训练的图片)。这里我的感觉是,仅仅是加速了模型的训练速度,因为前面提取特种用的卷积层们,他们的特征提取能力以及可以了,所以有利于在此基础上训练。之后就是我的一点猜想,会不会也会因此获得一组较好的初始化参数,从而容易找到那个最优解。

--cfg 就是配置文件,这里是去model下面的记录了网络结构的yaml文件中去选择,和你上面选择的那个参数配套就好。

--data 这里是选择那个记录了数据的yaml文件,里面有训练数据存放的位置,以及yolo格式的类别。

--hpy 就是超参数配置文件,我觉得不用调整,里面是原作者炼丹时候感觉最好的组合了吧。

--epochs 训练轮次,建议根据你自己的数据集来做调整,像我这个超大tt100k,我训了300轮还是没收敛,打算再加大剂量。

--batch_size 批量大小,根据自己gpu显存来。这里只是影响一下训练时间长短。

--imgsz 是指输入图片的大小,yolo在加载图片的那个transform里,调整大小

--patience 这个一般结合着epoch来用,意思是说,多少轮参数不变了,就停止训练。所以可以设置很大的epoch,再用patience来找啥时候算是收敛。

接下来介绍下,tt100k数据集,https://cg.cs.tsinghua.edu.cn/traffic-sign/

这个是清华那个官方的连接,里面可以自己选择版本(版本选择要清楚,因为要搞清楚有几类,label很重要)。或者点击那个“教程”,里面有直接可以用的Linux命令。

下载之后应该是这样的:

里面是清一色的jpg格式,而yolo格式是要jpg和txt格式来对应的,所以就要转化一下。(至于代码,我代码能力比较弱,所以我就自己csdn去copy了一个,稍微改下路径就能用了,我就不明摆出来了)

之后那个代码是转成了jpg+txt格式,需要分开的,也就是images和label要分开的(这里必须叫images和labels,因为yolo内部代码实现路径就是这样的,改了会报错的),成这样才是yolo格式

这个分类代码,找AI一写就出来了,很简单的。(下面是我用ai写的)

import os
import shutil

# 指定的目录
source_dir = './test'

# 目标文件夹
images_dir = './test/images'
labels_dir = './test/labels'

# 如果文件夹不存在,创建它们
if not os.path.exists(images_dir):
    os.makedirs(images_dir)

if not os.path.exists(labels_dir):
    os.makedirs(labels_dir)

# 遍历源目录下的文件
for filename in os.listdir(source_dir):
    file_path = os.path.join(source_dir, filename)

    # 如果是文件,进行分类移动
    if os.path.isfile(file_path):
        if filename.endswith('.jpg'):
            shutil.move(file_path, os.path.join(images_dir, filename))
        elif filename.endswith('.txt'):
            shutil.move(file_path, os.path.join(labels_dir, filename))

print("文件移动完成!")

之后还差最后一步,就是写一个data的yaml文件就行了。

之后路径都在train.py的参数部分相应填好,就可以开始运行了。

我是用3090跑了整整一晚上,我看是晚上6点开始,早上7点才跑完。

之后可以去runs/train里看想要的结果就可以了。

至此,这个tt100k的数据集训练就算是跑通了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值