# Portrait-Segmentation-Transparency **Repository Path**: tfsong2/Portrait-Segmentation-Transparency ## Basic Information - **Project Name**: Portrait-Segmentation-Transparency - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-10-18 - **Last Updated**: 2022-03-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### deeplabv3(mobilenetv2+xception)加载model,分割测试图片并更换背景,设置背景透明化: - #### 使用: - model文件过大,超过400M无法上传,需要自己创建目录文件并下载,下载地址:`https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md`,修改目录结构,目录结构放在文件末尾。 - 目录结构: ``` D:. │ README.md │ run.py │ ├─models │ └─download │ ├─mobilenetv2 │ │ deeplabv3_mnv2_pascal_trainval_2018_01_29.tar.gz │ │ deeplabv3_mnv2_pascal_train_aug_2018_01_29.tar.gz │ │ │ └─xception │ deeplabv3_pascal_trainval_2018_01_04.tar.gz │ deeplabv3_pascal_train_aug_2018_01_04.tar.gz │ ├─temp_images │ image_transparent.png │ pre_image.png │ re_image.png │ └─test_images back.jpg image1.jpg test.jpg test_people.jpg ``` - 修改run.py代码末尾的参数,选择model和图片,运行 - 依赖: - numpy - Image - cv2 - tensorflow - matplotlib - tarfile - #### 运行结果: - 四次对比: - mobilenetv2_aug: - mobilenetv2_val: - xception_aug: - xception_val: - 最终效果: - #### model的运行时间对比: - mobilenetv2: |类型 | aug | val | | :-------------: |:-------------:| :-----:| | load时间 | 0:00:02.202638 | 0:00:05.498740 | | 运行时间 | 0:00:05.233193 | 0:00:08.560493 | - - xception: |类型 | aug | val | | :-------------: |:-------------:| :-----:| | load时间 | 0:00:09.372786 | 0:00:09.372795 | | 运行时间 | 0:00:26.899916 | 0:00:26.540638 | - #### model的其他方面对比: - 初次运行: - load时间: 0:00:34.842048 - 运行时间: 0:00:41.793574 - Xception和MobileNet都是采用depthwise separable convolution - 但是二者的目的是不同的,Xception使用depthwise separable convolution的同时增加了网络的参数量来比对效果,主要考察这种结构的有效性 - MobileNet则是用depthwise separable convolution来进行压缩和提速的,参数量明显减少,目的也不在性能提升上面而是速度上面。 - 准确率方面,从上往下的顺序mIOU依次增大,分割效果更好。官网对比介绍:`https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md` - 使用的4个model都是的在PASCAL VOC 2012数据集上训练出的结果,官方还有基于Cityscapes和ADE20K数据集训练出来的model和基于ImageNet的预训练模型,但是训练结果并不好。 - #### deeplab models训练部分(xception): - 下载数据集转成TFRecord - 设置参数: - `training_number_of_steps`训练30000次 - `atrous_rates`设置[6,12,18];`atrous_convolution`可以理解为带洞的卷积,如果 rate 参数是1,则表现为普通的 2-d 卷积。如果 rate 参数大于1,则会表现则带有洞的卷积。这里并没有深入探索 - `output_stride`输出步长为16 - `decoder_output_stride`解码输出步长设为4 - `train_crop_size`用于训练和测试的图片都是513*513大小 - `train_batch_size`训练的批量大小为1(要实现tensorflow提供models的准确度,需要用大批量>12和`fine_tune_batch_norm`微调批次定额来训练) - `PATH_TO_INITIAL_CHECKPOINT`设置使用MS-COCO训练集预训练的ImageNet结果 - #### deeplab的结构部分内容: - 图像分割可以分为两类:语义分割(Semantic Segmentation)和实例分割(Instance Segmentation) - 与检测模型类似,语义分割模型也是建立是分类模型基础上的,即利用CNN网络来提取特征进行分类。对于CNN分类模型,一般情况下会存在stride>1的卷积层和池化层来降采样,此时特征图维度降低,但是特征更高级,语义更丰富。这对于简单的分类没有问题,因为最终只预测一个全局概率,对于分割模型就无法接受,因为我们需要给出图像不同位置的分类概率,特征图过小时会损失很多信息。其实对于检测模型同样存在这个问题,但是由于检测比分割更粗糙,所以分割对于这个问题更严重。但是下采样层又是不可缺少的,首先stride>1的下采样层对于提升感受野非常重要,这样高层特征语义更丰富,而且对于分割来说较大的感受野也至关重要;另外的一个现实问题,没有下采样层,特征图一直保持原始大小,计算量是非常大的。相比之下,对于前面的特征图,其保持了较多的空间位置信息,但是语义会差一些,但是这些空间信息对于精确分割也是至关重要的。这是语义分割所面临的一个困境或者矛盾,也是大部分研究要一直解决的。 - 对于这个问题,主要存在两种不同的解决方案: - 一种是原始的FCN(Fully Convolutional Networks for Semantic Segmentation),图片送进网络后会得到小32x的特征图,虽然语义丰富但是空间信息损失严重导致分割不准确,这称为FCN-32s,另外paper还设计了FCN-8s,大致是结合不同level的特征逐步得到相对精细的特征,效果会好很多。为了得到高分辨率的特征 - 一种更直观的解决方案是EncoderDecoder结构,其中Encoder就是下采样模块,负责特征提取,而Decoder是上采样模块(通过插值,转置卷积等方式),负责恢复特征图大小,一般两个模块是对称的,经典的网络如U-Net(U-Net: Convolutional Networks for Biomedical Image Segmentation。而要直接将高层特征图恢复到原始大小是相对困难的,所以Decoder是一个渐进的过程,而且要引入横向连接(lateral connection),即引入低级特征增加空间信息特征分割准确度,横向连接可以通过concat或者sum操作来实现。 - 另外一种结构是DilatedFCN,主要是通过空洞卷积(Atrous Convolution)来减少下采样率但是又可以保证感受野,如图中的下采样率只有8x,那么最终的特征图语义不仅语义丰富而且相对精细,可以直接通过插值恢复原始分辨率。天下没有免费的午餐,保持分辨率意味着较大的运算量,这是该架构的弊端。DeepLabv3+就是属于典型的DilatedFCN,它是Google提出的DeepLab系列的第4弹。 - #### 参考: `https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/pascal.md` `https://zhuanlan.zhihu.com/p/62261970`