基于深度生成式对抗网络的蓝藻语义分割
2018-08-28陈丽芳毛一鸣
杨 朔,陈丽芳,石 瑀,毛一鸣
(江南大学数字媒体学院,江苏无锡214122)
(*通信作者电子邮箱404314023@qq.com)
0 引言
近年来,人口增长和工业的快速发展造成水体富营养化加剧,导致藻类大量繁殖并聚集成为水华,大量爆发的藻类破坏了水体的生态结构并威胁到人类的生存环境。研究表明,淡水藻类的大部分门类都能形成有害水华,尤其蓝藻的范围最广,对生态环境的危害最大。
现有的治藻方法包括:1)利用二氧化氯(ClO2)、臭氧(O3)、高锰酸钾(KMnO4)等氧化剂,通过将蓝藻氧化达到快速杀藻目的的化学法;2)利用微生物防治、水生植物抑制的生物法,以及人工打捞等物理法等。受限于治理速度和成本的要求,人工打捞仍是最有效、应用最广的方法。
人工打捞需要精准地定位蓝藻的爆发位置和爆发程度,一般通过视频监控平台实现。即监控人员通过视频监控平台寻找蓝藻爆发的地点,再根据爆发程度决定是否需要打捞。这一流程存在几个问题:一是信息的滞后性,面对众多的监控地点,监控人员很难在第一时间发现蓝藻爆发,从而耽误了打捞时机;二是很难进行定量分析,不同人对蓝藻爆发程度的理解不同,对需要打捞的状态的理解也不同,会造成决策的差异,并且打捞前后的变化也受到主观因素的影响,缺乏定量分析,很难描述打捞的效果,所以需要能够定性的描述,比如蓝藻覆盖率达到70%时需要打捞,打捞完成后覆盖率降低至20%,那么我们就可以定量地分析这次打捞的成果。
现有关于蓝藻图像的研究多为遥感图像。林怡等[1]利用遥感影像数据,分析蓝藻和其他典型地物影像光谱曲线及其特征,构建了归一化蓝藻指数(Normalized Difference Index of Cyanobacteria Bloom,NDI_CB),有效地从浑浊水体中提取蓝藻信息。陈云等[2]以2007年遥感图像为基础,以归一化差异植被指数(Normalized Difference Vegetation Index,NDVI)为测试变量,运用分类回归树(Classification And Regression Tree,CART)算法确定分割阈值,通过构建决策树的方法识别出蓝藻水华信息,取得了较好的效果。李亚春等[3]以太湖2003—2013年的遥感图像为基础,手工划分出蓝藻区域,并根据划分结果讨论了蓝藻爆发情况与温度的关系,据此计算出蓝藻爆发阶段的时间节点,为防控提供了依据。
利用遥感图像划分蓝藻有几个好处:一是遥感包含多方面的信息,RGB值、光的吸收波段以及热成像结果等信息可以很好地将蓝藻与水体区分开来;二是遥感的覆盖面积广,往往可以覆盖整个湖面,划分结果比较具有统计意义,便于分析蓝藻生长的规律;所以很多学者借助遥感信息分析了蓝藻生长与温度、适度、风向以及诸多其他因素的关系。但这些研究更适合探索蓝藻生长的规律,而不适合辅助人工打捞等物理法除藻。因为人工打捞需要精准的定位蓝藻爆发的位置,才能最大限度地减少人力和时间的浪费,而遥感信息更注重全局的表达,缺乏局部的细节定位;并且遥感信息的周期比较长,来源有限,显然无法满足打捞的时效性。
直接处理视频监控平台的蓝藻图像可以解决这些问题,即从监控视频中实时获取蓝藻图像,将图像中的蓝藻分割出来,然后计算蓝藻(像素点)的覆盖率或覆盖面积,为实时预警或决策提供定量指标。那么需要将蓝藻从图像中分割出来,由于蓝藻具有鲜明的颜色信息,本文首先尝试了基于RGB通道的阈值分割算法,分割结果不理想;然后又复现了FCNNet[4]和Deeplab[5]等基于深度神经网络(Deep Neural Network,DNN)的图像分割算法,分割准确率仍不够高。并且由于受到算法本身的限制,FCNNet的分割结果缺乏轮廓细节(使用了高倍双线性插值),不适合分割蓝藻这种轮廓曲折且多变的目标;Deeplab通过引入条件随机场(Conditional Random Field,CRF)提高了准确率并修饰了轮廓细节,但出现了大面积蓝藻错分的情况。对抗式生成网络(Generative Adversarial Net,GAN)[6]已经被证明可以有效地提升网络性能,故本文借助GAN的思想,设计了深度生成式对抗网络(Deep GAN,DGAN)模型用于生成蓝藻图像的精准分割结果。在3075张蓝藻图像数据集上的实验表明,DGAN在准确率、召回率以及F1分数(F1score,F1)等指标上比传统图像分割算法(阈值分割算法)有很大的提升,比FCNNet、Deeplab等基于DNN的分割算法的提升也均超过了4个百分点,并且分割结果更具轮廓细节,更少孔洞,也更少出现大面积错识漏识的情况。
1 相关工作
1.1 蓝藻分割的难点
传统的图像分割算法大致分为两个步骤:首先根据目标的特点设计特征,然后根据特征对像素点进行分类或聚类。这就要求目标有比较明显的特征信息,包括颜色特征、轮廓特征或者纹理特征等。比如阈值分割算法会根据目标的颜色特征找到RGB通道的合理阈值区间,然后根据这个区间进行逐像素点的分类。但蓝藻缺乏明显的特征信息,使得设计有效特征变得非常困难。
首先,蓝藻缺乏明显的颜色特征。蓝藻在不同的生长阶段具有不同的颜色,生长期的蓝藻呈青绿色,但成熟期的蓝藻会偏黄色;并且蓝藻的颜色与浓度有关,一般来说,浓度大时颜色偏深,浓度小时颜色偏浅。其次,蓝藻缺乏明显的轮廓特征:蓝藻不具有特定的轮廓,无法像人体或汽车那样靠轮廓分割。最后,水中混杂着大量的水草,岸边会出现树的倒影,这些都给分割增加了难度。
蓝藻存在的上述问题使得很难设计出有效的特征,传统分割算法的结果不好。神经网络由于可以自主学习特征,是蓝藻分割问题更好的解决方案。目前主流的深度神经网络分割算法是FCNNet和Deeplab算法。
1.2 深度神经网络
1.2.1 网络结构
深度神经网络的兴起得益于卷积神经网络(Convolutional Neural Network,CNN)在图像分类上的高准确率。卷积神经网络主要是由多层特征提取阶段和分类器组成的单一尺度结构,即输入经过逐层提取特征学习到更高层的特征后输入到分类器中进行分类[7]。特征提取阶段主要包括卷积层和下采样层,之后会连接一到两层的全连接层。以Lecun等[8]提出的Lenet-5网络为例,如图1所示,其输入像素大小为32×32的图像样本,经过卷积核个数分别为6和16的两层卷积层以及两层下采样层后,提取到16个像素大小为5×5的特征,然后通过全连阶层输出分类结果。
CNN具有非常重要的两个性质,即局部感受野和权值共享。局部感受野指特征提取过程中的某一神经元只与局部关联,这一局部范围称为感受野;权值共享是由于图像高维特征带来的大量参数的产物,用于减少学习参数,其在CNN模型中最直接的应用是卷积层和下采样层。
图1 Lenet的网络结构Fig.1 Lenet network structure
1.2.2 卷积层
卷积层是卷积神经网络的核心组成部分,其主要目的是学习和提取有效特征,其具有局部连接和权值共享特征,这也是CNN可以处理大像素尺寸图像样本的原因;此外,其提取特征的方式还具有平移和旋转不变性。Lenet中的C1和C3层为卷积层,其计算形式可表示为:
i作表示卷积核;是偏置项。运算方式如图2所示。
图2 卷积层操作Fig.2 Convolution layer operation
1.2.3 下采样层
下采样层又称池化层(Pool),Lenet中的S2和S4层为下采样层,其主要目的是通过降低分辨率来减少训练参数,并且获得更抽象的特征以提高网络的鲁棒性。其操作方式有多种,最常见的有均值池化和最大值池化,这里以均值池化为例表示其计算形式:
1.2.4 全连接层
如果把卷积层和下采样层当作特征提取阶段,那么全连接层在CNN中起到分类器的作用。即将前面学习得到的“分布式特征表示”映射到样本标记空间。全连接层会与前一层的所有神经元连接,最后一层全连接层的神经元个数等于类别数,即会输出一个长度为类别数的向量,每个值表示将目标图像分类为该类别的得分,最高值即为该图像的分类结果。
图3 池化层操作Fig.3 Pool layer operation
之后经过学者的不断研究与发展,许多更深的、准确率更高的网络被设计出来,包括 VGGNet[9]和 GoogLeNet[10]等都取得了非常好的分类效果。许多网络通过加入特定功能的层的方式解决了CNN存在的几个问题,比如Srivastava等[11]加入dropout层通过随机使某些神经元失效的方式防止过拟合,VGGNet[9]使用更小的卷积核以减少训练参数和提高训练速度,Ioffe等[12]在每层数据输出后加入局部归一化层(Batch Normalization,BN)使得分类曲面可以更好地落到数据中心从而防止陷入局部最优,He等[13]通过加入残差以解决梯度消失问题等,但这些研究仍局限在图像分类领域。
1.3 全卷积神经网络完成语义分割
语义分割指对图像进行语义级别的分割,即不仅要分割出前景和背景,还要明确分割出的是什么目标,其本质上是对像素点的分类。最初CNN只能用于图像分类,其进行图像分割时采用逐像素点分类的方式,即以每个像素点为中心,以固定长度(像素点数量)截取图像输入CNN进行分类,图像的分类结果即为该像素点的分类结果,待所有的像素点分类完成后,也就获得了分割结果。这个做法产生了非常严重的冗余问题,相邻像素点分类时截取的图像存在大量的重叠,重叠区域进行了多次特征提取,导致分割速度非常慢。如图4所示,对像素点1和2分类存在大量的重叠区域。
Shelhamer等[4]设计了一个新的网络解决了冗余问题,完成了端到端的图像语义分割,这个网络称为全卷积神经网络(Fully Convolutional neural Network,FCN)。由于在后续的发展中,FCN逐渐发展成一种网络结构的统称,即形似文献[4]中的网络结构的神经网络都可以被称为是FCN。本文为了加以区分,将文献[4]中使用的网络结构称为FCNNet,并作为本文的对比算法。
图5描述了FCNNet作图像分割的过程。网络分为两个阶段:第一阶段与传统CNN一致,经过不断的卷积和下采样操作获得了小尺寸的特征,其不同于CNN的地方在于其获得特征后不输入全连接层,而是用1×1的卷积核模拟了全连接层的实现,这样网络可以输入不同尺寸的图像,经过模拟的全连接层后,获得了n×n×c的分类结果(传统CNN的输出结果是1×1×c,n表示像素点尺寸,受输入图像的大小影响,c表示类别数),n×n中每个像素点的分类结果即为该像素点对应的感受野图像的分类结果,这样一次就完成了对所有像素点的分类,解决了CNN作语义分割时的冗余问题。由于第一阶段进行了大量的卷积和下采样操作,其分割结果的像素尺寸远小于输入图像,称之为热图。第二阶段通过上采样操作(本文中使用的upsampled为双线性差值),使热图恢复到与原图相同的像素尺寸,也就获得了分割结果。
1.4 全卷积神经网络分割蓝藻产生的问题
FCNNet实现了利用神经网络对图像语义分割,然而它存在几个问题:一是由于其模型的设计基于VGG16网络,而VGG16是用于作图像分类的,VGG16为了减少最后全连接层的参数,使用多层卷积、池化操作将特征图的尺寸减小到很小的尺寸,这也就丢失掉了很多信息。但FCNNet需要将这些特征上采样回原图大小的分割结果,这是非常困难的,故FCNNet为了能获得较大尺寸的特征图,在特征提取操作前会对特征进行100个像素点填充,这无疑加大了计算量。二是FCNNet最后使用了高倍上采样(双线性插值,FCNNet提供了三种版本:单层8倍、单层16倍和单层32倍上采样),导致其分割结果不精细,缺乏轮廓细节。并且每个像素点的分类过程独立于周围像素点,在进行高倍上采样后容易产生孔洞。这些设计在分割人体、车辆等具有明显轮廓的目标时影响不大,但蓝藻没有固定的轮廓,且轮廓不平滑,直接使用高倍双线性插值必然导致分割结果不精细,从而影响了准确率。另外,蓝藻中存在许多局部区域的浓度明显低于周围,这容易使FCNNet将该区域错分为非蓝藻,从而在高倍上采样后产生大量孔洞。
图4 CNN作语义分割Fig.4 CNN for semantic segmentation
图5 FCNNet结构Fig.5 FCNNet structure
Deeplab[5]的目的是提高 FCNNet的分割准确率,其在FCNNet后加入了条件随机场用于修正分割结果,提升了分割精度,并且获得了更加细致的轮廓(CRF引入了空间位置关系,可以对分割边缘进行修正)。另外还设计了孔洞卷积使特征提取过程中不至于获得尺寸太小的特征,不需要像FCNNet那样作大尺寸的像素填充,同时有效地保证了感受野。Deeplab曾在2016年在PASCAL VOC Challenge中获得了最高的图像分割准确率,是现有的最好分割算法之一,具体操作可参考文献[12]。但CRF对像素点分类时过度借助周围像素点的分类结果,导致其无法正确分割出小面积的目标,并且其容易出现大面积的分割错误(任意像素点分类错误都会影响到周围像素点的最终分类结果,当蓝藻内的孔洞过多时,会导致Deeplab将整片区域都错分为非蓝藻)。
1.5 生成式对抗网络
生成式对抗网络由 Goodfellow等[6]在2014年提出,解决了非监督学习中的一个著名问题:给定一批样本,通过训练使得网络能够生成与这批样本类似的新样本。
GAN的思想来源于博弈论,其提出了一种思想,即设计两个不同的网络,其中一个网络作为生成网络(Generator,G),用于学习真实的数据分布,从而可以生成具有特定意义的目标图像;另一个网络作为判别网络(Discriminator,D)用于判定输入的图像是生成网络生成的图像(用Fake表示)还是实际采集的图像(用Label表示)。这样两个网络就产生了对抗式的训练。判别网络是一个二分类网络:如果输入图像是真实图像(Label),其输出为1;如果是生成网络生成的目标图像(Fake),其输出为0。在训练中,生成网络不断地调整参数使其生成的Fake尽可能地与真实分割结果相似,从而导致判别网络无法正确地区分Fake和Label,而判别网络的任务就很明确,尽可能地区分出Fake和Label。这样,在经过长时间的训练后,GAN最终达到了纳什均衡的状态,生成网络生成的结果可以达到以假乱真的效果,我们就认为网络完成了训练。生成网络生成的目标图像(比如分割结果、填色结果等)就可以作为正确的结果使用。
2 深度生成式对抗网络的设计
由于本文构建的G和D均为深度神经网络,故本文将构建的对抗网络结构称为深度生成式对抗网络。
2.1 DGAN 结构设计
DGAN由生成网络(G)和判别网络(D)构成,G和D在对抗式训练中得到增强。数据集中每张蓝藻图像(Image)都有一张手工标注的分割结果(Label),这两张图像组成的样本对称为正样本对。对应每张Image输入生成网络(G)会生成一张分割结果(Fake),Image与Fake组成的样本对称为负样本对。正负样本对输入D完成判别,则DGAN的构成可以描述为图6的形式。
G训练的目的是捕捉样本分布,使通过Image生成的Fake尽可能与Label相似,从而使D无法正确地区分正负样本。D训练的目的即正确地区分出正负样本。由此G和D便形成了对抗式的训练,可以构建如式(3)的损失函数:
D的训练过程是最大化准确率,即最小化损失函数的过程,其对正样本的输出D(Image,Label)趋向1,对负样本的输出D(Image,Fake)趋向0,这样D的整体损失就会趋向0,而G训练的目的是最小化D的准确率,即使D(Image,Fake)趋向1。
图6 蓝藻分割的DGAN结构Fig.6 DGAN structure for blue-green algae segmentation
为鼓励G生成的分割结果尽可能地与真实分割结果相同,本文在损失函数中加入L1形式的正则项:
则最终的损失函数如式(5):
G和D会进行对抗式的训练,首先固定G训练D,然后固定D训练G,再继续循环训练,G的D的能力都得到增强,最终G生成的分割结果能够以假乱真,此时训练就结束了,当有新的图像输入时,G生成的Fake就可以作为正确的蓝藻分割结果使用。
2.2 生成网络设计
生成网络的目的是捕捉样本分布的规律,生成具有特定意义的目标图像。在蓝藻问题中即输入包含蓝藻的图像,生成蓝藻区域和非蓝藻区域具有明确划分的图像。本文仿照U-Net网络[14]设计了一个全卷积神经网络用于生成分割结果,网络的构造如图7所示。
网络主要分为两部分:
第一部分为Conv1~Conv6,作用是生成较小尺寸的特征图像,每层卷积核的尺寸均为4×4,步长为2,不同的是卷积核的个数逐渐增多,由64个逐渐增加到256个。为了防止梯度消失对训练结果造成的影响,本文选用了Relu作为激活函数,同时在每个激活函数后面加入局部归一化层来提高训练速度和避免局部最优。为了防止最终获得的特征像素尺寸太小,本文在每个卷积层前会对输入图像添加2个像素点的填充,这样在经过6个卷积层操作后,网络获得了256个大小为原图1/64的特征。
第二部分为Deconv6~Deconv1,通过反卷积操作使前一阶段获得的特征逐渐恢复到原图大小,作为生成分割结果。同样在Deconv(反卷积)操作间加入Relu和BN,注意最后一层Deconv的神经元个数等于类别数(蓝藻分割问题为2,蓝藻区域或非蓝藻区域),取最大值即为像素点的分类结果。
本文按照FCN的思想设计了生成网络,但在网络的细节方面与FCNNet并不完全一致,而是借鉴了U-Net网络[14]的部分思路。主要区别是将FCNNet的单层高倍上采样设计为多层低倍上采样(如FCNNet-32s中进行了单层32倍上采样,本文将其分解成5层2倍上采样,即网络的第二部分),并更改了上采样的方式,用U-Net中可学习的反卷积层替代了FCNNet中简单的双线性插值,这样做是为了得到了更细致、更具轮廓细节的分割结果,并减少孔洞的出现。
Deeplab通过在FCNNet后衔接CRF的方式提高了分割准确率,但也因此带来了无法分割小目标、容易大面积分割错误和增加分割时间的问题,不适合用于蓝藻分割。本文舍弃了这种方式,借助GAN思想设计DGAN提高分割准确率。
图7 生成网络的网络结构Fig.7 Network structure of generator
由于本文采用了4×4的卷积核,且卷积操作的滑动步长为2个像素点,故本文首先将摄像机抓取的蓝藻图像(1920×1080和1280×720分辨率)处理为512×512的像素尺寸,再将其输入生成网络。同样的,生成的分割结果的像素尺寸也是512×512,需用双线性插值的方式将其还原为原图尺寸。
2.3 判别网络设计
相对生成网络,判别网络较为简单,判别网络的目的是区分正负样本对。在蓝藻问题中即判断输入的样本对属于生成网络的生成结果或真实分割结果,是一个二分类问题。网络的构造如图8所示。
判别网络的本质是个分类器,其与生成网络的第一部分相似,通过不断的卷积操作来获得更小尺寸的特征,最后加一个Sigmod函数将输出数据归一化到0和1,然后根据阈值输 出0或1作为判别结果。
图8 判别网络的网络结构Fig.8 Network structure of discriminator
3 实验结果与分析
3.1 数据集与评价指标
3.1.1 数据集
为了提高分割结果的准确率,借助视频平台抓取了3075张蓝藻图像制作了数据集。数据集分为3部分,包括训练集、验证集和测试集。训练集用于训练网络模型,是最主要的组成部分,占数据集的80%,共2 460张;验证集用于训练阶段测试网络当前的准确率,以监督网络的训练过程并决定是否要终止训练,占10%,共307张。测试集用于对训练结果进行评估,占10%,共308张。数据集中的每一张图像都对应有一张手工标注的Label,图像中的白色区域对应蓝藻部分,黑色区域对应非蓝藻部分。
图9 蓝藻图像与手工标注的分割结果Fig.9 Segmentation results of blue-green alga image and manual annotation
3.1.2 评价指标
图像语义分割即对图像进行像素级的分类。本文选取的评价指标借鉴自文件检索,即以每个像素点为基本单位,计算像素点分类结果的准确率、召回率和F1分数(F1),这也是大多数图像分割算法引用的指标。按前文表述,每张蓝藻图像对应一张真值分割结果(Label),以及一张G生成的分割结果(Fake),若以数字1表示该像素点为蓝藻,数字0表示为非蓝藻,则任意像素点必属于图10中四种情况之一。
图10 像素点所属类别示意图Fig.10 Schematic diagram of category of pixels
精确率(Precision,P)如式(6)所示,表示分割结果中被正确分类为蓝藻的像素点数占所有被分类为蓝藻的像素点数的比例:
召回率(Recall,R)如式(7)所示,表示分割结果中被正确分类为蓝藻的像素点数占总蓝藻像素点数的比例,即有多少蓝藻像素点被找到并正确分类:
由于精确率和召回率是互相影响的,理想情况下肯定是希望两者都高,但是一般情况下精确率高、召回率就低,精确率低、召回率就高。为更好地比较网络性能,引入F1:
其中:F1是精确率和召回率的调和均值,兼顾了精确率和召回率的查全和查准的作用,相当于精确率和召回率的综合评价指标。
3.2 深度生成式对抗网络的训练
本文基于谷歌公司的TensorFlow深度学习框架实现了第2章构造的DGAN。
L1(G)表明了生成样本Fake与真实样本Label的区别程度,L1(G)越低表示Fake与Label越相似。深度生成式对抗网络的训练也就是最小化L1(G)的过程,训练过程遵循以下策略(注意G和D共同构成DGAN,固定G(D)指BP训练时G(D)仅进行前向传播,不进行后向传播,也就是不会更新参数):
1)固定G,用Label训练D,训练n个epoch(训练样本集的每个样本训练一次);
2)用G生成Fake,用Fake训练D,训练n个epoch;
3)固定D,用D的输出作为图像的Label,用D的损失训练 G,训练n个epoch;
4)重复1)~3),直到G可以生成以假乱真的目标图像。
本文选取 Adam(Adaptive Moment Estimation)[15]的梯度下降方式来寻求最优解,参照文中结论和神经网络的取值方法,初始学习率(Learning Rate,LR)取值0.0002,动量项取值0.5。在初始赋值方面(即待训练的参数赋初始值),卷积层和反卷积层的赋值满足均值为0、标准差为0.01的正态分布。
由摄像头采集到的蓝藻图像的像素尺寸为1 920×1 080和1080×720,但DGAN中卷积层的卷积核的长宽一致,且步长为2,即要求输入特征的像素尺寸可以被2整除,故蓝藻图像在输入网络前会被预处理为像素尺寸为512×512的图像,再经过减均值等操作获得满足网络输入要求的图像样本。受到图形处理器(Graphics Processing Unit,GPU)显存的限制,每次输入一张蓝藻图像,即batch设为1,在经过200个epoch的训练后,网络的L1(G)如图11所示。图11中纵坐标为L1(G)的计算结果,值越低表示生成的Fake与Label越相似。
由式(4)可知,L1(G)描述了分割结果与真实结果的差距。由于蓝藻分割是二分类问题(1表示蓝藻,0表示非蓝藻),则当所有的像素点分类错误时L1(G)=1,因此L1(G)可以被理解为像素点的分类错误率。由图11可知,L1(G)在经过训练后逐渐稳定并小于0.1,说明整体错误率已经小于10%,生成的分割结果与真实分割结果已经非常相似,故本文认为此次的训练结果是有效的。
3.3 结果比较与分析
基于迭代的阈值分割算法是非常经典的传统图像分割算法;FCNNet作为深度神经网络完成图像语义分割的开山之作,具有里程碑式的意义(现有的绝大多数神经网络分割算法都是基于FCN的结构,Deeplab是,本文设计的DGAN中的生成网络G也是,所以作为对比算法);Deeplab在2016年获得过PASCAL VOC Challenge在语义分割领域的最好成绩,是现有最好的语义分割算法之一(Deeplab可以被理解为FCNNet的加强版)。本文设计的DGAN可以被理解为结合了GAN思想的FCN,故本文选取这3种算法作为对比算法。
本文将上述3种对比算法应用到蓝藻分割领域,本文设计的DGAN与对比算法在测试集上的结果比较如表1所示。
图11 训练过程中的L1(G)Fig.11 L1(G)in the course of training
表1 不同算法的评价指标比较Tab.1 Evaluation index comparison of different algorithms
从表1中可以看出,在精确率、召回率和F1上,本文设计的DGAN均大幅领先于基于迭代的阈值分割算法。相比FCNNet和Deeplab,DGAN的精确率分别提升了6.3个百分点和3.89个百分点,召回率分别提升了9.49个百分点和4.78个百分点,F1分别提升了0.0793和0.0433。提升效果非常明显,取得了更好的分割结果。
由于蓝藻监控需要实时性,即需要尽可能快地分割出蓝藻,故分割速度也是一个重要指标。本文实验所用机器配置为英特尔 i7CPU,64 GB内存以及 Nvidia GTX TITAN X显卡(12 GB显存),基于TensorFlow平台复现了以上算法,并使用GPU加速(cuda版本8.0),各算法分割速度的比较如表2所示(分割速度受计算机性能影响,若使用性能较低的显卡或只使用CPU会使分割速度变慢,但各算法所需时间的比例不变)。
表2 不同算法分割速度比较Tab.2 Segmentation speed comparison of different algorithms
由表2可知,由于FCNNet的网络结构最简单(没有反卷积层),故其处理速度最快,Deeplab在FCNNet的基础上加入了CRF进行二次判断,导致其分割速度慢了很多。DGAN的分割速度略慢于FCNNet,远快于Deeplab,但本文的分割结果在各项指标上均优于FCNNet,提升了超过6个百分点。综合来看,本文算法更具有实际优势。
3.4 细节比较与分析
本文设计的DGAN除了在精确率、召回率和F1等指标上有所提升外,还避免了FCNNet和Deeplab由于自身网络结构造成的缺乏轮廓细节、存在大量孔洞和容易大面积错识、漏识的问题。本文选取了部分测试集上的分割结果,从分割细节上与3.3节描述的三种对比算法进行比较与分析。
比较图12中不同算法的分割结果:基于迭代的阈值分割算法在3幅图中均得到了最差的分割结果,其只是简单地根据图像的颜色信息作分割,不适合蓝藻这种颜色随浓度和时间变化的目标(浓度越大,颜色越深;生长期的蓝藻呈绿色,成熟后开始偏黄;阈值分割算法为了适应这些问题,迭代得到的阈值范围很大,导致其无法获得准确的分割结果)。
图12 不同算法分割结果的比较Fig.12 Segmentation result comparison of different algorithms
相比阈值分割算法,基于深度神经网络的FCNNet和Deeplab明显取得了更好的分割结果,但也存在各自的问题:从图12中的第一张图中可以看出FCNNet的分割结果缺乏轮廓细节,Deeplab存在局部区域的错分问题;第二张图中FCNNet的分割结果存在大量的孔洞,而Deeplab的孔洞明显较少,取得了较好的分割结果;第三张图中FCNNet的分割结果较好,但Deeplab出现了大面积的错分,并且在3张图中Deeplab均未有效分割出时间戳和地址戳。
本文借助GAN思想设计的DGAN很好地解决了上述几个问题:在提升精确率、召回率和F1指标的基础上,有效地避免了FCNNet缺乏轮廓细节,以及存在大量孔洞的问题,同时避免了Deeplab由于借助周围像素点而导致无法对小面积目标正确分割的问题。从图12可以看出,DGAN的分割结果具有更清晰的轮廓细节,同时很好地分割出了时间戳和地址戳这些影响因素,没有出现大面积的分割错误,得到了更准确、更稳定的分割结果,尤其适合于分割蓝藻这样的没有固定轮廓并且浓度分布不均匀(导致内部颜色差异比较大)的目标。
4 结语
本文基于生成式对抗网络的思想设计了一个新的网络结构完成了基于RGB图像的蓝藻语义分割,称为深度生成式对抗网络(DGAN)。相比阈值分割算法与FCNNet、Deeplab等其他基于深度神经网络的图像分割算法,DGAN获得了更加精准的分割结果,在准确率、召回率及F1等指标上均有一定程度的提升,分割结果具有更清晰的轮廓感和细节表现,更少孔洞,更不容易出现大面积分割错误等优点。
碍于蓝藻灾情监控问题对分割速度的要求,也为了更加公平地与FCNNet(16层)和Deeplab(16层FCNNet+CRF)作比较,本文构建的DGAN的深度也大致相同,其中生成网络(G)12层,判别网络(D)5层(一定范围内,深度神经网络的准确率与层数呈正相关,分割速度与层数呈负相关)。残差网络将网络深度扩展到152层,并取得了更高的准确率,以残差网络为基础的全卷积神经网络也取得了比FCNNet更高的分割准确率。在后续的研究中,将使用更深的基础网络如GooLenet[10](22 层)和 ResNet[13](152 层)等构建 DGAN,以探究网络深度对DGAN的影响程度。