当前位置: 首页 > news >正文

标注工具labelimg使用简介

以yolov11为例,训练之前要先准备好数据集,以下是yolov11的训练代码,其中data.yaml 指向数据集的路径,以网上检测安全帽为例,下载连接:

工地安全帽识别检测数据集

https://gitcode.com/open-source-toolkit/10c53

train.py代码

from ultralytics import YOLOif __name__ == '__main__':# Load a pretrained YOLOv8 modelmodel = YOLO('yolo11n.pt')# Train the model on a custom datasetmodel.train(data='data/data.yaml', epochs=400, imgsz=640, batch=64, workers=8)

data.yaml内容,里面有7个类别,可根据需要调整

train: ../train/images
val: ../valid/images
test: ../test/imagesnc: 7
names: ['Gloves', 'Helmet', 'Non-Helmet', 'Person', 'Shoes', 'Vest', 'bare-arms']

成品数据集的样子,test可选

而labelimg正是制作数据集的一种常见工具

安装:

pip install labelimg

建议使用python3.9版本,python3.10或更高python版本中labelimg可能会闪退

启动labelimg

在安装了labelimg的python环境中直接输入:labelimg    按回车即可打开

现在从上面下载的数据集中取10张图片进行标注练习,为了简便

再点击左侧的Open Dir,它会提示以下窗口,点Yes,然后再去选择图片文件夹

Change Save Dir是选择保存目录,也可以指定到Test下面,到时候再划分

这个下载的数据集有7个类别:names: ['Gloves', 'Helmet', 'Non-Helmet', 'Person', 'Shoes', 'Vest', 'bare-arms']

  • Gloves:手套
  • Helmet:头盔
  • Non-Helmet:未戴头盔
  • Person:人员
  • Shoes:鞋子
  • Vest:背心
  • bare-arms:裸露手臂

我们可以根据需要来标注,以只检测安全帽为例,取2个类别'Helmet', 'Non-Helmet'

按字母W可切换到画框模式,例如框中图片中的人头,它会跳出类别窗口,输入Non-Helmet

下次就直接可以选择这个类别了

一张图片完成标注后,点Next Image会转到下一张,快捷键是d (文章底部有快捷键大全)

检测完最后一张就可以关闭labelimg了,然后打开Test文件夹

里面有对应生成了txt标签信息

打开其中一个txt

制作好数据集之后,还要进行划分,可以借助ai实现,以阿里通义为例

Test下添加01文件夹,把图片和txt移动到01文件夹里面

用vscode打开Test文件夹

用vscode中的通义灵码,进行划分,如下图告诉ai要实现的功能,它会生成一个python文件,运行后,就会多出3个文件夹了

新建一个Dataset文件夹,把这3个文件夹移动到Dataset内

再添加data.yaml文件

train: ./train/images
val: ./val/images
test: ./test/imagesnc: 2
names: ['Non-Helmet', 'Helmet']

最后的目录结构如下图,注意以上只用10张图片进行演示标注过程,实际上训练的图片最好100张或更多。val也就是valid文件夹,名字可以修改

然后,如果电脑上已经配置好yolov11环境,就可以开始训练了

from ultralytics import YOLOif __name__ == '__main__':# Load a pretrained YOLOv8 model (e.g., yolo11n.pt)model = YOLO('yolo11n.pt')# Train the model with early stoppingresults = model.train(data='Dataset/data.yaml',      # 数据配置文件epochs=100,                 # 最大训练轮数(早停会提前停止)patience=50,                # ⭐ 早停耐心值:连续50轮没提升就停imgsz=640,                  # 图像尺寸batch=16,                   # batch sizeworkers=8,                  # 数据加载线程数device=0,                   # 使用GPU(0表示第一块GPU)project='runs/train',       # 保存项目目录name='exp',                 # 实验名称exist_ok=False,             # 防止覆盖已有实验optimizer='AdamW',          # 可选优化器lr0=0.001,                  # 初始学习率amp=True,                   # 自动混合精度(加速训练))print("✅ Training completed. Best model saved automatically.")

经过大概20多分钟,训练完成 ,次数这里选择的是100,根据需要选择

训练完成后会生成best.pt,写一个检测图片的代码:

from ultralytics import YOLO
import cv2
import osdef detect_image(image_path, model_path='best.pt', save_dir='runs/detect', show_result=True):"""使用训练好的YOLO模型检测单张图片Args:image_path (str): 要检测的图片路径model_path (str): 训练好的模型路径save_dir (str): 检测结果保存目录show_result (bool): 是否显示检测结果窗口"""# 加载模型model = YOLO(model_path)# 创建保存目录os.makedirs(save_dir, exist_ok=True)# 进行检测results = model.predict(source=image_path,save=True,           # 保存检测结果save_dir=save_dir,   # 保存目录show=show_result,    # 是否显示图片窗口conf=0.5,            # 置信度阈值iou=0.5              # IOU阈值)print(f"✅ 检测完成,结果已保存到 {save_dir}")# 如果需要显示结果且有检测到对象,则显示if show_result and results[0].boxes is not None:# 获取检测结果图像plotted_image = results[0].plot()# 显示图像cv2.imshow('Detection Result', plotted_image)print("按任意键关闭显示窗口...")cv2.waitKey(0)cv2.destroyAllWindows()return resultsdef detect_images_in_directory(images_dir, model_path='yolo11n.pt', save_dir='runs/detect', show_result=False):"""使用训练好的YOLO模型检测目录中的所有图片Args:images_dir (str): 包含图片的目录路径model_path (str): 训练好的模型路径save_dir (str): 检测结果保存目录show_result (bool): 是否显示检测结果窗口(仅对最后一张图片有效)"""# 加载模型model = YOLO(model_path)# 创建保存目录os.makedirs(save_dir, exist_ok=True)# 进行检测results = model.predict(source=images_dir,save=True,save_dir=save_dir,show=show_result,conf=0.5,iou=0.5)print(f"✅ 检测完成,{len(results)} 张图片的结果已保存到 {save_dir}")# 显示最后一张图片的检测结果if show_result and len(results) > 0 and results[-1].boxes is not None:# 获取最后一张图片的检测结果plotted_image = results[-1].plot()# 显示图像cv2.imshow('Detection Result', plotted_image)print("按任意键关闭显示窗口...")cv2.waitKey(0)cv2.destroyAllWindows()return resultsif __name__ == '__main__':# 示例1: 检测单张图片并显示结果detect_image(r'G:\cpppro2\TestYolov11\Dataset\test\images\Video4_260_jpg.rf.05ceff198aeb0fe5870232779710005d.jpg')# 示例2: 检测目录中的所有图片,显示最后一张的检测结果# detect_images_in_directory('Dataset/test/images')print("请取消注释上面的示例代码并提供正确的图片路径来运行检测")

labelImg快捷键:

关于:imgsz 参数

http://www.xdnf.cn/news/1456093.html

相关文章:

  • 02-Media-4-mp4muxer.py 录制视频并保存为MP4文件的示例
  • 员工离职导致研发文档遗失的原因与防范方法
  • emmc擦写寿命-分区能拯救系统盘吗?
  • 日本移动应用市场营销分析:娱乐和金融应用增长强劲,游戏类广告支出最高!
  • Process Explorer 学习笔记(第三章3.1.2):管理权利与提权机制解析)
  • 高级RAG策略学习(二)——自适应检索系统原理讲解
  • 【第四章:大模型(LLM)】10.微调方法与实战-(3)P-tuning v2
  • 机器学习如何精准预测高值
  • JavaEE 进阶第二期:开启前端入门之旅(二)
  • 《A Study of Probabilistic Password Models》(IEEE SP 2014)——论文阅读
  • 随时随地写代码:Jupyter Notebook+cpolar让远程开发像在本地一样流畅
  • java面试中经常会问到的Redis问题有哪些(基础版)
  • Nano-banana 模型对接教程:最懂创作者的 AI 模型,比GPT-4o还强!
  • Redis(43)Redis哨兵(Sentinel)是什么?
  • 【OpenHarmony文件管理子系统】文件访问接口解析
  • 【笔记】Software Engineering at Google
  • Java Stream 流式操作举例
  • 深度学习篇---SENet
  • AI安全必修课:模型偏见检测与缓解实战
  • 使用 Sentry 为 PHP 和 Web 移动小程序提供多平台错误监控
  • 温湿度监控的科技之处是能够将样本的运行数据以数字化的方式展现在管理者面前吗?
  • UE5 UAT
  • iSCSI IP-SAN 部署实战
  • SMARTGRAPHQA —— 基于多模态大模型的PDF 转 Markdown方法和基于大模型格式校正方法
  • 滑动窗口题目:水果成篮
  • C 盘清理技巧分享:释放磁盘空间,提升系统性能
  • ArcGIS学习-15 实战-建设用地适宜性评价
  • 适应新环境:Trae编辑器下的IDEA快捷键定制
  • 解密大语言模型推理:Prompt Processing 的内存管理与计算优化
  • C++语言编程规范-常量