目录
A、Weakly Supervised Attention Learning
B、Attention-Guided Data Augmentation
细粒度分类:
细粒度分类是为了解决“类内分类”问题,有别于猫狗分类,它解决的是“这只狗是萨摩还是哈士奇”这类问题;这类问题是类别之间的区别较小。
WS-DAN(Weakly Supervised Data Augmentation Network)是一种针对细粒度视觉分类任务的方法,采用基于弱监督学习的图像增强的方法,结合注意力机制,这使得网络在不需要额外标注的情况下聚焦那些图像中有“话语权”的部分。
论文亮点:
1、 Bilinear Attention Pooling(双线性注意力池化机制)
2、attention regularization loss (loss惩罚机制)
3、Attention Cropping和Attention Dropping(用于数据的增强)
1、训练过程
上图是整个网络的训练过程,整个训练分为两部分A:Weakly Supervised Attention Learning;B:Attention-Guided Data Augmentation
A、Weakly Supervised Attention Learning
这一步是基于弱监督的注意力区域学习。首先,网络对原始图片基于CNN提取特征,提取到的特征为feature maps,然后feature maps经过kernel size为1的卷积运算得到Attention maps,也就是说Attention maps 经过feature maps降维得到的,具体降到多少维M是一个超参数,可以自行配置。而这M个Attention maps代表着物体的一个部位,例如鸟的头部,飞机的机翼等。后面还会根据Attention maps对图像进行针对性的增强。
attentions map的生成
class BasicConv2d(nn.Module):
def __init__(self, in_channels, out_channels, **kwargs):
super(BasicConv2d, self).__init__()
self.conv = nn.Conv2d(in_channels, out_channels, bias=False, **kwargs)
self.bn = nn.BatchNorm2d(out_channels, eps=0.001)
def forward(self, x):
x = self.conv(x)
x = self.bn(x)
return F.relu(x, inplace=True)
# num_features:CNN输出值
# M:M个attentions map
attentions = BasicConv2d(num_features, M, kernel_size=1)
backbone网络首先产生feature maps和attention maps; 每个attention map都指向物体的特定