本项目的代码链接为:https://github.com/ZHANGYU-ui-cmd/chuanbofushijiance
因金属材料具有较强的耐磨性和抗击打能力,因此绝大多数的船舶选择金属外壳作为其建造材料。然而,因长时间受到海水侵蚀,船舶会产生不同程度的腐蚀,严重威胁船体的稳固性,缩短船舶的使用寿命。因此定期对船舶进行腐蚀检查,不仅可以满足国际海事组织的要求,还可以为船舶安全控制和维修加固提供决策参考,确保船舶安全航行和水上交通运输安全。
现阶段人工目检仍是常用的船舶腐蚀检测方法,工作人员不仅要关注船舶是否腐蚀,还要关注腐蚀的程度,因为不同的腐蚀程度所对应的腐蚀处理措施是不同的。工作人员在船舶腐蚀检测时,要前往船舶检测所在位置,整个过程不仅费时昂贵,有时还会暴露在危险的情况下,危及工作人员安全。此外,人工目检难以对腐蚀程度、腐蚀面积进行定量描述,存在一定的主观性,会导致检测结果具有不可靠性。
随着无人机技术的发展,有些企业利用无人机进行图像的采集,由工作人员远程检查图像或视频,消除工作人员在工作中的安全隐患,但仍存在上述人工目检主观性强的问题。为保证检测的客观性,提高检测的效率,采用基于深度学习的船舶腐蚀图像检测。对于腐蚀的检测,Atha比较了不同CNN模型的锈蚀检测性能,并分析了颜色空间、滑动窗口尺寸对模型性能的影响;Nguyen等利用U-Net模型对压力管道进行腐蚀语义分割,实现腐蚀区域的精确定位。然而,对于船舶的腐蚀检测一方面由于其缺乏公开的腐蚀数据集,另一方面基于深度学习的船舶腐蚀检测和腐蚀程度评估的研究较少,因此距离成果落地应用具有一定难度。
面对上述挑战,为满足船舶腐蚀检测及评估的自动化、智能化的需求,团队对现有的智能检测技术加以学习实践,综合图像处理、深度学习等相关知识,研究基于PaddlePaddle深度学习框架的船舶腐蚀检测和评估技术,并设计船舶腐蚀检测与评估系统。
目前,在船舶腐蚀检测领域,依然是以人工目检为主,这无论是在安全性还是准确性上都无法满足当前船舶检测的要求。近两年,美国船级社(ABS)利用AI算法分析图像和视频文件,对液舱涂层的破损和腐蚀状况进行评测。而国内对船舶腐蚀智能检测的研究是相对空白的,市面上尚未有完全相似的检测系统,因此船舶腐蚀智能检测与评估的研究亟待解决。
船舶腐蚀检测可以理解为语义分割问题,对原始图像进行分割,得到的分割模板包括前景(腐蚀区域)和背景(无腐蚀区域)。其本质是一个像素级别的辨识问题,基本原理为:首先将腐蚀图像输入到神经网络中,进行前向传播,输出与原图尺寸一致的概率图,再将其与手工标注的二值化标签图像进行比对,分别对每一个像素进行损失值计算,并据此进行反向传播,指导网络更新权重,如此迭代更新,直到网络模型学习到最优权重参数。训练好的模型能够区分图像上的腐蚀像素和非腐蚀像素,对腐蚀区域掩膜,即可得到精准的腐蚀区域分割图。
针对船舶腐蚀检测的需求,本作品依托PaddlePaddle深度学习框架,选择检测效果较好的模型检测船舶腐蚀,利用腐蚀率对船舶腐蚀进行评估,并开发了船舶腐蚀检测与评估系统,用户在系统中输入待检测的船舶图像,即可得到船舶腐蚀区域的可视化以及腐蚀区域占比。
选用语义分割模型对船舶腐蚀进行检测,能够精确定位腐蚀区域并准确计算腐蚀率,避免人工目检的客观性。
船舶腐蚀检测与评估系统能满足船舶腐蚀检测的任务需求,直观展示腐蚀区域并提供腐蚀率,且可以更换分割模型。工作人员无需花费长时间培训即可掌握此系统的使用方法。
考虑到使用场景的软、硬件差异,系统的体积尽量小,便于部署。同时本系统对类库的依赖也降至最低,简化了环境配置的过程。
拟采取的研究技术路线为:先对已有的船舶腐蚀图像进行人工标注,调整图像大小为640×480,之后进行图像增强,将图像输入到模型中进行训练,得到训练好的模型,然后对输入的测试图像进行腐蚀检测,并计算腐蚀区域面积以及腐蚀率。基于PyQt5开发船舶腐蚀检测与评估系统。本文的技术路线如图所示。
本项目依托于PaddlePaddle深度学习平台,使用图像分割套件PaddleSeg,采用基于Qt的Python工具包PyQt5进行系统开发。
对基于深度学习的腐蚀检测任务而言,尚无公开数据集。因此本项目的第一步是建立高质量的腐蚀分割数据集。所使用的船舶腐蚀数据集一共有684张。
本项目利用EISeg(Efficient Interactive Segmentation)对腐蚀数据集进行标注。
原始图像存放在JPEGImages文件夹,标注图像放在Annotations文件夹。
按照比例8:1:1划分为训练集、验证集和测试集。
# 切分数据
# JPEGImages为原始图像目录名, Annotations为标注图像目录名
# 0.8 0.1 0.1 为训练集、验证集、测试集划分比例
python tools/split_dataset_list.py custom_dataset JPEGImages Annotations --split 0.8 0.1 0.1 --format jpg png
当输入模型中的图像过大时,会导致模型在训练过程中出现内存不足的问题。因此,将所有图像均统一为640×480进行模型的训练。本项目使用数据增强,扩充数据样本规模。
通过对多个语义分割模型进行模型训练、验证,本项目拟计划用DeepLabV3、DeepLabV3+、PP-LiteSeg、FastFCN等模型对船舶腐蚀进行检测和评估。
DeepLabV3基于ResNet构建语义分割网络。将ResNet中block3和block4的步幅变为1,在block4中采用multi-gird的结构,在block4后采用ASPP结构,最后双线性上采样将概率图上采样到和输入图像相同的维度。
在编码器中,对压缩四次的初步有效特征层利用并行的空洞卷积,用不同比率的空洞卷积进行特征提取,再合并,卷积压缩特征。在解码器中,对压缩两次的初步有效特征层利用卷积调整通道数,再和有效特征层上采样的结果进行堆叠,进行两次深度可分离卷积,得到最终有效特征层。利用卷积进行通道调整,调整到类别总数,利用resize进行上采样使得最终输出层宽高和输入图像一样。
PP-LiteSeg提出三个创新模块:解码模块(FLD)调整解码模块中通道数,平衡编码模块和解码模块的计算量。注意力融合模块(UAFM)加强特征表示。简易金字塔池化模块(SPPM)减小中间特征图的通道数、移除跳跃连接。
FastFCN提出JPU新模块,将最后三个特征图作为输入,然后是一个多尺度上下文模块或全局上下文模块用于产生最终预测。
通过PaddleSeg提供的脚本对模型进行训练,以语义分割模型DeepLabV3为例,执行以下脚本进行训练。训练iter设置为50000。PaddleSeg会将训练过程中的数据写入VisualDL文件。
# config为配置文件,do_eval在保存模型时启动评估,use_vdl开启visualdl记录训练数据
# save_interval为模型保存的间隔步数,save_dir为模型和visualdl日志文件保存根路径
# log_iters为打印日志的间隔步数
CUDA_VISIBLE_DEVICES=0 python train.py --config configs/deeplabv3/deeplabv3_resnet50_os8_voc12aug_512x512_40k.yml --do_eval --use_vdl --save_interval 500 --save_dir output --log_iters 50
选择IoU、精确率和召回率、Kappa系数作为模型质量评估的指标。
训练完成后,使用评估脚本val.py来评估模型效果。
# 选择best_model进行模型评估
python val.py --config configs/deeplabv3/deeplabv3_resnet50_os8_voc12aug_512x512_40k.yml --model_path output/best_model/model.pdparams
本作品模型评估结果如下表。
模型 | IoU | 精确率 | 召回率 | Kappa |
---|---|---|---|---|
SegFormer | 0.4628 | 0.6954 | 0.5805 | 0.6263 |
FCN | 0.4886 | 0.6904 | 0.6257 | 0.6501 |
PP-LiteSeg | 0.5111 | 0.6697 | 0.6833 | 0.6701 |
DeepLabV3+ | 0.5034 | 0.7022 | 0.64 | 0.6636 |
DeepLabV3 | 0.5177 | 0.6494 | 0.7185 | 0.6757 |
FastFCN | 0.5234 | 0.6975 | 0.677 | 0.6811 |
调用predict.py对图像进行预测。只对关注的腐蚀区域进行掩膜,预测结果如下所示。
在现实环境中,只有识别出船舶的腐蚀程度,才可以进一步采取相应的措施对船舶进行维护。在上述利用模型对船舶腐蚀进行像素点的检测后,定义某个腐蚀区域面积S_i为属于该腐蚀区域的像素总数。
其中,p_i为该区域腐蚀像素。则腐蚀率C可定义为总腐蚀面积与图像面积之比。
其中,S_total为图像总像素点数。
在船舶腐蚀检测的应用场景中,可能涉及对以船只为单位的大批量图片的腐蚀分割。以程序脚本进行的分割处理需要频繁修改路径、切换工作区,往往效率低下。因此,有必要设计一种简易、高效的船舶腐蚀检测与评估系统。
本文采用基于Qt的Python工具包PyQt5进行开发。导入一张本地待检图像后,点击开始分割,出现分割结果,与原图并排显示,如下图所示。改系统可以实现选择模型类型,检测图像,保存图像的功能,同时能够检测出船舶腐蚀区域及腐蚀面积和腐蚀占比。
如果操作者在导入图像前点击了“开始检测”,或是在分割结果出现前给出保存命令,系统会提示图中的错误信息,引导用户重新操作,如图所示。
综上所述,本系统可以正确加载模型,导入待检图片,修改分割参数,检测腐蚀区域及腐蚀比率,保存分割结果。系统能按照预定功能对待检图像进行腐蚀分割,推理过程较快。测试中未出现假死等异常现象,可以较好地满足设计目标。
本项目贴近行业需求,有明确的目标用户及使用场景。目前船舶检验部门大部分是以人工目检开展工作的,不仅可能会危害工作人员的生命安全,而且检测费时费力,其检测也因其主观性导致结果的不可靠性增加。另外,现阶段船舶腐蚀检测与评估的研究也较少,因此提出一种智能化、自动化的船舶腐蚀检测与评估方法是迫切需要的。
为降低由人工目检带来的经济成本和时间成本,本项目依托于PaddlePaddle深度学习框架,建立基于深度学习的船舶腐蚀检测与评估模型,并设计船舶腐蚀检测与评估系统,目的是实现船舶检测与评估的智能化、远程化,提高船舶检测的准确性和效率。
本项目的合作对象包括但不限于船舶检验部门、桥梁检验部门、管道检验部门。由于船体的材料是钢结构,因此本项目实现的船舶腐蚀检测与评估模型也可以为同样是钢结构的桥梁、管道等腐蚀检测提供一定的技术帮助和实践支持。由于网络上基本没有公开的腐蚀数据集,本项目也对腐蚀数据集进行了一定的扩充。
综上所述,由于现阶段船舶腐蚀检测与评估的研究较少,而对船舶智能检测与评估又有一定的需求,因此本项目具有光明的前景和广阔的市场需求。
请点击此处查看本环境基本用法.
Please click here for more detailed instructions.