SyNet
论文链接:https://arxiv.org/abs/2012.12991
开源代码:https://github.com/mertalbaba/SyNet
创新点:
- 在训练两个模型前使用“cut-paste”的数据增强;
- 提出一种不同模型预测框的加权融合算法。
1. Motivation
- 无人机航拍图像与自然图像的拍摄方式不同,导致了以下三个问题:
- 缺乏大目标方差的大型无人机图像数据集;
- 无人机航拍图像有较大的尺度方差和方向变化;
- 地面和空中图像在纹理和形状特征上存在差异。
- 目前已发展的单阶段和多阶段检测器各有优缺点,将每种解决方案的优势结合起来可以达到更强的检测效果。
- 目的是降低多阶段检测器的high false negative(高假阴性率),提高单阶段检测器proposal的质量。
2. Method
- 本文提出了一种集成网络——SyNet。它将多阶段与单阶段方法结合,降低多阶段的假阴性率,提高单阶段提出框的概率。
- 作为构建块,使用预先训练好的CenterNet和Cascade R-CNN作为backbone,并有一套性能好的合并策略。
2.1. Object detecion
下面是定义变量。
- 定义边界框: ( x t l p , y t l p , x b r p , y b r p ) (x_{tl}^{p},y_{tl}^{p},x_{br}^{p},y_{br}^{p}) (xtlp,ytlp,xbrp,ybrp),分别表示点 p p p是左上角点和右下角点的预测框坐标。
- 评估预测框好坏的标准,使用 交并比(IOU) 来进行评价,公式为: I o U ( b p , b g t ) = a ( b p ∩ b g t ) a ( b p ∪ b g t ) IoU(b^{p},b^{gt})=\frac{a(b^{p}\cap b^{gt})}{a(b^{p}\cup b^{gt})} IoU(bp,bgt)=a(bp∪bgt)a(bp∩bgt)其中, a a a是计算给定边界框区域的区域函数, b p b^{p} bp是预测边界框, b g t b^{gt} bgt是真实边界框。
- 对于基于IoU的预测评估来说,选择一个合适的阈值 t t t是很重要的。(有点废话了……)
接下来是方法介绍。
1)Cascade RCNN: 该网络是Faster RCNN的顺序重复版本,包含多个重复网络并且是顺序连接起来的。这是第一个目标检测构建块。
- 对于目标检测,有两个主要问题:
(1)针对IoU分数q的某一交集优化的检测网络在测试集中可能表现不佳。原因是该网络仅针对q进行了优化,并且测试样本的IoU分数可能与q显著不同;
(2)随着样本IoU分数的增加,样本数量严重减少,这使得高质量的检测器 (IoU分数高)容易出现过拟合问题。因为样本数量不够。
为解决这个两个问题,故提出了一种级联网络来增加高IoU分数导致的样本数量不足,以及允许检测器对不同的IoU分数下表现都很好。结构图如下图所示。
- 对于边界框预测,单阶段检测器 d d d试图最大限度地减少边界框回归损失,函数定义为 (这部分就是Cascade RCNN的原始定义,H就是smooth L1损失): L ( d ) = ∑ i G ( b i p , b i g t ) L(d)=\sum_{i}^{ }G(b_{i}^{p},b_{i}^{gt}) L(d)=i∑G(bip,bigt)其中, G ( b i 1 , b i 2 ) = H ( x t l 1 − x t l 2 ) + H ( y t l 1 − y t l 2 ) + H ( x b r 1 − x b r 2 ) + H ( y b r 1 − y b r 2 ) G(b_{i}^{1},b_{i}^{2})=H(x_{tl}^{1}-x_{tl}^{2})+H(y_{tl}^{1}-y_{tl}^{2})+H(x_{br}^{1}-x_{br}^{2})+H(y_{br}^{1}-y_{br}^{2}) G(bi1,bi2)=H(xtl1−xtl2)+H(ytl1−ytl2)+H(xbr1−xbr2)+H(ybr1−ybr2)和 H = { 0.5 x 2 , i f ∣ x ∣ < 1 ∣ x ∣ − 0.5 , o t h e r w i s e H=\left\{\begin{matrix} 0.5x^{2}, & if |x|<1 \\ |x|-0.5, & otherwise \end{matrix}\right. H={0.5x2,∣x∣−0.5,if∣x∣<1otherwise
在上图级联结构中,不是使用单个回归器来生成预测结果(如左图),是使用N个边界框回归器(如右图)来生成最终的边界框预测,函数定义为: b p = d N ∘ d N − 1 ∘ ⋯ ∘ d 1 ( x , b g t ) b^{p}=d_{N}\circ d_{N-1}\circ \cdots \circ d_{1}(x,b^{gt}) bp=dN∘dN−1∘⋯∘d1(x,bgt)其中, x x x是输入图像, ∘ \circ ∘是一个迭代算子,使得每个回归器使用前一个回归器的输出。这允许网络在不同的IoU输入分数中表现良好,因为每个回归器都以不同的样本质量训练的,并针对不同的IoU分数进行优化。
在Cascade RCNN中,在n阶段的检测器 d n d_{n} dn最小化为: L ( x n , b g t ) = L C ( c n ( x n ) , y n ) + I [ y n ≥ 1 ] L L ( d n ( x n , b n p ) , b g t ) L(x_{n},b^{gt})=L_{C}(c_{n}(x_{n}),y_{n})+I[y_{n}\geq 1]L_{L}(d_{n}(x_{n},b_{n}^{p}),b^{gt}) L(xn,bgt)=LC(cn(xn),yn)+I[yn≥1]LL(dn(xn,bnp),bgt)其中, c n c_{n} cn表示第 n n n个分类器, b n p = d n − 1 ( x n − 1 , b n − 1 p ) b_{n}^{p}=d_{n-1}(x_{n-1},b_{n-1}^{p}) bnp=dn−1(xn−1,bn−1p), x n x_{n} xn表示第 n n n个阶段的输入, y n y_{n} yn表示第 n n n个阶段的标签, L C ( c n ( x n ) , y n ) L_{C}(c_{n}(x_{n}),y_{n}) LC(cn(xn),yn)表示分类损失: L C ( c n ( x n ) , y n ) = − l o g ( p ( y = y n ∣ x ) ) L_{C}(c_{n}(x_{n}),y_{n})=-log(p(y=y_{n}|x)) LC(cn(xn),yn)=−log(p(y=yn∣x)) L L ( d n ( x n , b n p ) , b g t ) L_{L}(d_{n}(x_{n},b_{n}^{p}),b^{gt}) LL(dn(xn,bnp),bgt)表示回归损失 (交叉熵损失): L L ( d n ( x n , b n p ) , b g t ) = G ( d n ( x n , b n p ) , b g t ) L_{L}(d_{n}(x_{n},b_{n}^{p}),b^{gt})=G(d_{n}(x_{n},b_{n}^{p}),b^{gt}) LL(dn(xn,bnp),bgt)=G(dn(xn,bnp),bgt)
- 随着级联结构的深入,高IoU评分样本的数量增加,为更高级别的检测器提供了足够的样本,从而防止过拟合的问题。
- 总结: 通过对初始样本进行重新采样,依次增加样本的IoU分数,得到一个对过拟合具有鲁棒性的网络。此外,由于不同阶段的检测器被优化为不同的IoU分数,训练和测试性能之间的不匹配在更高水平上被消除。
2)CenterNet: 由于CenterNet选取anchor的方式是将目标检测作为一个关键点估计来处理的,因此将其作为第二个构建块。
对应这篇论文:Objects as points
- 在该方法中,首先将关键点的热图预测为 Y p Y^{p} Yp,其中 1 1 1表示关键点预测, 0 0 0表示背景标签。对于真实关键点元组表示为 g t i = ( x i g t , y i g t ) ∈ R 2 gt_{i}=(x_{i}^{gt},y_{i}^{gt})\in R^{2} gti=(xigt,yigt)∈R2,热图表示为: Y i g t = e − ( x i g t − k x q u a n t i ) 2 − ( y i g t − k y q u a n t i ) 2 2 σ k q u a n t i 2 Y_{i}^{gt}=e^{\frac{-(x_{i}^{gt}-k_{x}^{quant_{i}})^{2}-(y_{i}^{gt}-k_{y}^{quant_{i}})^{2}}{2\sigma _{k^{quant_{i}}}^{2}}} Yigt=e2σkquanti2−(xigt−kxquanti)2−(yigt−kyquanti)2其中, k q u a n t i = ⌊ x i g t / R , y i g t / R ⌋ k^{quant_{i}}=\left \lfloor x_{i}^{gt}/R, y_{i}^{gt}/R\right \rfloor kquanti=⌊xigt/R,yigt/R⌋, R R R表示为输出步长, σ \sigma σ表示大小自适应的标准差。
- heatmap:预测关键点的网络通过最小化损失来训练,公式表示为: L h = − 1 K ∑ g t i g [ Y i g t ] ( 1 − Y g t i p ) 2 l o g ( Y g t i p ) + g [ Y i g t ] ( 1 − Y i g t ) 4 ( Y g t i p ) 2 l o g ( 1 − Y g t i p ) L_{h}=\frac{-1}{K}\sum_{gt_{i}}^{ }g[Y_{i}^{gt}](1-Y_{gt_{i}}^{p})^{2}log(Y_{gt_{i}}^{p})+g[Y_{i}^{gt}](1-Y_{i}^{gt})^{4}(Y_{gt_{i}}^{p})^{2}log(1-Y_{gt_{i}}^{p}) Lh=K−1gti∑g[Yigt](1−Ygtip)2log(Ygtip)+g[Yigt](1−Yigt)4(Ygtip)2log(1−Ygtip)其中,若x=1时, g ( x ) = x g(x)=x g(x)=x,否则 g ( x ) = 1 − x g(x)=1-x g(x)=1−x。K表示关键点的数量。
- offset:预测每个点的偏移量,以便通过最小化从离散化中恢复误差。 L o = 1 K ∑ g t i ∣ O k q u a n t i + k q u a n t i − g t i / R ∣ L_{o}=\frac{1}{K}\sum_{gt_{i}}^{ }|O_{k^{quant_{i}}}+k^{quant_{i}}-gt_{i}/R| Lo=K1gti∑∣Okquanti+kquanti−gti/R∣
- size:目标损失。对于每个目标,关键点被用作目标的中心点,其边界框表示为 ( x l t , y l t , x b r , y b r ) (x_{lt},y_{lt},x_{br},y_{br}) (xlt,ylt,xbr,ybr)。对于每个目标类别 c c c,宽和高预测向量为 v c p = ( w c p , h c p ) v_{c}^{p}=(w_{c}^{p},h_{c}^{p}) vcp=(wcp,hcp),通过最小化来预测第 i i i类目标的真实高度和宽度 ( v g t c ) i = ( x l t i − x b r i , y l t i − y b r i ) (v^{g}t_{c})_{i}=(x_{lt}^{i}-x_{br}^{i},y_{lt}^{i}-y_{br}^{i}) (vgtc)i=(xlti−xbri,ylti−ybri),损失函数定义为: L v = 1 n ∑ i ∣ v c p − ( v g t c ) i ∣ L_{v}=\frac{1}{n}\sum_{i}^{}|v_{c}^{p}-(v^{g}t_{c})_{i}| Lv=n1i∑∣vcp−(vgtc)i∣
- 总损失表示为: L = L v + L o + L h L = L_{v}+L_{o}+L_{h} L=Lv+Lo+Lh
- 对于边界框预测,检测到的局部最大关键点被用作每个类的中心点,且一个边界框表示为 ( x l t i + o i − w i / 2 , y l t i + q i − h i / 2 , x b r i + o i + w i / 2 , y b r i + q i + h i / 2 ) (x_{lt}^{i}+o^{i}-w^{i}/2,y_{lt}^{i}+q^{i}-h^{i}/2,x_{br}^{i}+o^{i}+w^{i}/2, y_{br}^{i}+q^{i}+h^{i}/2) (xlti+oi−wi/2,ylti+qi−hi/2,xbri+oi+wi/2,ybri+qi+hi/2),其中 ( o , q ) (o,q) (o,q)表示偏移预测结果, ( w , h ) (w,h) (w,h)表示尺度预测结果。
3)加权bounding box融合: 该部分是没有使用NMS删除一些边界框,而是利用所有的预测来聚成边界框集群。
- 首先,将所有的预测框存储在 C C C中。
- C i C_{i} Ci包含标签为 i i i的匹配框。迭代地,将每个带有 j j j标签的预测边界框与 F j F_{j} Fj进行比较( F j F_{j} Fj是边界框 C j C_{j} Cj的融合框),用五元组表示 ( s , x l t , y l t , x b r , y b r ) (s,x_{lt},y_{lt},x_{br},y_{br}) (s,xlt,ylt,xbr,ybr), s s s为置信度分数。
- 当一个预测框
b
b
b与
F
j
F_{j}
Fj匹配上,然后添加到
C
j
C_{j}
Cj中,融合框
F
j
F_{j}
Fj的置信度可重新计算为:
F
j
(
s
)
=
∑
A
k
∈
C
j
A
k
(
s
)
N
F_{j}(s)=\frac{\sum_{A_{k}\in C_{j}}^{}A_{k}(s)}{N}
Fj(s)=N∑Ak∈CjAk(s)N为所有
C
j
C_{j}
Cj框的数量,
A
k
A_{k}
Ak表示边界框的样本,因此更新后的融合框为:
F
j
(
x
1
)
=
∑
A
k
∈
C
j
A
k
(
s
)
A
k
(
x
t
l
)
s
1
+
s
2
+
⋯
+
s
N
F_{j}(x_{1})=\frac{\sum_{A_{k}\in C_{j}}^{ }A_{k}(s)A_{k}(x_{tl})}{s_{1}+s_{2}+\cdots +s_{N}}
Fj(x1)=s1+s2+⋯+sN∑Ak∈CjAk(s)Ak(xtl)
F j ( x 2 ) = ∑ A k ∈ C j A k ( s ) A k ( x b r ) s 1 + s 2 + ⋯ + s N F_{j}(x_{2})=\frac{\sum_{A_{k}\in C_{j}}^{ }A_{k}(s)A_{k}(x_{br})}{s_{1}+s_{2}+\cdots +s_{N}} Fj(x2)=s1+s2+⋯+sN∑Ak∈CjAk(s)Ak(xbr)
F j ( y 1 ) = ∑ A k ∈ C j A k ( s ) A k ( y t l ) s 1 + s 2 + ⋯ + s N F_{j}(y_{1})=\frac{\sum_{A_{k}\in C_{j}}^{ }A_{k}(s)A_{k}(y_{tl})}{s_{1}+s_{2}+\cdots +s_{N}} Fj(y1)=s1+s2+⋯+sN∑Ak∈CjAk(s)Ak(ytl)
F j ( y 2 ) = ∑ A k ∈ C j A k ( s ) A k ( y b r ) s 1 + s 2 + ⋯ + s N F_{j}(y_{2})=\frac{\sum_{A_{k}\in C_{j}}^{ }A_{k}(s)A_{k}(y_{br})}{s_{1}+s_{2}+\cdots +s_{N}} Fj(y2)=s1+s2+⋯+sN∑Ak∈CjAk(s)Ak(ybr)其中, s k = A k ( s ) s_{k}=A_{k}(s) sk=Ak(s)是 A k A_{k} Ak的置信度分数。 - 正如上述方程所表明的,每个边界框的置信度分数被用作权重,以便为每个类别获得有意义的最终边界框。 在将所有预测框依次与簇进行比较后,将框的置信度分数重新标度。
这部分可参考论文:
- Soft-nms–improving object detection with one line of code
- Cad: Scale invariant framework for real-time object detection
2.2. SyNet
- 本文提出了一种利用Cascade RCNN(多阶段)和CenterNet(单阶段)的集成方法来进行航拍目标检测。
- 主要动机是多阶段检测器可能会产生更多的假阳性(即检测不出一些目标的存在),而单阶段检测器则是检测出来的预测框效果不佳(可能是回归框不准确)。因此,作者想要将两种网络结合起来,利用其优势来填补对方的不足。
- 具体的网络结构如下图所示。
- 标注说明:Image是输入图像;FPN是初始特征的特征金字塔结构;R是由FPN生成的候选区域;F是特征提取器 (CRCNN使用的是Resnet101,CenterNet使用的是DLA作为主干网);RoI Pooling将候选区域变成同等的尺寸;N1~N3表示由卷积层组合而成的网络;CN表示CenterNet网络;L1 ~L4表示标签预测,R1 ~ R4是回归框预测;E是基于加权集成函数。
详见论文Weighted Boxes Fusion: ensembling boxes for object detection models
流程详见链接https://blog.csdn.net/qq_41131535/article/details/106898081
- 流程大概是同一批图片分别输入到两个网络中进行目标检测,得到了两个网络预测出来的目标候选框,然后使用一种集成加权的方法获得最终的预测结果。
2.3 Image Augmentation
数据增强方法主要参考这篇论文:Cut, paste and learn: Surprisingly easy synthesis for instance detection (类似解读)
- 主要是对所使用的数据集产生real-like的目标,从而提高目标检测器的检测效果。
- 如上图,Visdrone数据集中的 “car” 被用作目标实例,这是一种收集场景图像的过程。
- 将收集的目标图像作为预测掩码,如果可用的话,将它们转换成二进制图像。最后把掩码和目标的卷积放置在随机场景图像中进行图像增强。 本文是对于每个数据集,做成两个增强图像,其中包含了超过10个且少于30个粘贴的附加目标,用以提升训练性能。
3. Experiments
3.1 Dataset
- Visdrone:训练集 6471张,测试集1580张。没有使用截断和遮挡来进行数据增强。
- MS-COCO:训练集118000张,测试集5000张。
3.2 Results
-
Visdrone结果:
-
MS-COCO:
4. Conclusion
- 提出了一种联合多阶段和单阶段的目标检测方法(如,Cascade RCNN和CenterNet)。
- 数据增强,使用了裁剪-粘贴的方法,促进了提特征网络的检测效果。
- 提出一种加权融合函数。