首页 > 其他分享 >OpenCV与AI深度学习 | 实战 | YOLO11自定义数据集训练实现缺陷检测 (标注+训练+预测 保姆级教程)

OpenCV与AI深度学习 | 实战 | YOLO11自定义数据集训练实现缺陷检测 (标注+训练+预测 保姆级教程)

时间:2024-10-30 17:50:00浏览次数:3  
标签:YOLO11 定义数据 训练 image train file images path val

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。

原文链接:实战 | YOLO11自定义数据集训练实现缺陷检测 (标注+训练+预测 保姆级教程)

导  读

    本文将手把手教你用YOLO11训练自己的数据集并实现缺陷检测。

安装环境

YOLO11的介绍和使用这里不再赘述,请参考下面两篇文章即可:

OpenCV与AI深度学习 | YOLOv11来了:将重新定义AI的可能性_opencv ai-CSDN博客

OpenCV与AI深度学习 | YOLO11介绍及五大任务推理演示(目标检测,图像分割,图像分类,姿态检测,带方向目标检测)_yolo11n-pose.pt-CSDN博客

【1】安装torch, torchvision对应版本,这里先下载好,直接安装

pip install torch-1.13.1+cu116-cp38-cp38-win_amd64.whlpip install torchvision-0.14.1+cu116-cp38-cp38-win_amd64.whl

安装好后可以查看是否安装成功,上面安装的gpu版本,查看指令与结果:

import torchprint(torch.__version__)print(torch.cuda

【2】安装ultralytics

pip install ultralytics

【3】下载YOLO11预训练模型:

https://github.com/ultralytics/ultralytics

    本文使用YOLO11s,大家可以自行选择不同模型测试。

【4】运行demo测试安装是否成功:

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11s.pt")

results = model('c1.jpg',save=True)

results[0].show()

标注/制作数据集

【1】下载缺陷检测数据集

    本文使用DAGM 2007数据集其中的Dataset4类别的缺陷图:

    标注文件可以自己根据Label文件夹的标签图写脚本来生成,也可以使用labelImg自己标注。

【2】使用labelImg标注样本

    标注工具使用labelimg即可,直接pip安装:

pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

    安装完成后,命令行直接输入labelimg,回车即可打开labelimg,数据集类型切换成YOLO,然后依次完成标注即可。

【3】标注划分

    标注好之后,使用下面的脚本划分训练集、验证集,注意设置正确的图片和txt路径:

# -*- coding: utf-8 -*-
import os
import random
import shutil

# 设置文件路径和划分比例
root_path = "./dataset/"
image_dir = "./temp/images/"
label_dir = "./temp/labels/"
train_ratio = 0.7
val_ratio = 0.2
test_ratio = 0.1

# 创建训练集、验证集和测试集目录
os.makedirs(root_path+"images/train", exist_ok=True)
os.makedirs(root_path+"images/val", exist_ok=True)
os.makedirs(root_path+"images/test", exist_ok=True)
os.makedirs(root_path+"labels/train", exist_ok=True)
os.makedirs(root_path+"labels/val", exist_ok=True)
os.makedirs(root_path+"labels/test", exist_ok=True)

# 获取所有图像文件名
image_files = os.listdir(image_dir)
total_images = len(image_files)
random.shuffle(image_files)

# 计算划分数量
train_count = int(total_images * train_ratio)
val_count = int(total_images * val_ratio)
test_count = total_images - train_count - val_count

# 划分训练集
train_images = image_files[:train_count]
for image_file in train_images:
    label_file = image_file[:image_file.rfind(".")] + ".txt"
    shutil.copy(os.path.join(image_dir, image_file), root_path+"images/train/")
    shutil.copy(os.path.join(label_dir, label_file), root_path+"labels/train/")

# 划分验证集
val_images = image_files[train_count:train_count+val_count]
for image_file in val_images:
    label_file = image_file[:image_file.rfind(".")] + ".txt"
    shutil.copy(os.path.join(image_dir, image_file), root_path+"images/val/")
    shutil.copy(os.path.join(label_dir, label_file), root_path+"labels/val/")

# 划分测试集
test_images = image_files[train_count+val_count:]
for image_file in test_images:
    label_file = image_file[:image_file.rfind(".")] + ".txt"
    shutil.copy(os.path.join(image_dir, image_file), root_path+"images/test/")
    shutil.copy(os.path.join(label_dir, label_file), root_path+"labels/test/")

# 生成训练集图片路径txt文件
with open("train.txt", "w") as file:
    file.write("\n".join([root_path + "images/train/" + image_file for image_file in train_images]))

# 生成验证集图片路径txt文件
with open("val.txt", "w") as file:
    file.write("\n".join([root_path + "images/val/" + image_file for image_file in val_images]))

# 生成测试集图片路径txt文件
with open("test.txt", "w") as file:
    file.write("\n".join([root_path + "images/test/" + image_file for image_file in test_images]))

print("数据划分完成!")

    接着会生成划分好的数据集如下:

训练与预测

【1】开始训练

    训练脚本如下:

from ultralytics import YOLO

# Load a model
model = YOLO('yolo11s.pt')  

results = model.train(data='defects.yaml', epochs=100, imgsz=640, device=[0],
                      workers=0,lr0=0.001,batch=8,amp=False)

    defects.yaml内容如下,注意修改自己的数据集路径即可:

path: E:/Practice/Python/PyTorch/dataset/ # dataset root dir
train: E:/Practice/Python/PyTorch/dataset/images/train
val: E:/Practice/Python/PyTorch/dataset/images/val
test: # test images (optional)

# Classes
names:
  0: defects

    CPU训练将device=[0]改为device='cpu'即可

    训练完成后再runs/detect/train文件夹下生成如下内容:

    在weights文件夹下生成两个模型文件,直接使用best.pt即可。

【2】预测推理

    预测脚本如下:

from ultralytics import YOLO

# Load a model
#model = YOLO("yolo11s.pt")
model = YOLO("best.pt")

results = model('./test/0050.PNG',conf=0.5,save=True)

results[0].show()

    使用数据集Test文件夹中的异常和正常图片测试:

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

标签:YOLO11,定义数据,训练,image,train,file,images,path,val
From: https://blog.csdn.net/csdn_xmj/article/details/143242442

相关文章

  • 江大白 | 跨界融合创新,基于YOLO11和Ollama的增强OCR文本识别
    本文来源公众号“江大白”,仅用于学术分享,侵权删,干货满满。原文链接:跨界融合创新,基于YOLO11和Ollama的增强OCR文本识别导读本文介绍一种通过自定义YOLOv11和EasyOCR,结合Ollama优化OCR效果的方法,解决了传统OCR在复杂图像中的识别难题,显著提高了准确性,为高精度文本提取提供了有......
  • 代码随想录算法训练营第十三天
    1二叉树的理论基础文章链接:代码随想录视频链接:关于二叉树,你该了解这些!|二叉树理论基础一网打尽,二叉树的种类、二叉树的存储方式、二叉树节点定义、二叉树的遍历顺序_哔哩哔哩_bilibili1.1二叉树的种类满二叉树所有节点处的值都排满了,没有空的完全二叉树只有在最后一......
  • 代码随想录算法训练营第六天| leetcode242.有效的字母异位词、leetcode349.两个数组的
    1.leetcode242.有效的字母异位词题目链接:242.有效的字母异位词-力扣(LeetCode)文章链接:代码随想录视频链接:学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词哔哩哔哩bilibili自己的思路:首先就是对字符串进行分开成一个一个单独的字母,然后使用列表存储这些数据,再对......
  • 采用线性回归实现训练和预测(Python)
    已知测得某块地,当温度处于15至40度之间时,数得某块草地上小花朵的数量和温度值的数据如下表所示。现在要来找出这些数据中蕴含的规律,用来预测其它未测温度时的小花朵的数量。测得数据如下图所示:importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.linear_model......
  • 代码随想录算法训练营day30| 452. 用最少数量的箭引爆气球 435. 无重叠区间 763.
    学习资料:https://programmercarl.com/0452.用最少数量的箭引爆气球.html重叠区域问题最远位置问题452.用最少数量的箭引爆气球(重叠区域;按左边界排序;i区间的左边界与i-1区间的右边界比较来确定是否重叠;更新i的右边界,取i与i-1区域右边界的最小值)点击查看代码classSolution(ob......
  • YOLO11改进 | 卷积模块 | 无卷积步长用于低分辨率图像和小物体的新 CNN 模块SPD-Conv
    秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • 我用Replicate训练了个纹身Flux AI LORA模型,分享下经验
    #我用Replicate训练了个纹身AI模型,分享下经验##起因最近一直在研究AI辅助设计,正好我对纹身设计特别感兴趣。经过一段时间摸索,用Replicate平台训练了一个还不错的纹身设计模型。目前已经整合到了Hottattoo.AI平台上。其实一开始我也在纠结要不要自己训练模型,毕竟网上现成的模......
  • 3D Gaussian Splatting代码详解(一):模型训练、数据加载
    1模型训练deftraining(dataset,opt,pipe,testing_iterations,saving_iterations,checkpoint_iterations,checkpoint,debug_from):first_iter=0#初始化高斯模型,用于表示场景中的每个点的3D高斯分布gaussians=GaussianModel(dataset.sh_degree)......
  • 如何训练自己的数据集之,智慧化生产工地检测数据集
     智慧工地检测数据集,基础生产要素篇,采用voc标注(可提供yolo方式标注),无人机,监控摄像,手持拍照等方式,对工地中工人、材料、机器和环境等共计15类对象类别(分别为人,板,砖,切割机,挂钩,反光背心,木头,脚手架,电箱,护栏,安全帽,钢筋,手推车,漏斗,宣传横幅标语)进行标注。从多个建筑工地收集了超过20,......
  • 如何训练自己的数据集之,大量火灾烟雾识别数据集,识别
    大量火焰烟雾识别数据集,46000余张图像,22GB数据量,提供voc标注,yolo标注,涵盖高位摄像头,无人机拍摄,日常场景拍摄等多种场景,+yolo训练代码火焰数据集烟雾数据集森林火灾数据集大规模火焰与烟雾识别数据集规模:46,000余张图像,数据量约22GB类别:主要检测两类目标火焰烟雾标注格......