yolo11笔记(2)——训练自己的数据模型

个人体验yolov5最大的感觉就是惬意舒适。
比起object_detection
一个训练花费我10小时,一个只有1.1个小时(都是迁移训练)
一个检测速度等待了十几秒,一个只需0.01秒(一张图)
一个使用找资料教程忙活了一个月把,一个只有GitHub的官方教程(tf1与tf2无法通用搞得人头大)
刚接触yolo时还是v3,现在转眼间已经是v11了。这个笔记系列当初是在v5的基础上写的,最近想着趁v11出来了更新一下。从官方给的性能图来看v10和v11大概是走到此类任务的天花板了,未来几年目标检测的任务可能不会再有很巨大的提升。

1. 安装yolov11

上一篇也讲过一遍,完成了可以跳过这一步。

pip install ultralytics
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple #网络不好的话

2. 运行yolov11

命令

安装好后,先理解一下命令的意思

yolo TASK MODE ARGS # 通用格式
# TASK 任务包含这些[detect, segment, classify, pose, obb]
# MODE 模式包含这些[train, val, predict, export, track, benchmark]
# ARGS 参数,比方说imgsz=320, conf=0.25, source=0, device=0.

现在来到任意文件下运行

yolo detect predict model=yolo11n.pt source=0 conf=0.25
# 使用预测模式进行目标检测任务,参数模型是yolo11n.pt,输入来源是本地0号摄像头,过滤掉置信度小于0.25的数据。
yolo predict model=path/to/best.pt source=path/to/xxx.jpg
# 使用预测模式进行模型匹配的任务,参数模型是本地的best.pt,输入来源是本地的xxx.jpg。
# 可以省略TASK参数,如果你的模型是标准yolo模型,yolo框架会自动匹配模型的任务。

如果你是Mac电脑和iPhone手机,都绑定一个Apple id,那么使用source=0来检测可以直接调用iPhone的摄像头来测试。

2. 标注数据

标注文件参考我之前的文章2020年tensorflow定制训练模型笔记(2)——制作标签中的第二步“2.labelimg”

注意

有一点不一样!
之前我们的数据保存的是xml格式,而yolo支持的是txt格式。
所以我们在保存的时候要点击下图红色选框,这样就能保存为txt格式。
还有要注意的是,图片和标注的命名不要出现中文!!!
图片的格式并无太大的要求,实测jpg、jpeg、png混标没有问题。
在这里插入图片描述
还有一个很关键的点,许多人训练出来的识别对象会出现固定的标签不符合的现象。这是因为在训练过程中,yolo网络是不认识你的标签名的,网络只按照特定的标签名顺序将他们理解为0、1、2、3······(通过下面会提到一份yaml文件)
在标注的文件夹里有个data文件夹
在这里插入图片描述
我之前搞了垃圾识别的项目,按图所示,从上往下分别会被理解为0~4
在这里插入图片描述
这要和下面要输入网络的data.yaml文件相对应。这样就可以确保识别出的标签会被对应上。
在这里插入图片描述

数据格式

基本上所有的yolo教程都会讲这个txt格式那我也就讲一讲
在这里插入图片描述
我用一个表格去列一下上面的数据

标签名中心点x的相对坐标中心点y的相对坐标宽度的相对坐标高度的相对坐标
20.74060.76140.18430.2562
10.32030.87910.15620.1375
```

相对坐标就是x值相对于整张照片的大小,官方有张图能很好的解释这个
在这里插入图片描述

3. 配置文件

配置文件路径

假设我现在要识别的是垃圾分类,文件夹取名为“train_lj”,按图片方式放置好文件。
照片放在images对应的文件夹下,标签放在labels对应的文件夹下。
train_lj文件夹里包含三个文件,一个“images”文件夹专门放置图片文件,一个“labels”文件夹专门放置标注的文件,一个data.yaml文件专门指引程序告知训练文件信息的文件。
在这里插入图片描述
images里的图片文件按8:1:1分配给train文件夹、test文件夹、val文件夹。
labels里的标注文件也同理,文件名一一对应。
在这里插入图片描述

配置数据的yaml文件

在train_lj文件夹里创建一个空的data.yaml

# Train/val/test sets as 
# 1) dir: path/to/imgs
# 2) file: path/to/imgs.txt or list: [path/to/imgs1, path/to/imgs2, ..]
path: /home/pzr/Desktop/train_lj  # 数据集的根目录
train: images/train  # 图片的训练集路径(相对path的路径)
val: images/val # 图片的验证集路径(相对path的路径)
test: images/test # 图片的测试集路径(相对path的路径,可选不填)

# 按前面标注的类来写
names:
  0: harmful
  1: recyclable
  2: kitchen
  3: other
  4: full

在这里插入图片描述

之前版本的一些可能的报错处理(没遇到的跳过)

使用4.0版本会要求增加一个pandas的库,这个大家直接用conda或者pip安装一下就好了。
但另外一个问题就比较难搞,它会检查pycocotools的2.0版本级及以上是否存在。
在这里插入图片描述
win10安装pycocotools是十分不友好的,下面的方法用于解决这个问题。linux系统的可以绕过下面的内容。

方法一:安装pycocotools

这一种方法我以前是成功的,但我在现在这个环境中失败了,大家可以尝试一下,也许能成功。
具体方法我在我的第一篇博客中有提过2020年tensorflow定制训练模型笔记(1)——object detection的安装在这里插入图片描述
大家按照那个博客中给的教程和网址尝试一下,因为我当时的确是靠那个网址的方法成功在win10上安装了pycocotools,现在不知道为什么不行。

方法二:注释掉报错语句

上一种办法行不通可以试试这个。
从上图中可以看出,问题出在train.py的第475行的检查环境配置的内容上,所以直接注释掉他。
在这里插入图片描述
实测可以成功训练。
在可以成功训练时还有可能报下面的错:
在这里插入图片描述
这是seaborn的版本不对,升级一下就好了。
在这里插入图片描述

wandb可视化(知道的可跳过)

除此之外,4.0版本还增加了一个wandb库用于更直观的训练可视化,大家可以在训练过程中安装并使用。
在这里插入图片描述
安装过wandb后,运行train.py会出现这么一行,我这里直接输入1.
在这里插入图片描述
随后会出现下面这几行,来到浏览器输入红框的网址。
在这里插入图片描述
这个网址上会有个API key,复制他粘贴到命令行即可,这个key在命令行中是不可见的。
在这里插入图片描述
我其实中途去wandb的官网注册了一个账户,直接与github的账户注册的,在运行命令行时也没有关掉账户,不知道有没有影响。
在这里插入图片描述
待训练程序跑起来,我们可以刷新wandb官网便可以看到可视化的结果。
在这里插入图片描述
训练完后的wandb可视化部分图片展示
在这里插入图片描述
在这里插入图片描述
我这次实验的是一个垃圾分类的模型,这是验证集的输出。
在这里插入图片描述
在这里插入图片描述

5.0版本的不同之处(知道的可跳过)

增加了P6模型,拥有四个输出层(P3,P4,P5,P6),具体理解可以去看这个博客Yolov3&Yolov4&Yolov5模型权重及网络结构图资源下载中的这张图
在这里插入图片描述

就是prediction这个位置的三个输出层下面再添加一层输出层,当然backbone也会有所变化。
P6模型包括一个额外的P6 / 64输出层,用于检测较大的物体,并且可以通过更高分辨率的训练获得最大的收益。
预训练模型中,所有P5的size为640,所有P6的size为1280。
程序的运行上,除了还是要屏蔽检查pycocotools的代码,还要下载thop的库。直接pip install thop就好。

4. 开始训练

运行

打开命令行运行

# 调用库里的yolo11n.yaml模型文件,训练train_lj里的数据,训练100轮,输入大小为640
yolo detect train data=./train_lj/data.yaml model=yolo11n.yaml epochs=100 imgsz=640 

# 调用与预训练的yolo11n.pt模型匹配的模型文件,训练train_lj里的数据,训练100轮,输入大小为640
yolo detect train data=./train_lj/data.yaml model=yolo11n.pt epochs=100 imgsz=640

# 调用你自己修改的模型文件与此匹配的预训练模型,训练train_lj里的数据,训练100轮,输入大小为640
yolo detect train data=./train_lj/data.yaml model=yourselfmodel.yaml pretrained=yourselfmodel.pt epochs=100 imgsz=640

device=mps #mac m系列指定Metal
device=0 #nvidia gpu指定cuda

可以从官方给的模型中挑选一个合适的速度精度模型来作迁移训练
在这里插入图片描述

运行时CPU和GPU情况

每个人的设备不一样,这一节没啥意思。
在这里插入图片描述
在这里插入图片描述

训练结果反馈

训练结果在新建的runs文件夹下。
在这里插入图片描述
在这里插入图片描述

5. 测试

训练好的模型在runs/detect/train/weights 文件夹下

yolo val model=./runs/detect/train/weights/best.pt data=./train_lj/data.yaml imgsz=640 batch=16 conf=0.25 iou=0.6 device=0

在这里插入图片描述

测试结果放在runs/detect/val/ 下
在这里插入图片描述
在这里插入图片描述
我这个做教程只跑了10轮,大概这个效果。

推理使用

用前面的predict格式,但调用的是刚刚训练好的模型。

yolo detect predict model=./runs/detect/train/weights/best.pt source=0 conf=0.25
yolo predict model=./runs/detect/train/weights/best.pt source=./train_lj/images/test/harmful_1.png conf=0.25

在这里插入图片描述

也可以用python,不得不说v8的api整理的比较方便,数据标注和模型自定义的方法同上直接套用。

from ultralytics import YOLO

# Load a model
model = YOLO("./runs/detect/train/weights/best.pt")  # pretrained YOLO11n model

# Run batched inference on a list of images
results = model(["./train_lj/images/test/harmful_1.png", "./train_lj/images/test/harmful_2.png"])  # return a list of Results objects

# Process results list
for result in results:
    boxes = result.boxes  # Boxes object for bounding box outputs
    masks = result.masks  # Masks object for segmentation masks outputs
    keypoints = result.keypoints  # Keypoints object for pose outputs
    probs = result.probs  # Probs object for classification outputs
    obb = result.obb  # Oriented boxes object for OBB outputs
    result.show()  # display to screen
    result.save(filename="result.jpg")  # save to disk

yolo11笔记(1)——安装pytorch与 Ultralytics(win/Mac/linux三平台)
yolo11笔记(2)——训练自己的数据模型
yolo11笔记(3)——移动端部署自己的模型(GPU_cuda系列)
yolov5笔记(4)——CPU部署以及NCNN

评论 62
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值