☰
无人机检测数据集实操:选型、自采标注、格式转换与YOLO训练避坑
2026/10/4 1:06:11 网站建设 项目流程

简介:面向航空视觉中的旋翼无人机检测任务,这份数据集汇集了7000多张已标注的UAV图片,类别统一为drone,可同时用于目标检测、跟踪与识别等算法开发。资源中图片与标签一一对应,标签同时提供txt和xml两种格式,适配YOLO系列与Pascal VOC等常见训练框架,大幅降低数据整理成本。整个压缩包共包含22675个文件,其中jpg图像7558个、txt标签7559个、xml标签7558个,包体约876.78MB,结构规范,便于直接划分训练集和验证集。对正在搭建无人机检测系统的研究者或开发者而言,这类带完整标注的旋翼无人机数据集较为稀缺,可直接用于模型微调或精度评估。目前已有1111人学习使用,是验证算法性能和开展对比实验的实用基础数据。

1. 空中无人机的检测数据集:为什么差一个像素就决定漏检还是误报

「空中无人机的检测数据集」这个标题,覆盖两类经常被混为一谈的任务:一是把无人机当作被检测目标(反无人机、空域安防、机场净空管理),二是用无人机当作成像平台去检测地面目标(航拍车辆、行人、基础设施巡检)。两条路线的数据组织方式、标注粒度和训练难点完全不同。我在实际项目里见过最大的误判,是拿航拍车辆的数据集去训练反无人机模型,结果模型对着飞鸟和杂物输出一串高置信度框。这个方向真正难的点在于目标尺度小、背景动态变化、光照跨度大,以及公开数据集的来源和标注规范差异巨大。这篇文章会从数据选型、采集标注、格式转换到训练排错,完整拆一遍。

2. 公开数据集怎么选:从 VisDrone 到 DOTA 的选型清单

2.1 先分清两件事:检测无人机,还是用无人机做检测

很多刚接触这个方向的人,搜索时看到「无人机检测数据集」就直接下载,等训练完才知道数据集里的目标是汽车和行人。这是两类任务,数据组织形式差异非常大。

第一类,以无人机为检测目标。这类数据集的图像由地面相机、安防摄像头或另一架无人机拍摄,目标大概率只有几十个像素甚至几个像素,背景包含天空、云、楼宇、树木、电线杆。标注是「单类或少数类」的目标检测,困难集中在远距离小目标和与鸟、风筝、塑料袋的形状混淆。Anti-UAV、SKYNET 这类数据集属于这个方向。

第二类,以无人机为成像平台。图像来自无人机机载相机,常见视角是俯视或斜视,检测目标是车辆、行人、船只、农作物病虫害等。VisDrone、UAVDT、DOTA 是这一类里最常被用到的。困难和第一类不一样:目标虽然相对大一些,但遮挡、截断、阴影和旋转角度问题突出,而且画面里常常有几十上百个目标,标注一致性很难保证。

两者的预处理流程也不一样。第一类数据集视野中目标数量少,但背景复杂度高,负样本(纯天空、纯地面)的价值比正样本还大;第二类数据集需要关注目标间相互遮挡和密集排列,评估指标也更看重 AP50 在小目标子集上的表现。选型第一步不是比较哪个数据集精确,而是判断你的部署场景属于哪一类。

2.2 六个能直接落地的公开数据集与适用场景

下面这张表只覆盖我实际用过或做过复现的数据集,列出的是关键特征,方便你做粗略筛选。

数据集检测目标标注形式场景适合谁
VisDrone行人、汽车、自行车、三轮车等约 10 类水平框无人机俯视、多城市、多高度无人机视角下的地面目标检测
DOTA飞机、车辆、船只、球场等 15 类旋转框 + 水平框大型航拍影像需要旋转框识别的遥感检测
UAVDT汽车、卡车、公交车水平框无人机俯视复杂交通场景无人机交通巡检
Anti-UAV无人机(单类)水平框 + 时序轨迹地面/机载视角,含昼夜反无人机安防
DroneVehicle车辆(可见光 + 红外成对)水平框无人机红外与可见光同步视角多光谱融合检测
HRSC2016船只旋转框海面遥感港口水域巡检、舰船识别

VisDrone 是无人机视角里我做训练时第一个会推荐的数据集,类别分布和真实航拍场景接近。DOTA 适合需要旋转框的项目,配合 mmrotate 这类框架可以直接训练旋转检测头,如果你最后要接的是一条自动化处理管线,旋转框往往比水平框在拥挤场景里更有用。Anti-UAV 做反无人机方向的 baseline 比较合适,但注意它在某些子集里目标较大,直接用它训练出来的模型在小目标上的表现需要再验证。HRSC2016 类别少、目标清晰,适合做迁移学习的起点,先把训练管线跑通,再换到复杂数据集。

这几个数据集都不是同一时间、同一相机、同一标注规范产出的,混用前必须做标签对齐。比如 DOTA 里的「飞机」和 VisDrone 里没有飞机类,混合训练时类别序号重排是必然的,后续转换脚本里要格外小心。

2.3 选型不看名气看这三个参数:高度、视角、目标尺度

公开数据集的「名气」经常误导人。VisDrone 很好,但它是无人机俯视地面;如果你的场景是机场跑道旁的地面摄像头检测无人机,用它做预训练效果会很差。我选数据集只看三个参数。

第一个是飞行高度或拍摄高度。高度决定了目标在图像里的像素尺度。Anti-UAV 很多画面里无人机占几十到上百像素,而真实的远程反无人机场景里目标可能只有 8 乘以 8 像素。高度不匹配时,可以用图像缩放模拟,但真实退化效果和大气扰动很难完全模拟。第二个是相机视角。俯视、平视、斜视三种视角下目标外观差别巨大,尤其是无人机这种形状不规则的物体,俯视看到的旋翼布局和平视看到的机身轮廓完全不是一回事。第三是目标尺度分布。拿到数据集第一件事就是统计 bbox 宽高分布,如果宽度小于 32 像素的目标占比低于 10%,你的模型在小目标上的表现基本不可信。

我一般用下面这段代码快速检查一个数据集的标注分布,不管什么格式,先转成统一的 JSON 再统计。这个步骤能立刻暴露数据的真实可用性,也是后续任何预处理的基础。

# check_bbox_dist.py —— 统计数据集中边界框的尺寸分布 import json from pathlib import Path ann_path = Path("annotations/instances_train.json") data = json.loads(ann_path.read_text()) widths, heights = [], [] for ann in data["annotations"]: x, y, w, h = ann["bbox"] widths.append(w) heights.append(h) small = sum(1 for w, h in zip(widths, heights) if w < 32 and h < 32) print(f"总目标数: {len(widths)}") print(f"小于32x32的目标占比: {small / len(widths):.2%}") print(f"目标宽度中位数: {sorted(widths)[len(widths) // 2]:.1f}")

这段代码的关键是 bbox 的读取方式,COCO 里bbox是[左上角x, 左上角y, 宽, 高],不要和 YOLO 的[中心x, 中心y, 宽, 高]混淆。输出结果如果「小于 32x32 占比」过低,后面做小目标增强时就要加大权重;如果中位数宽度超过 100 像素,说明这个数据集更适合评估中大目标而不是小目标识别。这一步做的不是数据分析,是在给自己设置训练预期。

3. 自己采集并标注一套无人机检测数据:两周流水线

3.1 采集方案设计:航线、高度、云台角度怎么组合才有泛化性

公开数据集永远和你的场景有偏差,到一定阶段就需要自己采集。采集方案直接决定数据质量上限,比标注更影响最终效果,因为标注只能还原拍摄到的信息,不能补回拍丢的细节。

我一般把采集分成三个维度来设计。第一个维度是高度分层:按 50 米、100 米、150 米三档采集,如果设备允许再加 30 米低空档。无人机视觉感知中,高度直接影响目标像素尺寸,只在一个高度采集会让模型变成高度敏感,换个高度就失效。第二个维度是视角:云台俯角从 0 度到 60 度每隔 15 度采一轮,平视视角对应远距离探测,大俯角对应近距离盘旋巡检。第三个维度是背景多样性:城市楼顶、郊外农田、水面、树林边缘、机场跑道周围,每类背景下至少保证 200 张有效帧。只在一个场地采集的数据,模型会把场地特有的纹理当成目标特征。

航线设计也有一个常见做法:不要只飞规则直线,要加入圆弧、8 字绕飞和悬停旋转。这样同一个目标在不同帧里有不同姿态角,相当于免费的数据增强。悬停时目标几乎不动,连续抽帧会得到大量高度相似画面,后面清洗时要按相似度去重。

这里必须提一句合规问题。采集前确认空域是否允许飞行、是否需要报备,这个不是流程建议,是前提条件。飞行平台的选型上,我见过两种主流组合:一种是成品飞控加开源无人机平台,另一种是带 RTK 定位的工业级机型。做检测数据集不需要极端的定位精度,但相机需要提前做畸变标定,尤其是广角镜头,边缘畸变会让小目标的边界框位置误差被放大。

3.2 标注工具与标注规范:小目标、遮挡、截断怎么标

标注工具的选择上,小型项目用 CVAT 或者 X-AnyLabeling 就够,大型多人在线标注再用产线级的标注平台。CVAT 的好处是支持 AI 预标注,先用一个初步模型跑一遍,标注员只需要修正漏框和错框,效率能提升 3 倍左右,但预标注的质量必须抽检,模型漏掉的目标标注员容易习惯性忽略。

标注规范不能靠感觉,要落到文档上。我实际用的规范包含下面几条。

第一,类别定义要有明确外延。比如「无人机」到底包不包括固定翼、包括不包括玩具级四旋翼,都要写死。第二,遮挡和截断的处理规则:遮挡面积超过 30% 时照常标完整框,因为 YOLO 这类水平框检测器学习的是目标整体位置,截断目标只标可见部分会导致目标中心偏移。第三,小目标的标注底线:我一般规定长边不小于 8 像素的目标必须标注,小于 8 像素的舍弃并记录为「未标注小目标」。这个底线来自经验——小于 8 像素的目标在训练中基本学不出稳定特征,标了反而增加标注噪声,这个尺度问题也让模型无法获得一致的梯度信号。第四,密集场景下的重叠处理:目标间重叠严重的,两个都标,不要只标前景遮挡者。

标注质量检验方面,我会将已标注数据的 10% 做二次复核,重点看小目标和遮挡目标。判定的方法是逐类计算平均框尺寸,如果某一类的平均框明显小于其他类,检查是不是漏标了背景中的大目标,或者误把边角料当成了目标。

3.3 清洗与增强:别把压缩噪声当成纹理学进去

采集回来的原始素材不能直接进训练集。第一道清洗是剔模糊帧,无人机振动、快速转向都会产生运动模糊,这类画面里的目标边缘不清晰,会让模型学到错误的轮廓特征。第二道清洗是去重复帧,连续视频里相邻两帧的重叠度经常超过 80%,如果全部保留,数据集的有效多样性很低,但训练时每个 epoch 都在反复看这些几乎相同的画面,典型的表现就是 loss 降得快、验证集分数虚高。

重复帧检测可以用感知哈希加余弦相似度来做,也可以简单点:每隔 5 帧抽 1 帧,再人工抽看一遍。抽帧间隔至少要大于运动位移一整个目标宽度的距离,才能真正产生新视角。

数据增强要区分预训练阶段和微调阶段。预训练阶段可以用 Mosaic-4 拼接增强,把四张图拼成一张,变相增大 batch 中的场景多样性,对密集小目标尤其有效。但拼图会切断目标上下文,比如汽车周围的道路纹理变了,如果只做预训练没问题,微调阶段就要降低 Mosaic 概率。另一个建议是 HSV 扰动,色调偏移设 0.01、饱和度 0.5、明度 0.4,这个范围不会让颜色失真,但能让模型对光照变化不敏感。这方面的配置经验最终都要通过验证曲线来确认,不要照抄任何人的参数。

4. 把标注转为 YOLO 格式:转换脚本、数据划分与四个训练参数

4.1 从 COCO 标注转到 YOLO:转换脚本与参数说明

公开数据集的格式五花八门,YOLO 系模型要的是每张图对应一个同名 txt 文件,每行是类别 cx cy w h,坐标归一化到 0 到 1。准备一套健壮的转换脚本是整个流程里最值得花费时间的事情。

# coco_to_yolo.py —— 把 COCO 格式标注转成 YOLO 训练格式 import json import os from pathlib import Path coco_path = "annotations/instances_train.json" image_dir = "images/train" out_labels = "labels/train" # 类别映射表,训练时 data.yaml 的 names 必须和这里顺序完全一致 category_map = { 0: "drone", 1: "bird", 2: "helicopter", } os.makedirs(out_labels, exist_ok=True) coco = json.loads(Path(coco_path).read_text()) # 先建立 image_id 到文件名的映射 img_id_to_name = {img["id"]: img["file_name"] for img in coco["images"]} # 按 image_id 分组,一个图像的 bbox 合在一起写一个 txt from collections import defaultdict anns_by_img = defaultdict(list) for ann in coco["annotations"]: anns_by_img[ann["image_id"]].append(ann) for img_id, anns in anns_by_img.items(): img_name = img_id_to_name[img_id] img_width = next(img["width"] for img in coco["images"] if img["id"] == img_id) img_height = next(img["height"] for img in coco["images"] if img["id"] == img_id) txt_path = Path(out_labels) / (Path(img_name).stem + ".txt") lines = [] for ann in anns: cat_id = ann["category_id"] if cat_id not in category_map: continue x, y, w, h = ann["bbox"] # COCO: 左上角 x, 左上角 y, 宽, 高 # 转成 YOLO 需要的中心点坐标和宽高,再归一化 cx = (x + w / 2) / img_width cy = (y + h / 2) / img_height nw = w / img_width nh = h / img_height # clamp 到 [0, 1] 防止越界,这是最容易忽略的边界问题 cx = min(max(cx, 0.0), 1.0) cy = min(max(cy, 0.0), 1.0) nw = min(max(nw, 0.0), 1.0) nh = min(max(nh, 0.0), 1.0) lines.append(f"{category_map[cat_id]} {cx:.6f} {cy:.6f} {nw:.6f} {nh:.6f}") txt_path.write_text("\n".join(lines))

这段脚本有几个地方容易翻车。category_map的键是 COCO 标注里的数字 ID,值要写成字符串,因为在 data.yaml 里类名就是字符串列表,顺序错位会直接导致训练时类别语义对不上。坐标归一化前必须先拿到图像真实宽高,有些数据集标注里图像的宽高字段是 EXIF 信息,和实际解码出来的像素尺寸不一致,这种数据会以很隐蔽的方式污染所有框的坐标。clamp 的意义在于处理那些标注时框画出图像边界的异常情况,不 clamp 训练时有些框架会报错,而且越界的框往往伴随极端 loss 波动。

4.2 数据划分与目录结构:按场景切分,不是按文件随机切

数据划分直接决定验证集的可信度。一个常见错误是按文件名随机打散后划分,如果同一条飞行航线的连续帧被同时分进训练集和验证集,验证分数会虚高,因为模型已经见过几乎一样的背景。按场景划分的做法是:把同一次飞行任务产生的所有帧归为一组,整组划分。

# split_by_scene.py —— 按场景分组划分数据 import random from pathlib import Path # 假设 images 目录下按场景存放子目录:images/scene_01/*.jpg, images/scene_02/*.jpg train_ratio, val_ratio = 0.7, 0.2 random.seed(42) scene_dirs = [p for p in Path("images").iterdir() if p.is_dir()] random.shuffle(scene_dirs) n_train = int(len(scene_dirs) * train_ratio) n_val = int(len(scene_dirs) * val_ratio) train_scenes = scene_dirs[:n_train] val_scenes = scene_dirs[n_train:n_train + n_val] test_scenes = scene_dirs[n_train + n_val:] def write_split(scenes, split_name): lines = [] for scene in scenes: for img in scene.glob("*.jpg"): lines.append(str(img.resolve())) Path(f"{split_name}.txt").write_text("\n".join(lines)) write_split(train_scenes, "train.txt") write_split(val_scenes, "val.txt") write_split(test_scenes, "test.txt")

YOLO 训练时可以直接用这个三个 txt 文件作为训练集列表,配合data.yaml指定。比例上我习惯 7:2:1,如果采集场景只有 5 个,验证集至少保留 1 个完整场景。测试集严格意义上应该永远不参与调参,只用来最终评估。这里的关键参数是random.seed(42),固定种子保证每次划分结果一致,否则模型调参过程中验证集成员一直在变,你的对比实验根本不成立。

4.3 训练配置里最容易改错的四个参数

训练阶段我见过最多的反复试错,都集中在四个参数上。

第一个是imgsz。很多项目直接从 YOLOv8 默认的 640 开始,但无人机检测里目标偏小,640 分辨率下目标可能只有几个像素。常见做法是先用 640 跑通整个流程,再尝试 1280 或 1536,如果你的显卡显存有限,用 1280 训练但推理时切片切块,效果比直接上大树图更好。不要一开始就数值拉满,你没法判断模型上限低是数据问题还是输入分辨率问题。

第二个是batch。batch 大小受显存约束,常见值是 8、16、32。batch 小于 16 时,BatchNorm 的统计量不稳定,典型现象是验证集上指标忽高忽低。用 T4 这类推理卡时,训练侧通常不会用它来训练,但推理侧批量大小和帧率估算可以参考:单路 1080p 25 帧输入,640 分辨率下用 TensorRT 优化后通常能跑 3 到 5 路,具体取决于检测头和 NMS 的开销,这个数值我一般现场压测完才敢承诺。

第三个是epochs配合早停。不要拍脑袋定 300 epoch,设一个patience=20,验证集 loss 20 轮不降就停。无人机数据的背景复杂度高,训练标签又有噪声,过拟合往往发生在最后几十个 epoch,早停能省时间还能拿到更稳的权重。

第四个是lr0。YOLO 系默认值通常是 0.01,但小数据集和小 batch 下学习率要相应下调到 0.001 左右。判断方法是看前 10 个 epoch 的 box_loss,如果快速降到 1.0 以下,大概率过冲了,如果几乎不动,可能是学习率太低或标签有问题,优先检查标签文件是否有空文件、类别序号越界。

5. 排查与避坑:小目标漏检、类间混淆与光照翻车

5.1 误检一串鸟,或把鸟看成无人机

现象:模型在黄昏和多云天空背景下,连续把飞鸟、风筝、塑料袋识别成无人机,一张图上出现五六个高置信度框。

原因:反无人机检测任务里目标和鸟在形状上高度相似,都是细长、有翼展、深色轮廓。如果训练集中无人机只有几百个实例,而负样本里包含大量含鸟或含运动物体的天空图,模型的特征空间根本拉不开两个类。另一个原因是类别不均衡,无人机类数量远小于背景类,模型倾向于用高召回阈值来减小 loss,结果就是把背景里一切动的东西都框出来。

解决:分两步走。第一步是数据层,收集至少 1000 张纯天空、含鸟、含风筝、含电线杆的负样本图,标注时单独建一个「bird」类而不是直接当背景。让检测器要么单独输出 bird,要么从输出中过滤掉。第二步是推理层,在模型输出后加一个目标尺寸过滤,无人机的最小可探测尺寸设为 12 像素,小于这个值的检测全部丢弃。这样做的代价是极小目标漏检,但误报率能下降一个数量级,对于安防场景误报比漏报更不可接受。

5.2 远距离小目标漏检

现象:训练时 AP50 在 0.85 以上,但部署后 100 米外的无人机基本检测不到,输出的置信度全部低于 0.3。

原因:训练集中确实有小目标样本,但占比过低。我在第 2.3 节里写的那个统计脚本在这里就派上用场了,如果小于 32x32 的目标占比不足 20%,训练时模型在损失函数里对小目标的梯度贡献被大目标淹没。

解决:三个手段叠加。数据层用复制粘贴增强,把小目标从原图中裁剪下来,随机粘贴到背景图上,同时保留原始标注,一张图可以多贴几次。训练层把imgsz从 640 提到 1280,让目标在输入图中占更多像素。推理层用切片推理,把大图切成 640 或 832 的块,分别推理再合并结果,NMS 阈值保持默认的 0.5。切片重叠率至少 20%,否则目标跨切片边界时会被切开,漏检会更严重。这个方法能立刻提升小目标召回,但推理耗时增加,需在帧率预算内权衡。

5.3 白天好用、黄昏就翻车

现象:正午测试效果不错,傍晚光线变暗后大量漏检,早晚低角度阳光下的侧光场景更是全面失效。

原因:训练数据集的拍摄时间集中在白天,光照分布单一。黄昏和低角度阳光会显著改变目标的对比度和色温,尤其是无人机这类深色目标在逆光下和背景融为一体,边缘特征几乎消失。

解决:采集阶段把一天分成清晨、正午、黄昏三个时段,每个时段的背景各占三分之一。实在补拍不了时,用图像增强模拟:降低亮度、提高色温、加随机阴影遮罩。注意模拟的色温和真实黄昏的物理特征有差距,只能作为补充手段。真正的解法是标注时对黄昏样本多标一些,让模型学会在低对比度下感知边缘。部署时如果条件允许,最好采用「可见光 + 红外」的双通道配置,DroneVehicle 这类成对数据集就是为此设计的,红外在黄昏场景的边缘保持远好于可见光。

5.4 标注漂移与数据集文件损坏

现象:训练中期 loss 异常升高,或者某个类别突然全部不识别。

原因:最常见的是标注文件损坏,比如 txt 里出现了空行、负坐标、坐标数值大于 1。这类脏数据在训练时会产生极大 loss,反向传播的梯度把前面训练好的特征都冲乱了。第二常见的原因是标注工具自动保存时产生的漂移,一个人标完没保存,另一个人覆盖了,类别同名但框的位置全变。

解决:训练前做一次全量校验,遍历所有标签文件,检查行数、坐标范围、类别序号是否在合法区间内。下面的脚本可以在数据进入训练前直接给出异常文件列表。这个步骤我每次都会跑一遍,虽然看起来浪费时间,但它拦截过的问题比任何训练技巧都值钱。

# validate_labels.py —— 检查 YOLO 标签文件是否干净 from pathlib import Path label_dir = Path("labels/train") num_classes = 3 # 和 data.yaml 的类别数一致 errors = [] for txt in label_dir.glob("*.txt"): for line_no, line in enumerate(txt.read_text().splitlines(), 1): parts = line.strip().split() if len(parts) != 5: errors.append(f"{txt.name}:{line_no} 列数不对") continue cat, cx, cy, w, h = int(parts[0]), float(parts[1]), float(parts[2]), float(parts[3]), float(parts[4]) if cat < 0 or cat >= num_classes: errors.append(f"{txt.name}:{line_no} 类别越界") if not (0 <= cx <= 1 and 0 <= cy <= 1 and 0 < w <= 1 and 0 < h <= 1): errors.append(f"{txt.name}:{line_no} 坐标越界") print(f"共检查 {len(list(label_dir.glob('*.txt')))} 个文件,发现 {len(errors)} 个问题") for err in errors[:20]: print(err)

这个脚本只解决数据合法性,解决不了语义漂移。语义漂移要靠第 3.2 节提到的二次复核抽检来盯。抽检时重点看同一类目标的框是否覆盖同一部位,比如「无人机」有的标了旋翼整体,有的只标了机身,这种不一致在训练时会让模型学出一个很钝的目标中心,定位精度的上限被锁死。

6. 落地前先做一次反向验证:算的不是 mAP 而是安全裕度

模型训练完成不等于可以部署。我需要用一个独立验证脚本,模拟真实推理场景来测一遍,重点关注召回率而不是精确率。因为反无人机场景漏检一架的代价远高于误报十次,误报可以由后续的跟踪策略过滤掉,漏检则直接击穿安全底线。

# evaluate_recall.py —— 在固定置信度下统计召回率和误报率 from pathlib import Path import numpy as np # preds: 每行 [cx, cy, w, h, conf, cls] # gts: 每行 [cx, cy, w, h, cls] # 这里只做演示,真实实现用 IoU 匹配并取最大值 def evaluate(preds, gts, conf_threshold=0.25, iou_threshold=0.5): preds = [p for p in preds if p[4] >= conf_threshold and p[5] == 0] # 只看无人机类 matched = set() tp = 0 for pred in preds: best_iou = 0 best_gt = -1 for gi, gt in enumerate(gts): if gi in matched: continue iou = compute_iou(pred[:4], gt[:4]) # 需要单独实现 if iou > best_iou: best_iou = iou best_gt = gi if best_iou >= iou_threshold: tp += 1 matched.add(best_gt) fn = len(gts) - len(matched) fp = len(preds) - tp recall = tp / (tp + fn) if (tp + fn) > 0 else 0 precision = tp / (tp + fp) if (tp + fp) > 0 else 0 return recall, precision

在部署前,我会专门准备一组「极端情况」测试集:大雾天、逆光、极小目标、目标贴地飞行。这组数据不参与训练也不参与调参,只在最终版本上跑一次。如果极端集上的召回率低于 95%,我不会把模型放上去,而是回到数据或推理策略里加保险。这个习惯来自我上一次把置信度阈值调到 0.6,结果测试集指标很好看,现场却漏掉了几个低对比度的小目标,从那以后我再也不只看总榜分数了。这个方向值得投入,但你得先能诚实地回答一个问题:你的模型在最差的光线、最小的目标下,还敢不敢拍胸脯。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询