提升水下机器人拍摄的图像质量,对后续的检测与识别,以及对水下场景理解至关重要。本节首先简述水下图像质量提升方法,然后对目标检测算法与裂缝图像分割算法进行综述。
水下图像质量提升方法主要包括水下图像复原算法和水下图像增强算法。
0.2.1.1 水下图像复原算法
水下图像复原算法根据光在水中的传播特性构建水下图像退化模型,通过估计模型中的参数反演其退化过程,最终获得退化前的清晰图像 [1] 。水下图像质量下降的原因与雾天图像类似,自何恺明等人 [2] 提出使用暗通道先验(Dark Channel Prior,DCP)算法处理雾天图像质量下降问题并取得不错的效果后,大量的研究人员将DCP算法与水下图像的衰减特性相结合,提出了大量的水下图像复原方法。2013年,Drews等人[3]提出了基于 DCP 算法的水下图像复原算法,该算法的特点是仅将 DCP 算法应用于蓝色光和绿色光通道,从而减少红色光通道分量造成的影响,该算法能有效提高图像的视觉效果,但该算法的适用场景比较有限。2015 年,Galdran 等人 [4] 考虑到不同波长的光线在水中的选择性衰减使得直接应用DCP算法的效果差等问题,提出一种红色光通道水下图像复原算法,该算法反转了红色光通道的背景光和像素强度值,在此基础上利用DCP算法估计透射率,该算法能够在有效还原场景真实色彩的同时提高图像的清晰度。2016年,Li等人 [5] 基于最小信息损失原则估计红色光通道透射率,然后根据三种颜色光通道透射率的关系计算蓝色光和绿色光通道的透射率,最终根据水下成像模型获得颜色自然、清晰的复原图像。2019年,Ueki等人 [6] 提出一种基于广义暗通道先验(Generalization of the Dark Channel Prior,GDCP)迭代的水下图像复原算法,首先通过GDCP迭代获得增强后的图像,为消除迭代过后背景区域的颜色失真和噪声,将多次迭代得到的增强图像与初始增强后的图像融合,该算法能很好地提升图像对比度和清晰度,然而 GDCP 迭代在提高图像质量的同时也大大增大了计算开销。2020年,林森等人 [7] 提出了一种基于修正散射模型的水下图像复原算法,该算法首先将背景光融入水下成像模型,然后根据红色光通道的逆通道提出水下成像模型,最后结合暗通道先验估计介质的透射率复原退化前的水下图像,该算法能够有效提高水下图像的对比度并提供较多的细节。
传统水下图像增强方法能够有效提高水下图像的对比度和清晰度,提升图像的视觉效果,但该类算法未考虑水下图像的特性,增强过后的图像可能会存在颜色失真、伪影等现象,在部分场景中反而会将水下图像中的噪声放大。随着深度学习的流行,研究人员将其与图像复原技术相结合,利用卷积神经网络(Convolutional Neural Networks,CNN)学习水下成像模型的参数。该类算法的主要步骤为:首先利用CNN估计水下图像的透射率,然后根据水下成像模型复原降质前的图像。2017 年,Wang等人 [8] 首先通过水下成像模型合成水下图像数据集,然后利用CNN学习获得水下图像的透射率和红绿蓝三种光的衰减率,最终根据水下成像模型获得清晰度高和视觉效果好的图像。2018年,Cao等人 [9] 设计了两种神经网络结构,分别用于估计水下图像的背景光和场景深度,然后结合光在水中的衰减系数和场景深度计算透射率,最后根据水下成像模型恢复降质前的图像,该算法恢复的图像颜色鲜艳且具有较高的对比度。2019 年,Wang 等人 [10] 提出了基于并行 CNN 结构的水下图像复原算法,首先通过该网络结构估计蓝色光通道的透射率和背景光,然后根据三个颜色通道间的透射率关系来计算红色光和绿色光通道的透射率,并在构建的数据集上进行训练,最终恢复的水下图像具有较自然的色彩和较高的清晰度。2020 年,Yang 等人 [11] 为降低人造光源对物理模型的影响,提出了一种新的背景光估计方案,该方案首先利用 CNN 估计的深度信息结合暗通道先验获取背景光,然后采用暗通道先验与估计的背景光复原降质前的图像,该方案能够改善水下图像的颜色失真问题、提高图像的对比度,但受深度估计准确率的影响较大。
0.2.1.2 水下图像增强算法
水下图像增强算法主要通过直接修改图像的像素值来改善水下图像质量低等问题。针对水下图像的降质问题,业界的专家和学者提出了大量的水下图像增强算法。2017年,Perez等人 [12] 首先将水下图像和与之对应的清晰图像作为训练集,然后利用CNN 学习水下图像到清晰图像的映射,从而实现水下图像增强。同年,Ding 等人 [13] 提出了一种基于深度学习的增强策略,该策略首先利用自适应颜色校正算法处理水下图像的颜色失真,然后利用超分辨率CNN解决水下图像模糊问题。自2014年生成对抗网络(Generative Adversarial Network,GAN) [14] 提出以来,其强大的学习能力和适应性使得GAN在各个领域得到广泛的应用 [15-16] 。近年来,大量的学者应用GAN处理水下图像的失真问题。2017 年,Li 等人 [17] 提出了一种用于水下图像增强的无监督学习生成对抗网络算法——WaterGAN,该算法首先通过清晰的图像及其深度信息获得对应的水下图像,然后通过深度估计网络估计水下图像的深度信息,并将其和水下图像作为颜色校正网络的输入,最终获得了增强后的图像,该算法能有效解决水下图像的偏色问题,还原水下场景的真实色彩。2018年,Fabbri等人 [18] 提出了一种适用于水下场景的生成对抗网络——UGAN,为解决水下图像数据集不足问题,首先利用循环生成对抗网络(CycleGAN)生成数据集,然后在数据集充足的条件下训练生成对抗网络,UGAN能够有效提高水下图像的视觉效果。2020年,李庆忠等人 [19] 提出了一种基于改进循环生成对抗网络的水下图像增强算法,该算法通过设计边缘结构相似度函数来抑制输入图像和输出图像边缘结构的变化,同时采用弱监督学习、强监督学习相结合的网络结构和两阶段学习模式保证生成图像与目标图像颜色的一致性,该算法能够有效提高图像的对比度并还原场景的真实色彩。同年,Islam 等人 [20] 提出了一种基于全卷积条件生成对抗网络的实时水下图像增强模型——FUnlE-GAN,该模型结合多模态目标函数,使增强后图像的对比度、清晰度得到明显改善,同时也增强了图像感知质量。同年,Dudhane等人 [21] 提出了一种用于水下图像恢复的生成对抗网络模型,该模型针对水下图像失真的特点,设计了基于颜色通道的特征提取模块,并针对处理水下图像的模糊问题设计了密集残差网络,结合提出的损失函数,该模型在处理水下图像时能够有效恢复颜色、保留场景细节结构,生成更加真实的边缘信息。2021年,雍子叶等人 [22] 针对成对样本获取难等问题,提出了一种结合注意力机制的弱监督学习水下图像增强算法,该算法将红色光通道的衰减图作为注意力图,将原始水下图像和注意力图像同时作为生成器的输入,最后通过对抗训练使得生成器输出对比度和清晰度高的图像,该算法针对颜色失真和对比度低的水下图像效果较好,但对于浑浊的水下图像效果较差。同年,针对水下图像存在的模糊、对比度低和颜色失真问题,Li 等人 [23] 提出了一种融合生成对抗网络——DeWaterNet,该网络由两个CNN构成,分别用于提取融合增强后的图像和原始水下图像的特征,并将相加后的结果作为生成器的输出,该网络能有效提高水下图像的视觉效果。
目标检测通常是指在图像或者视频中找到特定目标的位置,一般通过边界框的方式框选出目标,如果目标种类多于一种,则还需要指出所框选的目标类别。对于人类来说,视觉的作用就是告诉人类物体的种类和位置,目标检测正如视觉之于人类,其目的是解决计算机视觉应用的两个基本问题:该物体是什么,以及该物体在哪里。
由于目标检测具有广泛的应用前景,因此受到广泛的关注。在人脸识别 [24] 、步态识别 [25] 、人群计数 [26] 、安全监控 [27] 、自动驾驶 [28] 、无人机场景分析 [29] 等任务中,目标检测具有至关重要的作用。目标检测的研究领域主要包括边缘检测 [30] 、多目标检测 [31-33] 、显著性目标检测 [34-35] 等。
目标检测的研究随着深度学习的革新得到了飞速发展。大多数目标检测均以深度学习网络为主干,目标检测算法从输入图像中提取特征,从而进行分类和定位。利用深度学习网络的目标检测算法大体可以分为两种类型:两阶段(Two-Stage)目标检测算法和单阶段(One-Stage)目标检测算法。两阶段目标检测算法提出的时间更早,检测精度高,但检测速度慢。单阶段目标检测算法的检测速度快,但检测精度略低。目前,无论单阶段目标检测算法还是两阶段目标检测算法,都在向着“又快又准”的目标前进。下面介绍这两类目标检测算法的研究现状。
0.2.2.1 两阶段目标检测算法
两阶段目标检测算法是指先通过某种方式生成一些候选区域,然后对这些候选区域的内容进行分类,确认是否包含待检测的目标,并对这些区域进行修正。因为包含了两个步骤,即候选区域的生成和候选区域的检测,所以被称为两阶段目标检测算法。
2014年,Girshick等人 [36] 提出了RCNN。RNN首先利用选择性搜索对图像进行划分,生成候选区域;然后将候选区域输入到一个在ImageNet上训练完毕的CNN模型来提取特征,从而取代了传统的滑窗算法;最后使用线性 SVM 分类器对每个候选区域内的目标进行检测,从而识别目标类别。通过这样的方式,RCNN拥有非常高的检测精度,但RCNN的缺点也十分明显:由于候选区域中有大量的重叠区域,RCNN对这些重叠区域进行的计算存在大量冗余,因此严重拖慢了检测速度,并且所有的候选区域都需要缩放到固定尺寸,这会导致大量不期望产生的几何形变。
2014年,He等人 [37] 为解决RCNN的计算冗余问题,提出了一种空间金字塔池化网络(Spatial Pyramid Pooling Network,SPPNet)。不同于RCNN直接在图像上划分候选区域,SPPNet在提取的图像特征上选择候选区域,这样可以减少许多计算冗余。针对候选区域尺寸不同的问题,SPPNet可以将任意大小的卷积特征映射为固定维度的全连接输入,从而避免像 RCNN 那样在缩放候选区域时导致的几何形变。SPPNet 的检测速度是RCNN的20多倍,而且这是在没有检测精度损失前提下的检测速度。同样,SPPNet 也存在一些问题:不同图像的训练样本通过 SPP 层的反向传递效率十分低,这直接导致SPPNet无法更新SPP层以下的权重,使检测精度的提升非常有限。2015年,Girshick等人 [38] 提出了Fast RCNN。Fast RCNN使用边界框回归(Bounding-Box Regression)和非极大值抑制,可得到不重复的预测得分最高的边界框。与 RCNN 相比,Fast RCNN的检测精度和检测速度有了大幅提升,但由于候选区域检测的限制,Fast RCNN 的检测速度仍然得不到太大的提升。2015 年,Ren 等人 [39] 提出了Faster-RCNN。Faster-RCNN中的区域建议网络可以将目标检测的定位和分类操作分开执行。Faster-RCNN流程如下:首先使用VGG(Visual Geometry Group)网络模型提取特征,然后对提取到的特征通过区域建议网络生成候选区域,接着判断候选区域是目标还是背景,并且对这些候选区域进行修正,最后利用ROI池化对区域建议网络筛选修正后的候选区域进行分类。相较于Fast RCNN,Faster-RCNN的检测速度终于得到了很大的突破。
0.2.2.2 单阶段目标检测算法
单阶段目标检测算法只需一个阶段就能同时完成目标定位和目标分类两个任务。单阶段目标检测算法的整个过程更加简洁,所需的检测时间也更短,在检测速度上更满足实时性的要求。
2015年,Redmon等人 [40] 提出了 YOLOv1。YOLOv1 同样首先使用 CNN提取特征,然后将整个图像划分成棋盘格状,并对每个单元格预测一定数量的边界框(Bounding Box)以及属于不同类别的概率。每个边界框都有5个变量,分别是4个描述位置的坐标值,以及每个类别的置信度。YOLOv1将目标区域的预测与目标类别的预测结合起来,大大地提高了检测速度。但YOLOv1的每个单元格只能预测一个对象,并且检测精度也十分有限。由于YOLOv1并没有利用丰富的浅层细节信息进行预测,因此YOLOv1对小目标的检测效果很差。
2016年,Liu等人 [41] 针对YOLOv1存在的小目标检测精度低等问题,提出了单步多框预测(Single Shot MultiBox Detector,SSD)。相较于YOLOv1,SSD在CNN后直接进行目标检测,而不是像YOLOv1那样在全连接层之后进行目标检测。SSD在提取不同尺度的特征后进行目标检测:对于小目标,SSD利用丰富的浅层位置信息和细节信息进行检测;对于大目标,SDD利用丰富的深层语义信息来进行检测。SSD还对锚定框(Anchor Box)的长宽比和大小进行了固定,在每个特征中检测固定数量的锚定框中是否包含目标。通过上述改进,SSD的检测精度和检测速度都要高于YOLOv1,并且SSD对小目标也有不错的检测精度。
2017年,Redmon 等人 [42] 将 SSD的优点移植到 YOLOv1 上并进行了改进,提出了YOLOv2。在YOLOv2中,Redmon等人设计了一种全新的CNN来提取图像特征,并利用聚类算法对数据集中的标签框大小进行聚类,确定锚定框的尺寸,通过为卷积层添加批标准化(Batch Normalization,BN,也称为批量归一化)来降低模型的过拟合,有效提高了模型的收敛能力。相较于 YOLOv1,YOLOv2 首先在分辨率更高的ImageNet上进行训练,然后使用检测数据集进行微调。Redmon等人还在YOLOv2中添加了多尺度训练方法,使得YOLOv2具备多尺度目标检测能力。2018年,Redmon等人 [43] 在YOLOv2的基础上做了进一步改进,提出了YOLOv3。YOLOv3设计了一种特征提取能力更强的卷积神经网络——Darknet53,通过改进聚类算法获得了更加精确的锚定框尺寸。YOLOv3借鉴了特征金字塔网络(Feature Pyramid Networks,FPN)的多尺度预测思想,在3个尺度上进行预测,每个尺度对应3个候选区域。YOLOv3还使用了多标签分类算法,每个候选区域可以预测多个分类。YOLOv3通过增强卷积核的步长来代替池化层,减少了模型参数。YOLOv3的速度略慢于YOLOv2,但综合来看,YOLOv3 是当时最优的单阶段目标检测算法。2020 年,Redmon 等人 [44] 对YOLOv3进行了改进,提出了YOLOv4。YOLOv4筛选并应用了从YOLOv3发布至今的、在各种目标检测算法上提升检测精度的技巧,并将YOLOv3的Darknet53替换成特征提取能力更强的CSPDarknet53,同时添加了SPPNet以扩大感受域的大小,使用路径聚合网络PANet进行多通道的特征融合。
裂缝图像分割算法可分为形态学方法和深度学习方法两类 [45] 。在深度学习方法流行前,形态学方法是研究人员利用数字图像处理、拓扑学、数学等方面知识来实现图像分割的主要方法 [46] 。这类方法容易受图像质量、噪声等因素的影响,对使用环境有较高的要求。相较于深度学习方法,形态学方法的适用性较差,其分割性能和深度学习方法存在着一定的差距。
随着深度学习的不断发展,越来越多的研究人员将其应用到裂缝图像分割任务中 [47] 。裂缝因其纹理特征较为复杂,对模型的分割性能提出了较高的要求。目前,在裂缝图像分割领域中,应用较多的是全卷积网络(Fully Convolutional Network,FCN)及其变体 [48] 。FCN于2015年由Long等人 [49] 提出,由编码器子网络和解码器子网络两部分构成。其中,编码器子网络用于提取图像特征,解码器子网络负责对图像像素进行分类。由于FCN的解码器子网络过于简单,其分割效果并不理想,常常出现误判的情况。
Ronneberger等人 [50] 在FCN基础上提出了UNet,它通过跳跃连接(Skip Connection,也称为跳层连接)实现了医学图像不同层特征在语义上的融合。与 UNet 类似的还有SegNet [51] ,SegNet 使用编码器子网络池化操作生成的索引实现了图像语义特征的融合。与FCN相比,这些改进的算法将网络结构改成了对称结构,丰富了解码器子网络输出的语义特征,有效提升了图像分割的精度。
虽然UNet和SegNet的提出并不是为了解决水下大坝裂缝图像分割问题,但它们的有效性已经取得了证明。Huyan Ju等人 [52] 基于UNet提出了一种改进的道路裂缝图像分割网络——CrackUNet,借助填充(Padding)操作,CrackUNet可以保持特征图(Feature Map)的尺寸不变。Cheng等人 [53] 基于UNet提出了一种像素级道路裂缝图像分割方案,通过引入基于距离变换的损失函数(Loss Function based on Distance Transform),该方案取得了较高的像素级精度(Pixel-Level Accuracy)。Li 等人 [54] 在SegNet 的基础上融入Dense Block,提出了一种新的混凝土结构裂缝图像检测算法。Zou等人 [55] 将多尺度特征跨层融合应用到了SegNet中,提出了一种名为DeepCrack的裂缝图像检测算法。
虽然上述方法可以有效提升地面裂缝图像的分割精度,但将它们直接应用到水下大坝裂缝图像分割任务中还存在一些问题。由于上述方法均属于有监督学习方法,其模型训练需要大量的有标签数据。鉴于水下大坝裂缝图像获取困难、数据集标注耗时费力,对水下大坝裂缝图像分割采用有监督学习是难以实现的。
水下大坝裂缝图像不同于地面裂缝图像,由于图像采集系统的限制,大部分水下图像质量较差 [56] 。水下大坝裂缝图像的对比度低,所含的信息量较少,且含有大量的随机噪声和黑点,这给裂缝图像的特征提取和分割带来了很大的困难 [57] 。常规的处理水下大坝裂缝图像的方法为:首先对原始图像进行图像增强,然后对增强后的图像进行分割。马金祥等人 [58] 提出了一种基于改进暗通道先验的水下大坝裂缝图像自适应增强算法,该算法可以有效抑制水下图像的噪声,增加图像的清晰度。陈文静 [59] 提出了一种基于导向滤波的 Retinex 算法,在进行水下图像滤波的同时,有效保留了图像的边缘信息。Chen等人 [60] 提出了一种新的水下大坝裂缝图像检测算法,该算法将2D的裂缝图像按像素强度(Pixel Intensity)转换为3D 的空间曲面,通过分析曲率特征来检测水下大坝裂缝图像。这些算法虽然在一定程度上改善了水下大坝裂缝图像的检测效果,但准确度仍然有待提高。
图像增强结合形态学方法是处理水下大坝裂缝图像分割问题的最常用方法之一,但这种方法的分割性能受图像增强效果的影响较大,且自适应性较差。因此,本书通过深度学习方法实现水下大坝裂缝图像分割,以提升算法的自适应性和分割精度。目前,开源的水下大坝裂缝图像数据集很少,而深度学习对数据集的要求很高,数据集不充足很可能导致模型训练不充分,最终导致水下大坝裂缝图像分割效果较差。因此,使用深度学习方法处理水下大坝裂缝图像分割任务,需要考虑样本不足的问题。
由于直接使用有监督学习方法处理各类学习任务常常会面临数据样本不充分的问题,所以研究人员提出了一些解决方案,例如半监督学习、小样本学习和迁移学习等。半监督学习 [61] 通过提取并学习具有相同分布的有标签数据和无标签数据的特征,可以在降低对样本标签数量需求的同时,保证模型的性能。小样本学习 [62] 通过将预训练模型在少量的带有标签的目标域数据上做进一步训练,可实现对目标域上特定任务的学习。迁移学习 [63] 是一种应用较为宽泛的学习方法,该方法将模型在源域上进行预训练时学习到的先验知识应用到目标域的学习任务中,可以有效缩短训练时长,并保证模型的精度。相较于半监督学习,迁移学习的优势是有标签的源域数据和无标签的目标域数据的分布可以不一致。迁移学习经过多年发展,已经衍生出多个分支。深度迁移学习在图像目标分类 [64] 、语义分割 [65] 等多个领域取得了令人满意的结果。