论文简记:恶劣天气场景中恢复增强目标检测的退化建模
传送门
Degradation Modeling for Restoration-enhanced Object Detection in Adverse Weather Scenes
方法论
前人工作
本文指出要通过图像的潜在的空间信息来做目标检测,而非先图像恢复再做目标检测这种两阶段的处理,也不是后来的域适应处理(将恶劣天气条件下的目标检测视为从源域(高质量图像)到目标域(低质量图像)学习的任务),进而提高精度。
其给出的一种可能的解释是,虽然经过恢复算法处理后的恢复图像的视觉质量可能与真实的高质量图像略有不同,但它们之间存在一定的域差异,并且恢复的图像可能会丢失一些对人类有益的潜在信息。
目标检测(历史回顾):
回归老本行,首先要从RCNN讲起,基于区域提案的方法——先通过CNN生成感兴趣的目标框,然后再进行识别(两阶段法)
接下来就是大名鼎鼎的YOLO。来个传送门:图像预处理自查手册:YOLO
一阶段法提取图像特征后直接回归和预测目标的类别和位置等信息,速度更快,工业界常用。
然后在极端天气领域的目标检测下,论文指出:早期针对低质量图像的目标检测方法主要采用图像恢复算法对低质量图像进行预处理,然后将其输入后续的目标检测网络进行检测。常见的图像恢复方法包括除雨[22]-[25]、除雾[19][22]和除雪[26]、[27]、[56]、[57]等。直观上,图像恢复算法可以消除低质量图像的退化,使图像视觉上清晰并改善检测结果。然而,现实情况是,这种表面清晰度不一定能提高低质量图像中目标检测的性能,这可能是由于恢复图像和高质量图像之间的域差异所致。
RDMNet
下图是论文的算法架构:
其提出的 RDMNet 的架构。主要组件包括跨阶段部分(CSP)模块[64]、空间金字塔池(SPP)[13]、动态变换器特征增强(DTFE)模块[16]、残差块(RB)[65]和通道注意块(CAB)
给定输入低质量图像X(例如,雨天、雾天和雪天图像),退化编码器 (Degradation encoder) 首先用于提取低质量图像的退化信息,然后学习多尺度退化表示以区分不同类型和程度的退化。
将学习到的多尺度退化表示发送到目标检测编码器 (Object Detection Encoder) 和恢复编码器 (Restoration Encoder) ,以指导特征的变换。
损失函数:
对于 退化编码器 DE:采用对比损失L_Cl
对于 目标检测编码器 ODE:损失函数有三个参数加权构成 L_IoU是回归损失,L_Cls是分类损失,L_Focal是Focal Loss[53]
而对于 恢复编码器 ResE: L1 regularization(L1范数作为损失)注意这个损失会越来越小(每20个epoch来缩小其超参数一次)
DE:
其采用对比学习方法对退化进行建模,约束退化编码器通过对比损失来学习图像的退化信息。具体来说,给定原始低质量图像X作为查询样本Q,通过随机翻转和旋转低质量图像X获得的图像被视为正样本P,其与查询样本Q具有相同类型的退化,而其他低质量图像被视为正样本P。数据集中具有不同退化类型或程度的图像作为负样本 N 。然后,退化编码器对上述样本进行编码,学习多尺度退化表示,最终产生用于构造对比损失的一维表示向量,分别为 rQ 、 rP 和 rN 。由于对比学习需要大量的负样本,因此负样本队列rQueue通常被构造为大量负样本的集合。
ODE:
对象检测编码器。目标检测编码器作为所提出的 RDMNet 的一个分支,主要用于目标检测特征的提取和下采样。我们主要关注构建双分支结构网络,重点关注退化编码器和恢复编码器的设计和交互,
参考TogetherNet的博客:论文阅读<TogetherNet:Bridging Image Restoration and Object Detection Together via Dynamic Enhancement L>
而目标检测编码器主要参考TogetherNet [16]的设计。引入动态变压器特征增强(DTFE)模块来进一步提取最后一个尺度的特征。 DTFE 由两个可变形卷积网络(DCN)[68]和一个 Transformer 块[69]组成。
对于输入的低质量图像,它首先通过Focus操作提取浅层特征,并将空间尺度减少一半。该操作可以有效地减少特征下采样过程中的信息损失。然后,提取的浅层特征被输入到后续的特征提取主干中。具体来说,这个特征提取主干包括四个尺度的特征提取过程,每个尺度的特征变换由几个跨阶段部分(CSP)组成
ResE:
与对象检测编码器不同,恢复编码器主要用于提取与恢复相关的特征。 MPRNet [66] 中的通道注意块(CAB)被用作构建恢复编码器的基本模块。具体来说,对于输入的低质量图像,与对象检测编码器类似,最初通过 Focus 操作提取浅层特征,并将特征下采样一半,然后通过五个级联的 CAB 在五个尺度上提取更深的特征,其中下采样是通过双线性插值实现的。
CAB主要由两个3×3卷积和一个通道注意模块组成,其中通道注意帮助网络更好地过滤重要特征,同时减少不太重要特征的影响。为了更好地集成目标检测和恢复编码器的特征,并利用退化表示进行指导,这两个编码器分支的主要结构和特征尺度是对称的。
Multi-scale Bi-directional Feature Fusion Block(多尺度双向特征融合块)
与基于高质量图像数据集的常见目标检测算法直接对提取的特征进行回归预测不同,我们提出的方法是恢复协作模型。除了对象检测编码器分支之外,还增加了恢复编码器分支来提取图像特征,以获得具有恢复特性的特征。然后将这些特征与对象检测编码器分支的特征融合,以增强模型表示低质量图像的能力。
此外,由于主流目标检测算法通常对输入尺度的1/8、1/16和1/32尺度的特征进行回归预测,因此我们将这三个尺度的目标检测和恢复编码分支的特征融合到获得具有更强表征能力的特征 (也就是那几个特殊的连接线) 。该方法不仅促进了目标检测性能的提高,而且通过目标检测特征的影响增强了恢复分支特征的语义表达能力。
实验
按照其Github上面的代码即可
百度网盘转存居然还会超过文件数量(所以为什么不直接打包),要注意的是下载下来时候由于是百度网盘所以又莫名其妙触发了其和谐机制。需要在文件的剩下几个文件夹里面删除对应的图片索引防止训练失败。
注意修改train.py里面的路径(整体的数据集路径),此外由于是在自己的计算机里面单卡运行,需要修改一下下面几个参数,包括 CUDA_VISIBLE_DEVICES 对应的数字以及 dataset_dir 对应的路径,选择weather对应的数据集等等可以进行验证。
Cuda = True
os.environ["CUDA_VISIBLE_DEVICES"] = '0'
classes_path = 'model_data/rtts_classes.txt'
model_path = 'model_data/yolox_s.pth' # Pretrained weights for better performance (COCO or VOC)
# model_path = '' # No pretrained weights
dataset_dir = r'D:\development\SLAM\Advance weather\RDMNet\Datasets'
weather = 'Snow' # Snow, Rain, Haze, Mixed
train_annotation_path = f'Datasets/train_{weather}.txt'
val_annotation_path = f'Datasets/test_{weather}.txt'