彭 迪,吴 太 夏,王 树 东,鞠 茂 森
(1.河海大学 地球科学与工程学院,江苏 南京 211100; 2.中国科学院 空天信息创新研究院,北京 100000; 3.河海大学 河长制研究与培训中心,江苏 南京 210098)
河湖管理与保护是一项复杂的系统工程,涉及上下游、左右岸、不同行政区域和行业[1]。近年来,一些地区积极探索河长制,协调整合各方力量,有力促进了水资源保护、水域岸线管理、水环境治理等工作。河湖水域岸线是保障供水安全与防洪安全的重要屏障,河湖岸线周围存在违法侵占河道、围垦湖泊、非法采砂钓鱼等乱占滥用河湖水域岸线情况等。2016年底,中共中央办公厅、国务院办公厅印发了《关于全面推行河长制的意见》,要求各地区各部门结合实际认真贯彻落实,提升管理水平,推进生态文明建设;2019年初,多部委联合印发《长江流域重点水域禁捕和建立补偿制度实施方案》,对长江流域分阶段实施禁捕做了规定[2];2022年初,水利部制定了《2022年水利政策法规工作要点》,明确提出加强常态化水行政执法,强化日常执法巡查,加大对妨碍行洪、侵占河湖岸线、违法取水、损害水生态水环境等水事违法行为打击力度[3]。为了应对人为偷捕对于水生态损害、水环境污染的影响[4],农业农村部的通告宣布从2020年1月1日起开始实施长江十年禁渔计划。规范禁捕水域的垂钓行为是长江岸线监管的一个重要内容,非法垂钓不但违反了法规管理条例,而且给岸线的治理带来了很大的麻烦。传统的解决方案往往采用24 h轮班巡查来提防偷捕偷钓者,这种人防的方式给监管带来非常大的压力。虽然近些年在禁捕区域投入了非常多地面摄像头,减轻了安防人员的巡逻压力,但是通过人工判读河湖岸线周边录像摄影,再追究违规者的责任,此方法费时费力且时效性差。故本文将深度学习中目标检测算法运用到河湖岸线的监管中来,经过训练得到的模型可以实时检测出偷钓者的位置信息,通知安防人员采取行动,实现实时管控的同时还节约了人力物力成本。
目标检测是计算机视觉的重要内容,它将目标的分割和识别结合,其准确性和实时性在安防领域、军事领域和交通领域等有着广泛的应用场景。传统的目标检测算法,如SHIFT算法[5]、HOG算法[6]等,需要人工选择特征提取器里的特征用于分类器的训练。基于卷积神经网络提取特征的深度学习检测方法依靠其强大的自学习能力和自适应性成为当今检测技术领域的主流方法[7]。目前基于深度学习的目标检测方法主要分为两类:第一类是两阶段的目标检测算法,这类算法先粗略生成样本候选框,再进行精细的选取调整,但是检测速度较慢,其代表算法有R-CNN[8]、Fast R-CNN[9]等;第二类是一阶段的目标检测算法,利用卷积网络对整个图像进行处理,实现目标定位的同时预测类别,所以检测速度快,能达到实时检测的要求,其代表算法有SSD[10]、YOLOv1-v3[11-13]等。鉴于YOLOv3算法的精度和速度的优势,许多学者通过对YOLOv3算法结构的改进,使其能更好地适用不同的场景。魏润辰等[14]基于YOLOv3融入空间注意力机制模块增强网络特征学习,提出对网络宽度进行调整以改善模块运算速度,提高城市道路区域行人检测的准确性和实时性,更好应对驾驶场景的实际需求;岳晓新等[15]提出的道路小目标检测算法对YOLOv3算法网络模型中的聚类算法和损失函数进行优化,提高道路小目标的检测精度。
本次研究以河湖岸线上的垂钓行为为主要研究对象。考虑到河湖岸线的摄像头往往是位置固定的,但对于距离摄像头较远的垂钓者,目标变小而使得识别精度不高。针对此问题,本次研究在原YOLOv3的网络结构中嵌入多个注意力机制模块,改变特征层的权重信息,使网络聚焦于垂钓行为特征,抑制背景的干扰;同时由于样本量不易扩充,借助迁移学习的思想,利用COCO数据集得到预训练主干权重,提高模型的提取特征能力和泛化能力。试验结果表明,将上述两者结合起来可大幅提高检测精度,能进行快速高效的垂钓行为提取。
YOLOv3的主干网络为Darknet-53模型。Dartknet-53模型采用调整卷积核的步长代替最大池化来改变前向传播中张量尺寸变换,并且舍弃了v2版本中参数量大的全连接层;它还借鉴了Res-Net的残差结构加深网络结构的深度,并采用类似FPN(Feature Pyramid Networks)网络结构,提取不同尺度的特征图。YOLOv3网络结构基本组件DBL(Darknetconv2d_BN_Leaky)由卷积层、BN层和Leaky ReLU激活函数构成,通过两个DBL的卷积及跳跃连接构成残差单元,加深神经网络的层数的同时,有效避免了梯度消失问题。Darknet-53交替使用残差单元和步长为2的3×3卷积核将输入模型416×416尺寸的图片缩小32倍,后续多次卷积及两次上采样保证FPN拼接时张量尺度相同,输出3种不同尺度的特征图。其中,二、三层的特征图由前一层的特征图上采样后与低层网络中相同大小的特征图进行融合得到。因为浅层网络语义信息较少、位置信息较多,而深层网络中语义信息相对较多,故YOLOv3采用类似FPN结构将浅层与深层信息融合,可实现对不同尺度特征有效提取。
本次研究主要是禁捕区域的垂钓行为,由于在禁捕区域的许多垂钓者距离摄像头较远,在影像中呈现为小目标,本文针对YOLOv3算法在小目标识别上的缺陷,将卷积块注意力模块CBAM(Convolutional Block Attention Module)分别嵌入到模型网络结构的5个位置上,其分别位于主干网络Darknet-53模型输出的3个特征层后以及特征融合阶段中两个上采样处理得到的特征层后,以此得到改进后的网络模型YOLOv3-CBAM,结构如图1所示。本次研究保持了主干的完整性,可共用YOLOv3算法在COCO数据集上得到的主干网络权重,节约了训练成本。
图1 YOLOv3-CBAM的网络结构Fig.1 YOLOv3-CBAM network structure
注意力机制被广泛用在自然语言处理、计算机视觉等任务中,是一种能改变特征权重的有效手段,在许多实验中都表现出较好的性能[16-19]。注意力机制可以看作是一种权重分配方式,注意力是模仿人类大脑处理大量信息时的一种机制,即关注重点区域,而忽视不重要的部分。对于不同的位置信息或者不同的通道信息赋予不同的权重因子,这样做的目的就是增加了有用特征的权重,从而获得更多目标的细节信息,提高目标识别的精度。
与SENet[19]、ECANet[20]等其他只关注通道特征的注意力机制不同,卷积块注意力模块CBAM提供了一种兼顾通道位置权重和空间位置权重的特征权重产生方式,它将通道注意力机制和空间注意力机制进行结合,在几乎不增加模型复杂度的情况下,能够获得十分明显的性能增益[17]。其实现过程如图2所示,CBAM对输入进来的特征层,分别进行通道注意力机制的处理和空间注意力机制的处理。在网络加入CBAM后,特征层对于不同空间位置、通道位置的权重得到了调整,让网络学会关注重点信息,提高识别目标物体的概率。
图2 CBAM模块的结构Fig.2 CBAM module structure
图3表示CBAM中通道注意力模块和空间注意力模块微调特征层的过程。
图3(a)表示通道注意力机制的结构。通道注意力机制的实现可以分为两个部分:模块会对输入进来的单个特征层分别进行全局平均池化和全局最大池化。将平均池化和最大池化的结果送入共享全连接层(Shared MLP)进行处理,其中共享全连接层包括两个全连接层,对通道数先降维再升维:第一个全连接层将输出通道数缩小至原通道数的1/r;第二个全连接层将通道放大至r倍,调整回原来的通道数,本文中缩放因子r取8。对处理后的两个特征层结果进行相加,然后进行sigmoid函数处理。此时获得了输入特征层每一个通道的权值,且大小都在0~1之间。在获得这个权值后,将这个权值乘上原输入特征层即可。
图3(b)为空间注意力机制的结构。对输入进来的特征层,每一个特征点在通道上取最大值和平均值。之后将这两个结果进行堆叠,堆叠之后的结果利用一次通道数为1的卷积调整通道数,其中卷积核尺寸k取7,为了保证特征层空间上的尺寸不发生改变,填充量p取3,卷积之后得到一个通道数为1的特征层,然后进行sigmoid函数处理。此时获得了输入特征层每一个特征点的权值,且大小都在0~1之间。在获得这个权值后,将这个权值乘上原输入特征层即可。
图3 CBAM中的通道注意力模块和空间注意力模块的结构Fig.3 Channel attention module andspatial attention module in CBAM
迁移学习在大量的试验中被证明是一种有效的模型改进方式,尤其是当目标数据不足时,迁移学习的方式能够在小样本的情况下获得比较好的训练结果,提升模型的训练精度和鲁棒性能。迁移学习是模型训练效果的一种泛化,诸多学者从模型复杂性和学习算法的稳定出发,导出了模型泛化的理论边界[21]。深度神经网络的识别效果很大程度上取决于数据样本的数量,基于大批量相关场景的数据样本才能训练出一个表现效果优异的神经网络模型。如果样本集的数据不足,模型提取的效果很难得到充分的训练,从而训练出来的神经网络模型产生比较严重的过拟合现象,且泛化能力比较差[22]。
本次研究中构建的垂钓行为的数据集比较小,若将其直接用于训练一个目标检测的网络,则训练收敛速度慢且准确率不高。因此,为了有效加快训练的迭代速度、增强训练模型的提取特征能力和模型的泛化能力、提高模型预测识别的准确率,采用了预训练权重。由于YOLOv3-CBAM算法未对Darknet53主干进行调整,所以可以与YOLOv3算法共用同一个预训练权重,节约训练成本。COCO数据集是一个大规模的、丰富的物体检测和图像分割的开源数据集,提供的标签类别有80类,超过33万张图片,其中20万张有标注,整个数据集中个体的数目超过150万个[23]。通过COCO数据集训练得到的预训练权重具有强大的泛化能力,其在浅层学习图像低层次的特征,包括图像的边缘、颜色信息等;在深层学习图像的高层语义特征,这些特征将随着图像的不同而有不同的表现。
在目标检测模型中,常使用目标损失函数(Loss function)来衡量模型预测值与样本真实值的差异性程度。对于本文所研究的敏感目标检测问题,网络在训练过程中需要考虑3个方面:位置预测的均方损失、置信度的交叉熵损失以及类别的交叉熵损失,其中置信度又分为包含目标置信度和不包含目标置信度两部分。
Loss=loss_coord+loss_conf+loss_cls
(1)
式中:Loss表示总损失;loss_coord表示位置损失;loss_conf表示置信度损失;loss_cls表示类别损失。
具体各个部分损失函数的公式如下:
(2)
(3)
(4)
本文实验配置环境如下:操作系统为Windows10,中央处理器为4核 Intel(R) Xeon(R) Silver 4110 CPU @.10GHz,GPU为英伟达GeForce系列11G显存,16GB内存的RTX 2080Ti显卡。语言选择的是Python3.8,深度学习框架为PyTorch库,并安装CUDA11.0实现加速运算。
由于本文针对的是垂钓行为的识别,场景类型较为多样化,并没有大量公开可用的专业数据集,因此采用人脸球机在湖北省黄石市和鄂州市的长江岸线及其他河湖岸线监测站点拍摄的影像和网上收集的图片制作了数据集。在对数据集筛选之后,一共制作了1 200张图片,利用Labelme库对其进行手工标注,用于模型的训练、验证和测试。对收集的数据采用分离验证方法,将图片数据集按8∶2划分为训练集和测试集,在训练集中以9∶1比例再细分为训练集和验证集。
本文中除了YOLOv3模型,还引入经典的单阶段目标检测算法——SSD算法作为对比,总共涉及3个模型,分别为SSD模型、YOLOv3模型和YOLOv3-CBAM模型,3个模型分别采用直接训练和预训练权重进行训练。同时,使用批量随机梯度下降算法,初始学习率为0.000 1,动量参数设定为0.94,权重衰减正则项为0.000 5,防止模型过拟合,设置batchsize为6,最大迭代次数设为1 000。数据集每完成一次迭代训练后评估模型,通过训练过程中的误差变化曲线判读模型的收敛情况。在实验过程中,所有模型都在不到最大迭代次数一半的轮次收敛。
本文算法测试使用平均准确率mAP、召回率Recall、准确率Precision、平均交并比IOU评价算法性能,评价公式分别为
(5)
式中:AP表示各个目标对应的准确率;h表示识别物体的总类别数,本实验只预测垂钓行为,故h取1;mAP是记录召回率与准确率曲线下方的面积,是衡量目标检测性能的依据。
(6)
式中:TP表示真正类,即正类垂钓样本被预测成正类垂钓样本;FN表示假负类,即正类垂钓样本没有被模型预测到;召回率Recall也称查全率,刻画分类器所识别出的真实例占总真实例的比例,召回率的取值处于[0,1]内,受到超参数(如IOU)的影响,呈曲线形式变化。
(7)
式中:FP表示假正类,即不是垂钓行为却被预测成正类垂钓样本;准确率Precision也称查准率,刻画的是分类器所识别出的真实例占所有识别实例的比例,准确率的取值处于[0,1]内,受到超参数(如IOU)的影响,呈曲线形式变化。
(8)
式中:STrue∩Pre代表真实垂钓行为框与预测垂钓行为框的交集部分面积;STrue∪Pre代表真实垂钓行为框与预测垂钓行为框的并集部分面积;IOU取值处于[0,1]内,IOU值越大,候选框越精确;反之,值越小,候选框偏差越大。
本节主要包括损失函数曲线的收敛情况、各个模型的识别精度和各个模型的识别示例。
图4是YOLO-CBAM模型应用在禁捕数据集的损失函数曲线,包含了不使用预训练权重和使用预训练权重分别进行训练时,在训练集和验证集上的损失函数曲线。其中两条蓝线为直接训练的结果,两条橙线为采用预训练权重训练的结果,其中虚线为训练集上的结果,实线为测试集上的结果。
图4 添加CBAM模块后的模型损失函数曲线Fig.4 Model loss function curve after adding CBAM module
从迭代次数来看,不使用预训练权重训练大约在迭代约300轮次后损失函数曲线收敛,而使用了预训练模型之后只需要迭代200轮便可以收敛;从拟合程度来看,不使用预训练权重训练时,损失函数曲线趋于收敛之后训练集和验证集上的损失值差距较大,存在比较严重的过拟合问题,而使用了预训练模型之后两者之间的差值明显减小;从损失值来看,无论是训练集上的损失值,还是验证集上的损失值,采用预训练模型的结果均明显优于不采用预训练模型的结果。综上可知,使用预训练模型权重可以大大减少模型训练过程中收敛所需的迭代轮次,降低模型过拟合的风险,提高模型的泛化能力,同时最终得到的模型在本次研究的数据集上也有着更小的损失值。
模型的识别精度用于衡量模型的优异性,是用来比较不同算法之间性能的重要标准。表1为3种不同的目标检测模型的识别精度。由表1可知:纵向上,SSD模型使用预训练权重精度提升了3.52个百分点,YOLOv3模型使用预训练权重精度提升了14.70个百分点,YOLOv3-CBAM模型使用预训练权重精度提升了14.89个百分点,可以看出采用预训练权重可以大幅提高模型识别的精度。从表格中横向比较,可知无论是否采用预训练权重,3个模型的mAP大小关系均为YOLOv3-CBAM>YOLOv3>SSD,且YOLOv3算法模型及其改进模型的精度远高于SSD算法模型,可以看出YOLOv3-CBAM在禁捕场景识别上的优异性。添加注意力机制模块后,不采用预训练模型直接训练得到的模型的识别精度可以提高0.53个百分点,使用预训练权重训练得到的模型其识别精度可以提高0.72个百分点,可以看出注意力机制模块通过对空间位置和通道赋予不同权重,提高了模型的识别精度。
表1 3种不同的目标检测模型的识别精度Tab.1 The recognition accuracy of three different objection detection models %
不难看出,采用预训练权重可提升模型识别精度。为了更好地探究不同算法在禁捕场景的差异性,进一步分析采用预训练权重得到的模型准确率Precision和召回率Recall。表2为使用预训练权重进行训练后的SSD算法、YOLOv3算法、YOLOv3-CBAM算法3个模型的详细评价指标。就Precision而言,3个模型分别为95.15%,95.54%和96.18%,表明模型对于垂钓行为的识别的准确度都比较高;就Recall而言,3个模型分别为91.03%,93.75%和94.38%,YOLOv3系列算法的召回率明显高于SSD算法,且原YOLOv3架构添加CBAM模块后,召回率提高了0.63个百分点,表明YOLOv3-CBAM算法的识别结果存在更少的漏检情况。在3个评价指标中,均是YOLOv3-CBAM模型结果最优。
表2 使用预训练模型的目标检测的模型评价指标Tab.2 Model evaluation indicators of objection detection using pre-trained models %
本文中涉及到的模型,从经典的SSD模型到YOLOv3模型、YOLOv3-CBAM模型,在非极大值抑制值设置为0.5,置信度阈值设置为0.5后,分别对示例图片进行预测。示例图片均为训练测试集之外的数据,包括单一目标的图片和多目标的图片。
对于单一目标的图片,以图5为例,在环境较为复杂的阴雨天且垂钓对象有部分遮挡的情况下,图片影像上的垂钓行为都能做到精确的识别,虽然预测框的位置信息略有差异,但能够准确地包含垂钓者且置信度都在0.98以上,其中采用预训练权重的YOLOv3系列模型的预测框置信度能达到1,表明各个模型对于单一目标钓鱼行为能够达到很好的识别效果。
图5 不同模型对单一目标的识别结果Fig.5 Recognition results of single object by different models
对于多目标的图片,以图6为例,图片场景中多个小目标且光影条件下人物细节不清楚。由于(a)~(c)使用的模型没有预训练权重提供比较强的特征提取能力,所以在多目标、小目标的识别方面存在漏检和预测目标框置信度低的问题。使用预训练模型的SSD算法也存在小目标漏检的问题,使用预训练模型的YOLOv3算法和YOLOv3-CBAM算法都能得到很好的检测结果,其中YOLOv3-CBAM模型比YOLOv3模型在小目标识别结果上表现出更高的置信度。
图6 不同模型对多目标的识别结果Fig.5 Recognition results of multi-object by different models
本文基于YOLOv3基础模型,提出了一种将迁移学习和注意力机制结合的YOLOv3-CBAM的目标检测算法,构建了禁捕垂钓场景的数据集,并在禁捕垂钓场景中取得较高的精度。借鉴迁移学习的思想,使用预训练权重实现了模型参数共享和特征提取能力的迁移,降低了模型损失函数收敛所需的迭代次数,减弱了训练结果对于特定样本数据量的依赖,节约了训练的成本,模型在禁捕场景中识别垂钓行为的准确率和召回率都有大幅的提升。在特征提取和上采样之后嵌入了注意力机制模块,赋予模型对于不同空间位置、不同通道位置的权重,小幅提高了模型的识别精度。实验结果表明,最优模型为采用预训练权重的YOLOv3-CBAM,其mAP可达到93.99%,可以用于长江流域的实时禁捕识别。
虽然改进后的YOLOv3-CBAM能够达到96.18%的准确率和94.38%的召回率,但是对于河湖岸线的预警而言,召回率的提升更为重要,召回率提高意味着很少的漏检现象。考虑模型识别后还有人工判读确认的步骤,后续的研究中可以微调模型,在准确率不下降太多的情况下,提高模型的召回率。同时,在研究的过程中也发现了一些缺陷,模型存在误识别的问题,即把湖边的行人识别成垂钓者。解决这个问题需要扩充禁捕场景的样本集,优化网络来增强模型对于识别细节特征的把握,提高模型的准确率和召回率,促进长江流域河湖岸线管理向智能化发展。