voc怎么转yolo,如何分割数据集为验证集,怎样检测CUDA可用性 并使用yolov8训练安全帽数据集且 构建基于yolov8深度学习 安全帽检测系统 数据格式转化
voc怎么转yolo如何分割数据集为验证集怎样检测CUDA可用性安全帽数据集5000张图片和对应的xml标签五千个yolo标签到手即可训练。另外附四个常用小脚本非常实用voc转yolo代码.py分割数据集为验证集.py检测cuda.py批量重命名.py。继续以下代码仅供参考5000张图片和对应的YOLO格式标签并且还附带了一些实用的小脚本我们可以直接进行模型训练、评估以及可视化。以下是详细的步骤当然可以。根据您的描述您提到的四个实用小脚本分别是VOC转YOLO代码分割数据集为验证集检测CUDA可用性批量重命名下面是每个脚本的详细实现。1. VOC转YOLO代码这个脚本用于将Pascal VOC格式的标注文件转换为YOLO格式。[titleConvert VOC Annotations to YOLO TXT Format]importosimportxml.etree.ElementTreeasETfrompathlibimportPath# Define pathsbase_pathPath(datasets/helmet)annotations_dirbase_path/Annotationsimages_dirbase_path/JPEGImagesoutput_labels_dirbase_path/labels# Create output directory if it doesnt existos.makedirs(output_labels_dir,exist_okTrue)# Class names and their corresponding IDsclass_names{helmet:0}defconvert_annotation(xml_file):treeET.parse(xml_file)roottree.getroot()image_widthint(root.find(size/width).text)image_heightint(root.find(size/height).text)label_lines[]forobjinroot.findall(object):class_nameobj.find(name).text bboxobj.find(bndbox)xminfloat(bbox.find(xmin).text)yminfloat(bbox.find(ymin).text)xmaxfloat(bbox.find(xmax).text)ymaxfloat(bbox.find(ymax).text)# Convert bounding box to YOLO format (center_x, center_y, width, height)center_x(xminxmax)/2.0/image_width center_y(yminymax)/2.0/image_height width(xmax-xmin)/image_width height(ymax-ymin)/image_height class_idclass_names[class_name]label_linef{class_id}{center_x}{center_y}{width}{height}\nlabel_lines.append(label_line)returnlabel_linesforannotation_fileinannotations_dir.glob(*.xml):image_nameannotation_file.stem.jpg# Assuming images are in JPEG formatlabel_fileoutput_labels_dir/(annotation_file.stem.txt)label_linesconvert_annotation(annotation_file)withopen(label_file,w)asf:f.writelines(label_lines)print(Conversion completed.)2. 分割数据集为验证集这个脚本用于将数据集划分为训练集和验证集。[titleSplit Dataset into Train and Validation Sets]importosimportrandomfromsklearn.model_selectionimporttrain_test_splitfrompathlibimportPath# Define pathsbase_pathPath(datasets/helmet)images_dirbase_path/JPEGImagesannotations_dirbase_path/labelstrain_images_dirbase_path/images/traintrain_labels_dirbase_path/labels/trainval_images_dirbase_path/images/valval_labels_dirbase_path/labels/val# Create directories if they dont existos.makedirs(train_images_dir,exist_okTrue)os.makedirs(train_labels_dir,exist_okTrue)os.makedirs(val_images_dir,exist_okTrue)os.makedirs(val_labels_dir,exist_okTrue)# List all image filesimage_fileslist(images_dir.glob(*.jpg))# Adjust extension if necessary# Shuffle the image filesrandom.shuffle(image_files)# Split ratiostrain_ratio0.8val_ratio0.2# Calculate split indicesnum_imageslen(image_files)train_splitint(num_images*train_ratio)# Split images and labelstrain_imagesimage_files[:train_split]val_imagesimage_files[train_split:]defcopy_files(source_images,dest_images_dir,dest_labels_dir):forimg_fileinsource_images:label_fileannotations_dir/(img_file.stem.txt)iflabel_file.exists():os.symlink(img_file,dest_images_dir/img_file.name)os.symlink(label_file,dest_labels_dir/label_file.name)copy_files(train_images,train_images_dir,train_labels_dir)copy_files(val_images,val_images_dir,val_labels_dir)print(Dataset splitting completed.)3. 检测CUDA可用性这个脚本用于检测CUDA是否可用。[titleCheck CUDA Availability]importtorchdefcheck_cuda_availability():cuda_availabletorch.cuda.is_available()ifcuda_available:print(fCUDA is available. Device count:{torch.cuda.device_count()})print(fCurrent device:{torch.cuda.current_device()})print(fDevice name:{torch.cuda.get_device_name(torch.cuda.current_device())})else:print(CUDA is not available.)if__name____main__:check_cuda_availability()4. 批量重命名这个脚本用于批量重命名文件夹中的所有图像文件。[titleBatch Rename Images]importosfrompathlibimportPathdefbatch_rename_images(directory,prefiximage):filessorted(os.listdir(directory))foridx,filenameinenumerate(files):iffilename.endswith((.png,.jpg,.jpeg)):new_filenamef{prefix}{idx}.jpgold_filedirectory/filename new_filedirectory/new_filename os.rename(old_file,new_file)print(fRenamed:{old_file}-{new_file})if__name____main__:directoryPath(datasets/helmet/JPEGImages)# Change this path to your images directorybatch_rename_images(directory)使用说明VOC转YOLO代码(convert_voc_to_yolo.py):确保datasets/helmet/Annotations和datasets/helmet/JPEGImages目录存在并且包含相应的XML标注文件和图像文件。运行此脚本后会在datasets/helmet/labels目录下生成对应的TXT标签文件。分割数据集为验证集(split_dataset.py):确保datasets/helmet/JPEGImages和datasets/helmet/labels目录存在并且包含相应的图像文件和TXT标签文件。运行此脚本后会在datasets/helmet/images/train,datasets/helmet/images/val,datasets/helmet/labels/train, 和datasets/helmet/labels/val目录下分别存储训练集和验证集的数据。检测CUDA可用性(check_cuda.py):运行此脚本以检查系统中CUDA是否可用以及相关信息。批量重命名(batch_rename.py):修改directory变量指向包含图像文件的目录。运行此脚本后目录中的所有图像文件将被重命名为image0.jpg,image1.jpg, …。这些脚本应该能满足您处理安全帽数据集的需求。如果有任何问题或需要进一步的帮助请告诉我环境准备安装必要的库。数据集组织确认数据集的结构和路径。模型定义与训练使用YOLOv8进行目标检测。评估与可视化评估模型性能。可视化结果。环境准备首先我们需要安装必要的库。您可以使用以下命令来设置环境pipinstallultralytics opencv-python-headless pandas scikit-learn数据集组织假设您的数据集已经按照YOLO格式组织好并且包含以下文件夹结构datasets/helmet/ ├── images/ │ ├── train/ │ │ ├── image0.jpg │ │ ├── image1.jpg │ │ └── ... │ └── val/ │ ├── image0.jpg │ ├── image1.jpg │ └── ... └── labels/ ├── train/ │ ├── image0.txt │ ├── image1.txt │ └── ... └── val/ ├── image0.txt ├── image1.txt └── ...并且每个图像都有一个对应的TXT标签文件。创建YAML配置文件确保您有一个正确的YAML配置文件helmet.yaml来描述数据集。以下是示例配置文件[titleYOLOv8 Configuration File for Helmet Detection]train:../datasets/helmet/images/trainval:../datasets/helmet/images/valnc:1names:[helmet]将上述内容保存为datasets/helmet/helmet.yaml。模型定义与训练我们将使用YOLOv8进行目标检测。以下是训练脚本train_detection.py:[titleTraining Script for Helmet Detection using YOLOv8]fromultralyticsimportYOLO# Load a modelmodelYOLO(yolov8n.pt)# load a pretrained model (recommended for training)# Train the modelresultsmodel.train(data../datasets/helmet/helmet.yaml,epochs50,imgsz640,batch16,project../runs/train,namehelmet_detection)# Evaluate the modelmetricsmodel.val()resultsmodel.export(formatonnx)# export the trained model to ONNX format评估与可视化使用YOLOv8自带的评估脚本来评估目标检测模型。[titleEvaluation Script for Helmet Detection using YOLOv8]fromultralyticsimportYOLO# Load the best modelbest_modelYOLO(../runs/train/helmet_detection/weights/best.pt)# Evaluate the model on the validation datasetmetricsbest_model.val(data../datasets/helmet/helmet.yaml,conf0.5,iou0.45)print(metrics)用户界面我们将使用 PyQt5 创建一个简单的 GUI 来加载和运行模型进行实时预测。以下是用户界面脚本ui.py:[titlePyQt5 Main Window for Helmet Detection]importsysimportcv2importnumpyasnpfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QWidget,QFileDialogfromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QTimerfromultralyticsimportYOLO# Load modeldetection_modelYOLO(../runs/train/helmet_detection/weights/best.pt)classMainWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(安全帽检测系统)self.setGeometry(100,100,800,600)self.initUI()definitUI(self):self.central_widgetQWidget()self.setCentralWidget(self.central_widget)self.layoutQVBoxLayout()self.image_labelQLabel(self)self.image_label.setAlignment(Qt.AlignCenter)self.layout.addWidget(self.image_label)self.load_image_buttonQPushButton(加载图像,self)self.load_image_button.clicked.connect(self.load_image)self.layout.addWidget(self.load_image_button)self.start_prediction_buttonQPushButton(开始预测,self)self.start_prediction_button.clicked.connect(self.start_prediction)self.layout.addWidget(self.start_prediction_button)self.stop_prediction_buttonQPushButton(停止预测,self)self.stop_prediction_button.clicked.connect(self.stop_prediction)self.layout.addWidget(self.stop_prediction_button)self.central_widget.setLayout(self.layout)self.image_pathNoneself.timerQTimer()self.timer.timeout.connect(self.update_frame)defload_image(self):optionsQFileDialog.Options()file_name,_QFileDialog.getOpenFileName(self,选择图像文件,,Images (*.png *.jpg *.jpeg);;All Files (*),optionsoptions)iffile_name:self.image_pathfile_name self.display_image(file_name)defdisplay_image(self,path):pixmapQPixmap(path)scaled_pixmappixmap.scaled(self.image_label.width(),self.image_label.height(),Qt.KeepAspectRatio)self.image_label.setPixmap(scaled_pixmap)defstart_prediction(self):ifself.image_pathisnotNoneandnotself.timer.isActive():self.timer.start(30)# Update frame every 30 msdefstop_prediction(self):ifself.timer.isActive():self.timer.stop()self.image_label.clear()defupdate_frame(self):original_imagecv2.imread(self.image_path)image_rgbcv2.cvtColor(original_image,cv2.COLOR_BGR2RGB)# Detectionresultsdetection_model.predict(image_rgb,size640,conf0.5,iou0.45)[0]forboxinresults.boxes.cpu().numpy():rbox.xyxy[0].astype(int)clsint(box.cls[0])confbox.conf[0]# Map class ID to nameclass_names[安全帽]class_nameclass_names[cls]# Draw bounding boxcv2.rectangle(image_rgb,(r[0],r[1]),(r[2],r[3]),(0,255,0),2)# Put textfontcv2.FONT_HERSHEY_SIMPLEX cv2.putText(image_rgb,f{class_name}({conf:.2f}),(r[0],r[1]-10),font,0.9,(0,255,0),2)h,w,chimage_rgb.shape bytes_per_linech*w qt_imageQImage(image_rgb.data,w,h,bytes_per_line,QImage.Format_RGB888)pixmapQPixmap.fromImage(qt_image)scaled_pixmappixmap.scaled(self.image_label.width(),self.image_label.height(),Qt.KeepAspectRatio)self.image_label.setPixmap(scaled_pixmap)if__name____main__:appQApplication(sys.argv)windowMainWindow()window.show()sys.exit(app.exec_())请确保将路径替换为您实际的路径。使用说明配置路径确保datasets/helmet目录结构正确并且包含images和labels子目录。确保runs/train/helmet_detection/weights/best.pt是训练好的 YOLOv8 模型权重路径。运行脚本在终端中运行train_detection.py脚本来训练目标检测模型。在终端中运行evaluate_detection.py来评估目标检测模型性能。在终端中运行ui.py来启动 GUI 应用程序。注意事项确保所有必要的工具箱已安装特别是ultralytics和PyQt5。根据需要调整参数如epochs和batch_size。示例假设您的数据文件夹结构如下datasets/ └── helmet/ ├── images/ │ ├── train/ │ │ ├── image0.jpg │ │ ├── image1.jpg │ │ └── ... │ └── val/ │ ├── image0.jpg │ ├── image1.jpg │ └── ... └── labels/ ├── train/ │ ├── image0.txt │ ├── image1.txt │ └── ... └── val/ ├── image0.txt ├── image1.txt └── ...并且每个图像都有一个对应的TXT标签文件。运行ui.py后您可以点击按钮来加载图像并进行安全帽检测。

相关新闻

TransUNet遥感河流分割 河流分割数据集 基于TransUNet的遥感图像 河流智能分割系统 gui界面

TransUNet遥感河流分割 河流分割数据集 基于TransUNet的遥感图像 河流智能分割系统 gui界面

TransUNet遥感河流分割项目 pytorch模型 文章目录TransUNet遥感河流分割项目 pytorch模型一、环境搭建1. 安装依赖项2. 确认PyTorch版本二、数据准备数据集结构数据预处理三、模型训练TransUNet模型定义四、构建GUI界面使用PyQt5创建GUI界面运行项目代码示例,仅供参…

2026/8/1 7:27:59 阅读更多 →
Verilog硬件描述语言:从并行思维到数字电路设计的核心原理与实践

Verilog硬件描述语言:从并行思维到数字电路设计的核心原理与实践

1. 从“Hello, World!”到数字电路:为什么Verilog是硬件工程师的母语 如果你刚接触数字电路设计,或者从软件编程转向硬件描述,听到“Verilog”这个词时,可能会觉得它和C、Python一样,只是另一种编程语言。我刚开始学的…

2026/8/2 10:11:35 阅读更多 →
钢球数据集 钢珠识别 2026电赛H题 钢球图像识别

钢球数据集 钢珠识别 2026电赛H题 钢球图像识别

钢珠小球检测模型 README![ 模型简介基于YOLOv8 / YOLOv26实现钢珠小球目标检测,使用OpenMV实拍采集数据集完成训练,支持多格式模型导出,包含.pt、.onnx、.tflite轻量化权重。针对微小钢珠小球目标做专项优化,识别精度高、推理速度…

2026/8/2 10:12:21 阅读更多 →

最新新闻

Reachy Mini机器人麦克风FPC线缆更换与音频故障修复指南

Reachy Mini机器人麦克风FPC线缆更换与音频故障修复指南

1. 项目概述:一次精细的“耳部”手术如果你正在使用Reachy Mini这款灵巧的开源机器人,并且发现它的“听觉”系统——也就是麦克风阵列——出现了问题,比如某个麦克风完全没声音、声音断断续续或者有明显的电流噪音,那么问题很可能…

2026/8/2 10:12:29 阅读更多 →
激光散射传感器原理与应用:从Grove灰尘传感器到智能环境监测

激光散射传感器原理与应用:从Grove灰尘传感器到智能环境监测

1. 项目缘起:为什么我们需要关注“看不见”的灰尘?在智能家居、环境监测甚至工业自动化领域,我们常常关注温度、湿度、光照这些直观的参数。但有一个指标,它无处不在,却又容易被忽视,那就是空气中的颗粒物浓…

2026/8/2 10:12:29 阅读更多 →
DBC文件解析:从CAN总线二进制数据到工程值的完整指南

DBC文件解析:从CAN总线二进制数据到工程值的完整指南

1. 从CAN总线到DBC文件:为什么我们需要一个“翻译官”? 如果你接触过汽车电子、工业控制或者机器人领域,那么“CAN总线”这个词对你来说一定不陌生。它就像现代复杂设备内部的神经系统,负责在各个独立的控制器(ECU&…

2026/8/2 10:12:28 阅读更多 →
SpringAI集成MCP-stdio协议:实现AI工具标准化调用

SpringAI集成MCP-stdio协议:实现AI工具标准化调用

在AI应用开发中,如何高效集成外部工具和服务一直是开发者面临的挑战。特别是在SpringAI生态中,虽然提供了丰富的AI能力,但与第三方工具的标准化对接方案仍不够完善。最近接触到的MCP(Model Context Protocol)协议及其s…

2026/8/2 10:12:28 阅读更多 →
ReSpeaker麦克风阵列:从硬件拆解到算法原理的远场语音交互实践

ReSpeaker麦克风阵列:从硬件拆解到算法原理的远场语音交互实践

1. 项目概述:从“听”到“听懂”的硬件基石 如果你正在捣鼓智能音箱、语音机器人,或者任何需要让机器“听懂人话”的项目,那你大概率绕不开一个核心硬件:麦克风阵列。今天要聊的ReSpeaker麦克风阵列,就是开源硬件领域里…

2026/8/2 10:12:28 阅读更多 →
5大痛点解决指南:BetterGI如何用AI视觉技术重构你的原神体验

5大痛点解决指南:BetterGI如何用AI视觉技术重构你的原神体验

5大痛点解决指南:BetterGI如何用AI视觉技术重构你的原神体验 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连音…

2026/8/2 10:11:28 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →