使用yolo11训练无人机视角罂粟检测数据集VOC+YOLO格式3648张1类别步骤和流程

发布时间:2026/9/29 2:45:42

使用yolo11训练无人机视角罂粟检测数据集VOC+YOLO格式3648张1类别步骤和流程
【数据集介绍】注意数据集中存在增强图片主要是旋转增强占据数据量大约一半注意查看图片数据集格式Pascal VOC格式YOLO格式(不包含分割路径的txt文件仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数)3648标注数量(xml文件个数)3648标注数量(txt文件个数)3648标注类别数1所在github仓库firc-dataset标注类别名称:[“yingsu”]每个类别标注的框数yingsu 框数 6066总框数6066每个类别占有图片数yingsu 占有图片数 3648图片分辨率多分辨率图片,如988x988,1280x1280等使用标注工具labelImg标注规则对类别进行画矩形框重要说明数据集没有划分训练验证测试集需自行划分特别声明本数据集不对训练的模型或者权重文件精度作任何保证图片预览标注例子【训练步骤】这里以yolo11训练为例。首先我们获取数据集压缩包7z格式或者zip格式后解压到一个非中文或者有空格路径下面。比如解压到C:\Users\Administrator\Downloads目录下面都是以这个目录演示训练流程。然后我们在数据集data文件夹下面新建一个脚本split.py写入下面代码importosimportshutilimportrandomclassVOCDataSplit(object):def__init__(self):pass defsplit(self,image_dir,label_dir,save_dir,trainval_radio0.9,train_radio0.9,copy_itTrue,need_test_datasetFalse,shuffle_fileTrue):train_images_diros.path.join(save_dir,train,images)train_labels_diros.path.join(save_dir,train,labels)val_images_diros.path.join(save_dir,val,images)val_labels_diros.path.join(save_dir,val,labels)test_images_diros.path.join(save_dir,test,images)test_labels_diros.path.join(save_dir,test,labels)os.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)ifneed_test_dataset:os.makedirs(test_images_dir,exist_okTrue)os.makedirs(test_labels_dir,exist_okTrue)files[]forfileinos.listdir(image_dir):iffile.endswith(.jpg):files.append(file)total_countlen(files)print(find {} images.format(total_count))ifshuffle_file:random.shuffle(files)ifneed_test_dataset:test_countint(total_count*(1-trainval_radio))train_countint((total_count-test_count)*train_radio)val_counttotal_count-test_count-train_countelse:train_countint(total_count*train_radio)val_counttotal_count-train_count test_count0print(train{},val{},test{}.format(train_count,val_count,test_count))train_filesfiles[:train_count]val_filesfiles[train_count:train_countval_count]test_filesfiles[train_countval_count:]print(start copy or move train files...)forfileintrain_files:ifcopy_it:shutil.copy(os.path.join(image_dir,file),os.path.join(train_images_dir,file))label_fileos.path.join(label_dir,file[:-3]txt)ifos.path.exists(label_file):shutil.copy(label_file,os.path.join(train_labels_dir,file[:-3]txt))else:shutil.move(os.path.join(image_dir,file),os.path.join(train_images_dir,file))label_fileos.path.join(label_dir,file[:-3]txt)ifos.path.exists(label_file):shutil.move(label_file,os.path.join(train_labels_dir,file[:-3]txt))print(start copy or move val files...)forfileinval_files:ifcopy_it:shutil.copy(os.path.join(image_dir,file),os.path.join(val_images_dir,file))label_fileos.path.join(label_dir,file[:-3]txt)ifos.path.exists(label_file):shutil.copy(label_file,os.path.join(val_labels_dir,file[:-3]txt))else:shutil.move(os.path.join(image_dir,file),os.path.join(val_images_dir,file))label_fileos.path.join(label_dir,file[:-3]txt)ifos.path.exists(label_file):shutil.move(label_file,os.path.join(val_labels_dir,file[:-3]txt))ifneed_test_dataset and test_count0:print(start copy or move test files...)forfileintest_files:ifcopy_it:shutil.copy(os.path.join(image_dir,file),os.path.join(test_images_dir,file))label_fileos.path.join(label_dir,file[:-3]txt)ifos.path.exists(label_file):shutil.copy(label_file,os.path.join(test_labels_dir,file[:-3]txt))else:shutil.move(os.path.join(image_dir,file),os.path.join(test_images_dir,file))label_fileos.path.join(label_dir,file[:-3]txt)ifos.path.exists(label_file):shutil.move(label_file,os.path.join(test_labels_dir,file[:-3]txt))class_fileos.path.join(label_dir,classes.txt)ifos.path.exists(class_file):class_names[]withopen(class_file,r)asf:class_namesf.read().rstrip(\n).split(\n)nclen(class_names)contenttrain: train_images_dir\ncontentval: val_images_dir\nifneed_test_dataset:contenttest: test_images_dir\ncontentnc: str(nc)\ncontentnames:\ncontent\n.join([f {i}: {name}fori,nameinenumerate(class_names)])withopen(os.path.join(save_dir,coco128.yaml),w)asf:f.write(content)print(all done!)if__name____main__:images_dirrC:\Users\Administrator\Downloads\data\JPEGImageslabels_dirrC:\Users\Administrator\Downloads\data\labelssave_dirrC:\Users\Administrator\Downloads\datasetvsVOCDataSplit()vs.split(images_dir,labels_dir,save_dir,trainval_radio0.9,train_radio0.9,copy_itTrue,shuffle_fileTrue,need_test_datasetFalse)注意 images_dirlabels_dirsave_dir根据自己实际情况进行调整。这个split.py脚本功能就是将JPEGImages和labels文件进行自动随机分割成标准yolo训练目录格式。脚本放在data文件夹下面即可然后运行脚本然后在C:\Users\Administrator\Downloads看到有个dataset文件夹生成至此标准训练格式完成了。打开coco128.yaml看到下面类似格式train:C:\Users\Administrator\Downloads\dataset\train\imagesval:C:\Users\Administrator\Downloads\dataset\val\imagesnc:1names:0:yingsu这些都不用修改我们只需要检查一下是不是对的就行。之后就是开始训练了注意训练yolov8模型需要自己提前安装好环境。使用预训练模型开始训练yolo taskdetect modetrainmodelyolo11n.pt datacoco128.yaml epochs100 imgsz640 batch8 workers2参数说明model: 使用的模型类型如 yolo11s.pt小模型、yolo11m.pt中、yolo11l.pt大data: 指定数据配置文件epochs: 训练轮数imgsz: 输入图像尺寸batch: 批量大小根据显存调整workers:指定进程数(windows最好设置0或者1或2,linux可以设置8)训练完成后最佳权重保存路径为runs/detect/train/weights/best.pt如果多次运行命令runs/detect/train2,runs/detect/train3文件夹生成只需要到数字最大文件夹查看就可以找到模型图片预测from ultralytics importYOLO# 加载训练好的模型modelYOLO(runs/detect/train/weights/best.pt)# 图像预测resultsmodel(path_to_your_image.jpg)视频或摄像头预测resultsmodel(path_to_video.mp4)# 视频 #resultsmodel(0)# 摄像头验证集评估yolo taskdetect modeval modelruns/detect/train/weights/best.pt datadata.yaml输出指标图像一般在模型训练后生成文件位置在runs/detect/train/results.png(以下仅仅是示例图并非这个数据集训练真实日志图)上面训练结果图片常用评估参数介绍【常用评估参数介绍】在目标检测任务中评估模型的性能是至关重要的。你提到的几个术语是评估模型性能的常用指标。下面是对这些术语的详细解释Class这通常指的是模型被设计用来检测的目标类别。例如一个模型可能被训练来检测车辆、行人或动物等不同类别的对象。Images表示验证集中的图片数量。验证集是用来评估模型性能的数据集与训练集分开以确保评估结果的公正性。Instances在所有图片中目标对象的总数。这包括了所有类别对象的总和例如如果验证集包含100张图片每张图片平均有5个目标对象则Instances为500。P精确度Precision精确度是模型预测为正样本的实例中真正为正样本的比例。计算公式为Precision TP / (TP FP)其中TP表示真正例True PositivesFP表示假正例False Positives。R召回率Recall召回率是所有真正的正样本中被模型正确预测为正样本的比例。计算公式为Recall TP / (TP FN)其中FN表示假负例False Negatives。mAP50表示在IoU交并比阈值为0.5时的平均精度mean Average Precision。IoU是衡量预测框和真实框重叠程度的指标。mAP是一个综合指标考虑了精确度和召回率用于评估模型在不同召回率水平上的性能。在IoU0.5时如果预测框与真实框的重叠程度达到或超过50%则认为该预测是正确的。mAP50-95表示在IoU从0.5到0.95间隔0.05的范围内模型的平均精度。这是一个更严格的评估标准要求预测框与真实框的重叠程度更高。在目标检测任务中更高的IoU阈值意味着模型需要更准确地定位目标对象。mAP50-95的计算考虑了从宽松到严格的多个IoU阈值因此能够更全面地评估模型的性能。这些指标共同构成了评估目标检测模型性能的重要框架。通过比较不同模型在这些指标上的表现可以判断哪个模型在实际应用中可能更有效。将模型导出为ONNX、TensorRT等格式以用于部署yolo export modelruns/detect/train/weights/best.pt formatonnx支持格式包括onnx, engine, tflite, pb, torchscript 等。经过上面训练可以使用模型做一步部署比如使用onnx模型在嵌入式部署使用engine模型在jetson上deepstream部署使用torchscript模型可以在C上部署等等。

相关新闻

048、双管正激变换器原理

048、双管正激变换器原理

2026/8/23 4:17:00

048、双管正激变换器原理 上个月帮朋友救一个项目,48V转12V/20A的电源模块,单管正激拓扑,MOS管和续流二极管烧了一轮又一轮。客户催得紧,朋友急得嘴角起泡。我拿到板子一看,复位绕组和漏感尖峰处理得稀碎,MOS管关断瞬间电压应力直接飙到200V+,管子不炸才怪。后来改成双…

openwrt dhcp不分配_虚拟机安装openwrt软路由以x86为例

openwrt dhcp不分配_虚拟机安装openwrt软路由以x86为例

2026/8/23 4:17:01

一、安装纯净版可以去官方下载https://openwrt.org/ ,然后安装自己喜欢的插件。二、下载一些大神已经编译好的镜像文件。可以去一些论坛或者github 去搜索下载。大佬提供的好多是img的文件。三、对于img的文件进行安装,需要准备三个工具。 1、IMG写盘…

openwrt查看用户连接五元组_无线wifi软路由——小白也能玩转Openwrt

openwrt查看用户连接五元组_无线wifi软路由——小白也能玩转Openwrt

2026/8/23 4:17:01

点击上方蓝字关注我们去年上半年我们发了一篇R2S软路由的介绍文章,很受大家欢迎,这款软路由小编还一直在使用。最近小编强迫症发作了,为什么软路由不能拥有无线发射呢?小编仔细查找了R2S的wiki,发现它是支持特定型号的…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/28 4:08:17

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/28 16:01:49

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/28 2:15:29

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/28 3:14:54

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/28 3:58:00

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/28 3:47:14

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/28 16:01:48

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/28 5:05:21

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/28 16:01:48

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…