一种改进残差深度网络的多目标分类技术
2023-08-03陈超,吴斌
陈 超 ,吴 斌
(1.西南科技大学 信息工程学院,四川 绵阳 621010;2.四川省高等学校数值仿真重点实验室,四川 内江 641000)
0 引言
图像识别的应用在现代社会的应用越发广泛,其重要程度越发明显。图像识别是计算机视觉中的一个重要环节,属于有监督学习类别,即在图片集或者视频中快速识别出其类别。近些年来一直是研究热点。传统的图像识别的方法是基于人工设置的一些特征进行匹配,然而识别速度较低,且对于多目标,遮挡,拥挤等场景中的目标识别效果很差。VGG[1]是牛津大学的Visual Geometry Group的组提出的。该网络是在ILSVRC 2014上的相关工作,主要工作是证明了增加网络的深度能够在一定程度上影响网络最终的性能。VGG有两种结构,分别是VGG16和VGG19,两者并没有本质上的区别,只是网络深度不一样。使用了3个3×3卷积核来代替7×7卷积核,使用了2个3×3卷积核来代替5×5卷积核,这样做的主要目的是在保证具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果。在VGG[1]将ImageNet的top-1分类准确率提高到70%以上后,在使卷积高性能变得复杂方面有了很多创新。此时提升网络性能最直接的办法就是增加网络深度会引发诸多问题[2]:比如网络层数太多,一般计算机或者手持设备无法胜任,因为网络越深、参数越多,计算复杂度越大,难以应用;增加网络深度同时引入全连接变成稀疏连接来减少参数量。但在实现时计算所消耗的时间却很难减少。Google研究人员提出了Inception的方法[2],如当代GoogLeNet[2]和后来的Inception模型[3-5]采用了精心设计的多分支架构,Inception模块中并列提供多种卷积核的操作,网络在训练的过程中通过调节参数自己去选择使用,同时,由于网络中都需要池化操作,所以此处也把池化层并列加入网络中,使得网络的宽度得到了前所未有的扩展,因而得到了更为全面的特征提取网络结构,效果明显好于VGG。何凯明的ResNet[6]提出了简化的残差架构,在宽度和深度上都同时扩展了网络结构,尤其是增加了恒等连接,使得网络提取的特征始终不低于浅层特征,保证了网络可以加深加宽,在当年的图像识别,图像检测上取得了压倒式的成就。DenseNet[7]通过将低层与大量的高层连接起来,使得拓扑结构更加复杂,各层之间的特征进行了融合,保证了特征的丰富性。除了实现上的不便外,复杂的模型可能会降低并行度[8],从而降低推理速度。提出了一种初始化方法[9]来训练极深普通卷积网络,保证了网络的鲁棒性。最近的工作[10-11]结合了几种技术,包括Leaky_ReLU和max-norm等操作,保证了网络特征图提取的自然过渡,使得提取的特征更为真实。然而,Resnet 50网络不能提取重叠目标、拥挤目标、小目标的某些特征。相反,改进算法的目标是建立一个具有合理深度和良好的精度-速度权衡的优秀模型,它只涉及最常见的组件(例如:卷积,批归一化和激活函数)。Resnet50结构仅由3×3卷积、1×1卷积和sigmod激活函数的堆栈组成。可以取得更好的效果受近年残差模块、1×1卷积[2-6],[11]等思想,在第一个残差模块后再增加了1×1短接分支来提取更多的原始特征和调整与之深层匹配的通道数。以上网络中各层次之间的特征图没有信息的交互[13-15],于是引入convolutional block attention module (CBAM)表示卷积模块的注意力机制模块,是一种结合了空间(spatial)和通道(channel)的注意力机制模块[16-19]。但是现实图像中的特征彼此之间有位置,领域等信息,CBAM提取空间注意力是用局部卷积,只能捕获局部的信息,无法获得长程依赖,基于此作者提出了CA,充分利用了位置信息,而且控制了计算开销[20]。充分利用 channel 和 spatial 之间的关系,有人提出提出了shuffle attention注意力机制,首先将输入的特征分为g组,然后每一组的特征进行split,分成两个分支,分别计算 channel attention 和 spatial attention,两种attention 都使用全连接结合sigmoid的方法计算[20]。受多种注意力机制的启发,在CNN的第一个残差块层特征之后引入了空间_通道注意力机制,并修改了激活函数,从而增强了特征的表示,贡献总结如下。
首先,为融合更多的原始特征,在7×7卷积特征FeatureMap1后添加一个1×1卷积残差,提取特征FeatureMap2。
其次,在Resnet50的第一个残差块层特征之后,嵌入CBAM模块,使得CNN获得交互特征FeatureMap3。继而综合融合3个特征,即:
(FeatureMap1+FeatureMap2+FeatureMap3)。
第三,在CBAM模块中,为了融合显著特征和缓解梯度消失,将CBAM模块中的激活函数ReLU修改为激活函数ReLU6。
最后,在FashionMNIST数据集和Cifar10数据集上进行了实验,改进后的Resnet50达到了较好的识别精度和检测速度,用实验结果展示改进的Resnet50在分类方面的有效性和效率。
1 相关工作
Resnet50将靠前若干层的某一层数据输出直接跳过多层引入到后面数据层的输入部分。保证后面的特征层的特征图含有的信息至少不会比前一层差,因此是最常用的残差结构的深度神经网络结构,这种深度残差网络的设计就很好地克服由于网络深度加深而产生的学习效率变低与准确率无法有效提升的问题[6]。Resnet50比起Resnet34来说,深度更深,提取的特征更优质。比起Resnet101,Resnet152深度更浅,但是效果相差不是很大。根据FashionMNIST数据集和Cifar10数据集的特性以及训练模型的实际GPU性能,本文选择对Resnet50作为基础算法进行改进。为了更好地识别这两个数据集中的目标,首先要保证浅层特征的完整,然后进行多特征的融合,最后嵌入空间_通道注意力机制模块(CBAM)进行多层特征之间的信息交互。于是在此进行相关模块的介绍。
1.1 短接模块
因为浅层卷积提取最浅层的特征,也是最真实,最能反映图像的底层特征,所以就要更好地保留原始特征,为后期的关键特征提取,提供的良好的特征层。此时由何凯明提出的残差网络很好的解决了梯度消失的问题,结构如图1所示[6,11]。
图1 残差结构
受近年残差模块、1×1卷积[2-6,11]等思想激发,在残差网络的第一个大模块之后增加一个1×1短接分支来保留原始特征,也避免了梯度消失。添加1×1短接分支后的Resnet50结构如图2所示。
图2 添加短接分支的Resnet50结构
1.2 注意力机制
为了加强各空间特征层之间的相互作用。对图像中的空间域信息做相应的空间变换,从而提取出关键信息。空间注意模块强调空间像素的重要程度;同样每个通道上的信号添加一个权重,以表示通道与关键信息的相关性。权重越大,相关性越高。生成channel的掩码并得分。代表作有《SENET》和《Channel Attention Module》。注意机制表示特征数据中各部分的临界程度,并对其进行学习和训练。注意机制的本质是利用相关的FeatureMap进行权值学习,然后将学习权值应用于原始FeatureMap进行加权求和,得到增强的FeatureMap。根据注意域的不同,CV中的注意机制可分为空间域和通道域两类,本文采用二者结合后的CBAM注意机制进行提取特征,具体如图3所示。
图3 两个注意力模块图
CBAM包含CAM(Channel Attention Module)和SAM(Spartial Attention Module)两个子模块,分别进行通道和空间上的注意。能够节约参数和计算力,同时保证了其能够做为即插即用的模块集成到现有的网络架构中去。因为小目标本来像素就很少,假如多次卷积与池化会丢失大量的信息,此时通道注意力模块就可以提取更为显著的特征,主要表现在:通道维度不变,压缩空间维度。该模块关注输入图片中有意义的信息,保证后期的识别效果更佳。空间注意力机制更加关注空间层面更需要注意的地方。二者对应的注意力机制通过神经网络的操作生成一个掩码,然后在掩码上给出评价的得分,然后指导后期卷积提取特征的侧重点。
CBAM是一个轻量级的通用模块,可以集成到任何经典的CNN骨干网中,可以利用骨干网进行端到端的训练。CBAM模块的主要结构如图3所示,CBAM中通道注意力机制主要涉及的公式如式(1)所示。
Mc(F)=σ(MLP(AvgPool(F))+MLP(MaxPool(F)))=
(1)
其中:W0∈C/r×C,W1∈C×C/r。
将输入的特征图,分别经过全局最大池化和全局平均池化,然后分别经过MLP。将MLP输出的特征进行基于点加操作,再经过sigmoid激活操作,生成最终的channel attention featuremap与输入的特征图做点乘操作,生成spatial attention模块需要的输入特征。
CBAM中空间注意力机制主要涉及的公式,如式(2)所示,其中,σ为sigmoid操作,7×7表示卷积核的大小,7×7的卷积核比3×3的卷积核效果更好,可以提取更多的空间信息。
Ms(F)=σ(f7×7([AvgPool(F);MaxPool(F)]))=
(2)
在第一卷积模块层layer1(即:BottleNeck Block *3)后添加了通道间注意机制和空间注意机制来融合通道和空间的重要显著信息,如图6所示。
2 改进的Resnet50算法
2.1 改进激活函数
为了更好地保留原始特征,替换了原来的ReLU激活函数。因为sigmoid函数比ReLU6计算昂贵得多;ReLU6比ReLU激活函数也有一个很好的缓冲,可防止梯度消失。将ReLU6函数作为激活函数,可以很好的保留图像的原始特征。常用激活函数及其导数曲线图如图4~5所示(因为激活函数曲线有重叠的部分,为显示所有函数,在此把ReLU,ReLU6,Swish函数横坐标平移了1个像素)。
图4 4种常用激活函数
图5 4个激活函数对应的导数
从图4、图5可以看出,ReLU6比ReLU激活函数有一个很好的缓冲,更符合特征的变换过程。
2.2 改进的Resnet50算法
结合以上3个有效的模块,在此设计了一个改进的Resnet50。将第一个7×7卷积中的激活函数修改为ReLU6函数;再在第一个大型残差块后,添加了一个1×1卷积来融合显著特征。在Resnet50的第一层特征之后,再添加CBAM,最后再与原始的第一个大模块的特征图进行大融合,可以获得更多的判别特征。CBAM是一个轻量级的通用模块,可直接放在CNN骨干网任意层,但需保证输出通道数和下一层的特征图通道数匹配,为此添加通道间注意机制和空间注意机制,改进后Resnet50的框架,如图6所示。
图6 改进算法的流程图
改进后的算法融合了三路特征(CBAM特征、前一层特征Identity,新增的1×1卷积特征),这样加强了浅层和深层特征的交互信息,很好的保留了显著特征,也避免了梯度消失。后面依次保留Resnet50网络原来的三个大型卷积模块。最后通过平均池化和十分类的Softmax进行物体的识别,输出对应的类别和概率。
3 实验
3.1 数据集介绍
3.1.1 FashionMNIST数据集
为了验证算法的识别速度和识别精度,在FashionMNIST数据集上做了对比性实验,Fashion-MNIST样品图片如图7所示。
图7 FashionMNIST的样本图片
与MNIST数据集相比,FashionMNIST数据集有以下差异:
1)FashionMNIST的图像尺寸也为28×28,但特征明显多于MNIST。
2)与MNIST数据集相比,FashionMNIST包含现实世界中的真实物体,不仅有大量的噪声,而且物体的比例和特征也不同,给识别带来很大的困难。
3)60 000张图片用于训练,10 000张用于测试。模型的规模扩大了。
4)同时FashionMNIST不再是抽象符号,而是更加具象化的人类必需品(服装),共10大类,具体如表1所示。
表1 FashionMNIST对应类别
综上所述,对Fashion-MNIST数据集进行识别要难得多,所以正好用来检验改进算法的有效性。
3.1.2 Cifar10数据集
Cifar10是由亚历克斯·克里日夫斯基和伊利亚·萨斯克弗整理的一个小数据集,用于识别普遍存在的物体。共有10种RGB颜色图像:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车。图像大小为32×32,数据集包括50 000训练图像和10 000个测试图像。Cifar10的示例图片如图8所示。
图8 Cifar10数据集中的样本图像
与MNIST数据集相比,Cifar10有以下区别:Cifar10是一个三通道的彩色RGB图像,而MNIST是一个灰度图像。Cifar10的图像尺寸为32×32,而MNIST的图像尺寸为28×28,略大于MNIST。与手写字符相比,Cifar10包含现实世界中的真实物体,不仅噪声大,而且物体的比例和特征不同,识别存在很大困难,正好可用来检验改进算法的优劣。
3.2 实验环境
实验环境为百度AI Studio云计算平台,具体参数如下,CPU:4核,内存:32 GB;GPU:V100 32 GB;硬盘:100 GB;编程语言:python 3.7;框架:Paddle Paddle2.0.2。
3.3 训练参数
在此选择Resnet50作为模型的基础网络架构。通过对FashionMNIST做简单的预处理,主要包括:随机调整裁剪,Color Jitter,随机水平翻转,Normalize等操作,不使用过多的数据增强,主要更能体现改进算法的鲁棒性和通用性。
本次在FashionMNIST和Cifar10数据集上分别训练了90轮和100轮,即:epoch = 90(100),bitchsize =128,base_lr=1e-2,boundaries= [60,70],wamup_steps = 2,momentum= 0.9,weight_ decay = 5e-3,延迟学习率learning_rate = paddle.optimiz er.lr. piece wise Decay(boundaries = boundaries,values = values),学习率learning_ rate = paddle.optimizer.lr.Linear Warmup.paddle.Optimizer。优化方法为Adam,损失函数设置为交叉熵CrossEntropyLoss,每轮评价检验一次:eval_ freq=1。
3.4 相关指标
最常用的分类问题使用的是交叉熵损失,计算如式(3)所示:
(3)
正确率(acc)是指使用测试集正确分类的记录占分类记录总数的比例,计算如式(4)所示:
(4)
其中:TP表示正确分类的记录数,FP表示错误分类的测试数据数。ImageNet大约有1 000个类别,当模型预测某一张图片时,它会给出概率从高到低的1 000个类别排名。所谓top-1 Accuracy是指排名中第一类与实际结果一致的正确率。top-5 Accuracy指在前5个类别中包含实际结果的准确性。在此加载在ImageNet数据集上的预训练模型。
3.5 时间复杂度和空间复杂度
时间复杂度就是模型的运算次数,可用FLOPs衡量,也就是浮点运算次数(Floating-point Operations),卷积网络的时间复杂度如式(5)所示。
(5)
D是神经网络所具有的卷积层数,也即网络的深度。d表示神经网络第d个卷积层;Cd神经网络第d个卷积层的输出通道数Cout,也即该层的卷积核个数。对于第d个卷积层而言,其输入通道数Cin,就是第d-1个卷积层的输出通道数。
空间复杂度严格来讲包括两部分:总参数量+各层输出特征图。参数量:模型所有带参数的层的权重参数总量;特征图:模型在实时运行过程中每层所计算出的输出特征图大小,具体如式(6)所示。
(6)
总参数量只与卷积核的尺寸K、通道数C、层数D相关,而与输入数据的大小无关。
输出特征图的空间占用比较容易,就是其空间尺寸M2和通道数C的连乘。增加了1×1卷积知识常数级别的复杂度,但保证了梯度始终不消失,为保证后期的关键特征保留做出了准备。时间复杂度决定了模型的训练/预测时间。如果复杂度过高,则会导致模型训练和预测耗费大量时间,既无法快速的验证想法和改善模型,也无法做到快速的预测。本轮着重在时间复杂度和空间复杂度、识别准确度、检测速度等指标之间找到一个折中的临界点。即:时间复杂度和空间复杂度增加的成本,可以使用识别速度和精度的提升。
3.5.1 FashionMNIST数据集的实验结果
为表示简便,以此使用代号如下。a表示Resnet50网络;b表示Resnet50在第一个大模块后增加一个CBAM模块的网络;c表示在Resnet50网络只增加1×1短接分支;d表示Resnet50网络只增加了1个CBAM模块,同时也增加了1×1的短接分支,修改了ReLU6激活函数的CBAM模块。FashionMNIST数据集上检验的损失如图9所示。
图9 FashionMNIST数据集上检验损失
在迭代的eval过程中,可以看到改进后的Resnet50对应的损失在不断下降,没有反弹现象,且收敛速度比其他4种算法都快。优势就很好的体现出来了,可以在一些手持设备或者野外监控设备上得到更好的应用。可在resnet 50网络中增加了1×1的短接分支后,增加的恒等映射可以保证以后提取的特征总是在当前最好的特征图基础上提取的,实验结果也证实增加了一个恒等分支后确实提取了更多的原始特征,保证了算法的鲁棒性和收敛性。改进后的算法对应的实验评价指标之损失是最先趋于收敛的,在后期也是较稳定的。
同时,为了切实比较改进后算法对于FashionMNIST数据集较为适用,选择国际上公认的排名第一的和排名前五的类别来评价算法的优劣,在此展现了准确率top1和top5曲线的实际效果,如图10~11所示。
图10 检验的top1准确度
图11 检验的top5准确度
在迭代的eval过程中,改进后Resnet50的acc_top1和acc_top5继续以相对稳定的趋势上升。它的精度超过了Resnet 50,Resnet50_ CBAM等算法。模型的参数决定了数量空间复杂度,具体来说还分析了权重等参数、浮点计算量等相关参数详见表2。
表2 4种算法的相关参数比较
由表2可以看出,改进后的模型的训练和评估时间减少了2分钟。相关参数仅增加4.8%,FLOPs仅增加2%。实际准确率和检测速度如表3所示。
表3 4种算法的比较结果
其中,比起Resnet50,acc_top1的准确率提高了约4.3%,但批量(batch=128)训练和测试时间分别只增加2 ms和3 ms。即使与先进的模型如Res-net50_CBAM相比,准确性和速度都有优势。在处理图像识别时,可提高识别速度。
3.5.2 Cifar10数据集的实验结果
为了提高Cifar10的实际效果,将图像归一化为32×32,修改了部分实验参数bitchSize=256,训练轮数epoch=100,shuffle=True,Drop_last=True,Cifar10的损失值如图12所示。
图12 Cifar10检验损失
在迭代过程中,可以看出,与Resnet50相对应的损失持续下降,收敛速度比其他4种算法都快。通过识别度观察实际效果,如图13和图14。
图13 Cifar10检验top1的准确度
图14 Cifar10检验top5的准确度
在迭代的过程中,Resnet50的acc_top1和acc_ top5继续以相对稳定的趋势上升。它接近了Resnet 50的精度,并且明显优于其他3种算法,因为训练时长减短了。在精度方面,它明显优于另一个Resnet 50。同时分析了对比效果的参数数量、计算等方面。具体详见表4。为表示的简便,在此假设:(a:Resnet50,b:Resnet 50_ CBAM,c:Resnet50 _ 1mul1,d:Our Resnet50)。
从表4中可以看到,改进后的算法与经典的Resnet50模型相比,效果不理想。而仅仅增加1×1卷积的模型在Cifar10数据集上训练的时间有所增加,PARAM参数是最小的,FLOPs稍微增加了。但是仍然体现出1×1卷积的明显作用,即从深度神经网络的浅层特征中提取了原始的特征,可以促进深层网络特征之间的信息交互,最终完成多层特征的融合,保证最终多目标的实际识别效果,本次实验的最终的acc_ top1和acc_ top5 精度和检测速度详见表5。
表4 Cifar10数据集的训练模型相关参数大小
表5 4种算法训练Cifar10’数据集的对比结果
从表5中可以看到,与经典的Resnet50模型相比,而仅仅增加1×1卷积的模型在Cifar10数据集上,达到了超过85.77%的acc_top1精度。运算量减少的同时,还提高了acc_top1的识别准确度0.3%。
4 结束语
为了更好地识别多目标,首先,在第一个卷积残差块layer1后增加一个1×1的短接分支尽可能多的保留原始特征,保证了浅层特征的完整;然后与layer1特征进行融合,进行了多特征的融合;最后再嵌入一个修改激活函数ReLU6的空间_通道注意力机制模块(CBAM),从而增强特征图的特征表达能力。对比实验表明在FashionMNIST数据集和Cifar10数据集上准确率有一定的提高,同时也保持良好的检测速度。在未来,可能会对新的骨干网络进行修改以提取更好的特征,或者对损失函数进行修改以找到最优值。在未来可能会在引入新的注意力机制,新的激活函数、优化网络结构等来改进残差深度网络,保证当前空间复杂度和时间复杂度的基础上,类别识别准确度方面还能有一定的提高。