基于两阶段深度学习的水位智能识别方法
2023-11-09许小华李亚琳包学才聂菊根
许小华 李亚琳 吕 姚 包学才 肖 磊 聂菊根
(1.江西省水利科学院,南昌 330000;2.江西省鄱阳湖流域生态水利技术创新中心,南昌 330000;3.南昌工程学院,南昌 330000)
0 引 言
水位是江河湖库的基本水文要素之一,水位数据是防汛抗旱、灌溉、航运、水利设施建设和管理的基本依据,及时可靠的水位自动监测对于提高防洪抗旱的预警预报水平具有重要意义[1]。水尺是识别水位最直观、最简单的水位测量工具,但是传统的人工读取方式及压力式、浮子式、超声波、雷达等水位计水位检测方式存在安全隐患大、易损坏、成本高、误差大等弊端[2-6]。因此,如何设计一种普适性的水位检测算法,实时识别水体水位变化,智能且高精度识别水位值,成为防汛抗旱决策支持的关键。
近年来数字图像处理计算水位的技术快速发展,图像差分法、Canny算子、多模板匹配算法等技术被应用于水尺和水尺字符的识别、矫正,再通过霍夫变换、仿射变换、投影关系等检测出水位[7-11]。然而这些传统的图像处理方法对于水尺本身背景、环境背景、光线和拍摄角度等要求较高,在处理水域等图像背景较为复杂的情景时,易受到背景噪声干扰导致水位测量误差大,算法不具有普遍适应性。随着深度学习技术的飞速发展,通过深度神经网络自适应识别归纳图像特征,形成了水位检测的一个重要方向。马睿等[12]通过传统图像处理算法对水尺位置进行定位,然后使用YOLOv4 算法识别水尺刻度线并计算当前水位值。王磊等[13]提出一种由YOLO-v3 对象检测和ResNet刻度识别两种模型构成的实时水位识别方法,通过算法设计、训练和集成,实现与浙江省水资源监控信息平台的集成应用。野外水域复杂,获得的图像具有较高的背景噪声,因此对模型检测率要求极高,而上述图像处理技术容易出现错检、漏检,从而影响测量水位的精准度。
针对传统图像处理方法在水位检测中易受背景噪声影响的缺陷及目前深度学习技术在水位检测方面应用不充分的问题,结合水域复杂情景的研究背景,本文融合图像处理技术,提出一种基于深度学习的两阶段智能水位识别算法。
1 方法原理
本文利用改进YOLOX 深度学习网络模块,提出基于水尺和水尺“E”刻度两阶段检测识别的水位智能识别算法,该方法可以有效应对天气、采集图片角度、光照光线、水尺倾斜、复杂环境背景影响[14],以及水尺本身附着的藻类、落叶和泥巴等因素的影响。算法流程如图1所示。
1.1 基于改进YOLOX-S的目标检测方法
1.1.1 YOLOX-S算法原理
YOLOX 是YOLO 系列中的集大成者,由Ge等[15]2021 年提出YOLO 系列的新版本,根据网络的宽度和深度可分为S、M、L 和X4 种基本型号,此外在牺牲了部分精度的前提下还提出了两个轻量级网络型号Tiny和Nano。其中,YOLOX-S 在参数量和检测精度方面做到了很好的平衡。YOLOX 官方论文中在COCO 数据集上不同模型尺寸的相关数据如表1所示。
表1 YOLOX不同模型尺寸的相关数据
虽然本文研究的水位检测算法检测类别数单一、任务较为简单,但对算法的实时性和准确性均有较高的要求。综合考虑,本文选用YOLOX-S 作为改进的基准网络模型,YOLOX-S结构如图2所示。
图2 YOLOX-S网络结构图
1.1.2 改进YOLOX-S算法
YOLOX-S 算法模型中的加强特征融合网络不同尺度特征层之间存在不一致性问题,具体表现为越深层的特征图经过加强特征融合网络的3个有效特征层输入解耦头时,会使得语义信息和位置信息交互越弱化。因此,本文引入具有自适应特征融合的模块在输入解耦头之前加强对不同特征层之间的语义信息和位置信息交互,提高检测精度。
主干特征提取网络和解耦头沿用原本的YOLOX-S,重构加强特征融合网络为P_ASFF,改进是对主干特征提取网络输出的3 个有效特征层经过PANet 特征融合后输出3 个有效特征层Pc1(20*20*512)、Pc2(40*40*256)、Pc3(80*80*128),然后分别经过CSPLayer 层得到P1(20*20*512)、P2(40*40*256)、P3(80*80*128)。在得到P1、P2 和P3 后,将其分别加入自适应空间特征,融合ASFF 模块进行3 层特征层的加权融合,得到P1_out(20*20*512)、P2_out(40*40*256)和P3_out(80*80*128)。改 进 后 的YOLOX-S网络结构如图3所示。
图3 改进YOLOX-S网络结构
其中,自适应空间特征融合(Adaptively Spatial Feature Fusion,ASFF)[16]可以实现自适应学习不同尺度特征层的权值,能够融合不同尺度感受野下的目标特征信息,有效改善了目标特征信息丢失和不同层级的特征图上正负样本划分冲突干扰训练期间梯度计算的问题。ASFF 结构如图4所示。
图4 ASFF结构图
在图4 中Level1、Level2 和Level3 表示3 个不同尺度的有效特征层,以ASFF-3 为例[17],X1→3、X2→3、X3→3表示3 个有效特征层的特征,分别乘以权重参数α3、β3、γ3并求和,过程可用式(1)表示:
式中:y表示3 个有效特征层经过ASFF-3 之后得到新特征图,α3+β3+γ3= 1(α3,β3,γ3∈[0,1])。
1.1.3 损失函数
本文使用基于BCELoss 的PolyLoss[18]计算损失,Poly-Loss 是一种用于理解和设计损失函数的新框架,该框架有助于将BCELoss 解释为PolyLoss 系列的特例,将BCELoss函数在( 1-Pt)处进行泰勒展开,并修改了BCELoss 中的第一个多项式,新加入了可以针对不同模型和任务进行调优的多项式系数(1-ϵ1),可以获得更好的分类精度,如式(2)所示:
式中:Pt为目标真实类别的预测概率,j∈(1,+∞)。
1.2 水尺图像矫正
利用YOLOX_I1 提取水域图像中的水尺,之后需要识别水尺上的“E”刻度并截取,水尺“E”刻度识别的准确与否会直接影响到水位值的计算,因此,在进行字符标志识别之前,需要对水尺做矫正处理,图像矫正流程如图5所示。
图5 图像矫正流程图
具体流程说明如下:
(1)将截取到的水尺图像转成单通道的灰度图,即将BGR图像转换为GRAY图像。
(2)通过高斯滤波[19]对GRAY 图像进行模糊去噪,高斯核大小设置为5×5。
(3)利用Canny 边缘检测算法[20-21]计算图像梯度的幅值和方向,通过双阈值检测和边缘连接有效抑制由噪声引起的孤立弱边缘点,提高边缘检测精度。Canny边缘检测流程如图6所示。
图6 边缘检测流程图
(4)利用霍夫变换[22-23]对Canny 算法检测到的水尺边缘进行直线检测,直线表达式如式(3)所示。返回检测出的直线,另一种形式的表达式如式(4)所示。根据ρ和θ结合三角函数在直线上任取不同两点A(x1,y1)和B(x2,y2),通过公式k=(y2-y1)∕(x2-x1)求出该直线斜率,再利用反正切函数求出直线倾斜角度并对水尺图像进行矫正(图7)。
图7 水尺图像矫正前后
式中:ρ为原点到待检测直线的垂直距离;θ为原点到待检测直线垂直距离上直线和x轴的夹角。
1.3 图像多余背景滤除
待测的水域图像经过YOLOX_I1 和YOLOX_I2 处理后,分别截取水尺图像和水尺“E”刻度图像,但这些图像的上下端会存在一些背景噪声,影响最终水位计算结果。本文提出以基线为筛选阈值,分别对图像像素点的水平直方图和垂直直方图进行处理,图像多余背景滤除流程如图8所示,以处理水尺“E”刻度图像为例说明具体步骤:
图8 图像多余背景滤除流程图
(1)对截取的水尺“E”刻度图像进行高斯模糊去噪处理,将处理后的彩色图像转成单通道的灰度图,对灰度图进行二值化处理,得到二值化图像。
(2)分别从水平方向和垂直方向遍历二值化图像的每个像素点,统计像素值为255的像素点数量,生成水平直方图和垂直直方图(图9)。取出垂直直方图中像素点数量的最大值E_max_v,根据水尺上实际测量出的单个“E”宽度是其“E”刻度最左边竖线宽度的5 倍,对垂直直方图进行处理,像素点数量大于E_max_v 4∕5 的保留,小于E_max_v的4∕5 置为0,统计像素点数量值不为0 的位置宽度记为E_vn;对水平直方图处理,像素点数量值大于E_vn 的保留,小于E_vn置为0。
图9 水平直方图和垂直直方图
(3)根据水平直方图中左右两端像素点数量值不为0的位置信息,将不在左右两端范围内的水尺“E”刻度图像相应部分滤除;重复上述操作,实现对每个截取水尺“E”刻度图像的多余背景滤除,图像多余背景滤除前后效果对比如图10所示。
(4)根据滤除多余背景后的水尺“E”刻度图像,计算图像高度像素值,建立所有多余背景滤除后水尺“E”刻度图像高度像素值列表,对该像素值列表中的值按降序方式重新排列。若该列表的长度N为奇数,则选取该列表的中间值代表水尺“E”刻度的标准图像高度像素值;若该列表的长度N为偶数,则选取该列表中第N∕2和第(N+1)∕2个数的平均值代表水尺“E”刻度的标准图像高度像素值he。
2 结果与分析
2.1 数据集
在包含水尺的多个不同水域图像8 503 张和单独水尺图像1 780张中选取典型的4组图像:(a)复杂背景、(b)夜间环境、(c)雨天环境、(d)背光环境(图11),采用人工标注的方式分别对水尺和水尺“E”刻度进行标注,制作两套独立的VOC格式数据集。其中用来识别水尺的数据集训练样本数量为6 886张,验证样本数量为766张,测试样本数量为851张;用来识别水尺“E”刻度的数据集训练样本数量为1 441张,验证样本数量为161张,测试样本数量为178张。
图11 水尺数据集和水尺“E”刻度数据集
2.2 模型训练及超参数设置
本文所用训练设备CPU型号是15核Intel(R)Xeon(R)Platinum 8358P CPU @ 2.60GHz,内存80 GB,GPU 型号为RTX A5000,显存24 GB。操作系统是ubuntu18.04,PyTorch版本1.7.0,Python版本3.8,CUDA版本11.0。
所有模型均不使用预训练模式,即训练过程中不需要加载预训练权重。迭代次数(epoch)为300,Batch_size设为16,Weight_decay设为0.000 5,表示权重衰减,可以防止过拟合。优化器选用SGD,其内部使用到的momentum 参数设为0.937,学习率设为0.01,学习率衰减采用余弦退火的方式。
训练过程中YOLOX_I1和YOLOX_I2的损失值变化曲线如图12 所示。从图12 中可以看出,YOLOX_I1 的训练集和验证集损失值分别收敛于1.859、1.838,YOLOX_I2 的训练集和验证集损失值分别收敛于1.104、1.097。
图12 训练过程的损失值
2.3 实验结果分析
2.3.1 评价指标
为了判断模型对水尺和水尺“E”刻度的检测效果,选择平均精度(AP)、F1、帧率(FPS)作为评价指标。AP是对单个类别下被正确分配的正样本数占总分配正样本数的比例取平均精度,如式(5);F1 是当参数α= 1 时查准率和查全率加权调和平均值,综合了查准率和查全率结果,当F1较高时则说明试验方法比较有效,如式(6);FPS是每帧推理的时间,它衡量的是算法的检测速度,值越高算法实时性越好,如式(7)。
式中:Tp为正样本被正确识别的数目;Fp为错误地被识别为正样本的数目;N为类别数;Precision为查准率,Recall为查全率;frameNum为图像的帧数编号;elapsedTime为运行固定帧数花费的时间。
2.3.2 实验结果对比
采用改进的YOLOX-S 算法模型分别对水尺和水尺“E”刻度检测,在参数相同情况下,与YOLOv4-S、YOLOv5-S、YOLOX-S 算法做对比,同样为了验证重构后的P_ASFF 模块和使用PolyLoss 优化后的BCE Loss 在改进的YOLOX-S 算法中的效果,设计依次增加Poly Loss 和P_ASFF的对比,如图13、表2和表3所示。
表2 水尺识别算法各指标对比
表3 水尺“E”刻度检测算法各指标对比
图13 算法对比图
其 中,AP50和AP70分 别 表 示 阈 值 为50、70 时 水 尺“E”刻度的AP值,阈值设置越高对检测的结果越严格,预测框和真实框的贴合程度要求越高。从图13、表2 和表3 中可以看出无论是AP50、AP70还是F1,本文提出的改进YOLOX-S 算法在对水尺和水尺“E”刻度检测上均有很好的效果,FPS值同样能满足实时性的目标检测的需求。在YOLOX-S 基础上分别增加PolyLoss 和P_ASFF 之后AP值均有提升,综上,改进后的目标检测算法在当前任务中可靠性较好。
2.4 水位检测算法的实验结果分析
为验证水位检测算法的有效性和可靠性,以较为模糊的水尺图像为例,与王磊等[13]使用的YOLO-v3 和ResNet刻度识别算法做了实际对比测试,对比结果如图14所示。
图14 实测效果对比
从图14 可以看出,在水尺图像较为模糊的情景下,YOLO-v3 和ResNet 刻度识别算法仅仅识别出水尺上的两条刻度线,若只依据水尺刻度线进行水位识别容易出现漏检的现象,对后续统计刻度数目和计算水位值有很大影响。而利用本文算法,水尺“E”刻度均可识别出来,说明该水位检测算法在初始图像模糊的情景下仍然具有很好的检测效果,可靠性高并且适应性好。
为进一步验证算法的水位检测性能,选取8 组实验数据,数据选取白天背景较为复杂的水面环境、雨天环境、外部环境干扰导致的模糊水尺和夜间环境下水尺,分别与孙维亚等[10]使用的主策略算法、YOLO-v3和ResNet算法做对比。通过测量误差分布图可以看出本文提出的水位检测算法误差波动最小(图15)。最终计算的水位值平均误差、最大误差、最小误差和极差的检测对比结果如表4所示。
表4 不同算法水位检测结果参数对比
图15 算法误差对比图
从表4 可以看出,YOLO-v3 和ResNet 刻度识别算法平均误差为6.14 cm,最大误差为10.33 cm,最小误差为0.70 cm,极差为9.63 cm,说明水位检测算法的结果误差变动范围较大,算法稳定性不强,主策略算法平均误差为2.50 cm,最大误差为5.00 cm,最小误差为1.00 cm,极差为4.00 cm,相较于YOLO-v3 和ResNet 刻度识别算法的结果误差虽然变动范围减小,但极差仍有4.00 cm,而本文算法的平均误差、最大误差和最小误差均最低,极差也只有0.78 cm,小于另外两种算法。
本文算法性能较好且误差较小的原因在于使用两阶段目标检测算法和针对多余背景滤除的图像处理技术,其中基于深度学习的两阶段目标检测算法能准确地定位待测区域和水尺刻度“E”,图像处理技术能对检测出的图像基于像素级的水平直方图和垂直直方图处理多余背景,使得检测结果更加精确。为验证提出多余背景滤除处理技术的有效性,对是否使用多余背景滤除处理的水位检测结果进行了对比。分别选取白天背景较为复杂的水面环境、雨天环境、外部环境干扰而导致的模糊水尺和夜间环境下水尺共8组实验数据,对比结果如表5所示(实际水位的读数以人工读数为准,误差分析以绝对误差作为评价指标)。
表5 多余背景滤除处理的性能分析
从表5 可以看出,在不对图像做多余背景滤除处理时,测试样本中的最大误差高达6.40 cm,而针对该样本使用本文算法中的多余背景滤除处理之后测量的误差仅有0.48 cm,测量误差降低5.92 cm,这表明在使用基于深度学习的目标检测算法后,图像的背景噪声干扰依旧很大,而在准确提取检测目标前提下引入图像处理技术依据像素点数目对图像做多余背景滤除处理时能减小水位测量误差。因此,本文提出的在水位检测算法中引入传统图像处理方法效果显著。
3 结 语
本文针对江河湖库等水域的水位检测,提出了一种基于深度学习的水位智能检测算法,引入ASFF 模块重新构建了YOLOX-S 的加强特征融合网络,提高算法特征信息融合能力,引入多项式损失(Poly Loss)对二元交叉熵损失(BCE Loss)进行优化;使用改进后的模型对基于水尺的水域图像分两阶段检测识别,结合传统图像处理技术对水尺图像做矫正和多余背景滤除处理、对水尺“E”刻度做多余背景滤除处理,可以滤除背景噪声并较为准确地读取到图像高度像素值,最终根据公式计算水位。结果表明改进后的YOLOX-S 对第一阶段水尺的识别率为98.94%,对第二阶段关键水尺“E”刻度的识别率为99.86%,FPS 均可达到59,改进后的YOLOX-S 算法满足实时性要求,并且在使用了多余背景滤除方法后,最终计算水位的平均误差小于0.60 cm、极差误差小于0.80 cm,较传统典型水位识别方法分别减少1.98 cm 和3.22 cm,实现对江河湖库等水域水位的高精度智能识别,为防汛抗旱决策提供有效技术支撑。