APP下载

基于改进YOLOv3的单木树冠检测算法

2023-03-11王丽文朱正礼

计算机仿真 2023年1期
关键词:树冠卷积函数

王丽文,朱正礼,云 挺

(南京林业大学信息科学技术学院,江苏 南京 210037)

1 引言

通过提供储存碳、预防洪水、防治荒漠化、提供生物栖息地和参与大气循环等一系列生态服务,树木在生态系统的良性循环中发挥着重要作用[1]。单株树是城市树木组成的基本单元,有效地定位和检测单木树冠已成为实时监测和管理城市树木资源的首要任务[2]。传统的树冠检测算法主要基于数字地表模型和冠层高度模型,利用边缘检测、区域生长和分水岭等算法对树冠进行识别[2,3]。受树冠形状大小的不均匀性以及复杂的纹理、形态、结构特征的影响[4],传统算法在检测单木树冠时仍存在很大的局限性。

近年来,基于深度学习的目标检测算法迅速发展,并在不同的研究领域中得到了广泛的应用。通过在多层神经网络中进行非线性映射,深度学习网络提供了复杂图像特征的分布式表示[5]。深度学习网络能够精确高效地学习图像的语义和特征,其中浅层卷积神经网络(Convolutional Neural Networks,CNN)学习目标的纹理、形状、颜色等特征,中层CNN进一步学习目标的抽象属性,高层CNN的所学特征近似于人脑的对目标特征的理解[6]。现有的基于深度学习的目标检测算法包括以图像为输入数据的二维检测算法和以点云为输入数据的三维检测算法。二维检测算法主要分为单级目标检测算法和两级目标检测算法,常见的单级目标检测算法如单目多目标检测器(Single Shot Multibox Detector,SSD)[7]和YOLO系列算法[8-10],两级目标检测算法如快速区域CNN(Fast Region-Based CNN,Fast R-CNN)[11]和更快速区域CNN(Faster R-CNN)[12]。三维检测算法主要包括多视角CNN(Multi-view CNN)[13]、PointNet[14]和PointNet++[15]。虽然三维检测算法可以直接从目标的三维表示中提取特征,但由于三维数据具有数据量大、稀疏性、空间复杂度高和各向异性形状等特点[13-15],面向三维的目标检测算法在提取目标结构特征和选择最佳特征组合方面受到了很大限制。因此,选择对面向图像的YOLOv3目标检测算法进行改进。作为一种单级目标检测算法,YOLOv3较两级目标检测算法具有更简单的网络结构和学习策略,能够只使用一个损失函数对整个网络进行端到端的训练和测试,大大提升了检测效率。与其它先进的目标检测算法相比,YOLOv3检测算法不仅保持着高精度和实时性,而且表现出更优的鲁棒性和稳定性[10]。

结合航拍图像数据集与改进的YOLOv3算法,本文提出一种基于计算机视觉的单木树冠自动检测算法。该算法使用ResNeXt-50模型和ResNeXt块改进YOLOv3的网络结构,采用Mish激活函数优化网络的非线性表达,在减小网络复杂度的同时,有效提升了对单木树冠检测的准确率。

2 YOLOv3算法

YOLOv3算法的整体网络结构如图1所示,包括Darknet-53模型和YOLO检测两部分。

Darknet-53模型实现了图像基础特征的提取,由5个下采样卷积层和23个残差块组成。下采样操作直接由大小为3×3、步长为2的卷积核实现,为特征图提供了更多的语义信息。

图1 YOLOv3网络结构

YOLO检测部分进一步提取图像更高层次的特征信息,并依据输出特征图来预测检测框、置信度和目标类别,主要包括6个残差块、11个卷积层和2次上采样操作。通过两次对上采样输出的特征图与更浅层卷积输出的特征图进行张量相加,网络构造了3种不同尺度(16像素×16像素、32像素×32像素、64像素×64像素)的输出张量,能够精准地识别和预测不同大小的树冠。上采样处理为特征图提供深层次卷积提取的高级语义信息,更浅层卷积为特征图提供更细粒度的特征信息,网络的输出张量可表示为:S×S×[3×(4+1+1)]。其中,S×S为输出特征图的尺度大小,3×(4+1+1)表示网络为输出特征图的每个网格预测3个检测框,并预测每个检测框的4个检测框参数(即中心位置和宽高)、1个置信度参数和1个类别参数。

YOLOv3调用sigmoid函数回归输出特征图中检测框的中心位置,并采用k-means聚类方法对训练集中所有样本的标记信息进行聚类,自动生成用于回归检测框宽高的先验框[16]。YOLOv3算法为3个尺度上输出特征图的每个网格单元预测3个检测框,对每个检测框的中心位置、宽高的初始预测为(tx,ty,tw,th),最终预测(mx,my,mw,mh)则采用以下公式转化获得

mx=σ1(tx)+gx

(1)

my=σ1(ty)+gy

(2)

mw=awetw

(3)

mh=aheth

(4)

其中,σ1(tx)和σ1(ty)分别为检测框的中心位置相对于当前预测网格左上角的横向和纵向偏移,gx和gy分别为当前预测网格左上角相对于图像左上角的横向和纵向偏移,e为常数(约2.72),aw和ah分别为用于回归当前检测框宽高的先验框的宽度和高度,σ1(·)为sigmoid函数,计算公式如下

(5)

通过计算检测框与真实框之间面积的交并比(Intersection over Union,IoU),YOLOv3网络对每个检测框的置信度进行预测。对于任意的检测框u,其置信度Con的计算公式为

Con(u)=D(u)×IoUu

(6)

其中,D(u)表示是否有真实框的中心落在预测检测框u的网格单元内,若网格内存在真实框的中心,则D(u)取值为1,否则取值为0,IoUu表示依次计算检测框u与样本内所有真实框的交并比时获取的最大IoU值。

3 改进YOLOv3算法

3.1 改进网络结构

为了保证更好的性能,目前计算机视觉领域趋向于训练更深层或多模型集成的深度网络[9],但更深层次的卷积网络意味着学习难度及训练误差增大,且卷积深度达到某一程度时,网络性能可能在准确率饱和后出现退化趋势而不是被优化[17]。针对这些问题,YOLOv3在构造Darknet-53模型时采用大量残差块代替原始卷积层提取特征信息,引入残差结构使叠加的卷积层在融合更高层特征的同时能够降低训练误差,避免网络性能退化。但由于传统残差块内卷积层之间采用较大的卷积核进行卷积变换,网络复杂度较高,占用更多的计算资源。为此,本文采用聚合同构分支的ResNeXt块改进YOLOv3算法的堆叠模块单元,以降低网络复杂度。

受Inception模块中卷积层间稀疏连接的启发[18],ResNeXt块采用同构多分支的“降维、变换、聚合”策略,将较大卷积核的卷积变换分解为多分支上更小卷积核的聚合变换,减小计算复杂度,提升了模块的表征能力[19]。分支间共享相同拓扑结构的设计使模块更简洁、易于扩展,提升网络的泛化性能,同时优化了超参数的选择。一般深度神经网络在调节超参数时,主要通过增加卷积层深度或卷积核宽度提升网络性能,而ResNeXt块中提供了一种新的基本超参数:基数C(Cardinality),C表示模块中变换集的大小。不同于增加深度和宽度的方法,增加基数不会导致模型的参数量和计算量增大,能够在保持复杂度的前提下有效地提升检测精度。

需要注意的是,ResNeXt块具有三种严格等价的表现形式,本文中选用的是更简单、快速、易于实现的分组卷积形式的ResNeXt块。通过将分组卷积层的输入映射到低维嵌入上,执行C组同构的3×3卷积变换,并聚合分组卷积的输出,ResNeXt块实现了卷积层之间的稀疏连接。ResNeXt块的具体结构如图2所示。

从图2可以看出,输入x经过连续的1×1卷积变换、32组3×3聚合变换及1×1卷积变换后与x的恒等映射张量相加,得到ResNeXt模块的输出y=x+F(x)。可跨层传输的Shortcut连接实现了输入x的恒等映射,而张量相加则使卷积层的拟合函数F(x)成为输出y与输入x之间的残差。在训练过程中,若堆叠ResNeXt模块中的卷积层后网络训练误差增大,则可通过拟合残差映射F(x)为0,使ResNeXt模块的输出近似于x的恒等映射,从而避免因卷积层数加深引起的网络性能退化[17]。

图2 ResNeXt模块结构

考虑到YOLOv3算法在运行时占用的存储空间较大,且时间复杂度较高,本文基于先进的网络模型ResNeXt-50设计了一种改进的YOLOv3算法,其整体网络结构如图3所示。由图3可以看出,改进的YOLOv3算法由ResNeXt-50模型和改进的YOLO检测两部分组成,是一种高度模块化的目标检测网络。其中,ResNeXt-50模型由一个7×7卷积层、1个最大池化层、13个ResNeXt_B1模块和3个ResNeXt_B2模块组成。ResNeXt_B1模块与ResNeXt_B2模块具有相同的拓扑结构,但不同的是ResNeXt_B2模型中将3×3分组卷积的步长设置为2,以实现对特征图的2倍下采样。改进的YOLO检测部分主要包括3个ResNeXt_B1模块、11个卷积层和2次上采样操作,最终生成维度为18,尺度大小为16×16、32×32和64×64的输出特征图。对于网络结构中的每一个隐藏层,在卷积之后进行批标准化处理,并使用激活函数对批标准化结果进行线性或非线性映射,使输入激活函数的数值分布远离导数饱和区,加快模型收敛速度,同时避免训练过程中可能出现的梯度消失/爆炸问题[20]。

3.2 优化激活函数

YOLOv3算法采用非饱和的带泄露整流(Leaky Rectified Linear Unit,Leaky ReLU)函数对每个隐藏层的输出值进行非线性映射。Leaky ReLU激活函数σ2(·)的表达式如下

(7)

由式(7)可知,Leaky ReLU激活函数在正区间上梯度保持不变(一阶导数等于1),有效避免因导数趋于饱和引起的收敛速度减慢问题;在负区间上保留较小的梯度(一阶导数

等于0.1),消除了训练过程可能出现的dying neurons。但Leaky ReLU激活函数在x=0两侧存在跳跃的梯度变化,对应局部梯度变化较大的目标函数,降低网络的泛化性和稳定性。因此,本文采用梯度连续变化的Mish函数代替Leaky ReLU函数,处理改进YOLOv3网络结构中独立卷积层及所有ResNeXt模块前两层卷积层所提取的样本特征。函数Mish在定义域内连续可微,对应更平滑且易于优化的目标函数轮廓[21]。Mish激活函数σ3(·)的表达式如下

图3 改进YOLOv3网络结构

σ3(x)=xtanh(softplus(x))

(8)

激活函数Mish和Leaky ReLU的函数图像如图4所示。从图4可以看出,正区间上Mish函数的斜率在Leaky ReLU函数的斜率附近连续变化,负区间上凹函数Mish保留了较小的负值与负权重,能够改善网络的表达能力与信息流通效果,并且有下界的特性使Mish函数实现了自正则。

图4 激活函数图像

4 模型训练与测试

考虑到迁移具有泛化特征的模型能够有效提高目标网络的训练效率、收敛性能和泛化性能[22],本文首先将ResNeXt-50网络模型在ImageNet数据集上预训练的权重迁移到改进YOLOv3算法中,初始化目标网络的权值参数。

训练过程中,将训练样本批量地输入已迁移学习的目标网络,迭代地进行端到端前向与反向传播。前向传播过程即向前逐层计算网络自输入层到输出层中每个卷积层的输出值,并根据输出张量回归样本中单木树冠的预测值。反向传播过程即反向逐层计算损失函数关于网络自输出层到第一个隐藏层中每个激活函数输入值的梯度,并采用自适应矩估计(Adaptive Moment Estimation,Adam)优化器优化小批量梯度下降法,依次更新每个卷积层的权值参数。

测试过程中,网络调用best.weights文件,对逐个读入的测试样本进行一次前向传播,并对输出张量的预测进行非极大值抑制,推理出测试样本中单木树冠的检测结果。

5 实验结果与分析

5.1 数据集获取

2018年10月,使用无人机DJI FC6310搭载的数码相机以垂直于地面的角度在江苏省南京林业大学(32.07°N,118.78°W)校内采集航拍图像。无人机飞行高度约150米,飞行速度约20米/秒。

为使调整大小后的输入图像保留更多的树冠特征信息,对已获取的航拍图像进行树冠区域截取。实验从初始的航拍图像中共截取1620张图像作为样本集,其中每张小图像内均包含1~12个形状完整的树冠。接着,利用图像标记工具LabelImg标记样本集中的所有图像,并保存每张图像的标记信息(即归一化的真实框顶点坐标)。最后,按照比例8:1:1随机划分所有样本,分别构成网络的训练集、验证集和测试集。

5.2 环境配置与参数设置

本文实验的硬件环境为Intel I7-8750H、NVIDIA GTX1050TI、16.0 GB内存,软件环境为Windows 10 64 bit操作系统、CMAKE 3.8.3、CUDA 10.2、CUDNN 10.2、OPENCV 3.4.6和Visual Studio 2019。

训练过程中相关网络参数大小的设置如表1所示。为取得精度与速度的折衷,将样本大小统一调整为合适的输入尺度:512像素×512像素。通过将批处理和分步参数均设置为64,更充分地使用平台内存。由于损失的收敛速度主要取决于学习率的设置,本文设置初始学习率为0.001,迭代4 000次后将学习率减小为0.000 1,迭代4 500次以后将学习率降为0.000 01,使训练损失先快后慢的收敛到最优值。

表1 训练过程中相关网络参数的设置

5.3 结果分析

本文采用改进YOLOv3算法对测试样本进行推理预测,部分树冠样本的预测结果如图5所示。从图5可以看出,改进的YOLOv3算法在检测形态结构差异较大的树冠时具有较好的鲁棒性。

训练损失曲线反映训练过程中网络的收敛性能,良好的收敛性意味着网络更容易训练和优化。本文算法与YOLOv3算法的训练损失曲线对比如图6所示。

图5 改进YOLOv3算法的部分检测结果

从图6可以看出,两种算法的训练损失曲线具有相似的走向,在100至1 500次迭代过程中训练损失迅速收敛,并在1 500次迭代后逐渐趋于平缓。相比YOLOv3算法,本文算法的收敛速度更快,最终训练损失更小,具有更优的收敛效果。

图6 训练损失曲线

表2对比了改进前后YOLOv3算法的模型内存和计算量。相比原YOLOv3算法,改进YOLOv3算法的模型内存约减少26%,总体计算量约减少48%,有效降低了算法的时空复杂度。

表2 对比改进前后YOLOv3的模型内存与计算量

为体现不同改进措施的有效性,表3对比了Darknet-53 YOLO(①+②)、ResNeXt-50 YOLO(③+②)、ResNeXt-50 改进YOLO(③+④)和ResNeXt-50 改进YOLO Mish优化(③+④+⑤)4组算法在航拍树冠数据集上的实验结果,并采用mAP@50和召回率两项指标评估算法检测的准确率。其中,mAP@50表示 阈值设置为0.5时,所有目标类别的平均精度均值,反映算法的总体检测精度。召回率(也即单木树冠检出率)表示网络正确预测的树冠数占样本树冠总数的比例。

表3 原始算法与改进算法的检测性能对比

由表3可以看出,相比原YOLOv3算法,基于ResNeXt-50的YOLO算法具有更高的mAP@50值和召回率,这是由于ResNeXt-50模型能够使网络在保持较低计算复杂度的同时,具备更好的推理性能。结合ResNeXt-50模型和由ResNeXt块改进的YOLO检测模块后,模型的检测效果进一步提升,说明基于残差结构的ResNeXt块能够使YOLO检测模块中叠加的卷积层更充分地优化拟合函数。4组算法中,采用本文算法检测单木树冠时检测精度最高,说明使用Mish激活函数能够有效改善网络的泛化性和收敛性,从而提升检测准确率。相比原YOLOv3算法,本文算法的mAP@50值和召回率分别提高了9.07%和10.22%,这表明本文提出的改进方法能够有效地提升算法的检测性能。

表4对比了其它目标检测算法与本文算法在航拍树冠数据集上的检测准确率。从表4可以看出,相比同类型的检测算法,本文算法取得了更高的mAP@50值和召回率,分别达到74.14%和86.52%,说明使用本文算法检测单木树冠更有优势。

表4 本文算法与其它算法的检测性能对比

6 结束语

本文提出一种基于YOLOv3的单木树冠自动检测算法。该算法采用ResNeXt-50模型作为基础特征提取器,并基于ResNeXt块进一步优化YOLO检测模块的网络结构,在降低网络模型内存和计算量的同时提高了单木树冠检测精度。通过采用Mish激活函数代替Leaky ReLU激活函数对部分卷积层的输出值进行非线性映射,进一步提升了网络的泛化性能和检测精度。实验结果表明,改进的YOLOv3算法能够有效地提取样本中树冠结构特征和语义信息,具有较高的单木树冠检测准确率。下一步将结合不同的网络模型和损失函数继续优化网络,使目标网络在维持高精度的同时更轻量、计算量更小。

猜你喜欢

树冠卷积函数
二次函数
基于3D-Winograd的快速卷积算法设计及FPGA实现
第3讲 “函数”复习精讲
二次函数
函数备考精讲
树冠羞避是什么原理?
榕树
从滤波器理解卷积
树冠
基于傅里叶域卷积表示的目标跟踪算法