点击下方
卡片
,关注“
自动驾驶之心
”公众号
>>
点击进入→
自动驾驶之心
『
目标检测
』
技术交流群
本文只做学术分享,如有侵权,联系删文
实时目标检测中击败YOLO家族?来看看百度飞桨的PaddleDetection团队提出的 RT-DETR究竟强在哪里。
众所周知,实时目标检测(Real-Time Object Detection)一直被YOLO系列检测器统治着,YOLO版本更是炒到了v8,前两天百度飞桨的PaddleDetection团队发布了一个名为 RT-DETR 的检测器,宣告其推翻了YOLO对实时检测领域统治。论文标题很直接:《DETRs Beat YOLOs on Real-time Object Detection》,直译就是 RT-DETR在实时目标检测中击败YOLO家族!
论文链接:
https://arxiv.org/abs/2304.08069
代码链接:
https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/rtdetr
去年各大YOLO争相发布各显神通的场景才过去没多久,如今RT-DETR发布,精度速度都完胜所有YOLO模型,是否宣告了YOLO系列可以淘汰了?其实之前本人已经写过3篇文章介绍各个YOLO【从百度飞桨PaddleYOLO库看各个YOLO模型】(
https://zhuanlan.zhihu.com/p/550057480
),【YOLO内卷时期该如何选模型?】(
https://zhuanlan.zhihu.com/p/566469003
)和
【YOLOv8精度速度初探和对比总结】
,如今还是想再结合 RT-DETR的论文代码,发表一下自己的一些浅见。
关于RT-DETR的设计:
结合PaddleDetection开源的代码来看,RT-DETR是基于先前DETR里精度最高的DINO检测模型去改的,但针对实时检测做了很多方面的改进,而作者团队正是先前PP-YOLOE和PP-YOLO论文的同一波人,完全可以起名为PP-DETR,可能是为了突出RT这个实时性的意思吧。
RT-DETR模型结构
(1)Backbone:
采用了经典的ResNet和百度自研的HGNet-v2两种,backbone是可以Scaled,应该就是常见的s m l x分大中小几个版本,不过可能由于还要对比众多高精度的DETR系列所以只公布了HGNetv2的L和X两个版本,也分别对标经典的ResNet50和ResNet101,不同于DINO等DETR类检测器使用最后4个stage输出,RT-DETR为了提速只需要最后3个,这样也符合YOLO的风格;
(2) Neck:
起名为HybridEncoder,其实是相当于DETR中的Encoder,其也类似于经典检测模型模型常用的FPN,论文里分析了Encoder计算量是比较冗余的,作者解耦了基于Transformer的这种全局特征编码,设计了AIFI (尺度内特征交互)和 CCFM(跨尺度特征融合)结合的新的高效混合编码器也就是 Efficient Hybrid Encoder ,此外把encoder_layer层数由6减小到1层,并且由几个通道维度区分L和X两个版本,配合CCFM中RepBlock数量一起调节宽度深度实现Scaled RT-DETR;
HybridEncoder设计思路
(3)Transformer:
起名为RTDETRTransformer,基于DINO Transformer中的decoder改动的不多;
(4)Head和Loss:
和DINOHead基本一样,从RT-DETR的配置文件其实也可以看出neck+transformer+detr_head其实就是一整个Transformer,拆开写还是有点像YOLO类的风格。而训练加入了IoU-Aware的query selection,这个思路也是针对分类score和iou未必一致而设计的,改进后提供了更高质量(高分类分数和高IoU分数)的decoder特征;
(5)Reader和训练策略:
Reader采用的是YOLO风格的简单640尺度,没有DETR类检测器复杂的多尺度resize,其实也就是原先他们PPYOLOE系列的reader,都是非常基础的数据增强,0均值1方差的NormalizeImage大概是为了节省部署时图片前处理的耗时,然后也没有用到别的YOLO惯用的mosaic等trick;训练策略和优化器,采用的是DETR类检测器常用的AdamW,毕竟模型主体还是DETR类的;
关于精度:
来看下RT-DETR和各大YOLO和DETR的精度对比: