yolo v11 图像训练和识别
·
一、环境安装配置
Pycharm 是开发工具
Ultralytics 是yolo的代码,后续在此基础上进行图像训练和识别
具体参考
目标检测:YOLOv11(Ultralytics)环境配置,适合0基础纯小白,超详细_yolov11环境配置-CSDN博客
训练时要指定:有显卡的可以使用显卡,没有显卡的,使用CPU
二、数据准备
2.1可以从一些专门做数据的网站上面下载
在搜索框输入安全帽的英文(因为是英文网站,都需要翻译成英文后搜索)Safety helmet (找不到结果可以多尝试不同的关键词)
2.2也可以自己收集
自制数据,需要用工具Labelimg对图片进来标注
使用Labelimg建议使用python3.10以下的环境,这里创建一个python3.8的虚拟环境,不会创建的可以去看我这篇博客点击查看
conda create -n labelimg python=3.8
这里创建完之后进入labelimg环境
conda activate labelimg
进入labelimg环境之后通过pip下载labelimg(需要关闭加速软件)
pip install labelimg
安装完成之后就可以使用
开始-》开始菜单中找到 Anaconda Prompt 打开

输入
labelimg
或
labelimg images classes.txt
输出标注结果

三、运行
Pycharm 打开代码 Ultralytics

新建数据目录 配置 ultralytics/cfg/models/11/yolo11_dog.yaml

内容
path: D:\yolov\ultralytics-main\data\dog # 注意修改自己NEU-DET数据集的路径 train: train/images # train images val: val/images # val images test: test/images # test images # Classes names: 0: dog
新建指定YOLO模型对象
ultralytics/cfg/models/11/yolo11_dog.yaml
内容
# Ultralytics YOLO 🚀, AGPL-3.0 license # YOLO11 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect # Parameters nc: 1 # number of classes 分类数量 scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n' # [depth, width, max_channels] n: [0.50, 0.25, 1024] # summary: 319 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPs # YOLO11n backbone backbone: # [from, repeats, module, args] - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2 - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4 - [-1, 2, C3k2, [256, False, 0.25]] - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8 - [-1, 2, C3k2, [512, False, 0.25]] - [-1, 1, Conv, [512, 3, 2]] # 5-P4/16 - [-1, 2, C3k2, [512, True]] - [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32 - [-1, 2, C3k2, [1024, True]] - [-1, 1, SPPF, [1024, 5]] # 9 - [-1, 2, C2PSA, [1024]] # 10 # YOLO11n head head: - [-1, 1, nn.Upsample, [None, 2, "nearest"]] - [[-1, 6], 1, Concat, [1]] # cat backbone P4 - [-1, 2, C3k2, [512, False]] # 13 - [-1, 1, nn.Upsample, [None, 2, "nearest"]] - [[-1, 4], 1, Concat, [1]] # cat backbone P3 - [-1, 2, C3k2, [256, False]] # 16 (P3/8-small) - [-1, 1, Conv, [256, 3, 2]] - [[-1, 13], 1, Concat, [1]] # cat head P4 - [-1, 2, C3k2, [512, False]] # 19 (P4/16-medium) - [-1, 1, Conv, [512, 3, 2]] - [[-1, 10], 1, Concat, [1]] # cat head P5 - [-1, 2, C3k2, [1024, True]] # 22 (P5/32-large) - [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)
新建训练代码
ultralytics/train_dog.py
内容
import warnings warnings.filterwarnings('ignore') from ultralytics import YOLO if __name__ == '__main__': model = YOLO('ultralytics/cfg/models/11/yolo11_dog.yaml') # 指定YOLO模型对象,并加载指定配置文件中的模型配置 model.load('yolo11n.pt') #加载预训练的权重文件'yolov11s.pt',加速训练并提升模型性能 model.train(data='ultralytics/cfg/datasets/dog.yaml', # 指定训练数据集的配置文件路径,这个.yaml文件包含了数据集的路径和类别信息 cache=False, # 是否缓存数据集以加快后续训练速度,False表示不缓存 imgsz=300, # 指定训练时使用的图像尺寸,640表示将输入图像调整为640x640像素 epochs=200, # 设置训练的总轮数为200轮 batch=4, # 设置每个训练批次的大小为16,即每次更新模型时使用16张图片 close_mosaic=10, # 设置在训练结束前多少轮关闭 Mosaic 数据增强,10 表示在训练的最后 10 轮中关闭 Mosaic workers=2, # 设置用于数据加载的线程数为8,更多线程可以加快数据加载速度 patience=50, # 在训练时,如果经过50轮性能没有提升,则停止训练(早停机制) device='cpu', # 指定使用的设备,'0'表示使用第一块GPU进行训练 optimizer='SGD' # 设置优化器为SGD(随机梯度下降),用于模型参数更新 )
yolo11n.pt 模型是从别人的分享 https://blog.csdn.net/qq_67105081/article/details/143270109#comments_35074511 中5.1介绍中下载的夸克网盘分享
运行训练代码
识别图像
新建代码文件 yolov11_predict_dog.py
内容
import torch
import cv2
from ultralytics import YOLO
# 加载预训练的 YOLOv11n 模型
# model = YOLO('yolo11n.pt')
model = YOLO('D:\\yolov\\ultralytics-main\\runs\\detect\\train17\\weights\\best.pt')
# 路径为训练输出的路径,跟据自己的路径调整
source = 'D:\\yolov\\ultralytics-main\\data\\dog\\test\\images\\85e7a88e7ee09760612356ed441bfe69.jpeg' #更改为自己的图片路径
# 运行推理,并附加参数
results = model.predict(source, save=True)
image = cv2.imread(source)
for result in results:
xywh = result.boxes.xywh
xywhn = result.boxes.xywhn
print(xywh)
print(xywhn)
boxes = result.boxes.xyxy # 获取边界框坐标
confidences = result.boxes.conf # 获取置信度(可选)
class_ids = result.boxes.cls # 获取类别索引
# 遍历每个边界框
for box, confidence, class_id in zip(boxes, confidences, class_ids):
x1, y1, x2, y2 = map(int, box)
label = model.names[int(class_id)] # 获取分类名称
confidence = float(confidence) # 获取置信度(可选)
# 在图像上绘制边界框和分类名称
text = f'{label}: {confidence:.2f}' # 创建文本标签
print(text)
# 在图像上绘制边界框和分类名称
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2) # 绘制边界框
text = f'{label}: {confidence:.2f}' # 创建文本标签
cv2.putText(image, text, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) # 绘制文本标签
# 显示图像
cv2.imshow('Detection Results', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# result.show()
运行即可

更多推荐

所有评论(0)