找回密码
 立即注册
查看: 191|回复: 5

各位大佬,想请教一下SSD模型还有什么优化的策略或者方向 ...

[复制链接]
发表于 2023-1-28 07:03 | 显示全部楼层 |阅读模式
各位大佬,想请教一下SSD模型还有什么优化的策略或者方向 ...
发表于 2023-1-28 07:08 | 显示全部楼层
SSD 属于目标检测领域较为经典的 one-stage 算法,即使是在当下 anchor-free 大行其道的背景下, 依然具有研究意义,在工业界应用也比较广泛。
除了网络结构(FPN、Attention等)和 loss(focal_loss、IoU_loss等)两大优化方向外,个人认为目前比较有研究潜力的是 anchor 设置和分配的问题,也是SSD能大幅度提升和改进涨点的方向。
其实 SSD 在 anchor 分配上缺点很明显:单一评判标准(IoU),固定单一的正负划分阈值(0.5),正负 anchor 比例失调等,都有很大的改进空间。
例如,CVPR2020 《Bridging the Gap Between Anchor-based and Anchor-free Detection》一文中提出的自适应 anchor 分配策略 ATSS,能很好地弥补类 SSD 算法在 anchor 匹配上的劣势,使其性能比肩当下流行的 anchor-free 类算法。
这里特附上我自己阅读ATSS论文时的随行笔记,希望对题主有帮助 ↓
<hr/>1 引出问题

Anchor-free 方法成为目标检测领域近年来的研究热门,检测指标要明显优于 Anchor-based 的方法,造成两者之间差异的原因是什么?
作者分别挑选了 Anchor-free 的代表方法:FCOS,和Anchor-based的代表方法:RetinaNet 进行了几组对比实验。
1.1 实验一

在 RetinaNet 方法上加入 FCOS 所使用的 trick(GroupNorm、 GIOU、 In GT Box、 Centerness、 Scalar):


通过实验数据发现,即使 RetinaNet 加上了这些 trick,依然和 FCOS 有0.8个点的差距。
引出第二组实验:回归方式和分类样本分配的差异对比。
1.2 实验二

(1) anchor 正负标签的设置差异


在 RetinaNet 中,正样本是指 anchor 与 GT 的 IoU大于一定阈值,负样本是指 IoU 小于一定阈值;
在 FCOS 中,首先将在 GT 内的中心点定义为候选正样本,然后根据 FPN 不同层设置的 scale 阈值从这些候选样本中选出最终的正样本。
(2) 回归方式上的差异


RetinaNet 的回归目标是4个值,包括 anchor 中心点的偏移和长宽的伸缩。而 FCOS 的回归值则是中心点与上下左右边界的距离。


通过上面的实验可以看出,如果采用同样的 anchor 分配机制,两种方法的指标差距几乎可以忽略不计,而不同 anchor 分配机制的方法性能差异较大。
1.3 结论

采用点回归和 box 回归对结果影响不大,如何选取正负样本将会极大的影响最后的检测效果。
2 新的Anchor分配机制-ATSS

基于上面的实验分析,作者提出了一种根据目标特性自适应的 anchor 分配机制:Adaptive Training Sample Selection(ATSS),如下所示 ↓


(1) 对于每个 GT,首先找到候选的正 anchor 集合:
在每个金字塔层级(共L层)上,选择 k 个离 GT 中心 l2 距离最近的 anchor boxes , 对于每个 GT 会有 k*L 个候选正 anchor。
(2)为每个目标计算阈值:            
计算候选 anchor 与 GT 之间的 IoU Dg,计算均值  和标准差  ,其阈值为:
(3)确定最终的正 anchor:            
选择 ,且中心点在 GT 边框内部的anchor作为最终的正样本,如果一个 anchor box 被分配给了多个 GT,选择 IoU 最高的那个 GT。

3 ATSS的意义

(1) 根据目标统计特征,自动调整正负样本选取方式。


如图3(a),当  越大,表示候选样本质量很高,可以选取一个高的 IoU 阈值。如图3(b),  越小,表示绝大多数的候选样本较差,应当选取一个较低的阈值来确保 GT 可以匹配到 anchor。如图3(a),  较大时,往往意味着有一个 FPN 层出现了较高的 IoU,说明该层非常适合这个物体的预测,因此  和  加起来得到一个较高的阈值,我们只从这一层选取正样本。如图3(b),  较小意味着存在多个适合该目标的金字塔层,因此  和 加起来得到一个较低的阈值,会在这些层级上选取正样本。和传统方式不同(预先设定死的IoU阈值,一般为0.5),ATSS 的阈值是根据每个目标的统计特性进行自适应计算得出的,这样更尊重目标自身特性,而不是一概而论。
这点我其实有一些存疑,使用中心点距离候选anchor的方式更加注重anchor是否离GT够近,这种方式可能对点回归方式更加有益,但对于box回归来说,这种操作可能会过滤掉那些IoU较大或者和GT形状更加匹配但是中心点距离又排不进top_k的anchor,从而增加box回归的难度。
或许大家可以评论区讨论一下?
(2) 每个物体匹配到的 anchor 数量更加均匀 $a_i$
作者做了一个统计,大约有16%的 anchor 位于 之间。虽然 IoU 不是标准的正态分布,但根据统计,每个 GT 大约会匹配到 个正 anchor,且对尺度、位置和 aspect ratio 是不变的。而传统的方式对于较大 size 物体会匹配到较多 anchor,这是不公平的。
关于这点,我们专门做了对比可视化实验,ATSS 方式确实会对所有 size 目标做到相对均衡,这也是自适应阈值带来的益处。
4 实验



在 RetinaNet 中应用 ATSS,AP 提升了2.9%。
在 FCOS上 的应用:Center sampling 版本采用 ATSS 的思想,从选取 GT 内的 anchor point 改为选取每层离 GT 最近的 top 个候选 anchor point,提升了0.8% AP;full 版本将 FCOS 的 anchor point 改为 anchor box 根据 ATSS 选择正负样本,仍然使用 point 回归方法,提升了1.4% AP。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2023-1-28 07:13 | 显示全部楼层
其它回答已经总结的很全了,可以再看看TensorFlow Object Detection API里面的网络。其实他们FPN,OHEM,Focal Loss都实现了,还有各种Backbone,SSDLite。但他们特别低调,不说自己是DSSD,Retinanet,只说是SSD。。。训练时各种Trick都可以自由组合。我之前还改了一个ShuffleNet的Backbone。训练好了还可以用TensorRT去量化和加速。
发表于 2023-1-28 07:13 | 显示全部楼层
不论是从two-stage到one-stage,从anchor-based到anchor-free,目前检测算法的发展其实没有本质上的创新,基本都是incremental innovation,缺少breaking innovation。我个人觉得里面的问题就在于很多细节大家没有去深入琢磨,Devils are in the details。
我试问几个问题,看看大家是否能给出一个非常solid的回答:
1,SSD-like 和 FPN-like 的backbone到底区别在哪里?两者的优劣势是什么?
2,在检测中,anchor-based是不是必须的?(我一直觉得anchor这个就是反人类的)
3,在网络上中,detection head里面的神经元看到的原图是什么?
检测里面有很多common sense, 比如大家都知道感受野的重要性,不同尺度的物体需要不同的感受野,不同层的feature map 融合有助于使用local和global的语义信息等等。这些认知其实是很难再让检测领域往前更进一步了。需要到细节中去,感受野到底是怎么影响的?
这里我想说,大家一定要深入研究感受野这个事情。我在未来将给出一套检测的框架,在这个框架里面我会解释检测的运作机理,同时给出上面三个问题我的答案。未来的检测可以根据问题的本身去生成独立的网络结构,不用一味地使用主流的pretrained backbone,在精度和速度之间可以做到非常好的平衡。
发表于 2023-1-28 07:22 | 显示全部楼层
SSD加入FPN,DSSD诞生了;再加入focal-loss,Retinanet诞生了;SSD加入two stage的做法,RefineDet诞生了;SSD需要预训练,加入BN后不需要预训练,ScratchDet诞生了;anchor数量太多减少一些,YOLO产生了。本身就是一个单阶段检测器的跨时代框架,你熟悉哪一块加入进去,就能优化它。网络结构,损失函数,优化方法,NMS后处理,速度等切入一个方面,总能找到可以优化的地方
发表于 2023-1-28 07:32 | 显示全部楼层
不清楚你想问的方向是什么,ssd的改进方向,其实也是整个目标检测领域的改进方向。常见的一些需求:
1、更快,vgg,resnet在生产中还是太大了,如何裁剪网络才是合理的
2、更准,现在大多数的检测方法ap值都比较高,但是看一下曲线就知道是通过更高的召回来提升ap值的,也就是说误检可能比较多,常见的focal loss就是一个,误检增加比较明显
3、更通用,不同的场景,不同的缩放比,不同大小的目标变化,能否一个网络梭哈
4、充分利用视频流信息,单帧图像检测研究得比较多了,vid的方向还有待开发,但实际生产中很多时候都是视频流,能不能利用视频流信息提升检测的效果或者降低检测的耗时也是一个点
5、超高分辨率检测,安防监控逐渐开始使用4k,8k或者环视等等,在超大分辨率上是不是可以直接完成目标的检测工作
等等。。。
那么常见的改进方向就是:
1、裁网络,缩减vgg或者resnet的通道数,使用类似mobile net的网络
2、高低层信息融合,各种fpn梭哈测一波
3、检测跟踪融合,多帧检测融合,单独的vid技术
除去这些还可以改进定位不准,nms或者说后处理耗时过多等等。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-6-2 07:32 , Processed in 0.097540 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表