赞
踩
本文的主要工作是什么?
提出了一种“破坏与构造”学习方法,除了标准的分类主干网络之外,还引入了一个“破坏与构造”流,先“破坏”再“重建”图像,学习有区分度的区域和特征。
具体来说,“破坏”就是首先将输入图像划分为局部区域,然后通过区域混淆机制(RCM)对它们进行打乱。为了正确识别这些被破坏的图像,分类网络必须更多地关注有区分度的区域,以发现差异。为了补偿RCM引入的噪声,采用对抗性损失来抑制RCM引入的噪声模式,以区分原始图像和被破坏图像。
而“构建”就是,遵循区域对齐网络,试图恢复局部区域的原始空间布局,以建模局部区域之间的语义关联。通过联合训练和参数共享,DCL为分类网络注入了更具辨别力的局部细节。
图1.(a,b)是两个先前的通用框架,c是作者提出的细粒度分类框架。(a)两阶段部分检测基础框架.(b)基于注意力的框架.(c)作者提出的DCL学习框架。
“破坏”不总是有益的
RCM引入了几种嘈杂的视觉模式,可能会产生副作用,如图3所示。为了抵消负面影响,我们采用对抗性损失来区分原始图像和被破坏的图像。因此,噪声模式的影响可以最小化,只保留有益的局部细节。从概念上讲,对抗性损失和分类损失以对抗性的方式工作,以便从“破坏”中仔细学习。在“施工”中,引入了区域线形网络,以恢复与RCM相反的原始区域布置。通过学习恢复[19,6]中的原始布局,网络需要理解每个区域的语义,包括那些有区别的区域。通过“构建”,可以模拟不同地区之间的相关性。
图2.DCL方法的框架包括四个部分:(1)区域混淆机制(RCM):打乱输入图像的局部区域.(2)分类网络:主干分类网络,将图像分类到细粒度类别.(3)对抗学习网络:对抗学习损失用于区分原始图像和破坏过的图像.(4)区域对齐网络:放在分类网络后,用于恢复局部区域的空间布局
对于细粒度图像识别,局部细节比全局结构重要得多。在大多数情况下,不同的细粒度类别通常具有相似的全局结构,只在某些局部细节上有所不同。在这项工作中,我们建议通过打乱局部区域来破坏全局结构,以便更好地识别区分区域和学习区分特征(第3.1.1节)。为了防止网络从破坏引入的噪声模式中学习,提出了一种对抗模式(第3.1.2节)来拒绝与细粒度分类无关的RCM诱导模式。
如图3所示,我们提出的区域混淆机制(RCM)旨在破坏局部图像区域的空间布局。给定输入图像I,我们首先将图像均匀地划分为N×N个子区域,用表示,其中i和j分别是水平和垂直索引,。受[15]的启发,我们提出的RCM将这些分区的局部区域在其2D邻域中进行洗牌。对于R的第j行,生成大小为N的随机向量,其中第i个元素,其中是在[−k、 k]范围内均匀分布的随机变量。这里的k是一个可调参数,定义邻域区间。
然后,通过对数组进行排序,我们可以得到第j行区域的新排列,并验证以下条件:
同样,我们明智地将置换应用于区域列,验证条件:
因此,将原始区域位置(i,j)处的区域放置到新坐标:
这种洗牌方法破坏了全局结构,并确保局部区域在其邻域内以可调的大小抖动。
原始图像、其被破坏的版本与表示细粒度类别的标签耦合为以进行训练。分类网络将输入图像映射到概率分布向量,其中是分类网络中所有可学习的参数。分类网络的损失函数可以写成:
由于图像的全局结构被破坏,为了识别这些随机混叠的图像,分类网络必须找到有区别的区域,并学习类别之间的细微差异。
图3.RCM区域混淆机制破坏图像的示例。
用RCM破坏图像并不总能为细粒度分类带来有益的信息。例如,在图3中,当我们打乱局部区域时,RCM还引入了噪声。从这些噪声视觉模式中学习到的特征对分类任务是有害的。为此,我们提出了另一种对抗性损失,以防止过度拟合RCM引起的噪声模式蔓延到特征空间。
将原始图像和被破坏图像视为两个域,对抗性损失和分类损失以对抗的方式工作:1)保持域不变模式,2)拒绝和之间的域特定模式。
我们将每个图像标记为一个one-hot向量,指示图像是否被破坏。可以在框架中添加一个鉴别器作为一个新分支,以判断图像I是否被破坏:
其中是从主干分类网络中第m层的输出中提取的特征向量,是从分类网络中第1层到第m层的可学习参数,是一个线性映射。鉴别器网络的损失可计算为:
为了更好地理解对抗性损失如何具有学习功能,我们进一步可视化了主干网ResNet-50在有和没有对抗性损失的情况下的功能。给定输入图像,我们用表示第m层中的第k个特征图。对于ResNet-50,我们从卷积层的输出中提取特征,在最后一个完全连接层旁边使用平均池化进行对抗性学习。
因此,ground truth标签c的最后一个卷积层中的第k个滤波器的响应可以通过来测量,其中是第k个特征映射和第c个输出标签之间的权重。
我们在如图4所示的散点图中比较了原始图像及其破坏版本的不同滤波器的响应,其中每个具有正响应的滤波器被映射到散点图中的数据点。我们可以发现,训练的特征图的分布比训练的特征图更紧凑。这意味着滤波器对RCM引入的噪声模式有较大的响应,也可能对原始图像有较大的响应(正如A、B和C中可视化的视觉模式一样,有许多滤波器对RCM引入的边缘样式视觉模式或无关模式有响应)。这些过滤器可能会误导对原始图像的预测。
我们还根据Lcls+Ladv训练的主干网的散点图上的点的颜色,根据
其中是连接特征图和表示原始图像的标签的权重,是连接和表示破坏图像的标签的权重。评估第k个滤波器是否倾向于原始图像中的视觉模式。可以观察到,滤波器对噪声视觉模式的响应可以通过使用对抗性损失来区分(D与F)。
图中的要点可分为三部分。D:倾向于响应噪声模式的过滤器(RCM诱导的图像特征);F:倾向于响应全局上下文描述(原始图像特定图像特征)的过滤器;E:绝大多数过滤器都与(原始图像和破坏图像之间的公共图像特征映射)增强的详细局部区域描述有关。和一起有助于“破坏”学习,在这种学习中,只会增强有区别的局部细节,并过滤掉不相关的特征。
图4:分别使用Lcls和Lcls+Ladv学习的滤波器的可视化。第一行显示原始图像I及其被破坏的版本。第2行和第3行的左侧显示了关于过滤器对I和的响应的散点图。第2行和第3行的右侧显示了特征图的可视化,这些特征图属于对I和有不同响应的过滤器。 A、D:对有较大响应的过滤器。C、F:对I有较大响应的滤波器,E:对I和都有较大响应的滤波器。(最好以彩色查看此图。)
考虑到图像中相关区域的组合构成了复杂多样的视觉模式,我们提出了另一种学习方法来建模局部区域之间的相关性。具体地说,我们提出了一种具有区域构造损失的区域对齐网络,该网络测量图像中不同区域的定位精度,通过端到端训练诱导主干网络对区域间的语义相关性进行建模。
给定图像及其相应的破坏版本,位于中的区域与中的区域一致。区域对齐网络作用于分类网络的一个卷积层的输出特征,其中第n层是卷积层。特征通过1×1卷积处理,以获得两个通道的输出。然后通过一个ReLU和一个平均池化对输出进行处理,得到一个大小为2×N×N的图。区域对齐网络的输出可以写成:
其中中的两个通道分别对应于行和列的位置坐标,是我们提出的区域对齐网络,是区域对齐网络中的参数。 我们将在中的预测位置表示为,将在中的预测位置表示为。和的ground truth都应该是。区域对齐损失定义为预测坐标和原始坐标之间的L1距离,可以表示为:
区域构造损失有助于定位图像中的主要目标,并有助于找到子区域之间的相关性。通过端到端的训练,区域构造损失可以帮助分类主干网络建立对对象的深刻理解,并对对象的形状、对象各部分之间的语义关联等结构信息进行建模。
在我们的框架中,分类、对抗和区域对齐损失以端到端的方式进行训练,网络可以利用增强的局部细节和良好建模的对象部分相关性进行细粒度识别。具体而言,我们希望尽量减少以下目标:
图2显示了DCL框架的体系结构。破坏学习主要有助于区分区域的学习,而构造学习则有助于根据区域间的语义相关性重新整理学习到的局部细节。因此,DCL基于区分区域中结构良好的细节特征,产生了一组复杂多样的视觉表示。请注意,只有用于预测给定图像的类别标签。因此,除了用于推理的主干分类网络之外,没有外部计算开销。
- class FocalLoss(nn.Module): #1d and 2d
-
- def __init__(self, gamma=2, size_average=True):
- super(FocalLoss, self).__init__()
- self.gamma = gamma #γ参数
- self.size_average = size_average
-
-
- def forward(self, logit, target, class_weight=None, type='softmax'):
- target = target.view(-1, 1).long()
- if type=='sigmoid':
- if class_weight is None:
- class_weight = [1]*2 #[0.5, 0.5]
-
- prob = torch.sigmoid(logit)
- prob = prob.view(-1, 1)
- prob = torch.cat((1-prob, prob), 1)
- select = torch.FloatTensor(len(prob), 2).zero_().cuda()
- select.scatter_(1, target, 1.)
-
- elif type=='softmax':
- B,C = logit.size() #B=batch_size, C=类别数目
- if class_weight is None:
- class_weight =[1]*C #[1/C]*C
-
- #logit = logit.permute(0, 2, 3, 1).contiguous().view(-1, C)
- prob = F.softmax(logit,1)
- select = torch.FloatTensor(len(prob), C).zero_().cuda()
- select.scatter_(1, target, 1.)
-
- class_weight = torch.FloatTensor(class_weight).cuda().view(-1,1)
- class_weight = torch.gather(class_weight, 0, target)
-
- prob = (prob*select).sum(1).view(-1,1)
- prob = torch.clamp(prob,1e-8,1-1e-8)
- batch_loss = - class_weight *(torch.pow((1-prob), self.gamma))*prob.log()
-
- if self.size_average:
- loss = batch_loss.mean()
- else:
- loss = batch_loss
-
- return loss
CUB-200-2011(CUB)、斯坦福汽车(CAR)和FGVC-Aircraft(AIR)
在两个广泛使用的主干网络上评估了提出的方法:ResNet-50和VGG-16。这两个网络是在ImageNet数据集上预训练的。图像的类别标签是用于训练的唯一注释。将输入图像的大小调整为512×512的固定大小,并随机裁剪为448×448。随机旋转和随机水平翻转用于数据扩充。以上所有设置都是文献中的标准设置。
为了识别VGG-16上的高分辨率图像而无需子采样,将VGG-16中前两个完全连接的层分别转换为两个卷积层。在本文的所有实验中,主干网最后一个卷积层的特征映射被馈送到区域对齐网络中,最后一个卷积层的平均池化输出形成的特征向量被馈送到对抗性学习网络中。
RCM中区域N的数量基于主干网络和输入图像的大小。该区域的宽度w和长度h应可被最后一个卷积层的步长整除,对于VGG-16和ResNet-50,该步长为32。同时,为了保证区域对齐的可行性,输入图像的宽度和高度也应该可以被N整除。在本文中,RCM的分割数N的默认值设置为7,没有特别提及。第4.4节讨论了选择N的影响。实验中的所有模型都经过180个epoch的训练,每60个epoch学习率下降10倍。在测试时,RCM被禁用,用于对抗性损失和区域构建的网络结构被移除。输入图像经过中心裁剪,然后送入主干分类网络进行最终预测。
我们设置α=β=1。对于像CUB-2011这样的非刚性物体识别任务,不同区域之间的相关性对于建立对物体的深入理解非常重要。因此我们设置γ=1。而对于像斯坦福汽车和FGVC飞机这样的刚性物体识别任务,物体的某些部分具有辨别性和互补性。因此,物体和部件的位置可能会起到重要作用[34]。我们将刚性物体识别任务的γ设置为0.01,以强调破坏性学习在从辨别区域学习细节视觉表征中的作用。与鸟类和汽车等其他细粒度类别不同,飞机的结构会随着其设计发生显著变化[18]。例如,机翼、底盘系统、每个底盘系统的车轮、发动机等的数量各不相同。因此,为了在一定程度上保留结构信息,我们将表1中FGVC-Aircraft上的DCL设置为2。表1和表2显示,我们的ResNet-50基线已经非常有竞争力。幸运的是,我们提出的DCL在所有三项任务上仍能以较大幅度(例如,平均2.3%的绝对改善)超越baseline。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。