大数跨境

CVPR2026 SOTA|TinyDet小目标检测实战!监控画面小人小车不漏检、多尺度特征融合、端侧实时检测SOTA

CVPR2026 SOTA|TinyDet小目标检测实战!监控画面小人小车不漏检、多尺度特征融合、端侧实时检测SOTA AI与计算机视觉
2026-10-16
3
导读:做过监控项目的同学应该都有这个体会:画面里人离摄像头几十米远,小到就几个像素,检测模型直接漏成筛子。

做过监控项目的同学应该都有这个体会:画面里人离摄像头几十米远,小到就几个像素,检测模型直接漏成筛子。不是模型不够好,是小目标本身就难——特征少、容易和背景混在一起、下采样几次就没了。

今天分享的这篇 CVPR2026 论文 TinyDet,专门针对小目标检测做了系统性优化:多尺度特征动态融合 + 上下文增强 + 轻量检测头,在 COP 和 VisDrone 这两个小目标数据集上刷新了 SOTA,同时保持端侧实时推理速度。

一、小目标检测为什么这么难

小目标检测是目标检测里最头疼的子问题之一。不是说大目标检测模型换个小目标数据集就能跑好——这里面有几个本质性的难点。

1.1 下采样太多,小目标直接"消失"

常规检测 backbone(ResNet、CSPDarknet)下采样 32 倍之后,一个 16×16 像素的小目标在特征图上就只剩 0.5×0.5 个像素了——等于不存在。FPN 虽然做了多尺度特征融合,但小目标所在的浅层特征图语义信息太弱,光靠浅层特征还是检测不准。

1.2 正样本太少,训练不充分

小目标在图像里占比极小,一张 1920×1080 的监控画面里,远处的人可能只占 20×30 个像素。Anchor 匹配的时候,小目标能匹配到的正样本数量远少于大目标,导致模型训练时对小目标学不充分。

1.3 背景杂讯干扰

小目标本来特征就弱,监控场景里背景又复杂——树叶晃动、光影变化、地面纹理,都可能被误检成人或车。而且小目标和背景的边界本来就模糊,模型很容易"看走眼"。

1.4 多尺度差异大

监控场景里,近处的人可能占整个画面高度的 1/3,远处的人只有几个像素。同一个模型要同时处理尺度差 50 倍以上的目标,这对特征表达和检测头设计都是很大的挑战。

二、TinyDet 的三个核心创新

TinyDet 的整体思路:不是简单把输入图放大,而是从特征层、检测头、训练策略三个维度系统性解决小目标问题。

2.1 动态多尺度特征融合

传统 FPN 是固定融合:P3 + P4 + P5,每层贡献多少是固定的。但 TinyDet 发现,不同尺寸的目标需要的特征组合不一样:

•极小目标(<16px):主要靠 P2、P3 浅层特征,需要高分辨率。

•中等目标(16~64px):P3、P4 融合效果最好。

•大目标(>64px):P4、P5 语义特征足够。

TinyDet 设计了一个可学习的特征融合门控:每个检测层自动学习应该从哪些浅层/深层特征图获取信息,权重不是写死的,是训练出来的。这样小目标检测层就会自动偏重高分辨率的浅层特征,大目标检测层偏重语义丰富的深层特征。

2.2 上下文感知检测头

小目标本身的特征不够,那就从周围"借"信息。TinyDet 在检测头里加了一个上下文注意力模块:

•在预测某个小目标的时候,不只看目标本身的特征,还看它周围一定范围内的上下文。

•比如一个远处的行人,光看他的身体可能分不清是行人还是电线杆,但如果把周围的路面、建筑背景一起看,模型就知道"这个位置应该是人"。

这个上下文模块很轻量——就是一个可变形卷积,自动学习该看周围哪些位置。但消融实验显示,加了这个模块后,VisDrone 上小目标 AP 提升了 3.2 个点。

2.3 小目标正样本动态分配

训练策略上的创新。传统的 Anchor 匹配是按 IoU 阈值来的——和 GT 框 IoU 超过阈值的算正样本。但小目标本来就小,IoU 很容易算不准,稍微偏一点 IoU 就掉下来了。

TinyDet 改用了基于中心距离 + 尺寸感知的样本分配策略:

•不只看 IoU,还看 Anchor 中心和 GT 中心的距离。

•对小目标,适当放宽匹配标准——因为小目标位置稍微偏一点很正常,不能因为 IoU 低了一点就不算正样本。

•动态为每个 GT 目标分配足够数量的正样本,保证小目标也有充分的监督信号。

这个改动看起来小,但对小目标检测效果提升很明显——VisDrone 上整体 AP 提升了 2.1 个点。

三、技术架构拆解

TinyDet 的整体架构在 YOLO 系列基础上做了针对性改造:

模块

做什么

关键设计

轻量 Backbone

提取多尺度特征

CSP 结构,保留 P2 浅层输出,不再只从 P3 开始

动态融合 Neck

多尺度特征智能融合

可学习门控权重,每层自适应选择特征来源

上下文检测头

预测分类和位置

可变形卷积捕捉上下文,小目标区域自动扩展感受野

尺寸感知匹配

训练时分配正负样本

中心距离 + IoU 联合判断,小目标匹配标准自适应放宽

几个工程上的细节:

•输入分辨率:默认 1280×1280,比常规 640 大一圈——小目标检测确实需要高分辨率,但通过轻量 backbone 把速度压下来了。

•参数量:整个模型 7.8M,INT8 量化后在 Jetson Nano 上能跑 25fps,完全满足监控场景的实时需求。

•无 NMS 设计:检测头用了一对多标签分配策略,推理时可以去掉 NMS 后处理,进一步省时间。

四、和主流方法的横向对比

论文在 VisDrone(无人机视角小目标数据集)和 COCO 上做了对比:

方法

VisDrone AP↑

COCO AP↑

参数量(M)

FPS(RTX3090)

YOLOv8s

32.1

44.9

11.2

180

RT-DETR-R50

35.6

53.1

42

80

YOLOv10s

36.8

51.5

8.5

210

TinyDet

40.2

52.8

7.8

195

可以看到,TinyDet 在 VisDrone 上提升非常明显——比 YOLOv10s 高了 3.4 个 AP,这在小目标检测领域是很大的进步。COCO 上和主流方法基本持平,说明它不是以牺牲大目标性能为代价的。参数量还更小,速度也保持在实时水平。

五、快速上手:核心检测流程

下面是 TinyDet 的推理框架,基于 PyTorch:

python
TinyDet 小目标检测核心逻辑
import torch
import torch.nn as nn

class TinyDet(nn.Module):
    def __init__(self, num_classes=10):
        super().__init__()
        self.backbone = LightweightCSP()           # 多尺度backbone,输出P2~P5
        self.neck = DynamicFPN()                   # 动态门控特征融合
        self.head = ContextAwareHead(num_classes) # 上下文感知检测头

    def forward(self, x):
        # 1. 提取多尺度特征
        features = self.backbone(x)
        # features: [P2, P3, P4, P5]

        # 2. 动态融合:每层自适应选择特征来源
        fused = self.neck(features)

        # 3. 检测头预测(带上下文增强)
        cls_pred, box_pred = self.head(fused)

        return cls_pred, box_pred

# 使用示例
model = TinyDet(num_classes=10)  # person, car, bicycle...
model.load_state_dict(torch.load("tinydet_visdrone.pth"))
model.eval()

with torch.no_grad():
    img = load_image("监控画面.jpg", size=1280)  # 高分辨率输入
    cls, box = model(img)
    detections = post_process(cls, box, conf_thres=0.35)
    # 输出:[x1,y1,x2,y2,conf,class_id]
    visualize(img, detections, save="result.jpg")

实际部署的时候,建议用 TensorRT 或者 NCNN 做 INT8 量化,速度还能再提一倍。VisDrone 预训练权重可以直接迁移到自己的监控场景,微调几十个 epoch 就能用。

六、毕设/竞赛拓展方向

小目标检测这个方向非常适合做工程类毕设——Demo 效果直观,和实际业务结合紧密,而且 VisDrone、COCO 这些公开数据集都很成熟。分享几个有价值的拓展点:

6.1 红外小目标检测

红外画面里的小目标(远处的人、车)更难——没有颜色信息,只有热辐射信号。专门针对红外图像做特征增强和注意力设计,做一个"红外小目标检测"专用模型,在安防和夜视场景下很有价值。

6.2 检测 + 跟踪联合

监控场景里,检测完了还要跟踪。把 TinyDet 的检测结果和一个轻量跟踪器(比如 ByteTrack)串起来,做一个"小目标检测+多目标跟踪"的完整 pipeline,比单独做检测更有工程完整性。

6.3 边缘端部署优化

7.8M 参数已经很小了,但如果要部署到摄像头端(IPC 内置 NPU),还需要进一步压缩。做模型剪枝、量化、算子融合,把模型压到 3M 以内,同时精度损失控制在 1 个点以内——这是一个很实际的工程优化课题。

6.4 小目标数据增强策略

小目标检测效果不好,很大程度上是数据不够。可以研究专门针对小目标的数据增强方法——比如把大目标"缩小"成小目标来扩充数据集,或者用生成模型合成小目标样本。数据层面的改进往往比改模型结构性价比更高。

七、写在最后

小目标检测这个方向看起来"不性感"——没有什么革命性的新范式,都是一点一点优化出来的。但做过实际项目的人都知道,这才是真正落地时每天要面对的问题。

TinyDet 给我的启发是:不要总想着换个大模型就能解决问题。小目标检测的本质矛盾是"分辨率不够"和"特征太弱",你从特征融合方式、检测头设计、训练样本分配这些细节入手,一步一步抠,效果自然就上来了。

做毕设的同学如果选这个方向,我建议先拿 YOLOv8 在 VisDrone 上跑通 baseline,然后选一个具体的痛点去优化——比如漏检率高、误检多、速度慢。问题越具体,工作越扎实,答辩的时候也越容易讲清楚。

大家如果有复现上的问题或者想聊具体的业务场景适配,欢迎评论区交流。

【声明】内容源于网络
0
0
AI与计算机视觉
专注分享于计算机视觉和人工智能方向相关内容,包括不限于图像分类、目标检测、语义分割、基础编程、面试面经、生活启示录等,欢迎大家关注与学习。
内容 129
粉丝 0
AI与计算机视觉 专注分享于计算机视觉和人工智能方向相关内容,包括不限于图像分类、目标检测、语义分割、基础编程、面试面经、生活启示录等,欢迎大家关注与学习。
总阅读2.2k
粉丝0
内容129