目标检测:一文读懂 TTFNet (CVPR2020)

论文:Training-Time-Friendly Network for Real-Time Object Detection

论文链接:https://arxiv.org/pdf/1909.00700.pdf

代码链接: https://github.com/ZJULearning/ttfnet

经典的 anchor-free 目标检测算法 FCOS 和 CenterNet 自提出以来,受到了业界广泛的关注,围绕其算法改进也层出不穷,本篇介绍的TTFNet就是其一,它改进了CenterNet,提出了一种利用高斯核对训练样本进行编码的方法,取得了更好的准确率和训练速度。

1 为什么提出 TTFNet?

本文旨在提高模型训练收敛速度,在CenterNet基础上做了进一步改进。

提高模型训练速度有2种潜在方式:(1) 增大学习率;(2) 减少使用数据增强,如果直接使用这两个方法一般会存在问题,增大学习率可能导致训练发散,而减少使用数据增强容易使模型过拟合。所以接下来的问题是:

做什么样的改进可以增大学习率而不影响模型性能?

使用 SGD 优化器,网络权重更新方式为:
w t + 1 = w t − η 1 n ∑ x ∈ B ▽ l ( x , w t ) w_{t+1}=w_t-\eta\frac{1}{n}\sum_{x\in B} \bigtriangledown l(x,w_t) wt+1=wtηn1xBl(x,wt)
式中, w w w为网络权重, n n nbatchsize η \eta η为学习率, l ( x , w ) l(x,w) l(x,w)为损失函数, B B Bminbatch sample

从上式可以看出,如果要增大 η \eta η,需要调大batchsize,根据 Linear Scaling Rule,见参考文献[1],如果使用 k k k 倍的 batchsize,则学习率可以增大到 k k k 倍。

所以增大 n n n,就可以使用大的学习率,但是带来的问题是对硬件显存要求会大大增加。

有什么样的方法克服上述问题?

对于目标检测任务而言,训练样本指的的是bbox 样本。一张图片可能有多个检测目标,即对应多个bbox,所以网络权重更新可以进一步表达为:
w t + 1 = w t − η 1 n ∑ x ∈ B 1 m x ∑ s ∈ S x ▽ l ( s , w t ) w_{t+1}=w_t-\eta\frac{1}{n}\sum_{x\in B}\frac{1}{m_x} \sum_{s\in S_x}\bigtriangledown l(s,w_t) wt+1=wtηn1xBmx1sSxl(s,wt)
式中, m x m_x mx指每张图片中bbox数量。

如果每张图片里的bbox数量相同,都为 m m m,则上式可以简化为:
w t + 1 = w t − η 1 m n ∑ x ∈ B ▽ l ( s , w t ) w_{t+1}=w_t-\eta\frac{1}{mn}\sum_{x\in B}\bigtriangledown l(s,w_t) wt+1=wtηmn1xBl(s,wt)
所以增加目标的 encoder bbox 数量 m m m 也能达到同样的效果。

如何增加 encoder bbox 数量?

一个 bbox 矩形框可以有如下3种定义方式:

(1) 采用2个对角点,bbox可以用4个参数描述 ( x 1 x_1 x1 , y 1 y_1 y1 , x 2 x_2 x2 , y 2 y_2 y2);

(2) 采用一个中心点和宽高尺寸,bbox用4个参数描述 ( x c x_c xc , y c y_c yc , w w w , h h h);

(3) 采用一个源点和其与4条边的距离,bbox用6个参数描述 ( x o x_o xo , y o y_o yo , l l l , r r r, t t t , b b b);

其中前两个定义方式是唯一的,而第三个的表达是不唯一的,不同的 ( x o x_o xo , y o y_o yo) 对应着不同的 ( l l l , r r r , t t t , b b b)。

在这里插入图片描述

所以只要使用方式3就能对一个目标encoder出多个bbox,基于上述思考,本文的 TTFNet 就诞生了!

2 TTFNet 网络架构

在这里插入图片描述

  • 输入端 — 输入端表示输入的图片。该网络的输入图像大小 W W W H H H分别512和512。
  • 基准网络 — 基准网络用来提取图片特征。论文分别试验了ResNet 和 DarkNet。
  • Head输出端 — Head用来完成目标检测结果的输出。输出端的分支有3个,分别为 heatmap、offset和size,对应的输出尺度为( W / R W/R W/R, H / R H/R H/R, C C C)、( W / R W/R W/R, H / R H/R H/R, 2 2 2) 和( W / R W/R W/R, H / R H/R H/R, 2 2 2),其中 R R R 为 stride,论文中取4, C C C 为目标种类。

3 TTFNet 实现细节

目标检测可以分为两部分:中心定位尺寸回归,下面分别介绍:

3.1 TTFNet 如何中心定位?

假定属于 c m c_m cm 类的第 m m mGT bbox,其边框位置和尺寸为 ( x x x, y y y, h h h, w w w):

step1:将边框线性映射到特征图的尺度上,映射后的边框为: ( ⌊ x r ⌋ \lfloor \frac {x}{r}\rfloor rx, ⌊ y r ⌋ \lfloor \frac {y}{r}\rfloor ry, h r \frac {h}{r} rh, w r \frac {w} {r} rw)= ( x 0 x_0 x0, y 0 y_0 y0, h 0 h_0 h0, w 0 w_0 w0) ,其中 ⌊ ⌋ \lfloor \rfloor 为取整操作,来限制中心像素的位置必然是整数。

step2:使用2D高斯核将GT bbox中心位置分散到热力图 H m ∈ R 1 × H r × W r H_m\in R^{1× \frac{H}{r}× \frac{W}{r}} HmR1×rH×rW上,高斯核为:
K m ( x , y ) = e x p ( − ( x − x 0 ) 2 2 σ x 2 − ( y − y 0 ) 2 2 σ y 2 ) K_m(x,y)=exp\left(-\frac{(x-x_0)^2}{2\sigma^2_x}-\frac{(y-y_0)^2}{2\sigma^2_y} \right) Km(x,y)=exp(2σx2(xx0)22σy2(yy0)2)
式中: σ x = α w 0 / 6 \sigma_x=\alpha w_0/6 σx=αw0/6 σ y = α h 0 / 6 \sigma_y=\alpha h_0/6 σy=αh0/6,这里 α \alpha α 被设置成 0.54。

相比CenterNet的高斯kernnelTTFNet的高斯kernnel进一步考虑了GT bbox的宽高比,如下图所示:

在这里插入图片描述

根据标签生成的目标位置热力图作为target,网络的位置分支输出 H ^ ∈ R C × H r × W r \hat H\in R^{C× \frac{H}{r}× \frac{W}{r}} H^RC×rH×rW,位置损失函数如下:
L l o c = − 1 M ∑ x y c { ( 1 − H ^ i j c ) α ⋅ l o g ( H ^ i j c ) H i j c = 1 ( 1 − H i j c ) β f ⋅ ( H ^ i j c ) α f ⋅ l o g ( 1 − H ^ i j c ) o t h e r w i s e L_{loc}=-\frac{1}{M}\sum_{xyc} \begin{cases} (1-\hat H_{ijc})^{\alpha}\cdot log(\hat H_{ijc}) & H_{ijc}=1\\ (1-H_{ijc})^{\beta_f}\cdot (\hat H_{ijc})^{\alpha_f} \cdot log(1-\hat H_{ijc}) & otherwise\\ \end{cases} \\ Lloc=M1xyc{(1H^ijc)αlog(H^ijc)(1Hijc)βf(H^ijc)αflog(1H^ijc)Hijc=1otherwise

与CeterNet的关键点损失类似,详细的解释请见博客: 目标检测——CenterNet (CVPR2019) 论文详解

3.2 TTFNet 如何尺寸回归?

在目标bbox区域内,类似的使用高斯 kernnel生成热力图 S m ∈ R 1 × H r × W r S_m\in R^{1× \frac{H}{r}× \frac{W}{r}} SmR1×rH×rW,其中高斯kernnel为:
K m ( x , y ) = e x p ( − ( x − x 0 ) 2 2 σ x 2 − ( y − y 0 ) 2 2 σ y 2 ) K_m(x,y)=exp\left(-\frac{(x-x_0)^2}{2\sigma^2_x}-\frac{(y-y_0)^2}{2\sigma^2_y} \right) Km(x,y)=exp(2σx2(xx0)22σy2(yy0)2)
式中: σ x = β w / 6 \sigma_x=\beta w/6 σx=βw/6 σ y = β h / 6 \sigma_y=\beta h/6 σy=βh/6

S m S_m Sm 中的非零部分定义为高斯区域 A m A_m AmTTFNet 采取下图方式 d 将整个高斯区域内的所有像素点作为训练样本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aFTZta92-1649253520942)(C:\Users\Sunny\AppData\Roaming\Typora\typora-user-images\image-20220406200404578.png)]

考虑 A m A_m Am中的一个像素 ( i , j ) (i,j) (i,j)以及下采样率 r r r,回归的目标就是从 ( i r ir ir, j r jr jr) 到第 m m m 个标注框的四个边的距离,用一个四维向量表示为 ( w l , h t , w r , h b ) i j m (w_l,h_t,w_r,h_b)^m_{ij} (wl,ht,wr,hb)ijm,在 ( i , j ) (i,j) (i,j)处的预测框则表示如下:
x ^ 1 = i r − w ^ l s , y ^ 1 = j r − h ^ t s x ^ 2 = i r + w ^ r s , y ^ 2 = j r + h ^ b s \hat x_1=ir-\hat w_ls,\hat y_1=jr-\hat h_ts\\ \hat x_2=ir+\hat w_rs,\hat y_2=jr+\hat h_bs\\ x^1=irw^ls,y^1=jrh^tsx^2=ir+w^rs,y^2=jr+h^bs
这里的 ( x ^ 1 , y ^ 1 , x ^ 2 , y ^ 2 ) (\hat x_1,\hat y_1,\hat x_2,\hat y_2) (x^1,y^1,x^2,y^2) 是在图像尺度上而不是特征图尺度上的, 尺寸回归分支的损失通过GIOU计算:
L r e g = 1 N r e g ∑ ( i , j ) ∈ A m G I O U ( B ^ i j , B m ) × W i j L_{reg}=\frac {1}{N_{reg}}\sum _{(i,j)\in A_m}GIOU(\hat B_{ij},B_m)×W_{ij} Lreg=Nreg1(i,j)AmGIOU(B^ij,Bm)×Wij
式中: N r e g N_{reg} Nreg为回归样本的数量; B ^ i j \hat B_{ij} B^ij表示预测框 ( x ^ 1 , y ^ 1 , x ^ 2 , y ^ 2 ) i j (\hat x_1,\hat y_1,\hat x_2,\hat y_2)_{ij} (x^1,y^1,x^2,y^2)ij   B m \ B_m  Bm表示预测框 ( x 1 , y 1 , x 2 , y 2 ) m (x_1,y_1,x_2,y_2)_m (x1,y1,x2,y2)m表示真实图像尺度上的第 m m m个标注框; W i j W_{ij} Wij表示采样权重,用来平衡每个样本对损失的贡献, W i j W_{ij} Wij公式如下:
W i j = { l o g ( a m ) × G m ( i , j ) ∑ ( x , y ) ∈ A m G m ( x , y ) ( i , j ) ∈ A m 0 ( i , j ) ∉ A m W_{ij}= \begin{cases} log(a_m)×\frac{G_m(i,j)}{\sum_{(x,y)\in A_m}G_m(x,y)} & (i,j) \in A_m\\ 0 & (i,j) \notin A_m \end{cases} Wij={log(am)×(x,y)AmGm(x,y)Gm(i,j)0(i,j)Am(i,j)/Am
式中: G m ( i , j ) G_m(i,j) Gm(i,j)表示 ( i , j ) (i,j) (i,j)位置处的高斯概率, a m a_m am表示第 m m m个标注框的面积。

3.3 如何理解 W i j W_{ij} Wij 的设计

目标的尺度变化可能是很大的,大目标产生的正样本多,而小目标仅产生少量的样本,所以需要平衡大目标和小目标的正样本数差异,对于处于高斯区域内的像素点,由上式可知其权重可以进一步表达成:
W i j = l o g ( a m ) ∑ ( x , y ) ∈ A m G m ( x , y ) × G m ( i , j ) = K × G m ( i , j ) W_{ij}=\frac {log(a_m)}{\sum_{(x,y)\in A_m}G_m(x,y)}×G_m(i,j)=K×G_m(i,j) Wij=(x,y)AmGm(x,y)log(am)×Gm(i,j)=K×Gm(i,j)
从上式可见, W i j W_{ij} Wij相当于是对 G m ( i , j ) G_m(i,j) Gm(i,j)乘以一个系数 K K K,大目标 K K K系数小于小目标系数,所以相当于提高了小目标的样本权重。

3.4 Loss设计

TTFNet 总体 loss是定位损失和回归损失的加权求和结果,两个权重 w l o c w_{loc} wloc w r e g w_{reg} wreg分别是1.0和5.0:

L = w l o c L l o c + w r e g L r e g L=w_{loc}L_{loc}+w_{reg}L_{reg} L=wlocLloc+wregLreg

4 TTFNet性能效果

下表中比较了TTFNet与其他模型的性能,其中TT表示训练时间,TTFNetAP超过了SSDYOLOV3CenterNet,同时训练时间缩短了10倍多。

在这里插入图片描述

5 总结

TTFNet 论文的主要贡献包括以下几点:

  • 融合了经典的anchor-free算法的经验:CenterNet FCOS ,其中心定位借鉴了CenterNet, 尺寸回归借鉴了FCOS,同时改进了大小目标的权重平衡;
  • FFTNet提出的减少训练时间的思路可以扩展应用到其他目标检测模型上。

6 参考

[1] [Goyal et al. 2017] Goyal, P.; Dollar, P.; Girshick, R. B.; Noordhuis, ´ P.; Wesolowski, L.; Kyrola, A.; Tulloch, A.; Jia, Y.; and He, K. 2017. Accurate, large minibatch SGD: training imagenet in 1 hour. CoRR abs/1706.02677.

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值