简介本资源为面向卫星遥感图像目标检测任务的YOLO系列算法数据集适合从事遥感图像识别、地理信息分析及深度学习目标检测的开发者与研究人员使用可解决遥感场景下样本获取难、标注格式不统一的问题。压缩包共2000个文件包含1280个xml标注文件与720个txt标注文件整体约59.44MB同时提供YOLO格式与VOC格式两种标签并附带data.yaml配置文件可直接用于yolov5、yolov8、yolov9、yolov7、yolov10及yolo11等算法的模型训练与验证测试。数据集已按训练与验证需求划分完毕YOLO格式采用类别索引与归一化中心点、宽高坐标便于直接读取训练。目前已有110人学习下载读者可快速搭建遥感目标检测实验流程省去数据清洗与格式转换环节将精力集中于模型调参与效果对比适合作为课程设计、科研实验或算法入门的实战数据支撑。1. 遥感图像目标检测数据集1825 张带标签的 YOLO 落地资源拿到一份遥感图像数据集最怕的不是图像不够多而是标签格式对不上、划分没做好、配置文件缺字段。这份 1825 张卫星遥感图像物体检测数据集把 YOLO 格式的 txt 标签和 VOC 格式的 xml 标签分文件夹放好连data.yaml都配齐了解压完改个路径就能直接喂给 YOLOv5 到 YOLO11 这一串模型。它适合两类人一类是想快速验证某个改进模块在遥感场景下有没有效果的算法工程师另一类是刚接触 YOLO 训练、需要一个干净数据集跑通全流程的新手。遥感图像里的目标普遍偏小、方向任意、背景复杂拿通用 COCO 预训练权重直接推理往往漏检严重这份数据正好用来做微调。下面按「先看清结构、再动手训练、最后避坑」的顺序拆一遍。2. 数据集结构与标签格式先搞懂 txt 和 xml 怎么对应2.1 目录布局与文件命名规律解压后你会看到图像和标签是分开存放的标签文件夹里同时存在 txt 和 xml 两套。从项目正文给出的文件名片段看标签文件以img_0907_1148.txt这种「图像名 序号」的形式命名文件名末尾还带了部分类别名称方便你肉眼核对类别是否标错。常见做法是把结构组织成下面这样dataset/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ # YOLO 格式 txt │ └── val/ ├── annotations/ # VOC 格式 xml │ ├── train/ │ └── val/ └── data.yaml图像和标签必须同名同层级YOLO 训练时是按文件名去labels/下找对应 txt 的少一个文件就会在训练日志里报missing label。xml 那套是给你做格式转换或交叉校验用的训练本身不读它。2.2 YOLO 格式每一列到底代表什么YOLO 的 txt 每行是一个目标格式为class x_center y_center width height。这里有个新手最容易翻车的点后四个值全是归一化到 0 到 1 的比例值不是像素坐标。x_center、y_center是框中心点相对整幅图宽高的比例width、height是框宽高相对整幅图宽高的比例。class是从 0 开始的类别索引和data.yaml里names列表的顺序严格对应顺序错一位模型学到的就是错的类别。# 校验一行 YOLO 标签是否合法 def check_yolo_line(line, img_w, img_h): parts line.strip().split() if len(parts) ! 5: return False, 字段数不是5 cls, xc, yc, w, h parts vals list(map(float, parts[1:])) # 归一化值必须落在 0~1 if not all(0.0 v 1.0 for v in vals): return False, 存在越界的归一化坐标 # 还原成像素框检查是否超出图像边界 x1 (float(xc) - float(w) / 2) * img_w y1 (float(yc) - float(h) / 2) * img_h x2 (float(xc) float(w) / 2) * img_w y2 (float(yc) float(h) / 2) * img_h if x1 0 or y1 0 or x2 img_w or y2 img_h: return False, 框超出图像边界 return True, ok这段逻辑说明先卡字段数再卡归一化范围最后还原像素框看有没有越界。参数img_w、img_h用 PIL 或 OpenCV 读原图拿到。批量跑一遍把返回 False 的文件名记下来这些就是需要返工的样本。2.3 VOC 格式与 YOLO 格式的换算关系VOC 的 xml 里存的是绝对像素坐标xmin, ymin, xmax, ymax转成 YOLO 需要做归一化。换算公式是x_center (xmin xmax) / 2 / img_wy_center (ymin ymax) / 2 / img_hwidth (xmax - xmin) / img_wheight (ymax - ymin) / img_h。数据集同时给两套格式好处是你可以用 xml 做人工复核再用脚本批量转成 txt避免手写标签时算错比例。import xml.etree.ElementTree as ET from PIL import Image def voc_to_yolo(xml_path, classes): tree ET.parse(xml_path) root tree.getroot() size root.find(size) img_w int(size.find(width).text) img_h int(size.find(height).text) lines [] for obj in root.iter(object): cls_name obj.find(name).text cls_id classes.index(cls_name) bbox obj.find(bndbox) xmin float(bbox.find(xmin).text) ymin float(bbox.find(ymin).text) xmax float(bbox.find(xmax).text) ymax float(bbox.find(ymax).text) xc (xmin xmax) / 2 / img_w yc (ymin ymax) / 2 / img_h w (xmax - xmin) / img_w h (ymax - ymin) / img_h lines.append(f{cls_id} {xc:.6f} {yc:.6f} {w:.6f} {h:.6f}) return linesclasses列表要和data.yaml的names完全一致否则类别索引会错位。保留 6 位小数是常见做法精度够用又不会让文件过大。3. data.yaml 配置与训练启动从 YOLOv5 到 YOLO11 的通用接法3.1 data.yaml 关键字段逐个说清data.yaml是数据集和训练框架之间的契约字段写错训练直接起不来。核心字段有四个path是数据集根目录train和val是相对path的训练集和验证集图像路径nc是类别数量names是类别名列表。常见写法path: /home/user/dataset train: images/train val: images/val nc: 2 names: 0: ship 1: plane注意nc必须等于names的长度names的索引必须从 0 连续排。如果你的类别名里有中文或空格建议改成英文短名部分框架在解析 yaml 时对特殊字符处理不一致容易出玄学问题。3.2 用 YOLOv8 起一次训练验证数据可用先拿 YOLOv8 跑通因为它的命令行最简洁报错信息也清楚。装好环境后# 安装 ultralytics pip install ultralytics # 从预训练权重开始微调遥感小目标建议 imgsz 调大 yolo detect train \ data/home/user/dataset/data.yaml \ modelyolov8n.pt \ epochs100 \ imgsz1024 \ batch8 \ projectruns/remote_sense \ nameexp1参数说明imgsz1024是因为遥感图像目标小输入分辨率太低会直接丢目标但显存占用会涨batch要相应调小epochs100是微调的常见起点数据量 1825 张不算大太多容易过拟合modelyolov8n.pt是轻量版想追精度换yolov8m.pt或yolov8l.pt。训练日志里重点看mAP50和mAP50-95两条曲线如果mAP50一直上不去先回去查标签别急着调超参。3.3 YOLOv5 与 YOLO11 的差异点YOLOv5 用的是train.py脚本加--data参数配置项名字和 v8 略有不同比如--img对应 v8 的imgsz--weights对应model。YOLO11 沿用了 ultralytics 的统一接口命令和 v8 基本一致把model换成yolo11n.pt即可。YOLOv7、v9、v10 各有自己的仓库接这份数据时统一认data.yaml的字段但要注意 v5 老版本对path字段支持不完整可能需要把train、val写成绝对路径。切换框架时先跑 1 个 epoch 看能不能正常读数据别一上来就挂 300 epoch。# YOLOv5 接同一份数据 python train.py --data data.yaml --weights yolov5s.pt --img 1024 --batch-size 8 --epochs 1004. 避坑与排查遥感数据集训练最容易翻车的五件事4.1 训练报 missing labels 或 labels empty现象启动训练后日志刷No labels found或大量missing label。原因通常是图像和标签没同名或者train路径指向了图像文件夹但标签在另一个平行目录框架按约定去同级labels找却没找到。解决确认images/train和labels/train是同级目录文件名不含扩展名一一对应用脚本比对两个文件夹的文件名集合差集。4.2 类别索引错位导致 mAP 极低现象loss 能降但mAP50长期低于 0.1混淆矩阵里类别全乱。原因多半是data.yaml的names顺序和 txt 里class索引不一致或者 VOC 转 YOLO 时classes列表顺序和 yaml 不同。解决打印 yaml 的names和标签里出现过的所有class值做比对确保 0 到 nc-1 每个值都有对应名字。4.3 小目标漏检严重现象大目标检测正常小目标几乎检不到。原因是遥感图像目标像素占比小默认imgsz640下采样后目标只剩几个像素。解决把imgsz提到 1024 甚至 1280同时检查标签里小目标框的宽高归一化值是不是小于 0.01过小的框可以考虑合并或过滤避免引入噪声。4.4 验证集指标虚高现象mAP很高但实际推理效果差。原因是训练集和验证集划分时同一区域或同一目标的近邻图像被分到了两边造成数据泄漏。解决按图像来源或地理区域划分而不是随机按文件划分确保验证集和训练集在空间上不重叠。4.5 显存溢出中断训练现象训练到一半报 CUDA out of memory。原因是imgsz和batch组合超出显存。解决优先降batch再考虑降imgsz或者开启梯度累积模拟大 batch。遥感任务里imgsz对精度影响比batch大所以先动 batch。5. 进阶技巧用标签统计反推数据质量与训练策略跑通训练只是第一步真正决定模型上限的是数据本身。我一般会在训练前先做一轮标签统计用数据说话。下面这段脚本统计每个类别的框数量、框的宽高分布以及每张图的平均目标数。import os import glob import numpy as np def dataset_stats(label_dir, nc): cls_count np.zeros(nc) wh_list [] per_img [] for txt in glob.glob(os.path.join(label_dir, *.txt)): with open(txt) as f: lines [l for l in f.readlines() if l.strip()] per_img.append(len(lines)) for l in lines: p l.split() cls_count[int(p[0])] 1 wh_list.append((float(p[3]), float(p[4]))) wh np.array(wh_list) print(每类框数:, cls_count) print(框宽均值/中位数:, wh[:, 0].mean(), np.median(wh[:, 0])) print(框高均值/中位数:, wh[:, 1].mean(), np.median(wh[:, 1])) print(每图平均目标数:, np.mean(per_img)) print(小目标占比(宽0.02):, (wh[:, 0] 0.02).mean()) dataset_stats(/home/user/dataset/labels/train, nc2)看几个关键指标如果某类框数远少于其他类训练时考虑用类别权重或过采样如果小目标占比超过一半imgsz必须往上提同时可以试试在数据增强里关掉随机缩放避免小目标被进一步缩小如果每图平均目标数很低比如小于 2说明图像里目标稀疏anchor 或损失函数里的正样本分配策略要相应调整。这些判断比盲目调学习率有用得多。还有一个习惯训练前先用labelimg或vscode yolo labeling插件随机抽 20 张图把框画出来肉眼过一遍重点看有没有框偏、框漏、类别标错。遥感图像里云层遮挡、阴影、相似地物很容易标错这一步花十分钟能省掉后面几小时的无效训练。从那以后我每次拿到新数据集都强制先跑一遍标签统计加随机抽检确认干净了再开训练。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
基于溯源图与RGAT-GRU的APT攻击检测:HUST毕设源码实战解析 简介:这份资源是2023年华中科技大学计算机学院毕业设计项目,主题为基于溯源图的APT攻击检测方法优化,面向网络安全方向的学生与研究人员,适合具备一定机器学习与图神经网络基础、希望深入理解高级持续性威胁检测的读者。项目围绕溯… · 2026/9/24 21:07:39
AI辅助解锁笔记本RTX 5090功耗墙:从175W到250W的实战调优 1. 卡在175W的笔记本5090,默认状态就被摁住了先说我手里这台机器的状态:2025年上半年入手的旗舰游戏本,RTX 5090 Laptop GPU,出厂默认TGP 175W。第一次跑3DMark Time Spy的时候我有点懵——Graphics分数30128,核心温度… · 2026/9/24 21:07:39
wardogs联机卡顿掉线怎么办?从网络排查到优化的完整指南 大家联机打wardogs遇到卡顿掉线,不管是组队冲锋还是和认识的朋友开黑,体验确实会大打折扣。我玩这游戏也算有些年头了,早期在宿舍用公共WiFi,高峰期几乎走两步就漂移,后来换到有线网络加上一系列排查调整,才… · 2026/9/24 21:33:03
代号鸢联机掉线不用慌,从手机到光猫的排查指南 玩了这么久代号鸢,相信不少人都有过这种体验:正打到关键回合,或者剧情推到高潮,屏幕一卡,然后眼睁睁看着角色原地发呆,接着就是“连接已断开”的提示。尤其是在联机打地宫、打首领的环节,卡顿和… · 2026/9/24 21:33:03
DeepSeek Harness评测:多智能体协作编排与配置实战 DeepSeek官方这次的低调操作确实让我有点意外,要不是在官网角落看到更新日志,我根本不知道出了一个叫Harness的桌面端。用了一周多,体感很新鲜,和之前那些套壳对话客户端完全不是一回事。这篇就把我的实测记录、踩坑经历、还有一些… · 2026/9/24 21:33:03
任务向量合并:从参数平均到映射优化 1. 任务向量这东西,加法本来就不该是默认操作我第一次在论文里看到任务向量(Task Vector)时,说实话是带着怀疑的。把模型在目标任务上做微调,然后拿微调后的权重减去预训练权重,得到一个“向量”࿰… · 2026/9/24 21:33:03
HarmonyOS证书过期怎么办?从紧急修复到系统化管理全攻略 HarmonyOS开发做到一定阶段,证书过期这件事大概率会找上门。它不像编译报错那样当场给你红字提示,更多时候是悄无声息地卡住你的调试、阻断你的上架,甚至让线上推送直接哑火。我在多个项目里处理过HarmonyOS应用从调试到发布的完整流程&#… · 2026/9/24 21:33:03
FastJson核心要点与避坑:序列化、时间处理与安全升级 1. 为什么 FastJson 至今仍是Java后端绕不开的JSON库讲真,我最早接触 FastJson 是在 2016 年,那时候公司的老项目里到处都是JSON.toJSONString()和JSON.parseObject(),后来自己写新服务,也跟着用了几年。中途经历了几次 FastJson … · 2026/9/24 21:32:57
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44