深圳珠宝网站建设分析报告,10条重大新闻事件,wordpress 极速模板,wordpress 转发文章目录1.概况2.DBNet中的主要方法2.1 网络结构2.2 适应特征图融合模块(Adaptive Scale Fusion Module, ASF)3.ASF模块的源码实现参考资料欢迎访问个人网络日志#x1f339;#x1f339;知行空间#x1f339;#x1f339; 1.概况 2022年02月份论文#xff1a;Real-Time S…
文章目录1.概况2.DBNet中的主要方法2.1 网络结构2.2 适应特征图融合模块(Adaptive Scale Fusion Module, ASF)3.ASF模块的源码实现参考资料欢迎访问个人网络日志知行空间 1.概况 2022年02月份论文Real-Time Scene Text Detection with Differentiable Binarization and Adaptive Scale Fusion DBNet是2019年11月华中科技大学的Xiang Bai等提出的方法其详细介绍见4.基于分割的文本检测算法–DBNet
DBNet是原作者团队基于DBNet的改进工作是DBNet会议论文的期刊版除了DBNet中已经介绍过的可微分二值化运算之外DBNet中的主要创新是自适应多尺度特征融合(Adapptive Scale FusionASF)模块的提出。
在以往的分割算方法中多尺度特征图大都是通过FPN后直接进行concatenate来实现这样做并没有考虑不同尺度特征图的重要性是不一样的。本文中作者提出的自适应特征图融合模块使用了空间注意力机制具体的介绍见第2部分。
2.DBNet中的主要方法
2.1 网络结构 如上图所示DBNet的网络结构几乎相同使用FPN的backbone,可微分二值化基于分割概率图求文本区域等主要的不同在对backbone上输出的特征图的处理上DBNet中新引入了Adaptive Scale Fusion模块。
2.2 适应特征图融合模块(Adaptive Scale Fusion Module, ASF) 图中对一个特征图的shape描述进行了修改原论文图中存在特征图shape从N×C×H×W经过conv后变成C×H×W容易引起误解(容易误会成卷积将四维向量变成了三维)。
计算过程如上图所示值的注意的是空间注意力机制的使用先是对每个通道取均值得到特征图每个像素位置上的重要性再将其加到原输入特征图上增强每个位置的特征值再通过卷积输出通道为N个的注意力权重使得输出的权重能衡量每个尺度特征图的重要性。
backbone提取后输入到 ASF的特征图为X∈RN×C×H×W{Xi}i0N−1X\in R^{N\times C\times H\times W} \{X_i\}_{i0}^{N-1}X∈RN×C×H×W{Xi}i0N−1N表示特征图个数N4 先将N个特征图 concatenate到一起然后再经过一个3×33\times33×3的卷积层得中间特征图S∈RC×H×WS\in R^{C\times H\times W}S∈RC×H×W将SSS输入到一个空间注意力模块得到注意力权重A∈RN×H×WA\in R^{N\times H\times W}A∈RN×H×W注意力权重A有N个通道将其沿通道方向切分得到N个权重矩阵[E0,E1,...,EN−1][E_0,E_1,...,E_{N-1}][E0,E1,...,EN−1]将其分别与输入的N个特征图XXX对应相乘后再 concatenate到一起就得到了 ASF的输出。
SConv(concat([X0,X1,...,XN−1]))S Conv(concat([X_0,X_1,...,X_{N-1}])) SConv(concat([X0,X1,...,XN−1]))
ASpatialAttention(S)A Spatial_Attention(S) ASpatialAttention(S)
Fconcat([E0X0,E1X1,...,EN−1XN−1])Fconcat([E_0X_0,E_1X_1,...,E_{N-1}X_{N-1}]) Fconcat([E0X0,E1X1,...,EN−1XN−1])
3.ASF模块的源码实现 decoders/feature_attention.py class ScaleSpatialAttention(nn.Module):def __init__(self, in_planes, out_planes, num_features, init_weightTrue):super(ScaleSpatialAttention, self).__init__()self.spatial_wise nn.Sequential(#Nx1xHxWnn.Conv2d(1, 1, 3, biasFalse, padding1),nn.ReLU(),nn.Conv2d(1, 1, 1, biasFalse),nn.Sigmoid() )self.attention_wise nn.Sequential(nn.Conv2d(in_planes, num_features, 1, biasFalse),nn.Sigmoid())if init_weight:self._initialize_weights()...def forward(self, x):global_x torch.mean(x, dim1, keepdimTrue)global_x self.spatial_wise(global_x) xglobal_x self.attention_wise(global_x)return global_xclass ScaleFeatureSelection(nn.Module):def __init__(self, in_channels, inter_channels , out_features_num4, attention_typescale_spatial):super(ScaleFeatureSelection, self).__init__()self.in_channelsin_channelsself.inter_channels inter_channelsself.out_features_num out_features_numself.conv nn.Conv2d(in_channels, inter_channels, 3, padding1)self.type attention_typeif self.type scale_spatial:self.enhanced_attention ScaleSpatialAttention(inter_channels, inter_channels//4, out_features_num)elif self.type scale_channel_spatial:self.enhanced_attention ScaleChannelSpatialAttention(inter_channels, inter_channels // 4, out_features_num)elif self.type scale_channel:self.enhanced_attention ScaleChannelAttention(inter_channels, inter_channels//2, out_features_num)def _initialize_weights(self, m):classname m.__class__.__name__if classname.find(Conv) ! -1:nn.init.kaiming_normal_(m.weight.data)elif classname.find(BatchNorm) ! -1:m.weight.data.fill_(1.)m.bias.data.fill_(1e-4)def forward(self, concat_x, features_list):concat_x self.conv(concat_x)score self.enhanced_attention(concat_x)assert len(features_list) self.out_features_numif self.type not in [scale_channel_spatial, scale_spatial]:shape features_list[0].shape[2:]score F.interpolate(score, sizeshape, modebilinear)x []for i in range(self.out_features_num):x.append(score[:, i:i1] * features_list[i])return torch.cat(x, dim1)---
欢迎访问个人网络日志知行空间 参考资料 1.https://github.com/MhLiao/DB2.Real-Time Scene Text Detection with Differentiable Binarization and Adaptive Scale Fusion