简介:HIT-UAV红外小目标数据集是一份面向计算机视觉研究者与无人机航拍应用开发者的专业数据资源,聚焦红外场景下的小目标检测与识别。其图像源自43470帧视频中抽取的2898幅热红外影像,覆盖学校、停车场、道路、游乐场等场景,包含行人、自行车、汽车及其他车辆等目标类别,并记录了飞行高度(60至130米)、相机视角(30至90度)与昼/夜光照条件,可直接用于目标检测、跟踪及多模态感知研究。压缩包共2002个文件,以XML标注文件(1994个)为主,配合5个TXT格式的数据集划分文件,以及1个Python脚本(voc2yolo.py)用于将VOC格式标注转换为YOLO格式,整体包体约192.88MB,结构清晰易用。目前已有1511人学习下载,适合需要真实无人机红外数据训练与验证检测算法的学生、科研人员及算法工程师快速上手。 做红外小目标检测的朋友,应该都绕不开这个数据集:HIT-UAV。我第一次用这个数据集是四年前做无人机视角的目标检测算法验证,当时被它“小目标+真实航拍+红外模态”这三个特性组合给打动了。别小看这三个词,它们组合在一起意味着什么,后面我会慢慢展开。
HIT-UAV从名字就能看出来,跟哈尔滨工业大学有关,它是一个面向无人机平台获取的红外热成像图像的小目标检测数据集。简单说,就是用无人机挂着红外/热成像相机在真实场景里飞,拿回来一批低空航拍的红外视频和图像,然后按目标检测的规范做标注。它覆盖校园、道路、广场、停车场等真实场景,目标主要是行人、车辆这类地面物体,飞行高度和拍摄角度都有变化。
这篇内容适合谁?如果你正在做红外目标检测、无人机视觉、小目标检测算法研究,或者只是想把YOLOv8这类主流检测器在红外小目标场景里跑通,那这份经验会非常有用。我把从下载数据到训练模型、踩坑、优化参数的完整流程都整理了一遍,其中不少细节是公开教程里不会写的。
1. 项目背景:为什么红外小目标检测需要专门的数据集
1.1 小目标检测到底难在哪
先说个直观印象。你在普通可见光数据集里见到的“小目标”,通常人还占着几十上百个像素,能看出轮廓。但在红外航拍里,一辆汽车可能只有5x5到15x15个像素,人也就是一小团亮斑。这种目标几乎没有纹理信息、没有颜色信息,只有“一个亮点”和它周围的热辐射对比度。你让模型在这种条件下做检测,它基本没法靠外观特征,只能靠上下文、靠热信号的局部显著性,这对数据的要求比普通检测高得多。
再加上无人机是在飞的,视角不断变化,地面背景也复杂:屋顶、树木、路灯、电线杆都可能发热,产生高温干扰源。红外图像本身又是单通道灰度图,噪声和热模糊问题突出。这些问题叠加在一起,就是为什么红外小目标检测一直是个独立研究方向,也为什么领域里需要像HIT-UAV这种专门采集、专门标注的数据集。
1.2 HIT-UAV的核心设计思路
HIT-UAV这个数据集的定位很明确:无人机视角下的红外小目标检测基准。它跟常见的红外数据集最大的不同在于,不是放在固定机位的监控场景拍的,而是模拟真实无人机巡检、侦察、搜索这类任务,从空中往下或者斜着拍。
我看过不少数据集,很多学术数据集是在“太好”的条件下采集的,背景干净、目标清晰、光照稳定。HIT-UAV保留了更多真实感:飞行高度变化导致目标尺寸变化,拍摄角度变化导致目标形态变化,不同时间段导致地物热辐射分布不同。这种“不规整”恰恰是做工程和算法验证最需要的。
它的应用场景也相对清晰:电力巡检、安防监控、搜索救援、农业巡检。比如电力巡检中,在红外图像里检测异常发热的线夹或设备,本质就是红外小目标检测。你用HIT-UAV训练出来的模型,迁移到这类任务上是有基础的,至少在特征提取层是通用的。
| 数据集 | 模态 | 视角 | 目标尺寸 | 场景特点 |
|---|---|---|---|---|
| HIT-UAV | 红外热成像 | 无人机低空航拍 | 小目标为主 | 多高度、多场景、真实噪声 |
| 可见光航拍数据集 | RGB | 无人机航拍 | 中目标为主 | 纹理丰富、视角多样 |
| 固定红外监控数据集 | 红外热成像 | 固定机位 | 目标偏大 | 背景相对简单、尺度变化少 |
2. 数据集结构与标注格式深入拆解
2.1 目录结构与图像内容
下载解压HIT-UAV之后,结构其实很清晰,就是按视频序列区分,每个序列对应一次飞行拍摄。序列里是一帧一帧的红外图像,往往是jpg或png格式,单通道灰度图。图像名字很多就是帧号,按时间顺序排列。
这种“帧”组织形式有个特点:相邻帧之间的内容高度相似,如果不做处理直接划分训练集和验证集,很容易出现“同一段视频的相邻帧同时出现在训练和验证里”,导致验证结果虚高。这一点后面讲实操时会专门说,是我踩过的一个很深的坑。
图像内容方面,红外航拍图和RGB图有非常明显的差异。地面建筑、道路、植被在红外图里都变成了灰度层次,目标因为温度高,往往是画面里的亮斑。白天太阳照射下,屋顶、路面会有大面积高亮区域,这些高亮区域就是误检的主要来源。换句话说,这个数据集训练的模型,难点不只是“找到小目标”,还有“不把高温背景当目标”。
2.2 标注格式与目标类别
标注格式我拿到的那一版是YOLO格式的txt文件,每一行对应一个目标框,格式是:
class_id center_x center_y width height这里的中心坐标和宽高都归一化到0到1之间,跟YOLOv5、YOLOv8直接用。目标类别不多,常见的是人、车、自行车这类地面目标。当然不同版本可能类别编号不一样,像我用的版本里人的id是0,车是1,自行车是2,往下加类别的话就是3、4这样排。
我建议拿到数据后先别急着训练,写个小脚本统计一下每张图的目标数量、目标尺寸分布。我统计完发现这个数据集的分布很不均匀,有些帧里一个目标都没有,有些帧里密密麻麻十几二十个车;目标的像素尺寸大部分集中在10x10到30x30之间,真正算得上大目标的很少。这个分布特点决定了:你如果想把检测效果做好,模型的选择和训练策略都要围绕“小目标”来调,不能用什么默认参数一把梭。
有一点要提醒,如果你下载到的版本是VOC格式的xml标注,也不用慌,转换逻辑很简单:把xml里边的bbox坐标解析出来,用图像宽高归一化,再写进txt就行。我建议写个通用的转换脚本,因为后面还会反复遇到不同版本数据集格式不统一的问题。
3. 实操过程:用YOLOv8在HIT-UAV上训练检测模型
3.1 环境准备与数据划分
先说环境。我用的是PyTorch系列,YOLOv8的官方仓库,网络环境能装torch和ultralytics就行。整个训练过程在单张显卡上就能跑,数据集本身不大,如果你用的是20系列以上的卡,显存8G都够用。
数据整理阶段,第一步就是把数据集按照YOLO的目录习惯组织起来:
datasets/ ├── HITUAV/ │ ├── images/ │ │ ├── train/ │ │ ├── val/ │ │ └── test/ │ └── labels/ │ ├── train/ │ ├── val/ │ └── test/这里有个关键点,就是我前面提的“相邻帧相似”问题。如果随机划分,验证集会非常容易,模型相当于“见过”几乎一样的画面。正确做法是按视频序列划分,比如把序列1、2、3用于训练,序列4、5用于验证,序列6用于测试。这样才能真正评估模型的泛化能力。
我写过一个简单的划分脚本,逻辑不复杂:先读所有图片路径,按序列名前缀分组,然后按比例切分,最后拷贝到对应目录。这里不贴完整代码了,核心思路就是“按组切分,而不是按文件切分”。
3.2 配置文件编写与训练参数
数据整理好后,写一个数据配置的yaml文件,内容大概是:
path: datasets/HITUAV train: images/train val: images/val names: 0: person 1: car 2: bicycle接下来就是模型选型。YOLOv8s和YOLOv8m在这个数据集上都值得一试。红外小目标本身信息量少,深网络的过拟合风险反而高,用小模型加合适的输入分辨率往往是性价比最高的。
输入分辨率这里建议直接拉到640甚至800。小目标就那几个像素,你如果按默认的640输入还好,再往下降到416,目标基本就消失了,模型即使看到了也学不到信息。我自己试过用512输入训练,mAP比640掉了一截,非常明显。
训练命令大概是这样:
yolo train data=HITUAV.yaml model=yolov8s.pt imgsz=640 epochs=100 batch=16这里有几个参数要特别注意:
epochs:100左右比较健康,太少会欠拟合,太多会过拟合到训练集的场景上。batch:根据显存调,8G显存跑yolov8s的话batch=16没问题。patience:早停参数,我建议设20左右,让它在验证集不再提升时自动停止。pretrained:默认会加载yolov8s在COCO上的预训练权重。这个很重要,别看COCO是可见光,但通用特征提取能力在小数据量场景下能救不少命。如果从零训练,效果会差很多。
3.3 训练结果与检测效果评估
训练完之后,看两个东西:一个是验证集上的mAP50和mAP50-95,另一个是实际推理的检测效果。
按我的经验,在HIT-UAV上,只训练30个epoch左右mAP50就能到0.8以上,但mAP50-95往往在0.4到0.5之间徘徊。mAP50高说明框还算准,mAP50-95低说明框的定位精度还不够好,也就是说模型经常“框得大差不差,但不够精准”。
最直观的还是可视化推理结果。我会专门挑几帧目标特别小、背景特别杂乱的图来测,看模型是真学到了目标特征,还是靠场景瞎猜。如果小目标在高温路面背景下能被稳定检出来,而不是把屋顶高亮区域当目标,那说明训练确实到位了。
4. 常见问题与避坑经验实录
4.1 数据划分不合理导致虚高
这个坑我前面提过,再具体说说。我最早图省事,直接用随机划分跑了训练,验证集的mAP50到了0.92,当时还挺高兴。后来换了按序列划分,mAP50直接掉到0.8出头。为什么?因为随机划分时,同一段视频的相邻帧被塞进了训练集和验证集,验证集里的画面基本是从训练集复制过去的,模型当然“考得好”。
所以无论你用哪个数据集做检测模型,只要数据本身来自视频流,就一定要按视频序列或时间戳划分,而不是按帧随机划分。否则你评估的不是模型性能,而是数据集的记忆能力。
4.2 红外图预处理和格式处理技巧
红外图像本质是单通道灰度图,但YOLO系列的输入往往是三通道。如果你直接把单通道的数据硬塞进去,很多框架会报错,或者把数据复制成三通道。我建议在预处理阶段就明确做一步转换,灰度图转RGB三通道,或者干脆转成三通道的伪彩图像。
我自己的实验里,直接复制灰度到三通道效果最稳。伪彩图比如蓝红映射虽然好看,但有时候会引入不自然的颜色边界,反而让模型学到奇怪的东西。
另一个容易被忽略的是噪声问题。红外图像普遍有竖条纹噪声和热噪声,我做过一个对比实验,训练前先做简单的双边滤波去噪,小目标的检测准确率确实有提升,尤其是夜间红外图像。代价是推理时多一步预处理的时间,看你的场景能不能接受。
4.3 小目标训练的经验技巧
小目标检测的经典困境是,模型在小目标上的损失在总损失里占比太低,训练被大目标带偏。HIT-UAV虽然目标都不大,但大小还是有差异的,有些近处的车能有60x60像素,远处的只有5x5。
我试过几种解决思路,按效果排序:
第一,提高输入分辨率。这个最直接,让模型“看”到更多像素。用640或更大的输入尺寸,同时配合mosaic增强。
第二,去大目标或对大目标降权。如果你的任务核心关注小目标,可以把训练集中特别大的目标框去掉,或者给损失函数按目标尺寸加权。YOLOv8没有直接内置这种加权,但可以通过自定义损失实现,技术上有点门槛。
第三,用专门的小目标检测分支或注意力模块。比如在Neck层加一个针对小目标的特征融合层,或者用Transformer的注意力机制来增强小目标的特征响应。这块做起来就比较重了,适合有一定算法基础的研究型尝试。
4.4 常见训练问题速查表
| 问题 | 现象 | 解决方案 |
|---|---|---|
| 验证集mAP虚高 | 随机划分训练集/验证集 | 按视频序列划分数据 |
| 小目标漏检严重 | 小目标召回率低 | 提高输入分辨率,使用小目标增强策略 |
| 高温背景误检 | 屋顶/路面被识别为目标 | 增加负样本,或使用红外图像的对比度特征做预处理 |
| 训练过拟合 | 验证loss升高,训练loss下降 | 降低模型复杂度,增强数据增强,早停 |
| 标签文件和图像不匹配 | 训练时报错标签不存在 | 统一文件命名规则,使用脚本校验一一对应 |
5. 数据集扩展思路与后续优化方向
HIT-UAV虽然好用,但它的场景和数量终究有限。我自己在实际项目中做过一些扩展,效果还不错。
最推荐的做法是自建红外小目标数据集。现在无人机和红外相机都不贵了,买一个入门级的红外热成像相机模块,挂在无人机上飞几次,采集上百段视频,再配合半自动标注,就能把HIT-UAV扩展成自己的场景数据。我在做电力巡检项目时,就是先用HIT-UAV训练出基础模型,再用自己采集的红外数据做微调,迁移效果比直接用HIT-UAV训练扎实很多。
另外可以结合其他数据集的思路来做域适应。比如用可见光航拍数据做预训练,然后用HIT-UAV微调,让模型先学会“航拍视角下的目标长什么样”,再学“红外模态下目标的视觉特征”,这种两阶段训练在跨模态场景下往往比直接训练效果更好。
回看我用HIT-UAV这几年的经验,最大的体会是:数据集的价值不在于它本身有多大,而在于它能否逼着你的算法去解决真实问题。红外小目标检测赛道的难点从来不是“网络结构不够深”,而是“目标信息量太少、背景太复杂”。HIT-UAV恰恰把这两个难点都暴露得很充分,用它练出来的模型,放到真实场景里至少不会翻车翻得太难看。
最后再分享一个小技巧:如果你要在论文或项目里引用这个数据集,记得看下载页面附带的说明文档,确认标注类别定义和版本信息。不同渠道流传的版本偶尔有标注差异,先花十分钟看完说明再动手,能省下后面大量排查问题的时间。
本文还有配套的精品资源,点击获取