一、环境安装配置

Pycharm 是开发工具

Ultralytics 是yolo的代码,后续在此基础上进行图像训练和识别

具体参考

目标检测:YOLOv11(Ultralytics)环境配置,适合0基础纯小白,超详细_yolov11环境配置-CSDN博客

训练时要指定:有显卡的可以使用显卡,没有显卡的,使用CPU

二、数据准备

2.1可以从一些专门做数据的网站上面下载

比如:https://www.kaggle.com/

在搜索框输入安全帽的英文(因为是英文网站,都需要翻译成英文后搜索)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()

运行即可 

更多推荐