小区域引导下的水尺水位检测方法研究

2023-06-14 12:41张荣星谢智峰刘铭辉
关键词:水尺像素水位

张荣星,张 果,谢智峰,刘铭辉

(昆明理工大学 信息工程与自动化学院,云南 昆明 650500)

水位是水文监测工作中重点关注的问题,随着机器视觉技术的发展,为了提高水文监测的工作效率,将图像法应用于水位检测成为一个重要的研究方向[1].仲志远[2]对水尺图像进行灰度变换、中值滤波等预处理,对预处理后的图像进行边缘检测,通过K-means 聚类对获得的刻度线进行分析进而换算出水位值.黄林等[3]将水尺图像转换至色调、饱和度和明度(Hue Saturation Value,HSV)颜色空间中,在HSV 颜色空间中提取颜色进而完成水尺分割,利用仿射变换对分割后的水尺图像进行矫正,根据水尺图像中的连通区域获取水尺刻度完成水位值计算.Chen 等[4]使用多模板匹配算法识别水尺上的字符,并根据字符序列验证算法对识别结果进行校验,将识别结果与水位计算公式结合获得水位值.张振等[5]根据匹配对位置结合摄影测量学构建水尺图像与标准水尺模板之间的关系,利用阈值分割后水尺图像的水平投影曲线确定水位线位置,将水位线位置转换至标准水尺模板中获得水位值.Bruinink 等[6]利用随机森林分类的方法确定水尺图像中的水尺区域与水体区域,将两者区域的共同边界位置设定为水位线位置,通过动态映射确定实际距离与像素距离的关系式并完成水位值的计算.Kim 等[7]在水位线附近选取感兴趣区域(Region of Interest,ROI),在选取的ROI 区域中利用直方图投影找到水位线位置,建立水尺像素映射表将检测到的水位线像素位置转换成实际水位值.

上述文献基于图像处理的方法在对水位检测时,前期对图像预处理环节要求较高,同时利用水尺的边缘特征、颜色信息等分割水尺和提取水位线时,易受到现场复杂环境的影响.此外,通过深度学习神经网络模型提取图像特征,并利用提取的特征分割水尺和获取水位线时可以增强水位检测算法的环境适应性.但在整幅图像中利用深度学习的语义分割算法对水尺目标进行分割时,由于水尺目标在图像中的占比相对较小,水位边缘的信息特征不明显,使分割后的水尺边缘较毛糙,影响了水尺底部边缘的分割精度,降低了水位线的检测精度,导致水位值换算出错,检测结果准确性较差.

为了解决上述问题,需要增强水尺底部与水面交界处边缘特征的识别,提高水位线的检测精度.本文将改进的YOLOv4 算法和改进的DeepLabv3+算法相结合,研究在小区域内对水尺的水位线图像检测,以期提高水位检测准确度.首先,利用改进的YOLOv4[8]算法定位水尺上“E”字符的位置坐标来分割小区域;其次,在得到的水尺小区域内使用改进DeepLabv3+[9]算法对水尺进行分割;再次,利用Canny 边缘检测算法提取水面边缘线;然后,通过统计边缘检测后的像素坐标计算得到水位线;最后,使用线性插值法换算出水位值.实验结果表明本文改进的网络准确率和平均交纵都有所提高,检测的水位线平均像素更低,测量准确度更高,对环境具有更强的适应性.

1 相关理论

1.1 YOLOv4 网络模型相较于YOLOv3,YOLOv4 在数据处理、提取网络特征等方面进行了相应的优化与改进.YOLOv4 主干部分的网络提取特征时采用CSPDarknet53 结构,加强部分的网络提取特征时使用PANet 与SPP 结构,目标检测器head 沿用YOLOv3 的结构.主干网络(Backbone Network) CSPDarknet53 引入CSPnet 结构,通过基础层面划分特征的映射,减少了相应计算并确保了模型检测的准确率.加强特征提取网络引入SPP 结构使主干特征范围在一定程度上得到扩大,保证网络运行速度,同时使用PANet 对特征由上往下提取,再对其进行相反的操作,依次对特征进行反复提取增加其特征信息提取的能力.YOLOv4 结构如图1 所示.

图1 YOLOv4 的网络结构模型Fig.1 The network structure model of YOLOv4

1.2 DeepLabv3+网络模型DeepLabv3+采用编码器-解码器的结构模式,网络模型的编码器由空洞金字塔((Atrous Spatial Pyramid Pooling,ASPP)模块和改进的骨干网络Xception 组成.先利用主干网络CSPDarknet53 提取原图特征信息,接着ASPP对得到特征信息进行多尺度采样,同时解码器模块对解码器输出特征用4 倍上采样处理,然后将采样特征图和卷积特征图两者融合,最后对其进行3×3的卷积以及4 倍的上采样得到分割后的结果图.DeepLabv3+引入解码器模块,将底层特征与高层特征进行融合,并采用空洞卷积对多尺度信息进行提取,有效缓解了边界处相关信息缺失的问题并提升了网络的感受野.

2 小区域水尺水位检测算法

2.1 基于改进YOLOv4 的水尺小区域定位

2.1.1 YOLOv4 模型的改进 YOLOv4 算法模型中的融合特征网络在经过卷积层的多次融合后,直接将融合的特征送入了目标检测器head,并没有对其进行划分,会导致信息冗余,影响目标检测中需要重点关注信息的训练.使用注意力机制可以增加对不同通道信息的关注度,所以可以在该模型每个目标检测器head 前都加入CBAM(Convolutional Block Attention Module)[10]注意力机制模块.该模块包含通道和空间注意力两部分,通道注意力模块CAM(Channel Attention Module)将输入的特征图像P按通道进行整体的平均及最大池化操作,得到两个特征映射.再将其送进前馈神经网络(Multi-Layer Perceptron,MLP)处理,得到通道注意力映射;然后对其进行相应的加和与激活操作,产生通道注意力MC,将其与特征输入P相乘,最终得到包含空间注意力的特征图像F.空间注意力模块SAM(Spatial Attention Module)将生成特征图像F按空间进行整体的平均及最大池化,得到特征映射.对其进行通道连接,再经卷积与激活处理后,产生的空间注意力MS,然后将其与特征输入F相乘,最终得到包含特征的图像M.具体的流程过程见图2,CBAM 的注意力生成描述过程如下:

图2 CBAM 中通道注意力和空间注意力结构Fig.2 The channel attention and spatial attention structure in CBAM

式中:⊗为元素对应位置的相乘.

CBAM 结合了通道与空间的注意力机制模块,聚焦于特征图的局部信息,从通道和空间上按权重对其进行分配,使计算资源可以更加准确地定位到需要重点关注信息,而忽视无关的干扰信息.相比单一的注意力机制,该模块获得了更好的效果.通过引进该模块增强了模型对“E”字符的特征提取能力,进而提高YOLOv4 对水尺上“E”字符的检测准确率.

2.1.2 水尺小区域定位 将水尺图片放入训练好的模型进行预测,“E”字符识别结果如图3 所示,将识别“E”字符左上角、右上角、左下角、右下角的位置坐标记为(xij,yij),其中i={lu,ru,ld,rd},表示左上角、右上角、左下角、右下角,j=1,···,H表示识别的“E”字符数量.将得到的左上角、左下角位置坐标进行统计并求取平均根据均值画出一条均值线,同理对右上角、右下角位置坐标进行相同操作,过程如图4(a)所示,均值方程如下:

图3 “E”字符识别结果Fig.3 The results of recognition "E" character

图4 水尺小区域定位过程Fig.4 The small area positioning process of water gauge

式中:xm为均值,H为“E”字符检测数.

利用均值线将水尺上左右两侧“E”字符的左上角、左下角的坐标划分开,在均值线左边为左侧“E”字符的坐标,右边为右侧“E”字符的坐标,将均值线左侧坐标保留并删除右侧坐标.同理将水尺上左右两侧“E”字符的右上角、右下角的坐标划分开,将均值线右侧坐标保留并删除左侧坐标.对保留的左侧“E”字符左上角、左下角坐标(xlu,ylu),(xld,yld).利用梯度下降法拟合出水尺的左边界线yl.同理对保留的右侧“E”字符右上角、右下角坐标用梯度下降法拟合出水尺的右边界线yr.左、右边界线如图4(b)所示,边界线方程为:

式中:al、ar为该拟合边界直线的斜率,bl、br为该直线的截距.

为了让小区域尽可能多地包含水尺与水的特征信息,同时使区域尽可能小,对保留的左、右两侧“E”字符坐标以y值为基准按从小到大的顺序排序,各自筛选出最后两个坐标记为(xloa,yloa),(xlba,ylba),(xroc,yroc),(xrbc,yrbc),比较yloa与yroc的大小选取两者小的记为min(yloa,yroc),取两条均值线的中点记为xoav,中点计算公式为:

以点[xoav,min(yloa,yroc)]为中心向左右两边延伸交左右两边界的点分别记为[xlav,min(yloa,yroc)]、[xrav,min(yloa,yroc)].上述两点为小区域的左上角、右上角坐标,然后以筛选出的倒数第2 个“E”字符的高yh为边,yh计算公式如下:

得到小区域的左下角、右下角坐标记为(xlav,yh),(xrav,yh).根据得到坐标位置自动裁剪出水尺小区域并记录下该4 个点的位置坐标,裁剪原理图如图4(c)、(d)所示.

2.2 改进的DeepLabv3+水尺水位线检测改进的DeepLabv3+网络模型结构如图5 所示.该网络仍然采用编码块-解码块结构,为降低该模型的计算复杂度,提升其对小区域内水尺与水的分割性能.将该模型的主干特征提取网络替换成MobileNetv2[11],并对网络提取出的低级语义特征信息引入金字塔切分注意力机制PSA(Pyramid Squeeze Attention)[12].该机制可以捕获不同尺度的空间信息丰富空间特征,提升网络的分割精度.

图5 改进的DeepLabV3+的网络模型结构Fig.5 The improved network model structure of DeepLabv3+

2.2.1 改进的DeepLabv3+网络模型 实验采用结合了MobileNetv2 的DeepLabv3+网络模型,由于水尺与水在小区域水尺图片上只划分为两类,语义信息较为简单,且边缘交界处细节信息较为丰富,这要求语义分割网络对细节处的特征提取能力较高.传统图像处理的方法受光照及水面倒影等因素影响较大,很难精准地定位水尺水位线的位置.但原始DeepLabv3+及其他语义分割网络模型的提出往往针对物体种类及特征较多、数据量较大的数据集,因此所采用的骨干特征提取网络更为繁杂,例如原本的DeepLabv3+网络利用Xception 做主干网络提取特征信息,但该模型参量较大、结构复杂,不适合用于分割物体种类少的情况,并带来了计算量大、训练难等问题,因此不适合用于小区域水尺水位线的提取.

本文将原始DeepLabv3+中的主干网络Xception替换成MobileNetv2,将其作为该结构的编码器提取特征信息,因为MobileNetv2 模型参数量较小,其相较于Xception 有收敛速度快、训练简单、参数量少的优点.此外,继续沿用MobileNetv1 网络模型中的深度可分离卷积,其计算量公式如下:

式中:卷积核的尺寸为DK×DK,输入、输出特征图像的尺寸分别为DF×DF×M、DF×DF×N.

同时引入倒残差模块,提高图像检测和分类的精度.适用于小区域图片中水尺与水的分类任务,选择MobileNetv2 作为骨干网络.图6为MobileNetv2 的网络结构图.

图6 MobileNetV2 的网络结构Fig.6 The network structure of MobileNetv2

由于小区域内水尺水位线提取的关键在于水尺与水的分类精度,为提升两者边缘分割精度,选用特征金字塔分割注意力机制模块.该模块是一种融合了通道和多尺度空间的注意力机制,可以更加有效地对空间的多尺度信息进行提取,同时可以让通道依赖关系的距离变得更长,有效提升了水尺与水面边缘的分割精度.该模型的网络结构如图7 所示,模型先利用SPC 模块构建图像的多尺度特征,然后通过SE 模块获取多尺度特征图像的注意力权值,再使用Softmax 对其进行重矫正,最后按元素对得到的特征图像与校准后的权值进行点乘,输出多尺度特征图像.该过程的计算公式如下:

图7 PSA 注意力网络结构Fig.7 The network structure of PSA

式中:i=1,2,···,S-1,S为输入量在通道上的分组,Conv 为卷积提取特征,Cat 为对特征进行拼接,SEWeight 为提取特征的注意权值,Softmax 为归一化注意力权值,⊕为级联运算,⊙为通道乘法运算,Fi为多尺度特征图像生成函数,F为对其进行拼接计算,Zi为Fi的注意力权值,Z为多尺度注意力权值向量,Ai为重新校准的多尺度通道注意力权值,Fi为多尺度通道注意力加权之后的特征图,Fout多尺度信特征图.

2.2.2 水尺水位线提取 从小区域水尺图片的分割结果中提取水尺水位线,具体步骤如下:首先利用颜色信息剔除分类结果中的水尺,只保留对水的分割;再利用Canny 算子对得到结果图进行检测,提取小区域内水面的边缘线;然后对Canny 边缘检测图中值为255 像素点进行统计,记录该像素的位置坐标并对其求平均值;最后根据得到的平均值以及之前记录的分割前小区域的坐标位置,在原图中画出水尺的水位线,为了让原图的水位线粗一点方便观察,对其进行膨胀处理.水尺水位线检测过程如图8 所示.

图8 水尺水位线检测过程Fig.8 The process of water gauge water level line detection

2.3 水位值的换算在对水尺的水位进行测量前,首先要固定好摄像头的位置,使水尺尽可能清晰地出现在摄像头的视野中;然后标定水尺图片,根据水尺图片的像素坐标与实际空间坐标的对应位置关系利用线性插值法[13]建立对应的相机标定模型.在水尺图中每隔2 个“E”字符的间距选择一点,同时记下该点像素纵向位置坐标的数值Yi以及该点在实际水尺中对应的长度值Hi,相应地选取出X个点,得到X-1 像素区间.根据得到的相机标定数学模型可以计算出该水尺图像中水位线像素点对应的实际水位值.实际水位值计算公式如下:

2.4 算法整体流程算法流程如图9 所示.

图9 小区域引导下的水尺水位检测流程Fig.9 The process of water gauge level detection under small area guidance

步骤 1首先利用改进的YOLOv4 目标检测算法对水尺上的“E”字符进行识别,得到“E”字符的坐标位置信息;然后按相应的规则对坐标进行筛选、排序;最后根据得到的坐标位置信息裁剪出包含水尺与水交界的小区域图片.

步骤 2先对步骤1 裁剪得到的小区域图片分成水尺与水两类制作数据集,并将其作为输入放进改进的DeepLabv3+模型中训练;然后通过训练完的模型预测给出分割结果,接着对分割结果进行Canny 边缘检测提取水面区域边缘线;最后对统计255 像素值求平均值,根据得到均值画出水位线.

步骤 3通过线性插值像素比例换算的方法将步骤2 得到的水尺水位线像素坐标转化成实际水尺长度,进而读取出水尺水位值.

3 实验与结果

用于实验的电脑硬件配置为E5-2620v4,NVIDIA 1080Ti(12 GB GDDR5X),32 GB DDR4;软件配置为Windows 10 系统,Python 3.8.0 编程语言,Pytorch 1.2.0 深度模型框架.

3.1 数据集目标检测模型训练采用了某水文局4 个水文站水尺图像样本,从中选取450 幅图片作为训练集,50 幅作为验证集.语义分割模型训练时使用YOLOv4 裁剪出的小区域水尺图像制作数据集,数据集中获取了4 个水文站不同时段、不同日照环境的水尺图片数据,共1 241 幅,并对这1 241幅图片以9∶1 的比例分为训练集与验证集.利用labellmg 标注工具对选取现场水尺图片中的“E”字符进行标注,制作水尺“E”字符数据集,使用labelme 工具对小区域水尺图像中的水尺与水进行标注,利用标注好的数据集对网络模型进行训练,并在训练时利用行翻转、缩放、裁剪等数据增强方法对原始图像进行增强.

3.2 模型训练改进的目标检测及语义分割网络模型在训练前,对其参数值的进行了设定.目标检测模型选用Adam 优化器对整个网络进行优化迭代,初始的学习速率为1 ×10-3,动量为0.937,衰减权值为 5 ×10-4,选取目标类别的损失值、置信度的损失值、位置坐标的损失值作为该模型的损失函数.语义分割模型选也选Adam 作优化器,初始的学习速率为 7×10-3,动量为0.9,衰减权值为1×10-4,选取普通的交叉熵损失值和相似度度量函数值作为该模型的损失函数,同时都采用余弦退火的方式对学习率进行更新.为了避免训练的过拟合,该模型在训练时设定200 个epoch,并冻结前1/4的epoch 进行训练,以缩短模型的训练时长,避免权值在训练前期遭到破坏.

损失函数能对水尺“E”字符检测模型和水尺与水分类模型的稳定性作出评估,损失值的大小代表了模型稳定性的好坏,越小越稳定,预测得到的结果越准确.图10 为两模型训练后的损失函数曲线图,从图10 可以看出,随着训练迭代层数的增加,两模型Loss 逐渐衰减,最终趋向于稳定状态,说明模型对水尺图像中“E”字符进行检测和小区域图像中的水尺与水进行分类时会有较好的识别结果.

图10 该模型训练的损失函数曲线Fig.10 The loss function of model trains curve

3.3 实验结果及分析

3.3.1 目标检测模块对比及分析 本文采用准确率A、召回率R、精确度P及F1 评估网络的性能.计算公式如下:

式中:N为检测类别数,AP为对应类别的平均检测精度,FP为分错的正样本数,FN为分错的负样本数,TP为分对的正样本数.

为了定量地分析改进后YOLOv4 算法的检测效果,将该算法与目前比较先进的目标检测算法在制作的水尺“E”字符数据集上进行了对比.对比的结果如表1 所示.从表1 中可以看出,改进的YOLOv4 算法识别“E”字符的准确率分别比YOLOv4、YOLOv3、SSD 提 高0.76、3.82 和7.61个百分点,F1 提高0.01、0.02 和0.17,召回率提高1.73、3.25 和29.44 个百分点,其精确度虽低于SSD[14],但是仍高于YOLOv4 和YOLOv3[15].因此,改进后YOLOv4 算法整体的性能更优异,提高了对水尺“E”字符的识别准确率.

表1 不同目标检测算法的性能Tab.1 The performance of different target detection algorithms

3.3.2 语义分割模块对比及分析 本文采用平均交并比I及精确率D评估该网络的性能.I为真实值与预测值所构成的两个集合交集与并集之比,常根据类计算交并比再对其求平均.计算方法如下:

D为每个类别像素点正确分类数占该类像素点的比例,之后对所有类取平均.具体计算公式如下:

式中:pii表 示真正的数量,pij表 示真实值为i、被预测为j的数量,k为类别数.

为了定量地分析方法的分割效果,实验对比了本文方法与FCN、U-Net、PSPNet[16]、DeepLabv3+等几种常见的语义分割网络在小区域水尺图像中水尺与水的分割量化结果,结果如表2 所示.从表2 可以看出,本文方的平均交并比为82.17%,准确度为87.31%,均优于其他网络,说明该方法提高了网络效能,其中水尺平均交并比、水平均交并比为单独计算水尺类别和水类别时的交并比.

表2 不同网络小区域水尺图像的分割量化结果Tab.2 The segmentation and quantification results of water gauge images in small areas of different networks %

图11 为不同网络模型的语义分割结果对比图.为了验证改进的DeepLabv3+网络模型的性能,在预先训练好的不同模型中放入相同的图像进行测试.从图11 中可以得到,本文改进的DeepLabv3+网络在小区域水尺图像的分割效果要优于其他3种网络,该网络分割结果中水尺与水交界处的边缘线更清晰,位置也更加准确,很少有不正常缺失与凸出部分,可以更加准确定位水尺水位线的位置.使用U-Net 分割时容易有独立的分割错误区域出现,部分区域也未能准确分割,使用PSPNet 和DeepLabv3+进行分割时改善了独立的分割错误区域出现的情况,但水尺与水交界处分割的效果依旧不好,在水尺与水交界处容易有不正常缺失与凸出部分.

图11 不同网络模型的语义分割结果Fig.11 The semantic segmentation results of different network models

3.3.3 水位线检测对比分析 为了检验水尺水位线的提取效果,实验使用平均像素误差作为评价指标[17],计算公式如下:

式中:n为待检测照片数,Yi为检测到的水位线的像素纵坐标,为实际水位线的像素纵坐标.

对比了本文算法在原图中提取水位线的检测效果,如图12 所示.计算了4 种方法的像素误差,像素误差是提取水位线与实际水位线像素坐标差的绝对值,误差越小说明准确度越高,计算结果如表3 所示.

表3 平均像素误差Tab.3 The error of average pixel

图12 不同算法的水位线检测效果Fig.12 The water level detection effect of different algorithms

图12(a)为水尺原图,(b)为参考文献[18]提供的算法利用YOLOv3 直接框图中的水尺提取水位线得到图像,该方法的平均像素误差为36.270.由图12 可以看出,由于水尺倒影的存在,导致水尺检测异常,影响了水尺水位线的检测.图12(c)为参考文献[19]提供的算法利用DeepLabv3+直接在原图中分割水尺后提取水位线得到图像,该方法的平均像素误差为6.465.由图12 可以看出,由于水尺目标在图像中的占比相对较小,水尺底部边缘的信息特征不明显,导致分割后的水尺边缘较为毛糙,且水尺底部存在异物时会将其错误分割,影响了水尺底部边缘的分割精度,导致水尺水位线的位置检测不准确.图12(d)为参考文献[20]提供的算法利用传统图像处理的方法,通过水尺上的颜色信息对其二值化处理分割出水尺后提取水尺水位线得到的图像,该方法的平均像素误差为4.046.由图12 可以看出,受光照影响水尺的颜色信息变化较大,在对颜色进行提取时,阈值不能自适应,影响了水尺的分割,导致水位线检测异常.图12(e)为本文算法利用YOLOv4 目标检测算法分割水尺小区域,然后在小区域的引导下利用改进的DeepLabv3+分割该区域内的水尺与水后提取水位线得到图像,该方法的平均像素误差为3.030,误差小于上述算法.

从图12 可以看出,在小区域的引导下增强了水尺底部与水交界处的边缘特征信息,同时利用改进的DeepLabv3+分割该区域内水尺与水可以减少交界处边缘的粗糙程度,提高了水尺底部边缘的分割精度,使水位线位置识别更准确.

3.3.4 水位值读数分析 本文选用了4 个水文站在1 个月不同时间内的一些水尺图像,并对该算法得到的一些水位数据进行测试,对比了本文算法得到的水位值与人工读取的水位值,如图13 所示.从图13 中可以看出,两条曲线较为拟合,说明本文算法准确率较高.同时绘制了两者的误差曲线,如图14 所示,可以看出,该算法得到的水位值与人工读取的水位值之间的误差小于1 cm,满足水位监测要求.

图13 水位值对比图Fig.13 The comparison of water level values

图14 水位误差对比图Fig.14 The comparison of water level values

4 结束语

本文提出了小区域引导下的水尺水位检测方法,先利用改进的YOLOv4 算法定位并分割小区域,接着在小区域内利用改进的DeepLabv3+进行分割,再利用Canny 算法提取水面边缘线,最后统计边缘线像素坐标得到水位线.实验表明改进的YOLOv4 的准确率为94.13%,检测精度高于其他网络,改进的DeepLabv3+网络在水尺验证集上平均交并比为82.17%,分割精度高于其他网络,小区域引导下的水位线平均像素为3.030,相比直接分割水尺的算法更能精确定位水尺水位线的位置.现场测试表明,本方法能准确计算出水尺水位值,水位的检测精度达到1 cm,满足水尺水位检测要求.未来将对模型进行轻量化处理,以减小参数量,提高其检测速度.

猜你喜欢
水尺像素水位
像素前线之“幻影”2000
浅析国内海洋渔船与海船载重线、水尺标志勘划的区别
海运电厂船舶靠岸侧水尺图像采集实验研究*
水尺标志放样及数控切割解决问题方案
“像素”仙人掌
ÉVOLUTIONDIGAE Style de vie tactile
高像素不是全部
基于MFAC-PID的核电站蒸汽发生器水位控制
浅析水尺勘划方法及要点
基于PLC的水位控制系统的设计与研究