news 2026/9/24 17:53:39

YOLO27防震锤缺陷检测数据集 防震锤数据集 1000张 防震锤 带标注 voc yolo 2 类 目标检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO27防震锤缺陷检测数据集 防震锤数据集 1000张 防震锤 带标注 voc yolo 2 类 目标检测

防震锤缺陷检测数据集 1000张 防震锤 带标注 voc yolo分类名: (图片张数, 标注个数)

none_ defect ive:
(636,1 808)
defective: (831, 933)
总数:
(1000,2741)
总类(nc): 2类


使用YOLOv8进行训练的完整步骤。我们将确保所有步骤都是一键运行的,以便你可以轻松地进行模型训练和评估。

数据集介绍

数据集概述
  • 数据集名称:Anti-Vibration Hammer Defect Detection Dataset (AVHDDD)
  • 数据类型:图像
  • 目标任务:防震锤缺陷检测
  • 样本数量:1000张图像
  • 标注格式:VOC (XML) 和 YOLO (TXT)
  • 类别:2类
    • 无缺陷 (none_defective)
    • 缺陷 (defective)
数据集统计
  • 无缺陷 (none_defective):636张图像,1808个框
  • 缺陷 (defective):831张图像,933个框
  • 总计:1000张图像,2741个框
数据集目录结构
AVHDDD/ ├── images/ │ ├── train/ │ └── val/ ├── labels_voc/ │ ├── train/ │ └── val/ ├── labels_yolo/ │ ├── train/ │ └── val/ └── data.yaml

数据集配置文件

创建一个data.yaml文件,配置数据集的路径和类别信息:

path:./AVHDDD# 数据集路径train:images/train# 训练集图像路径val:images/val# 验证集图像路径nc:2# 类别数names:['none_defective','defective']# 类别名称

转换标注格式

假设标注文件是VOC格式的XML文件,我们需要将它们转换为YOLO格式的TXT文件。

转换脚本
importxml.etree.ElementTreeasETimportosdefconvert_voc_to_yolo(voc_file,yolo_file,class_names):tree=ET.parse(voc_file)root=tree.getroot()width=int(root.find('size/width').text)height=int(root.find('size/height').text)withopen(yolo_file,'w')asf:forobjinroot.findall('object'):class_name=obj.find('name').textifclass_namenotinclass_names:continueclass_id=class_names.index(class_name)bbox=obj.find('bndbox')x_min=float(bbox.find('xmin').text)y_min=float(bbox.find('ymin').text)x_max=float(bbox.find('xmax').text)y_max=float(bbox.find('ymax').text)x_center=(x_min+x_max)/2.0/width y_center=(y_min+y_max)/2.0/height w=(x_max-x_min)/width h=(y_max-y_min)/height f.write(f"{class_id}{x_center}{y_center}{w}{h}\n")defconvert_all_voc_to_yolo(voc_dir,yolo_dir,class_names):os.makedirs(yolo_dir,exist_ok=True)forfilenameinos.listdir(voc_dir):iffilename.endswith('.xml'):voc_file=os.path.join(voc_dir,filename)yolo_file=os.path.join(yolo_dir,filename.replace('.xml','.txt'))convert_voc_to_yolo(voc_file,yolo_file,class_names)if__name__=="__main__":class_names=['none_defective','defective']voc_train_dir='AVHDDD/labels_voc/train'yolo_train_dir='AVHDDD/labels_yolo/train'convert_all_voc_to_yolo(voc_train_dir,yolo_train_dir,class_names)voc_val_dir='AVHDDD/labels_voc/val'yolo_val_dir='AVHDDD/labels_yolo/val'convert_all_voc_to_yolo(voc_val_dir,yolo_val_dir,class_names)

YOLOv8训练代码

  1. 安装YOLOv8库和依赖项

    gitclone https://github.com/ultralytics/ultralytics.gitcdultralytics pipinstall-rrequirements.txt
  2. 训练模型

    fromultralyticsimportYOLOdeftrain_model(data_yaml_path,model_config,epochs,batch_size,img_size,augment):# 加载模型model=YOLO(model_config)# 训练模型results=model.train(data=data_yaml_path,epochs=epochs,batch=batch_size,imgsz=img_size,augment=augment)# 保存模型model.save("runs/train/avhddd/best.pt")if__name__=="__main__":data_yaml_path='AVHDDD/data.yaml'model_config='yolov8n.yaml'epochs=100batch_size=16img_size=640augment=Truetrain_model(data_yaml_path,model_config,epochs,batch_size,img_size,augment)

详细解释

  1. 安装YOLOv8和依赖项

    • 克隆YOLOv8仓库并安装所有必要的依赖项。
  2. 训练模型

    • 导入YOLOv8库。
    • 加载模型配置文件。
    • 调用model.train方法进行训练。
    • 保存训练后的最佳模型。

运行训练脚本

将上述脚本保存为一个Python文件(例如train_yolov8_avhddd.py),然后运行它。

python train_yolov8_avhddd.py

评估模型

  1. 评估模型
    fromultralyticsimportYOLOdefevaluate_model(data_yaml_path,weights_path,img_size,conf_threshold):# 加载模型model=YOLO(weights_path)# 评估模型results=model.val(data=data_yaml_path,imgsz=img_size,conf=conf_threshold)# 打印评估结果print(results)if__name__=="__main__":data_yaml_path='AVHDDD/data.yaml'weights_path='runs/train/avhddd/best.pt'img_size=640conf_threshold=0.4evaluate_model(data_yaml_path,weights_path,img_size,conf_threshold)

详细解释

  1. 评估模型
    • 导入YOLOv8库。
    • 加载训练好的模型权重。
    • 调用model.val方法进行评估。
    • 打印评估结果。

运行评估脚本

将上述脚本保存为一个Python文件(例如evaluate_yolov8_avhddd.py),然后运行它。

python evaluate_yolov8_avhddd.py

一键运行脚本

为了实现一键运行,可以将图像预处理、训练和评估脚本合并到一个主脚本中,并添加命令行参数来控制运行模式。

importargparseimportosimportxml.etree.ElementTreeasETfromultralyticsimportYOLOdefconvert_voc_to_yolo(voc_file,yolo_file,class_names):tree=ET.parse(voc_file)root=tree.getroot()width=int(root.find('size/width').text)height=int(root.find('size/height').text)withopen(yolo_file,'w')asf:forobjinroot.findall('object'):class_name=obj.find('name').textifclass_namenotinclass_names:continueclass_id=class_names.index(class_name)bbox=obj.find('bndbox')x_min=float(bbox.find('xmin').text)y_min=float(bbox.find('ymin').text)x_max=float(bbox.find('xmax').text)y_max=float(bbox.find('ymax').text)x_center=(x_min+x_max)/2.0/width y_center=(y_min+y_max)/2.0/height w=(x_max-x_min)/width h=(y_max-y_min)/height f.write(f"{class_id}{x_center}{y_center}{w}{h}\n")defconvert_all_voc_to_yolo(voc_dir,yolo_dir,class_names):os.makedirs(yolo_dir,exist_ok=True)forfilenameinos.listdir(voc_dir):iffilename.endswith('.xml'):voc_file=os.path.join(voc_dir,filename)yolo_file=os.path.join(yolo_dir,filename.replace('.xml','.txt'))convert_voc_to_yolo(voc_file,yolo_file,class_names)deftrain_model(data_yaml_path,model_config,epochs,batch_size,img_size,augment):# 加载模型model=YOLO(model_config)# 训练模型results=model.train(data=data_yaml_path,epochs=epochs,batch=batch_size,imgsz=img_size,augment=augment)# 保存模型model.save("runs/train/avhddd/best.pt")defevaluate_model(data_yaml_path,weights_path,img_size,conf_threshold):# 加载模型model=YOLO(weights_path)# 评估模型results=model.val(data=data_yaml_path,imgsz=img_size,conf=conf_threshold)# 打印评估结果print(results)defmain(mode):class_names=['none_defective','defective']data_yaml_path='AVHDDD/data.yaml'model_config='yolov8n.yaml'epochs=100batch_size=16img_size=640conf_threshold=0.4augment=Trueifmode=='convert':voc_train_dir='AVHDDD/labels_voc/train'yolo_train_dir='AVHDDD/labels_yolo/train'convert_all_voc_to_yolo(voc_train_dir,yolo_train_dir,class_names)voc_val_dir='AVHDDD/labels_voc/val'yolo_val_dir='AVHDDD/labels_yolo/val'convert_all_voc_to_yolo(voc_val_dir,yolo_val_dir,class_names)elifmode=='train':train_model(data_yaml_path,model_config,epochs,batch_size,img_size,augment)elifmode=='eval':weights_path='runs/train/avhddd/best.pt'evaluate_model(data_yaml_path,weights_path,img_size,conf_threshold)else:print("Invalid mode. Use 'convert', 'train', or 'eval'.")if__name__=="__main__":parser=argparse.ArgumentParser(description="Convert, train, or evaluate YOLOv8 on the Anti-Vibration Hammer Defect Detection Dataset.")parser.add_argument('mode',type=str,choices=['convert','train','eval'],help="Mode: 'convert', 'train', or 'eval'")args=parser.parse_args()main(args.mode)

详细解释

  1. 命令行参数

    • 使用argparse库添加命令行参数,控制脚本的运行模式(转换、训练或评估)。
  2. 主函数

    • 根据传入的模式参数,调用相应的转换、训练或评估函数。

运行主脚本

将上述脚本保存为一个Python文件(例如main_yolov8_avhddd.py),然后运行它。

转换标注格式
python main_yolov8_avhddd.py convert
训练模型
python main_yolov8_avhddd.py train
评估模型
python main_yolov8_avhddd.pyeval

总结

通过以上步骤,你可以准备好防震锤缺陷检测数据集,并使用YOLOv8进行训练和评估。希望这些信息对你有帮助!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 17:51:59

aipy python学习 学习留痕1

raisePACKAGE_NAME “aipyapp” 像C宏定义 sys.executable 当前python路径 sys.stdout open(os.devnull, “w”, encoding‘utf-8’) 标准输出 stdout 重定向到“黑洞” with as 获取资源,使用资源,自动释放资源 toml文件,比 JSON 更适合…

作者头像 李华
网站建设 2026/9/24 17:51:58

LangChain 1.2 概述

1、为什么需要LangChain? 1.1 从传统应用到智能体时代1.2 单一的大语言模型的局限性所以要构建真正实用的AI应用,必须将大语言模型与外部工具、数据源和记忆机制有机结合,从而催生了LangChain框架的设计理念。LangChain,是当前构建…

作者头像 李华
网站建设 2026/9/24 17:50:05

什么时候用 MCP,什么时候用Skill?

什么时候用 Skill适合“能力封装”和“行为指导”:固定流程/SOP:合同审查、代码评审清单、周报生成、竞品分析流程。领域知识:公司政策、品牌语气、行业术语、内部规范。输出格式:固定 JSON、Markdown 模板、PPT 大纲、报告结构。…

作者头像 李华
网站建设 2026/9/24 17:48:39

MySQL锁机制全解析:从行级到死锁优化

MySQL 锁是数据库为了解决‌并发事务冲突‌而设计的机制,核心目的是保证数据在多用户同时访问时的‌一致性‌和‌安全性‌。锁的类型主要取决于存储引擎,InnoDB 引擎支持的锁最为丰富和复杂 。‌‌‌锁有哪些主要分类MySQL 的锁可以从多个维度进行划分&a…

作者头像 李华
网站建设 2026/9/24 17:47:40

【Dify】基于LLM的多关卡人机互动游戏应用

以人机互动为核心的智能游戏已成为AI学习和体验的重要窗口。围绕大型语言模型的博弈模式,通过设计关卡、设置变量、智能节点驱动,实现从对话到攻防的全流程互动。 本文介绍互动游戏应用的核心模型、流程节点与典型场景。通过模拟玩家与大模型的对抗体验,梳理实际操作方法,…

作者头像 李华
网站建设 2026/9/24 17:47:22

AI设计的真实边界:普通人能拿它做什么

💡导读:如果你不是设计师,却总需要海报、封面、产品图、PPT 和各种素材,这篇文章会告诉你——AI 设计到底是什么、普通人能拿它做什么、以及它和设计师的真实关系。一、AI设计到底是什么2026年的平面设计,已经不再局限…

作者头像 李华