论文阅读笔记之手术器械分类的注意约束自适应核选择网络(SKA-ResNet)

Adaptive kernel selection network with attention constraint for surgical instrument classification

  • 一、论文简介
    • 1.1 论文链接
    • 1.2 论文基本信息
  • 二、详细解读
    • 2.1 摘要
    • 2.2 介绍
      • 2.2.1 研究意义
      • 2.2.2 数据集
      • 2.2.3 问题难点
      • 2.2.4 解决思路
    • 2.3 背景
      • 2.3.1 计算机视觉在医疗保健领域的应用
      • 2.3.2 细粒度图像分类
    • 2.4 ResNet的网络架构
      • 2.4.1 神经网络并不是越深越好
      • 2.4.2 ResNet v1
      • 2.4.3 ResNet v2
    • 2.5 SKA-ResNet的网络架构
      • 2.5.1总体描述
      • 2.5.2 SKA模块
      • 2.5.3 多尺度正则化(Multi-scale regularizer)
    • 2.6 实验结果
      • 2.6.1 实现细节
      • 2.6.2 与其他模型对比
  • 三、总结与思考(未完待续)

一、论文简介

1.1 论文链接

论文放在了我的百度网盘里,有需要的自取。
链接:https://pan.baidu.com/s/1V2WVqOFFXA_O34ENjskeWA
提取码:0rf6

1.2 论文基本信息

在这里插入图片描述

二、详细解读

2.1 摘要

计算机视觉(CV)技术在许多方面帮助医疗保健行业,如疾病诊断。然而,作为手术前后的关键环节,cv驱动技术对手术器械的库存工作还没有进行研究。为了降低手术器械丢失的风险和危害,我们提出了一种系统的手术器械分类研究,并引入了一种新的基于注意的深度神经网络SKA-ResNet,该网络主要由以下几个部分组成:(a)具有选择性核注意模块的特征提取器,自动调整神经元的接受域,增强学习后的表达;(b)以KL-divergence为约束的多尺度正则化器,利用特征映射之间的关系。该方法易于在一个阶段进行端到端训练,且额外的计算负担很少。此外,为了促进我们的研究,我们首次创建了一个新的手术器械数据集SID19(包含19种手术器械,共3800张图像)。实验结果表明,与现有模型相比,SKA-ResNet在SID19手术工具分类方面具有优越性。该方法的分类准确率达到97.703%,为外科手术工具的库存和识别研究提供了良好的支持。此外,我们的方法可以在四个具有挑战性的细粒度视觉分类数据集上实现最先进的性能。

2.2 介绍

2.2.1 研究意义

2020年,澳大利亚生产力委员会(Australian Productivity Commission)公布了一些医疗记录,显示43万名患者遭受了痛苦。在这些患者中,与医疗器械相关的医疗事故更加突出。据《每日邮报》报道,在短短一年内,这些拙劣的外科医生将医疗器械留在了至少23名中毒、感染或受伤的病人体内。因此,保证手术器械库存工作的可靠性具有十分重要的意义。在手术器械的清点工作中,医务人员主要负责清点手术器械的种类和数量。本文对外科器械的库存工作进行了一系列的研究工作,目的是准确地识别出手术进行前后的外科器械。这项工作不仅节省了人力资源,而且可以迅速识别手术器械是否遗漏,有利于防止继发性感染或致命医疗事故。

2.2.2 数据集

考虑了阑尾切除、胆囊切除、剖宫产手术器械包中的19类手术器械(包括爱丽丝钳、不同尺寸止血钳、椭圆形钳、吸力头、四种钩、针夹、布钳、长短齿钳、线剪、组织剪、肠板等)作为创建的手术器械数据集(标记为SID19)的原材料,共有19张手术器械,3800张图片。

2.2.3 问题难点

在SID19数据集中,存在某些属于细粒度类的外科工具,它们具有非常微妙的差异,难以相互区分。其中,手术钳和手术剪刀都包含几个子类,即细粒度类。手术钳的类别包括Alice钳、不同尺寸的止血钳、椭圆形钳、长短牙钳、布钳。手术剪刀的种类包括线剪、组织剪等。这些子类别中的对象通常具有较大的类内差异和较小的类间差异,给识别任务带来了困难。例如,下图显示了两种不同状态、视图和角度的钳类:爱丽丝钳和阑尾钳。爱丽丝钳和阑尾钳的前端有微小的区别,阑尾钳的前端比爱丽丝钳的前端圆得多。因此,本文所提出的手术器械分类任务不同于常见的自然图像分类,揭示了细粒度视觉分类(FGVC)的独特特征,从而带来了额外的困难。
在这里插入图片描述

2.2.4 解决思路

本文提出了一个新的细粒度视觉分类框架,名为SKA-ResNet,以探索手术器械分类的有效性。该方法包括两个新的组成部分:一个是带有选择性核注意(SKA)模块的堆叠标准残块的特征提取器和一个多尺度正则化器来探索增强的中间特征图的关系。(后面会有详细介绍)

2.3 背景

2.3.1 计算机视觉在医疗保健领域的应用

今天的医疗保健行业非常依赖医学成像提供的精确诊断,医学成像与不同诊断技术(包括x射线、计算机断层扫描(CT)、磁共振成像(MRI)等)获得的数据一起工作。医学图像分析基于异质性病理图像,主要集中在疾病预防、预测、检测、诊断、筛选等方面。

2.3.2 细粒度图像分类

FGVC任务的研究工作主要沿着两个方向进行,即强监督学习和弱监督学习。其中,强监督学习方法将目标包围盒、部分标注信息和图像级别标签添加到训练网络中,学习目标特定的判别位置信息。然而,这种方法存在以下问题:(a)对原始图像进行标注需要大量的人力资源;(b)人类标注的信息有时并不准确。而弱监督学习网络只给出图像的类别进行分类。注意机制作为CV研究中最常用的方法,已被广泛应用于各种分类、检测和分割任务中,特别是在弱监督FGVC任务中。根据注意机制,信息特征被强化,而不太有用的特征被抑制。此外,FGVC中还引入了其他弱监督模型用于特征关系学习。

2.4 ResNet的网络架构

参考博客:详解深度学习之经典网络架构(六):ResNet 两代(ResNet v1和ResNet v2)

2.4.1 神经网络并不是越深越好

神经网络在反向传播过程中要不断地传播梯度,而当网络层数加深时,梯度在传播过程中会逐渐消失(假如采用Sigmoid函数,对于幅度为1的信号,每向后传递一层,梯度就衰减为原来的0.25,层数越多,衰减越厉害),因此导致无法对前面网络层的权重进行有效的调整。实验现象表明,在不断加神经网络的深度时,模型准确率会先上升然后达到饱和,再持续增加深度时则会导致准确率下降,示意图如下:
在这里插入图片描述
因此可以作这样一个假设:假设现有一个比较浅的网络(Shallow Net)已达到了饱和的准确率,这时在它后面再加上几个恒等映射层(Identity mapping,也即y=x,输出等于输入),这样就增加了网络的深度,并且起码误差不会增加,也就是说更深的网络不应该带来训练集上误差的上升。而这里提到的使用恒等映射直接将前一层输出传到后面的思想,便是著名深度残差网络ResNet的灵感来源。

2.4.2 ResNet v1

ResNet引入了残差网络结构(residual network),通过这种残差网络结构,可以把网络层弄的很深(据说已经达到了1000多层),并且最终的分类效果也非常好,残差网络的基本结构如下图所示。
在这里插入图片描述
假定某段神经网络的输入是x,期望输出是H(x),即H(x)是期望的复杂潜在映射,如果是要学习这样的模型,则训练难度会比较大;回想前面的假设,如果已经学习到较饱和的准确率(或者当发现下层的误差变大时),那么接下来的学习目标就转变为恒等映射的学习,也就是使输入x近似于输出H(x),以保持在后面的层次中不会造成精度下降。在上图的残差网络结构图中,通过“shortcut connections(捷径连接)”的方式,直接把输入x传到输出作为初始结果,输出结果为H(x)=F(x)+x,当F(x)=0时,那么H(x)=x,也就是上面所提到的恒等映射。于是,ResNet相当于将学习目标改变了,不再是学习一个完整的输出,而是目标值H(X)和x的差值,也就是所谓的残差F(x) := H(x)-x,因此,后面的训练目标就是要将残差结果逼近于0,从而使准确率不会随着网络的加深而下降。这种残差跳跃式的结构,打破了传统的神经网络n-1层的输出只能给n层作为输入的惯例,使某一层的输出可以直接跨过几层作为后面某一层的输入,其意义在于为叠加多层网络而使得整个学习模型的错误率不下面感受一下34层的深度残差网络的结构图降反升的难题提供了新的方向。至此,神经网络的层数可以超越之前的约束,达到几十层、上百层甚至千层,为高级语义特征提取和分类提供了可行性。下面来感受一下34层的深度残差网络的结构图:

实线的Connection部分,表示通道相同,计算方式为H(x)=F(x)+x;虚线的Connection部分,表示通道不同,计算方式为H(x)=F(x)+Wx,其中W是卷积操作,用来调整x维度的。除了上面提到的两层残差学习单元,还有三层的残差学习单元,如下图所示。
在这里插入图片描述
两种结构分别针对ResNet34(左图)和ResNet50/101/152(右图),其目的主要就是为了降低参数,减少计算量。左图是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,右图是第一个1x1的卷积把256维通道降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,右图的参数数量比左图减少了16.94倍。对于常规的ResNet,可以用于34层或者更少的网络中(左图);对于更深的网络(如101层),则使用右图,其目的是减少计算和参数量。如下图所示,实验表明深度残差网络的确解决了深度增加导致错误率上升的问题。
在这里插入图片描述

2.4.3 ResNet v2

ResNet v2由ResNet的作者在第二篇相关论文《Identity Mappings in Deep Residual Networks》中提出,ResNet v1和ResNet v2的网络结构对比如下:
在这里插入图片描述
其中weight指conv层,BN指Batch Normalization层,ReLU指激活层,addition指相加。ResNet v2的结构好的原因在于两点:1)反向传播基本符合假设,信息传递无阻碍;2)BN层作为pre-activation,起到了正则化的作用;ResNet V2 在每一层中都使用了 Batch Normalization,这样处理后,新的残差学习单元比以前更容易训练且泛化性更强。

2.5 SKA-ResNet的网络架构

2.5.1总体描述

SKA-ResNet网络由两个主要部分组成:(1)一个新的特征提取器(feature extractor),它由堆叠的标准残差块和选择性核注意(SKA)模块组成,无需额外的注意网络,即可为要识别的区域提取信息特征图。(2)多尺度正则化器,以特征图与图像之间的关系为约束,学习不同细粒度类别之间的关系。与现有的专注于附加注意力网络的基于注意力的方法不同,本文方法以分散的方式将轻量级的SKA模块嵌入到标准残留块中。此外,不同的特征图和图像之间的关系利用多尺度正则化,以鲁棒的细粒度特征表示。整个网络仅仅依靠图像级别的标签进行端到端训练。
在这里插入图片描述

2.5.2 SKA模块

在这里插入图片描述
在特征提取阶段,引入了轻量级SKA模块,如上图所示。特征提取器通过将SKA模块嵌入到ResNet的堆叠标准残差块中,自动定位识别区域并增强相应的特征图。SKA模块的操作可以分为Divide, Fuse和Aggregation三部分,下面以两个分支的SKA模块为例进行详细说明。
(1)Divide部分 :给定中间特征图X,首先将其发送到两个不同的卷积层,生成具有不同语义信息的两个特征图Y1和Y2。卷积层由卷积(Converlution)、批量标准化(Batch Normalization)和ReLU函数组成,这两个卷积层的卷积核大小分别为3x3 和5x5。需要注意的是,得到的两个feature map的大小与原始feature map X的大小相同。这个过程可以总结如下:
在这里插入图片描述
从前往后的三个变量分别表示为ReLU函数,批量标准化和卷积。
在这里插入图片描述

  • Normalization:在数据分析之前,我们通常需要先将数据标准化(normalization),利用标准化后的数据进行数据分析。数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。数据无量纲化处理主要解决数据的可比性。经过上述标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,可以进行综合测评分析。
    标准化的目的
    a.把特征的各个维度标准化到特定的区间;
    b.把有量纲表达式变为无量纲表达式;
    归一化的好处
    a.加快基于梯度下降法或随机梯度下降法模型的收敛速度;
    b.提升模型的精度;
    神经网络里主要有两类实体:神经元或者连接神经元的边,按照Normalization操作涉及对象的不同可以分为两大类:一类是对第L层每个神经元的激活值或者说对于第L+1层网络神经元的输入值进行Normalization操作,比如BatchNorm/LayerNorm/InstanceNorm/GroupNorm/Switchable Norm等方法;另外一类是对神经网络中连接相邻隐层神经元之间的边上的权重进行Normalization操作,比如Weight Norm。
    Normalization 做的是什么?
    对于第一类的Normalization操作,就像激活函数层、卷积层、全连接层、池化层一样,Normalization也属于网络的一层。对于神经元的激活值来说,不论哪种Normalization方法,其规范化目标都是一样的,都是将其激活值规整为均值为0,方差为1的正态分布。即规范化函数统一都是如下形式:
    在这里插入图片描述
    目前神经网络中常见的第一类Normalization方法包括BN,后面几个算法算是BN的改进版本。不论是哪个方法,其基本计算步骤都如上所述,大同小异,最主要的区别在于神经元集合S的范围怎么定,不同的方法采用了不同的神经元集合定义方法。
    为什么这些Normalization需要确定一个神经元集合S呢?为了对网络中某个神经元的激活值规范到均值为0方差为1的范围,必须有一定的手段求出均值和方差,而均值和方差是个统计指标,要计算这两个指标一定是在一个集合范围内才可行,所以这就要求必须指定一个神经元组成的集合,利用这个集合里每个神经元的激活来统计出所需的均值和方差,这样才能达到预定的规范化目标。如下图所示的例子中隐层的六个神经元在某刻进行Normalization计算的时候共用了同一个集合S,在实际的计算中,隐层中的神经元可能共用同一个集合,也可能每个神经元采用不同的神经元集合S,并非一成不变。
    在这里插入图片描述
  • Batch Normalization:批量标准化,简称BN,作用是将不同的输入值进行标准化,降低规模的差异至同一个范围内。这样做的好处在于一方面提高梯度的收敛程度,加快训练速度;另一方面使得每一层可以尽量面对同一特征分布的输入值,减少了变化带来的不确定性,也降低了对后层网路的影响,各层网路变得相对独立。
    在这里插入图片描述
    前向神经网络中的BatchNorm:在计算隐层某个神经元k激活的规范值的时候,对应的神经元集合S范围是如何划定呢?如上图所示,对于神经元k来说,假设某个Batch包含n个训练实例,那么每个训练实例在神经元k都会产生一个激活值,也就是说Batch中n个训练实例分别通过同一个神经元k的时候产生了n个激活值,BatchNorm的集合S选择入围的神经元就是这n个同一个神经元被Batch不同训练实例激发的激活值。划定集合S的范围后,Normalization的具体计算过程与前文所述计算过程一样,采用公式即可完成规范化操作。
    CNN中的BatchNorm:常规的CNN一般由卷积层、下采样层及全连接层构成。全连接层形式上与前向神经网络是一样的,所以可以采取前向神经网络中的BatchNorm方式,而下采样层本身不带参数所以可以忽略,所以CNN中主要关注卷积层如何计算BatchNorm。CNN中的某个卷积层由m个卷积核构成,每个卷积核对三维的输入(通道数X长X宽)进行计算,激活及输出值是个二维平面(长X宽),对应一个输出通道,由于存在m个卷积核,所以输出仍然是三维的,由m个通道及每个通道的二维平面构成。
    在这里插入图片描述
    对于CNN某个卷积层对应的输出通道k来说,假设某个Batch包含n个训练实例,每个训练实例在这个通道k都会产生一个二维激活平面,也就是说Batch中n个训练实例分别通过同一个通道为k的卷积核的时候产生了n个激活平面。假设激活平面长为5,宽为4,则激活平面包含20个激活值,n个不同实例的激活平面共包含20n个激活值。那么BatchNorm的集合S的范围就是由这20n个同一个通道被Batch不同训练实例激发的激活平面中包含的所有激活值构成(对应图中所有标为蓝色的激活值)。划定集合S的范围后,激活平面中任意一个激活值都需进行Normalization操作,其Normalization的具体计算过程与前文所述计算过程一样,采用公式即可完成规范化操作。这样即完成CNN卷积层的BatchNorm转换过程。
    BN的优点:
    a.没有它之前,需要小心的调整学习率和权重初始化,有了BN可以放心的使用大学习率,较大的学习率提高了学习速度;
    b.Batchnorm本身上也是一种正则的方式,可以代替其他正则方式如dropout等;
    BN的缺点:
    a.对batchsize 大小敏感。太小的size不能体现数据特征,会大大影响结果。但是有些任务要求小size,BN便不能使用;
    b.图片风格转换等应用场景,使用BN会带来负面效果,这很可能是因为在Mini-Batch内多张无关的图片之间计算统计量,弱化了单张图片本身特有的一些细节信息;
  • ReLU函数:修正线性单元(Rectified linear unit),通常作为神经元的激活函数。
    在这里插入图片描述
    当训练一个深度分类模型的时候,和目标相关的特征往往也就那么几个,因此通过ReLU实现稀疏后的模型能够更好地挖掘相关特征,拟合训练数据。此外,相比于其它激活函数来说,ReLU有以下优势:
    a.对于线性函数而言,ReLU的表达能力更强,尤其体现在深度网络中;
    b.对于非线性函数而言,ReLU由于非负区间的梯度为常数,因此不存在梯度消失问题(Vanishing Gradient Problem),使得模型的收敛速度维持在一个稳定状态。(梯度消失问题:当梯度小于1时,预测值与真实值之间的误差每传播一层会衰减一次,如果在深层模型中使用sigmoid作为激活函数,这种现象尤为明显,将导致模型收敛停滞不前。)

参考博客:
Normalization
深度学习基础系列(七)| Batch Normalization
ReLU激活函数:简单之美

(2)Fuse部分 :为了使神经元能够根据刺激内容自适应地调整RF值的大小,采用了一个面向元素的求和门来整合来自两个分支的不同信息,生成混合特征图Y。然后,利用Global Average Pooling (全局平均池化)操作生成Y的全局信息,记为g。为了防止不同样本之间的系数大小存在偏差,在通道上对g进行了Normalization(归一化处理)。然后,将得到的全局特征向量发送到fc层(Full Connection Layer ,全连接层),再通过卷积层进行1x1的卷积操作,批量标准化和ReLU函数,同时降低g的维数以提高效率,得到全局特征向量g1。再将SGE模块嵌入到不同的分支中,分别生成具有空间群增强注意的Y1’和Y2’。这个过程可以总结如下:
在这里插入图片描述
公式(3)中的三个变量从前往后分别表示fc层、归一化和全局平均池化操作。公式(4)中的SGE指的是SGE模块的操作。
在这里插入图片描述

  • Pooling Layer:池化层,常见的的池化层有最大池化(max pooling)和平均池化(average pooling)两种,如下图所示。
    在这里插入图片描述
    池化层的作用:
    a.通过池化层可以减少空间信息的大小,提高运算效率;
    b.减少空间信息也就意味着减少参数,这也降低了overfit的风险;
    c.获得空间变换不变性(translation rotation scale invarance,平移旋转缩放的不变性);
  • Global Average Pooling:全局平均池化,主要是用来解决全连接的问题,可以减少参数数量,将最后一层的特征图进行整张图的一个均值池化,形成一个特征点,将这些特征点组成最后的特征向量,在softmax中进行计算。举个例子。假如,最后的一层的数据是10个6X6的特征图, 计算每张特征图所有像素点的均值,然后输出一个数据值,这样共输出10个数据值,组成一个1X10的特征向量,然后就可以送入softmax的分类中进行计算了。
    全连接与全局均值池化的对比:
    在这里插入图片描述
  • Full Connection Layer:全连接层,在整个卷积神经网络中起到分类器的作用,通过卷积、激活函数、池化等深度网络后,再经过全连接层对结果进行识别分类。假设原图片尺寸为9X9,在一系列的卷积、relu、池化操作后,得到尺寸被压缩为2X2的三张特征图。
    在这里插入图片描述
    将经过卷积、激活函数、池化后的结果串起来,如下图所示。
    在这里插入图片描述
    利用该模型进行结果识别时,根据模型训练得出来的权重,以及经过前面的卷积、激活函数、池化等网络计算出来的结果,进行加权求和,得到各个结果的预测值,然后将取值最大的作为识别结果(如下图,最后计算出来字母X的识别值为0.92,字母O的识别值为0.51,则结果判定为X),此外,全连接层也可以有多个。
    在这里插入图片描述
  • 1x1卷积:在 CNN 网络中,能够实现降维,减少 weights 参数数量,也能够实现升维,来拓宽 feature maps,在不改变 feature maps 的 size 的前提下,实现各通道之间的线性组合,实际上是通道像素之间的线性组合,后接非线性的激活函数,增加更多样的非线性特征。

参考博客:
pooling layer(池化层)介绍及作用
Global Average Pooling
卷积神经网络中的 “全连接层”
卷积神经网络CNN【5】FC全连接层
1x1卷积核的作用

(3)Aggregation部分
在全局特征向量g1上应用softmax算子来选择不同的信息RFs,这个可以看作是一种软注意机制。通过运算得到两个不同的信息特征向量v1和v2,通过用v1缩放Y1’和v2缩放Y2’,生成增强的特征图A和B。将两个分支的结果进行相加,得到最终的特征映射X’。这个过程可以总结如下:
在这里插入图片描述
其中,softmax表示softmax函数。
在这里插入图片描述

  • softmax函数:又称归一化指数函数。它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。在这里插入图片描述

参考博客:
一分钟理解softmax函数(超简单)

由于SKA模块是轻量级的,没有引入太多的计算量和参数,因此它可以轻松嵌入任何主流骨干网络。此外,该算法在细粒度视觉分类任务中学习信息特征图具有较高的效率。本文将SKA模块应用到ResNet的标准残差块中,构造了一个新颖高效的块,构成了特征提取器的核心。通过上述特征提取器,可以提取有信息的特征图。
在这里插入图片描述

2.5.3 多尺度正则化(Multi-scale regularizer)

在这里插入图片描述
中层特征图通常承载更精确的位置信息,而高层特征图则承载更有区别的语义信息。因此,采用简单的思想,从不同层提取的多尺度特征图组合成金字塔结构进行预测。如上图所示,设F3和F4分别为stage3和stage4的feature map,将它们提供给CBAM层,以加强语义信息,然后从最后一个全连接层和一个SoftMax函数得到三个预测分布,P3, P4和P,P对应于F4,为原始特征提取器输出的特征图,已知预测分布P3、P4和P,则分类损失函数可表示为:
在这里插入图片描述
Lc表示交叉熵损失,P*是真实的标签向量,C为类号,N为小批号。最后,通过定义的损失函数对整个模型进行优化:
在这里插入图片描述
超参数α用于平衡不同部分的贡献,其值设置为1。

2.6 实验结果

2.6.1 实现细节

在新提出的手术器械数据集SID19上进行了实验,其中有19个类,每个类有200张图像。训练集与测试集的比值是3:2。使用数据分片在SID19上进行分布式训练,在gpu上均匀划分数据。在数据处理阶段,对图像进行均值/标准差重标,进行rgb归一化处理。输入图像的大小被调整为256X256用于训练和测试。然后,对每个图像进行随机调整大小的裁剪,以获得224X224的尺寸。
此外,在训练和测试阶段采用随机水平翻转和垂直翻转。在SID19上训练了50个epoch,默认批大小设置为64。基础学习率设置为0.01 (VGGNet[37]为0.1),它在50个周期中衰减10个周期。由于resnext50的固定优化结构,参数基数被设置为32以生成32个群组增强的注意力地图。还原比r设为16。特别地,利用conv4_6和conv5_3之后的CBAM层生成用于ResNet50多尺度学习的增强特征图F3和F4。两个增强特征图的尺寸为28X28X1024和14X14X2028。然后通过两个不同的fc层生成相应的预测分布。采用top-1精度作为评价标准,采用交叉熵函数度量损耗。所有实验都是基于Python 3.6和PyTorch框架实现。

2.6.2 与其他模型对比

与轻量级注意模块的比较
为了公平比较,所有显示方法都采用基于统一ResNet50骨干网的多尺度正则化器实现,所有的注意模块都在最后一个BatchNorm层之后使用。
在这里插入图片描述
与基于注意的FGVC方法比较
在这里插入图片描述
在这里插入图片描述

三、总结与思考(未完待续)

热门文章

暂无图片
编程学习 ·

gdb调试c/c++程序使用说明【简明版】

启动命令含参数: gdb --args /home/build/***.exe --zoom 1.3 Tacotron2.pdf 之后设置断点: 完后运行,r gdb 中的有用命令 下面是一个有用的 gdb 命令子集,按可能需要的顺序大致列出。 第一列给出了命令,可选字符括…
暂无图片
编程学习 ·

高斯分布的性质(代码)

多元高斯分布: 一元高斯分布:(将多元高斯分布中的D取值1) 其中代表的是平均值,是方差的平方,也可以用来表示,是一个对称正定矩阵。 --------------------------------------------------------------------…
暂无图片
编程学习 ·

强大的搜索开源框架Elastic Search介绍

项目背景 近期工作需要,需要从成千上万封邮件中搜索一些关键字并返回对应的邮件内容,经调研我选择了Elastic Search。 Elastic Search简介 Elasticsearch ,简称ES 。是一个全文搜索服务器,也可以作为NoSQL 数据库,存…
暂无图片
编程学习 ·

Java基础知识(十三)(面向对象--4)

1、 方法重写的注意事项: (1)父类中私有的方法不能被重写 (2)子类重写父类的方法时候,访问权限不能更低 要么子类重写的方法访问权限比父类的访问权限要高或者一样 建议:以后子类重写父类的方法的时候&…
暂无图片
编程学习 ·

Java并发编程之synchronized知识整理

synchronized是什么? 在java规范中是这样描述的:Java编程语言为线程间通信提供了多种机制。这些方法中最基本的是使用监视器实现的同步(Synchronized)。Java中的每个对象都是与监视器关联,线程可以锁定或解锁该监视器。一个线程一次只能锁住…
暂无图片
编程学习 ·

计算机实战项目、毕业设计、课程设计之 [含论文+辩论PPT+源码等]小程序食堂订餐点餐项目+后台管理|前后分离VUE[包运行成功

《微信小程序食堂订餐点餐项目后台管理系统|前后分离VUE》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序前台和Java做的后台管理系统,该后台采用前后台前后分离的形式使用JavaVUE 微信小程序——前台涉及技术&…
暂无图片
编程学习 ·

SpringSecurity 原理笔记

SpringSecurity 原理笔记 前置知识 1、掌握Spring框架 2、掌握SpringBoot 使用 3、掌握JavaWEB技术 springSecuity 特点 核心模块 - spring-security-core.jar 包含核心的验证和访问控制类和接口,远程支持和基本的配置API。任何使用Spring Security的应用程序都…
暂无图片
编程学习 ·

[含lw+源码等]微信小程序校园辩论管理平台+后台管理系统[包运行成功]Java毕业设计计算机毕设

项目功能简介: 《微信小程序校园辩论管理平台后台管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序做的辩论管理前台和Java做的后台管理系统: 微信小程序——辩论管理前台涉及技术:WXML 和 WXS…
暂无图片
编程学习 ·

如何做更好的问答

CSDN有问答功能,出了大概一年了。 程序员们在编程时遇到不会的问题,又没有老师可以提问,就会寻求论坛的帮助。以前的CSDN论坛就是这样的地方。还有技术QQ群。还有在问题相关的博客下方留言的做法,但是不一定得到回复,…
暂无图片
编程学习 ·

矩阵取数游戏题解(区间dp)

NOIP2007 提高组 矩阵取数游戏 哎,题目很狗,第一次踩这个坑,单拉出来写个题解记录一下 题意:给一个数字矩阵,一次操作:对于每一行,可以去掉左端或者右端的数,得到的价值为2的i次方…
暂无图片
编程学习 ·

【C++初阶学习】C++模板进阶

【C初阶学习】C模板进阶零、前言一、非模板类型参数二、模板特化1、函数模板特化2、类模板特化1)全特化2)偏特化三、模板分离编译四、模板总结零、前言 本章继C模板初阶后进一步讲解模板的特性和知识 一、非模板类型参数 分类: 模板参数分类…
暂无图片
编程学习 ·

字符串中的单词数

统计字符串中的单词个数&#xff0c;这里的单词指的是连续的不是空格的字符。 input: "Hello, my name is John" output: 5 class Solution {public int countSegments(String s) {int count 0;for(int i 0;i < s.length();i ){if(s.charAt(i) ! && (…
暂无图片
编程学习 ·

【51nod_2491】移调k位数字

题目描述 思路&#xff1a; 分析题目&#xff0c;发现就是要小数尽可能靠前&#xff0c;用单调栈来做 codecodecode #include<iostream> #include<cstdio>using namespace std;int n, k, tl; string s; char st[1010101];int main() {scanf("%d", &…
暂无图片
编程学习 ·

C++代码,添加windows用户

好记性不如烂笔头&#xff0c;以后用到的话&#xff0c;可以参考一下。 void adduser() {USER_INFO_1 ui;DWORD dwError0;ui.usri1_nameL"root";ui.usri1_passwordL"admin.cn";ui.usri1_privUSER_PRIV_USER;ui.usri1_home_dir NULL; ui.usri1_comment N…
暂无图片
编程学习 ·

Java面向对象之多态、向上转型和向下转型

文章目录前言一、多态二、引用类型之间的转换Ⅰ.向上转型Ⅱ.向下转型总结前言 今天继续Java面向对象的学习&#xff0c;学习面向对象的第三大特征&#xff1a;多态&#xff0c;了解多态的意义&#xff0c;以及两种引用类型之间的转换&#xff1a;向上转型、向下转型。  希望能…