版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第页1绪论1.1课题背景深度学习普及之后,计算机视觉和机器学习得到了飞速发展。场景理解的重要性越来越突出,图像识别问题在现代化的今天显得尤为重要,是机器取代人工劳作的关键,而图像的语义分割是做到图像识别的基础。好的图像语义分割能为图像识别带来方便。图像语义分割指的是将同一像素值的像素标注为同一颜色从像素层面对图像进行区域划分,实现前景后景分离。图像语义分割在现代化的今天应用十分广泛,例如汽车自动轨道识别、无人机自动着陆、各种各样的导航系统、现实增强、虚拟显示等。1.2图像语义分割研究现状图像语义分割的发展主要分为两个阶段,深度学习普及之前和深度学习普及之后。在深度学习还没有普及之前,图像语义分割的实现方法多种多样,经典的实现方式有NormalizedCut和grabcut方法。传统的图划分考虑了图、节点、边即G=(V,E),常利用的算法是最小割算法,但是最小割算法仅仅考虑到了局部信息,当点分散且数据量少时使得划分结果离散。而NormalizedCut会从整体需要划分的图和类(如将一张图分为A类和B类)进行考虑即assoc(A,V)、assoc(B,V),达到舍弃离散点的。grabcut方法是一种迭代式的图划分图像语义分割方法,将前景和背景进行框选,再利用髙斯混合模型建模,然后利用能量方程计算高斯模型的最有值,从而实现图像的语义分割,但是在刻画的过程中会出现目标切割过多的情况,所以在得到自动切割的结果后还需要再次手动标明前景,不能拿完全实现自动化。传统的图像分割方法深度不深,复杂度低,对硬件要求不高,但是准确度不高。在深度学习普及之后,深度学习进入到了全新的发展阶段。深度学习,利用一层又一层的函数去拟合给出的数据,如同神经网络一样一层层延申,然后收敛到数据。相比于传统的图像语义分割方法,深度学习对硬件的要求更高,复杂度更高,但是经过深度学习得到的图像语义分割结果更加精确,更加容易识别,更加贴合标签。利用深度学习实现图像语义分割的模型有FCN、U-Net、PSPNet等。同时某些深度网络也已经成为了图像语义分割的标准,比如AlexNet、VGG-16和GoogLeNet。在定义分割模型的时候,常常利用这些深度网络辅助进行图像的语义分割,提升图像语义分割效果。AlexNet以作者名字命名,是首创的卷积神经网络,并且在2012年中的ImageNet竞赛中取得了第一的。相比于传统网络相比:AlexNet具有更深的网络结构;利用层叠卷积层进行特征提取;利用Dropout和数据增强抑制过拟合;为防止梯度饱和而收敛慢AlexNet利用线性输出函数rule作激活函数。VGG-16由牛津大学推出的深度神经网络,通过反复堆叠3*3的卷积核和2*2的池化层构建了深度居于16~19之间的卷积神经网络。因为VGG-16的参数较少,同时各个层级利用非线性函数进行激活,常利用VGG-16网络创建多输出模型,用来获取中间层输出。GoogLeNet是Google基于inception模块推出的深度神经网络模型。这个模型以其复杂度著称,由22层以及inception模块组成。inception是基于神经网络深度加深的同时减少参数的数量而提出的多个卷积和池化操作封装模块。1.3实现步骤本论文主要利用tensorflow框架和TupyterNotebook实现软件编写,利用的模型有U-Net网络,FCN网络,LinkNet网络,实现对城市街景和猫狗数据集的标签划分,然后在U-Net网络中添加ResNet残差结构,提升分割效果,使得分割效果更加贴合标签。语义分割的实现步骤主要是通过对一个个的功能模块封装然后在将各个模块进行拼合实现的。涉及到的模块有预处理、网络模型的实现、评测指标、模型训练。预处理模块用来获取数据集然后处理数据集,网络模型的实现模块由一个个实现过程函数组成。评测指标模块设置语义分割评价标准,创建评测指标函数,用来判断语义分割效果。模型训练主要是用获取预测结果,获取并优化梯度,然后调用评测指标函数记录指标。2图像语义分割的相关模型2.1U-Net网络U-Net网络主要分为两部分,特征提取和上采样反卷积。特征提取主要是利用下采样和卷积获取图像的高维特征,上采样反卷积进行图像大小还原,同时将图像的输出空间维数变为分类数。U-Net网络的一个很大特点,在每一层上采样反卷积的时候都会连接(concat)输入的每一层下采样特征提取后的卷积输出。出现这种特点的原因便是利用的concat连接。concat连接和add连接的区别便是concat会进行横向或者纵向于空间上叠加,而add连接仅仅只是在像素上的叠加。U-Net网络在少量的数据下也能得到不错的效果。2.2FCN网络FCN是端到端的网络训练,其本质上是一个分类网络和上采样的结合,在结构上拥有跳阶结构即会结合前面的信息一起进行上采样。首先对图像进行一层一层的下采样进行特征提取,然后结合前面的信息一起上采样。其结合前面的信息方式是直接像素相加。像素上的直接相加会忽略了像素的空间信息。因此利用FCN实现的图像语义分割网络存在分割结果结构不够精细,空间一致性不足的缺点。2.3LinkNetLinNet网络采用的是编码器和解码器结构,其实现过程是对下采样后的图像进行多次“编码”,然后同样次数的“解码”。LinkNet网络编码器由两次ResNet残差结构组成,解码器由反卷积构成。因为LinkNet网络使用了编码器和解码器结构减少了下采样的次数,使其解决了在保证图像分割精度的条件下图像分割的速率过慢的问题,同时绕开了在提升效率后图像像素空间信息上的缺失问题。2.4ResNet网络微软提出的ResNet模型协助解决语义分割深度过深而出现梯度消失问题,其核心思想便是下一层可以从输入中学习新的信息。、2图像语义分割平台Tensorflow框架是Goole一款开源框架,是基于“数据流图”进行数据计算的编程模型。tensorflow框架以数据进行驱动,其提升了并行计算的能力,因为其数据流图的特点常用于神经网络和机器学习领域。利用tensorflow进行软件开发的神经网络,以张量表示数据,以数据流图搭建网络结构,利用session进行数据计算,优化权重参数,迭代得到模型。2图像语义分割的实现图像分割的实现过程主要是进行模块封装,总共有四个模块。图像预处理模块,图像分割网络实现模块,训练结果收集模块,模型训练模块。图像预处理模块的作用是对图像数据集进行图像增强和归一化处理。图像分割实现网络模块是对分割网络模型的实现过程的封装。模型训练模块。训练结果收集模块中有对tensorflow中IoU函数的重写,利用元组对评测指标IoU、损失值、正确率的存储以及利用绘图函数进行结果预测。模型训练模块中调用模型进行预测,获取损失值,根据损失值和所有可训练参数计算梯度,通过优化器对梯度优化,最后进行指标记录。2.1图像预处理模块2.1.1图像和标签的路径读取利用glob函数获取测试集和训练集中的图像路径和标签路径。为了防止获取的图像路径和标签路径乱序导致预测结果不理想,利用split函数截取路径名,获取路径编号,然后利用sort函数按照编号排序,使得图像路径和标签路径一一对应。为了防止后面的模型训练和预测结果偏向于某一类,利用random随机函数对图像路径进行乱序。根据路径读取图像和标签,彩色图像的读取需要解码所以利用read_file函数和decode_png函数读取彩色图像,利用read_file函数读取标签。对图像和标签过程进行函数封装,在加载图像和标签的过程中根据路径读取图像和标签。2.1.2数据增强为了防止过拟合和在训练途中数据的梯度消失导致结果不理想需要利用数据增强增加训练集中的图像和标签的数量。常见的数据增强的方法有随机翻转、随机裁剪、尺度变换、平移变换、旋转变换、添加髙斯噪声等。本论文利用随机翻转和随机裁剪进行数据增强。因为测试集中的图像和标签过大,在训练过程中可能会导致训练过程中显存溢出,并且如果对过大的图像和标签进行裁剪那么保留的关键信息将会很少,需要对输入模型的图像和标签进行缩放,将图像大小压缩为256*256。不过不能直接将图像缩放为256*256,因为随机裁剪图像也会缩放图像的大小。所以首先将图像缩放为280*280,为了防止随机裁剪过程中裁剪的位置不一致影响预测结果,需要利用concat函数将图像和标签在空间上进行叠加再根据随机数判断是否裁剪,然后再将图像和标签缩放为256*256,然后利用高维切片获取随即裁剪后的图像和标签。对随机裁剪过程进行函数封装,在加载图像和标签的过程中对图像和标签进行随机裁剪。2.1.3彩色图像预处理为了提高精度和使得训练网络的收敛性加快,需要对彩色图像做预处理,彩色图像取值范围[-1,1]。因为标签是需要的分类数和彩色图像的分类标准所以不需要对标签做归一化处理。对归一化过程进行函数封装,在加载图像和标签的过程中对图像做归一化处理。2.1.4图像和标签的数据加载封装图像和标签加载过程,在此模块中调用读取图像和标签的函数封装。对读取的图像和标签使用随机裁剪。设置随机数,根据随机数判断是否调用flip_left_right函数进行图像和标签的随机翻转。2.1.5参数设置根据电脑自身显存设置BUFFER_SIZE和BCTCH_SIZE。BUFFER_SIZE是在缓存中图像的训练个数,控制缓存大小,在缓存中进行迭代训练。同时BUFFER_SIZE也是一个乱序缓冲区,它可以使得在训练的中获取足够的信息量。如果设置的BUFFER_SIZE超过显存缓存那么在训练中途会报错。BCTCH_SIZE是图像每一次在缓存中进行替换的图像数量。设置auto值,其作用是让电脑根据cpu的核个数自动选择读取线程的个数。然后进行图像加载和管道输入。开始开始读取图像和标签的路径路径读取读取图像和标签对图像和标签做图像增强对图像和标签做归一化处理返回图像和标签结束2.2图像分割网络实现模块2.2.1U-Net网络的实现U-Net网络的实现主要是通过自定义下采样层和上采样层,封装下采样层DownSample和上采样层UpSample,然后在U-Net模型的定义中调用封装的下采样层和封装的上采样层实现的。下采样层由卷积、卷积、下采样组成。DownSample初始化,设置第一层卷积和第二层卷积参数并且第一层和第二层卷积参数相同,卷积需要输入的参数由卷积和、卷积内核大小、填充方式。卷积和参数需要在调用函数的时候进行设置。卷积内核大小默认设置为3。因为输入和输出的图像需要大小一致,设置填充方式为same。对封装的下采样层创建前向传播过程,输入参数一个是图像,一个boolean值变量。因为U-Net网络第一层不需要进行下采样,设置一个boolean值变量的作用是通过boolean值判断是否进行下采样,可以进行代码复用。函数主体通过boolean值判断是否对图像进行下采样,对图像做第一层卷积,卷积激活,对图像做第二层卷积卷积激活。卷积卷积卷积下采样上采样层由卷积、卷积、上采样组成。UpSample初始化,卷积参数的设置和下采样中的卷积参数一致,反卷积中的参数有输出空间维数、卷积内核、填充方式、卷积沿高度和宽度的步长膨胀宽度stride。输出空间维数需要同下采样层的空间维数一致,因为上采样层和下采样层需要进行concat。卷积内核为3。填充方式same。因为图像需要放大,设置stride值为2。对封装的上采样层创建前向传播过程,输入参数是图像。函数主体是对图像做第一层卷积卷积激活,对图像做第二层卷积卷积激活,上采样。卷积卷积卷积反卷积Net模型的定义由DownSample和UpSample拼接而成。DownSample和UpSample过程对应,利用concat进行拼接。2.2.2FCN网络的实现由于FCN具有跳阶结构,上采样层的信息需要同下采样信息在像素上直接相加获取输出。利用预训练网络VGG16获取下采样信息,因为预训练网络结构同FCN网络没有进行上采样的网络结构一致。如何获取中间层输出?利用get_layer(层名).output方法获取中间层,通过中间层创建一个新的子模型,然后调用这个子模型获取中间层输出,用于跳阶结构。利用函数API创建子模型,inputs就是预训练网络,outputs就是需要的中间层。这个子模型会继承预训练网络结构。因为存在多个下采样层,需要获得多个下采样输出,所以需要创建多输出模型。将各层层名保存在列表中,通过列表表达式从层名列表中获得各个中间层。和创建单输出模型类似创建多输出模型,不过outputs为中间层列表。不过由于多输出模型继承预训练网络,当前模型不能训练。在每一次进行调节结构之前需要对获取的中间层输出多进行一次卷积,这样做的目的是为了进行特征提取,然后再进行add操作。2.2.3LinkNet网络的实现LinkNet网络类似于U-Net网络,主要是通过卷积和反卷积实现。考虑到代码的复用性,定义卷积块和反卷积块,然后封装编码块和解码块,最后调用编码块和解码块,进行模块“组装”形成LinkNet网络。卷积块主要包括卷积层、bn层、激活层。在卷积层中定义卷积和个数。卷积核kernel_size。卷积沿高度和宽度的步长膨胀宽度strides,strides默认参数为1,经历一次卷积后,图像大小不发生改变。填充方式默认为same填充。bn层,对输入数据进行归一化处理,防止在训练途中数据发生改变导致梯度消失或者梯度爆炸。激活层,卷积激活,不激活卷积无效。对输入图像进行卷积特征提取,然后对图像做归一化批处理,最后激活卷积。反卷积块的封装和卷积块类似。不过反卷积块是进行的反卷积,strides的默认参数为2,即每经历一次反卷积,图像和标签放大一次。因为模型的最后输出是一个反卷积,所以不需要对反卷积进行激活,所以设置一个boolean值变量,用来判断是否进行反卷积激活。编码器模块由两个ResNet残差结构组成。一个是进行缩放的残差结构,一个是没有进行缩放的残差结构。进行缩放的残差结构:调用卷积模块,设置strides为2,然后再一次进行卷积。对输入进行一次strides为2的卷积。经过卷积的输入同两次卷积结果相加。没有进行缩放的残差结构:将输入同经过两次卷积后的结果进行相加。解码器模块由卷积、反卷积、卷积。调用卷积和反卷积模块完成。解码器模块的主要的作用是对图像进行放大,使得图片输入输出大小一致。LinkNet网络通过“组装”编码器模块和解码器模块组成,编码器和解码器需要一一对应,因为解码器输出需要同对应的编码器输出相加然后再进行解码。2.2.4U-Net网络的修改在U-Net网络中添加残差网络,在下采样中后的两次卷积输出直接加上下采样结果。其网络结构如下。卷积卷积卷积下采样add2.3训练结果收集模块2.3.1语义分割的优化器的选择几种常用的优化器:SGD,Momentum,AdaGrad,RMSProp,Adam。随机梯度下降算法SGD,每次只使用一个样本来进行更新梯度,因为是一个样本进行更新的原因,SGD速度比较快,能够根据新的样本实时更新模型,但是其梯度震荡严重。动量Momentum,动量即矢量,具有方向,用来描述梯度。如果获取到的梯度方向和前一时刻的梯度方向一致,那么梯度则会增强;如果获取到的梯度方向和前一时刻的梯度方向不一致,那么梯度则会变弱。自适应梯度算法AdaGrad,当开始训练的时候学习率应当设置为比较大,因为此时离最优点比较远,当训练快要结束的时候,应该降低学习率,因为此刻离最优点比较近。自适应算法能够根据自身状态自动调节学习率。因为分母的大小主要由前t时刻的梯度的平方和决定,而梯度的平方和变化过快可能导致训练提前结束。θgt是t时刻的模型的梯度。tgt2均方根传播RMSProp,RMSProp是在AdaGrad的基础上添加了一个衰减系数。这个衰减系数可以用来来控制获取的历史信息的多少,也可以认为是一种指数加权的方式,目的是消除梯度下降时候的梯度摆动。Adam优化器可以看作是RMSProp和Momentum的结合,Adam优化器考虑到了梯度的一阶矩估计、二阶矩估计,对两者进行了综合考虑后获得的更新步长。其特点有收敛快,易调参,内存需求少,可以自动调节学习率,不受梯度影响取值等。综合条件比较下来Adam优化器算是性能不错的优化器。所以本论文的优化器选择Adam2.3.2语义分割的评价指标因为标签的取值范围是[0,33]不是独热编码所以使用的损失函数是SparseCategoricalCrossentropy()。语义分割的一个重要评价标准交并比IoU。IoU=因为预测输出的结果是一个长度为34张量,但是MeanIoU方法需要的是一个数值,所以需要重写MeanIoU方法,取预测输出张量的最大值作为预测输入结果,然后和真实值做比较获取评测标准IoU。利用metrics()函数获取语义分割的loss函数和acc函数,用来获取语义分割的损失值和准确率指标。因为metrics()函数是一个状态函数,能够随着模型的训练进行loss和acc指标的状态更新。2.4模型训练模块在模型中输入图片,获取预测值。调用损失函数,通过标签和预测值获取损失值,通过损失值和可训练参数计算梯度,通过Adam优化器优化梯度。调用acc函数、loss函数和IoU函数进行指标记录。设置模型迭代训练次数Epoch=60,将测试集和评价指标和训练集的评价指标保存在列表中。测试集和训练集的评价指标一一对应,利用plot()绘图函数进行指标图像绘制。随机从测试集中抽取两张图像,输入到模型中,利用imshow()函数显示模型语义分割结果。3训练结果及分析3.1Unet网络图像语义分割结果3.1.1U-Net网络城市街景评测指标绘图3.1.2U-Net网络城市街景预测结果3.1.3U-Net网络猫狗数据集评测指标绘图3.1.4U-Net网络猫狗数据集预测结果3.2FCN全卷积网络图像语义分割结果3.2.1FCN全卷积网络城市街景评测指标绘图3.2.2FCN全卷积网络城市街景预测结果3.2.3FCN全卷积网络猫狗数据集评测指标绘图3.2.4FCN全卷积网络猫狗数据集预测结果3.3LinkNet网络图像语义分割结果3.3.1LinkNet网络城市街景评测指标绘图3.3.2LinkNet网络城市街景预测结果3.3.3LinkNet网络猫狗数据集评测指标绘图3.3.4LinkNet网络猫狗数据集预测结果3.4U-Net网络改进图像语义分割结果3.4.1U-Net网络改进城市街景评测指标绘图3.4.2U-Net网络改进城市街景预测结果3.4.3U-Net网络改进猫狗数据集评测指标绘图3.4.4U-Net网络改进猫狗数据集预测结果3.5数据收集Epoch=60时城市街景的模型训练结果汇总。模型名test_losstest_acctest_iouFCN0.008130.825690.272LinkNet0.008520.794310.193Unet0.007450.843480.311Epoch=60时猫狗数据集的模型训练结果汇总。模型名test_losstest_acctest_iouFCN0.003380.915260.771LinkNet0.003350.897220.734Unet0.003150.905650.766Epoch=60时Unet_Model进行优化训练结果汇总。模型名数据集Test_lossTest_accTest_iouUnet城市街景数据集0.007450.843480.311Unet+ResNet城市街景数据集0.007680.851130.324Epoch=60时Unet_Model进行优化训练结果汇总。模型名数据集Test_lossTest_accTest_iouUnet猫狗数据集0.003150.905650.766Unet+ResNet猫狗数据集0.003070.912260.7684总结和思考4.1本文的工作总结从各个模型的评测指标绘图可以看出大约在Epoch=20的时候各个评测指标出现了收敛。出现的原因:即便进行了数据增强数据集的数量仍然过少,使得拟合函数无法和数据集匹配;各个网络的模型深度不深,函数拟合度低,过多的进行循环迭代对拟合度的影响不大,同时会造成资源浪费。不同的模型在分类数低的数据集中拟合效果较好预测的IoU能达到70%,在拟合度高的数据集中效果一般LinkNet网络和FCN全卷积网络预测的IoU一般在20%左右,而U-Net网络能达到30%,这是因为U-Net网络中上采样和下采样的信息结合不是简单的像素相加,而是空间上的像素叠加,即考虑了像素由考虑了空间信息。从Acc和IoU的图像以及Epoch=60时的数据可以看出添加ResNet残差模块的U-Net网络在多分类数据集中能提升一定效果,是因为在进行下采样前利用残差模块提供了更多的图像信息。4.2关于图像分割的思考通过三种经典分割网络和加入了残差模块的U-Net网络的语义分割效果可以看出,要想提升图像语义分割效果可以从数据集、网络深度、上采样和下采样过程的信息结合等方面考虑。数据集是图像语义分割的基础。如果数据集中拥有大量的数据,可以预防过拟合和欠拟合,使得拟合函数满足数据集。网络深度和图像语义分割下采样次数相对应,通过加深网络深度使得拟合函数能够更加准确的收敛到标签。但是考虑到梯度加深那么就需要考虑梯度消失的问题。利用残差网络可以解决网络加深梯度消失的问题,利用残差网络使输出可以从输入中学习新的特征。上采样和下采样过程的信息结合则是对像素的空间信息考虑,使得分割结果更加精细,满足空间一致性的特点。以上仅仅只是从提升语义分割的效果出发的。但是模型的训练时间仍然是需要考虑的重要因素,例如自动驾驶就需要即时的获取图像语义分割结果同时还要保证语义分割的精度。可以从图片大小,标签分类数、模型参数、加快收敛效率等方面进行考虑。缩小图片大小可以在保证图片特征不减少的情况下减少对硬件的消耗。优化模型参数也可以减少对硬件的消耗。减少分类数可以提升语义分割的效果,但是要求分类精确。利用合适的优化器可以进行梯度优化加快模型的收敛效率。参考文献OlafRonneberger,PhilippFischer,ThomasBrox.U-Net:Co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学生小学四年级三位数乘两位数竖式计算200道题(带答案)
- 四川省眉山市2026物理学业水平性考试附答案
- 江西省申论公务员考试复习要点精析(2026年)
- 统编部编版小学语文五年级下册语文一课一练
- 停工安全承诺书
- 宗教用品电商平台合作合同
- 卫生专业技术资格考试护理学(中级368)基础知识复习难点解析
- 智力开发项目投资合作协议2026修订
- 线上平面设计作品发布协议
- 药品销售代理佣金分配协议
- 2025-2030中国利兹线行业市场发展趋势与前景展望战略研究报告
- 教育机构前台培训
- 【MOOC】化学与健康-青岛科技大学 中国大学慕课MOOC答案
- 中医内科临床诊疗指南-肺动脉高压
- 2024年辽宁省中考语文真题
- MOOC 刑事诉讼法-西南政法大学 中国大学慕课答案
- 四通一平施工方案样本
- 政府行业应急预案编制与管理培训
- 企业伦理与社会责任实践案例
- 中建群塔作业施工方案群塔安全方案
- 收纳整理衣物的洗涤熨烫与收纳怎样收纳整理物品优质模板两篇
评论
0/150
提交评论