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

发布时间:2026/7/23 17:40:52

使用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/7/23 17:40:52

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

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

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

2026/7/23 17:40:52

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

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

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

2026/7/23 17:40:52

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

2026最新:语音转文字在线生成怎么选?3款免费实用工具亲测好用

2026最新:语音转文字在线生成怎么选?3款免费实用工具亲测好用

2026/7/23 18:20:53

先回答用户真正关心的问题 现在2026年找免费实用的语音转文字在线生成工具,不需要乱搜乱试,我作为长期测试AI效率工具的博主,亲测了三款不同场景下都好用的工具,你可以直接按需求对号入座:纯实时听写选Nerd Dictation…

2026年怎么选高性价比ai读文字工具:零成本日均省12分钟工作

2026年怎么选高性价比ai读文字工具:零成本日均省12分钟工作

2026/7/23 18:20:53

先回答用户真正关心的问题 2026年选高性价比AI读文字工具,核心要匹配职场新人快速掌握岗位知识的需求,零成本前提下优先按场景选:仅做临时转写选基础免费工具,需要整理复习卡片选带知识整理功能的工具,按照可复现的标…

界面控件Telerik UI for ASP. NET Core教程 - 如何为网格添加上下文菜单?

界面控件Telerik UI for ASP. NET Core教程 - 如何为网格添加上下文菜单?

2026/7/23 18:20:53

Telerik UI for ASP. NET Core是用于跨平台响应式Web和云开发的最完整的UI工具集,拥有超过60个由Kendo UI支持的ASP.NET核心组件。它的响应式和自适应的HTML5网格,提供从过滤、排序数据到分页和分层数据分组等100多项高级功能。上下文菜单允许开发者为应…

WinForm应用实战开发指南 - 如何实现工具栏/菜单的动态呈现?

WinForm应用实战开发指南 - 如何实现工具栏/菜单的动态呈现?

2026/7/23 18:20:53

在Winform系统开发中,为了对系统的工具栏/菜单进行动态的控制,我们对系统的工具栏/菜单进行动态配置,这样可以把系统的功能弹性发挥到极致。通过动态工具栏/菜单的配置方式,我们可以很容易的为系统新增所需的功能,通过…

深入解析以太网MAC寄存器:统计、VLAN与PTP时间戳实战指南

深入解析以太网MAC寄存器:统计、VLAN与PTP时间戳实战指南

2026/7/23 18:20:53

1. 以太网MAC寄存器:嵌入式网络开发的基石在嵌入式网络开发中,以太网MAC控制器是连接物理层与上层协议栈的桥梁,其性能与功能的精细控制,很大程度上依赖于对一系列硬件寄存器的深入理解和正确配置。很多开发者可能只停留在调用驱动…

仿 Moonshot “View Recent Activity” 钓鱼邮件攻击特征识别与全链路防御技术研究

仿 Moonshot “View Recent Activity” 钓鱼邮件攻击特征识别与全链路防御技术研究

2026/7/23 18:10:53

摘要 针对 2026 年 7 月 Moonshot 平台爆发的 “View Recent Activity” 主题仿冒钓鱼邮件安全事件,本文以该真实攻击样本为核心研究载体,系统拆解品牌仿冒类钓鱼邮件的传播链路、社会工程诱导逻辑与技术规避手段,梳理当前加密货币平台用户面…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/23 3:40:08

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/23 4:40:05

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/23 1:54:13

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

企业级AI搜索落地选型实战手册(含LLM+RAG+Hybrid架构对比矩阵与ROI测算模板)

企业级AI搜索落地选型实战手册(含LLM+RAG+Hybrid架构对比矩阵与ROI测算模板)

2026/7/23 0:09:56

更多请点击: https://kaifayun.com 第一章:企业级AI搜索落地选型实战手册(含LLMRAGHybrid架构对比矩阵与ROI测算模板) 企业级AI搜索系统落地成败,核心在于技术选型与业务价值的精准对齐。盲目堆砌大模型能力或过度依赖…

TM4C129LNCZAD外设实战:LCD、比较器与PWM寄存器配置详解

TM4C129LNCZAD外设实战:LCD、比较器与PWM寄存器配置详解

2026/7/23 0:09:56

1. 项目概述与核心价值在嵌入式系统开发,尤其是基于ARM Cortex-M内核的微控制器项目中,深入理解并熟练配置芯片的片上外设,是从“点亮LED”迈向“实现复杂系统功能”的关键一步。Tiva™ TM4C129LNCZAD作为TI公司Cortex-M4F家族中的高性能成员…

AtomCode `fmt_dur` 争议溯源:两个函数、三段演进、四个事实

AtomCode `fmt_dur` 争议溯源:两个函数、三段演进、四个事实

2026/7/23 0:09:56

一、快速声明与争议背景本文是对 AtomCode 终端 spinner 时长显示 fmt_dur 相关说法的事实性核验。2026 年 7 月 CSDN 上出现两篇互相矛盾的博文,近期又有 AI 在对话中输出格式描述 XhYm / YmZs / Zs。本文基于 AtomCode 仓库 main4677ddfa 及全分支 Git 历史给出可…