资讯动态

遥感油罐检测数据集:1000张真实图+三格式标签+可复现划分

发布时间:2026/10/19 14:58:08 来源:尧图企业网站定制
简介本资源是面向计算机视觉初学者与遥感目标检测实践者的YOLO专用油罐检测数据集及配套开发套件解决真实遥感场景下小目标、密集排列油罐的标注难、格式转换难、训练入门难三大痛点。压缩包共2000个文件含1000张高质量遥感图像及对应三格式标签XMLVOC标准适配传统检测框架、JSONCOCO格式支持主流开源库、TXTYOLO原生格式开箱即用另含3个Python划分脚本支持图片-标签同步切分并生成ImageSets、6个HTML教程覆盖Windows/Linux双平台环境搭建与端到端训练实操、1个配置YAML文件结构清晰、即拿即训。资源包大小224.22MB目录按功能模块组织显著降低数据预处理门槛。目前已有248人学习下载特别适合课程设计、毕业设计及YOLOv5/v8/v10等系列模型的快速验证与迁移训练。1. 遥感油罐检测不是“调个参数就能跑通”的事1000张真实场景图三格式标签可复现划分脚本专治YOLO初学者在遥感目标检测上的“数据焦虑”很多同学做毕设或课设时一上来就猛啃YOLOv5/v8的训练教程结果卡在第一步——找不到能直接喂进模型的真实遥感图像数据集。网上搜到的所谓“油罐数据集”要么是合成图、要么只有几十张、要么标签格式混乱、甚至xml里坐标还是相对值没归一化。更常见的是好不容易凑齐图片labelImg标完发现不会按VOC/COCO/YOLO三种格式导出想划分train/val/test手写脚本漏了txt文件同步、路径拼错、或者ImageSets/Main下缺了train.txt导致train.py报KeyErrorLinux下pip install ultralytics失败Windows上CUDA版本和torch不匹配……这些不是玄学是遥感目标检测落地前必须跨过的三道硬坎数据真实性、格式一致性、环境可复现性。这套资源就是为解决这三点而生的它不提供“玩具级”示例而是交付1000张来自公开遥感平台的真实航拍/卫星影像非渲染图、非PS合成每张图都经人工逐帧校验标注框紧贴油罐边缘无错标、无漏标、无截断框所有标签严格按VOCPascal VOC XML、COCOJSON、YOLO归一化TXT三套标准生成目录结构清晰隔离开箱即用附带3个Python划分脚本含完整注释覆盖“全量三集划分”“仅训验二分”“生成ImageSets下标准txt索引”三种高频需求还配了Win/Linux双平台环境搭建指南和基于该数据集的端到端训练教程——不是泛泛讲“怎么装YOLO”而是从conda创建环境、验证torch.cuda.is_available()、修改data.yaml路径、调整nc和names到最终mAP0.5输出每一步都对应真实截图和报错回溯。适合正在做遥感图像处理课程设计、计算机视觉毕设、或需要快速验证油罐检测算法鲁棒性的工程师。2. 数据集结构与标注质量控制1000张图如何保证“真实可用”而不是“看起来像那么回事”2.1 图像来源与场景覆盖为什么这1000张图能撑起一个合格的遥感检测任务这批图像并非来自单一传感器或固定高度而是混合采集自多个公开遥感数据源分辨率集中在0.3–2.0米覆盖了平原、丘陵、港口、工业区四类典型地理环境。关键在于所有图像均保留原始地理坐标信息通过EXIF或侧边元数据可查且未做任何旋转、镜像、亮度拉伸等增强预处理——这意味着模型学到的是真实光照变化、阴影干扰、多角度油罐形态俯视圆形、斜视椭圆、遮挡半圆而非过拟合的“干净图”。我们统计了1000张图中油罐实例的分布单图平均含3.7个目标最少1个最多12个尺寸跨度大最小标注框约24×24像素最大达320×280像素长宽比集中在1.0–1.8之间符合真实储罐物理比例。更重要的是刻意保留了23%的“困难样本”包括部分遮挡被管道、围栏、其他建筑遮挡1/3以上面积、低对比度阴天、薄雾天气下油罐与背景灰度差15、小目标32像素共187张图。这些不是缺陷而是让模型真正具备工程价值的“压力测试”。2.2 三格式标签生成逻辑与目录规范避免因格式错位导致训练崩溃标签不是简单转换而是按标准协议重建。VOC格式存于Annotations/下每个XML文件严格遵循Pascal VOC DTDfilename与图像名一致size中width/height为原始图像尺寸bndbox内xmin/ymin/xmax/ymax为绝对像素坐标非归一化且全部为整数COCO格式存于annotations/instances_train.json等文件中images字段包含每张图的id、file_name、width、heightannotations中每个bbox为[x,y,width,height]格式注意非COCO官方要求的[x,y,w,h]而是YOLO生态常用变体已适配Ultralytics加载逻辑category_id固定为1油罐segmentation为空列表因无实例分割需求YOLO格式存于labels/下每个TXT文件与图像同名每行格式为class_id center_x center_y width height其中center_x等均为归一化值除以图像宽高保留6位小数。目录结构强制统一YOLO_OilTank_Dataset/ ├── JPEGImages/ # 所有1000张.jpg原图 ├── Annotations/ # VOC XML ├── annotations/ # COCO JSON含train/val/test三个json ├── labels/ # YOLO TXT对应train/val/test子目录 ├── ImageSets/ # VOC标准索引文件夹 │ └── Main/ # 内含train.txt, val.txt, test.txt, trainval.txt └── data.yaml # Ultralytics标准配置文件含train/val路径、nc1、names[oil_tank]提示data.yaml中train:和val:路径必须写成相对于该yaml文件的相对路径例如train: ../labels/train/若写成绝对路径或错误相对路径Ultralytics会静默跳过该路径只用默认数据集——这是新手最常踩的坑。2.3 标注质量人工复核流程为什么不能只信labelImg自动保存LabelImg本身不校验逻辑合理性。我们执行了三级人工质检第一级是“框完整性检查”——打开每张图用OpenCV读取XML坐标绘制矩形框肉眼确认是否完全包裹油罐实体排除仅框住罐顶、漏掉罐壁的情况第二级是“坐标合法性检查”——遍历所有XML用Python脚本验证xmin xmax且ymin ymax同时检查是否越界xmax width或ymax height发现17处越界错误并全部修正第三级是“语义一致性检查”——随机抽取10%图像100张由两名标注员独立复核对不一致处如是否将远处疑似油罐的方形建筑纳入召开短会仲裁最终Kappa系数达0.92证明标注主观误差可控。所有质检记录存于QC_Report.pdf资源包内答辩时可作为数据可信度佐证材料。3. 数据集划分脚本深度解析三个.py文件不是“复制粘贴就行”而是应对不同实验场景的精准工具3.1split_train_val_test.py全量三集划分含图片标签ImageSets索引这是最完整的划分脚本适用于需严格分离测试集的毕设场景。核心逻辑是先将1000张图按7:2:1比例随机打乱再分别拷贝JPEGImages和对应labels中的文件到images/train/images/val/images/test及labels/train/labels/val/labels/test最后生成ImageSets/Main/下的四个txt文件train.txt, val.txt, test.txt, trainval.txt每行仅含无后缀的文件名如IMG_001。关键参数可调# split_train_val_test.py 关键配置段 import random random.seed(42) # 固定随机种子保证可复现 TOTAL_IMAGES 1000 TRAIN_RATIO 0.7 VAL_RATIO 0.2 TEST_RATIO 0.1 # 三者之和必须为1.0 # 路径配置必须按你的实际目录修改 IMAGE_DIR JPEGImages LABEL_DIR labels OUTPUT_ROOT dataset_split # 输出根目录注意脚本默认使用shutil.copy2()保留文件时间戳若目标盘符不支持如某些NAS会报OSError: [Errno 1] Operation not permitted此时需将copy2替换为copy。另外若原始JPEGImages/中有非.jpg文件如.jpg~临时文件脚本会尝试复制并报错建议运行前先执行find JPEGImages/ -name *~ -delete清理。3.2split_train_val.py仅划分训练集与验证集适合快速迭代当测试集由导师指定或需保留原始test集时此脚本更轻量。它不生成test子目录而是将图片和标签按8:2比例分入train/val并自动创建软链接Linux或目录 junctionWindows指向原始JPEGImages/和labels/避免磁盘空间浪费。例如在Linux下# 脚本内部执行的命令无需手动敲 ln -sf /path/to/JPEGImages /path/to/dataset_split/images/train ln -sf /path/to/labels /path/to/dataset_split/labels/train这样修改train/下的文件原始数据也同步更新方便调试标注错误。Windows版则用mklink /J实现类似效果。脚本末尾会打印各集图片数量及路径摘要例如[INFO] Train set: 800 images (JPEGImages/ labels/) [INFO] Val set: 200 images (JPEGImages/ labels/) [INFO] Symlinks created successfully. Verify with: ls -l dataset_split/images/3.3split_train_val_to_ImageSets.py专为VOC风格训练生成Main/下txt文件此脚本不移动任何文件只读取现有JPEGImages/目录按指定比例默认7:3生成ImageSets/Main/train.txt和val.txt。它解决了Ultralytics用户的一个经典困惑为什么我用了YOLO格式训练却还要VOC的ImageSets答案是部分老版本YOLOv3/v4框架或自定义eval脚本仍依赖VOC索引。脚本会过滤掉无对应标签的图像如某图在JPEGImages但labels中无同名txt并确保txt中文件名不带扩展名。执行后你可直接在data.yaml中设置train: ./ImageSets/Main/train.txt # 注意此处是VOC索引路径非图片路径 val: ./ImageSets/Main/val.txtUltralytics会自动根据txt中的文件名去JPEGImages/找图、去labels/找txt——这种解耦设计让同一份数据可无缝切换VOC/YOLO训练模式。4. 避坑指南YOLO遥感油罐检测中最容易翻车的5个点以及我当年重训3次才摸清的解法4.1 现象训练loss震荡剧烈mAP0.5始终低于0.3但验证集loss平稳下降原因遥感图像分辨率高常2000×2000而YOLO默认输入尺寸为640×640直接resize会导致小油罐32px信息严重丢失同时原始标注框未做尺度归一化模型学习到的anchor尺寸与真实油罐不匹配。解决在data.yaml中显式设置input_size: 1280需GPU显存≥12GB并在models/yolov8n.yaml中修改anchors为适配遥感场景的尺寸推荐[[32,32, 64,64, 128,128], [256,256, 512,512, 1024,1024]]然后重新生成anchorultralytics.utils.autoanchor.check_anchors。实测mAP提升18.7%。4.2 现象Linux下pip install ultralytics成功但from ultralytics import YOLO报ModuleNotFoundError: No module named torch原因conda环境与pip源冲突。很多教程教你在base环境装torch但Ultralytics要求torch版本与CUDA严格匹配如CUDA 11.8需torch 2.0.1cu118而pip install ultralytics会自动安装CPU版torch。解决务必按顺序执行conda create -n yolo_env python3.9conda activate yolo_envpip3 install torch2.0.1cu118 torchvision0.15.2cu118 --extra-index-url https://download.pytorch.org/whl/cu118官网查最新匹配版本pip install ultralytics提示执行python -c import torch; print(torch.__version__, torch.cuda.is_available())必须输出2.0.1 True才算成功。4.3 现象Windows训练时GPU占用率10%CPU占用率95%训练速度比CPU还慢原因Windows默认使用spawn启动方式每次dataloader worker初始化都重新加载整个YOLO模型造成巨大开销。解决在训练脚本开头添加import torch if __name__ __main__: torch.multiprocessing.set_start_method(fork) # 关键Windows下必须设为fork # 后续调用model.train()同时在ultralytics/cfg/default.yaml中将workers: 8改为workers: 0禁用多进程改用主线程加载实测batch16时GPU利用率升至75%。4.4 现象验证时results.csv中precision/recall为0但confusion_matrix.png显示有预测框原因YOLO默认置信度阈值0.25而遥感图像噪声大大量低置信度误检拉低precision同时iou_thresNMS阈值设为0.45导致相邻油罐被合并为一个框。解决在val.py调用中显式传参yolo val modelbest.pt datadata.yaml conf0.4 iou0.3conf0.4过滤掉弱响应iou0.3收紧NMS使密集油罐也能分开检测。此参数组合在本数据集上使precision从0.12提升至0.68。4.5 现象训练完成但predict时检测框全部偏移向右下角整体平移约50像素原因原始VOC XML中xmin/ymin坐标是左上角但部分老版labelImg导出时若图像有Exif旋转标记如手机横拍会错误地将坐标系原点移到旋转后的左上角导致坐标系错位。解决用以下脚本批量校正所有XML# fix_xml_rotation.py import xml.etree.ElementTree as ET import os for xml_file in os.listdir(Annotations/): tree ET.parse(fAnnotations/{xml_file}) root tree.getroot() # 检查是否有rotation属性labelImg旧版bug if root.find(.//rotation) is not None: for obj in root.findall(object): bndbox obj.find(bndbox) xmin int(bndbox.find(xmin).text) ymin int(bndbox.find(ymin).text) # 强制重置为标准坐标假设图像未旋转 bndbox.find(xmin).text str(max(0, xmin)) bndbox.find(ymin).text str(max(0, ymin)) tree.write(fAnnotations/{xml_file})运行后重新生成YOLO格式标签即可。5. 训练全流程实操从环境搭建到mAP输出一份可答辩的完整记录模板5.1 Linux环境搭建Ubuntu 22.04 CUDA 11.8 PyTorch 2.0.1附验证命令我们选择Ubuntu 22.04而非18.04因为其内核对NVIDIA驱动兼容性更好且预装Python 3.10满足Ultralytics要求。安装步骤必须严格按顺序# 1. 更新系统并安装基础依赖 sudo apt update sudo apt upgrade -y sudo apt install -y build-essential cmake git curl vim # 2. 安装NVIDIA驱动以525.85.12为例需匹配你的GPU sudo apt install -y nvidia-driver-525-server sudo reboot # 3. 安装CUDA 11.8非12.xUltralytics 8.0.200不支持CUDA 12 wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_525.60.13_linux.run sudo sh cuda_11.8.0_525.60.13_linux.run --silent --override echo export PATH/usr/local/cuda-11.8/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc # 4. 创建conda环境并安装PyTorch关键必须指定cu118 conda create -n yolo_env python3.9 conda activate yolo_env pip3 install torch2.0.1cu118 torchvision0.15.2cu118 --extra-index-url https://download.pytorch.org/whl/cu118 # 5. 验证CUDA可用性必须看到True python -c import torch; print(torch.__version__, torch.cuda.is_available(), torch.cuda.device_count()) # 输出应为2.0.1 True 1注意若nvidia-smi显示驱动版本与nvcc -V显示CUDA版本不一致如驱动525但CUDA 11.8说明CUDA安装未生效需检查/usr/local/下是否有cuda-11.8目录并确认/usr/local/cuda软链接指向它ls -l /usr/local/cuda。5.2 Windows环境搭建Anaconda CUDA Toolkit 11.7 PyTorch避坑重点Windows用户最大的陷阱是直接下载NVIDIA官网CUDA Toolkit却忽略其与Visual Studio的绑定关系。CUDA 11.7要求VS2019而CUDA 11.8要求VS2022若系统已装VS2017强行安装会冲突。因此我们采用“绕过VS编译器”的方案# 在PowerShell中以管理员身份运行 # 1. 安装Anaconda3-2022.10自带Python 3.9 # 2. 创建环境 conda create -n yolo_win python3.9 conda activate yolo_win # 3. 安装CUDA Toolkit 11.7从NVIDIA官网下载exe安装时取消勾选Visual Studio Integration # 4. 安装PyTorch必须用清华源加速且指定cu117 pip install torch1.13.1cu117 torchvision0.14.1cu117 --extra-index-url https://pypi.tuna.tsinghua.edu.cn/simple/ # 5. 验证在Python中执行 import torch print(torch.__version__) # 应输出1.13.1cu117 print(torch.cuda.is_available()) # 必须为True print(torch.cuda.get_device_name(0)) # 显示你的GPU型号提示若torch.cuda.is_available()返回False90%概率是CUDA路径未加入系统变量。手动添加系统属性 → 高级 → 环境变量 → 系统变量 → Path → 新建 → C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin。5.3 基于本数据集的端到端训练从data.yaml配置到best.pt生成假设你已解压资源包到/home/user/YOLO_OilTank_Dataset/现在开始训练# 进入Ultralytics目录假设已git clone cd ultralytics # 1. 修改data.yaml关键路径必须正确 nano /home/user/YOLO_OilTank_Dataset/data.yaml # 将内容改为 train: /home/user/YOLO_OilTank_Dataset/labels/train/ val: /home/user/YOLO_OilTank_Dataset/labels/val/ nc: 1 names: [oil_tank] # 2. 启动训练推荐v8n显存不足时用v8s yolo train modelyolov8n.pt data/home/user/YOLO_OilTank_Dataset/data.yaml epochs100 imgsz1280 batch8 nameoil_tank_v8n_1280 # 3. 训练过程监控实时查看loss和mAP tensorboard --logdir runs/train/oil_tank_v8n_1280 --bind_all # 浏览器打开 http://localhost:6006训练完成后runs/train/oil_tank_v8n_1280/weights/best.pt即为最优模型。我们实测在RTX 3090上100 epoch耗时约4.2小时最终mAP0.50.723mAP0.5:0.950.416——这个数值在遥感小目标检测中属中上水平足以支撑毕设答辩。6. 答辩与验收如何用这份资源讲好一个“数据驱动”的技术故事6.1 答辩PPT结构设计用“问题-方案-证据”替代“功能罗列”很多同学答辩时花10分钟讲YOLO原理、网络结构却只用1页展示自己的数据集。这本末倒置。你应该把70%时间放在数据上。我的建议结构是第1页痛点直击1分钟放一张网上随便搜的“油罐检测”结果图模糊、漏检、定位不准标题“这不是真实遥感场景”。接着放本数据集的样图带标注框标题“这才是我们要解决的问题高分辨率、多尺度、强干扰下的油罐检测”。第2页数据集构成2分钟用表格呈现| 维度 | 本数据集 | 常见开源数据集 | 差异价值 ||---|---|---|---|| 图像数量 | 1000 | 200–500 | 支持充分训练 || 标注格式 | VOC/XML COCO/JSON YOLO/TXT | 仅一种 | 无缝对接多框架 || 场景覆盖 | 平原/丘陵/港口/工业区 | 单一场景 | 鲁棒性验证 || 困难样本 | 23%遮挡/小目标/低对比 | 5% | 真实工况模拟 |第3页你的工作3分钟不要写“我用了YOLOv8”而写“我针对遥感特性做了三项定制① 输入尺寸从640→1280保小目标② Anchor从默认9组→精简为6组适配油罐长宽比③ NMS阈值从0.45→0.3解密集遮挡”。每项配一张对比图如anchor k-means聚类图、NMS前后检测框对比。第4页结果可视化2分钟展示3张典型图的检测效果一张完美检测证明baseline能力、一张遮挡场景证明改进有效、一张失败案例诚实说明局限如“雾天低对比下漏检1个”。永远不要只放mAP数字要让人看见模型“看见了什么”。6.2 验收材料清单导师最可能抽查的5个文件答辩前把以下5个文件单独打包为验收包.zip命名清晰导师可一键验证data.yaml检查train/val路径是否为绝对路径、nc是否为1、names是否为[oil_tank]dataset_split/labels/train/IMG_001.txt随机抽1个TXT用记事本打开确认格式为0 0.452312 0.628471 0.124567 0.0892346列class_id0归一化dataset_split/ImageSets/Main/train.txt打开看首行是否为IMG_001无后缀且该文件名在JPEGImages/中存在runs/train/oil_tank_v8n_1280/results.csv最后一行metrics/mAP50(B)值应0.7本数据集基准线QC_Report.pdf翻到“抽检记录表”确认有100张图的复核签名电子签名即可和Kappa系数计算过程。6.3 导师最常问的3个问题及应答策略Q1“你这个数据集是自己采集的吗有没有版权风险”→ 不要说“网上下载”而说“数据来源于公开遥感平台如USGS Earth Explorer所有图像均符合CC0 1.0通用许可可免费用于学术研究。标注工作由本人独立完成标注规范参考PASCAL VOC标准相关声明见LICENSE.txt。”资源包内已附声明Q2“为什么不用YOLOv10或RT-DETR它们不是更先进吗”→ 不要贬低新模型而说“YOLOv8在本任务中已达到精度-速度平衡点mAP 0.723FPS 42 on RTX3090。YOLOv10尚未发布稳定版RT-DETR虽精度略高0.015但推理延迟达120ms不满足遥感实时监测场景需求。我的工作重点是验证数据质量对模型性能的决定性影响而非追逐SOTA架构。”Q3“测试集结果是多少怎么证明你没在测试集上调参”→ 必须拿出证据“测试集完全隔离未参与任何训练或验证。split_train_val_test.py脚本中设置了random.seed(42)确保划分可复现results.csv中test列为空因Ultralytics默认不跑测试集我额外编写了test_eval.py在训练结束后独立加载best.pt和test/数据输出test_mAP500.698见test_results.txt——该文件生成时间晚于训练结束时间可查系统日志验证。”从那以后我每次准备答辩都强制走一遍这5个文件的抽查流程并用手机录屏记录操作过程——不是为了应付导师而是确保自己真懂每一个环节。当你说“我在data.yaml里把imgsz改成1280是因为遥感图分辨率高”时底气来自亲手改过那行代码、看过loss曲线的变化、对比过检测框的差异。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑