基于PaddlePadlle的图像分割の新手入门

课程链接:https://aistudio.baidu.com/aistudio/education/group/info/1767.

在这里插入图片描述

第五课 PaddleSeg快速体验

本课提要:

  • 学习使用预训练好的图像分割模型进行预测
  • 初步了解PaddleSeg语义分割库的使用
  • 本教程以常见的人像分割任务为例

一、什么是人像分割

人像分割任务旨在识别图像中的人体轮廓,与背景进行分离,返回分割后的二值图、灰度图、前景人像图,适应多个人体、复杂背景、各类人体姿态。可应用于人像扣图、人体特效和影视后期处理等场景。

常用数据库
Pascal VOC的三个主要物体识别竞赛是:分类,检测和分割(classification, detection, and segmentation)。
对于分割任务, VOC2012的trainval包含2007-2011年的所有对应图片, test只包含2008-2011。trainval有 2913张图片共6929个物体。

模型网络
介绍: DeepLabv3+是DeepLab语义分割系列网络的最新作,其前作有 DeepLabv1,DeepLabv2, DeepLabv3, 在最新作中。
Xception是DeepLabv3+原始实现的backbone网络,兼顾了精度和性能,适用于服务端部署。
方法: DeepLab的作者通过encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层, 其骨干网络使用了Xception模型,提高了语义分割的健壮性和运行速率。
实验: 在 PASCAL VOC 2012 dataset取得新的state-of-art performance,89.0mIOU。

二、在PaddleSeg上实现人像分割

第一步:PaddleSeg安装
下载,解压

第二步:预训练模型下载
下载预训练好的DeeplebV3+ xception65模型。
NOTE: ./pretrained_model为PaddleSeg默认的预训练模型存储目录,因此这里将模型放入该目录下。

第三步:数据准备
本教程挂载了一个小型的数据集,包含少量人像分割图片用于测试,数据集位于./data/data10908/humanseg.zip。
NOTE: ./dataset 为PaddleSeg默认的数据集存储目录,因此这里将测试集放入该目录下。

第四步:模型预测与可视化
pdseg/vis.py是模型预测和可视化的脚本。
PaddleSeg中关于模型的配置记录在configs目录 下的 yaml文件里。
在这里插入图片描述

三、实现步骤&代码
实现思路
安装PaddleSeg

代码


# 从PaddleSeg的github仓库下载代码 
git clone https://github.com/PaddlePaddle/PaddleSeg.git
# 解压从PaddleSeg Github仓库下载好的压缩包
!unzip -o PaddleSeg.zip
# 运行脚本需在PaddleSeg目录下
%cd
# 安装所需依赖项
!pip install -r requirement.txt

# 下载预训练模型并放入./pretrained_model目录下
%cd /home/aistudio/PaddleSeg/pretrained_model/
!wget https://paddleseg.bj.bcebos.com/models/deeplabv3p_xception65_humanseg.tgz
!tar -xf deeplabv3p_xception65_humanseg.tgz
%cd ..

# 将测试数据集放入./dataset目录下
!cp ~/data/data10908/humanseg.zip dataset/
!unzip -o humanseg.zip -d dataset/

# 将配置文件humanseg.yaml复制到configs目录下
!cp ~/work/humanseg.yaml configs/
# 模型预测
!phthon ./pdseg/vis.py --cfg ./configs/humanseg.yaml \
					   --vis_dir ./visual \
					   --use_gpu \
					   DATASET.DATA_DIR "dataset/humanseg" \
					   DATASET.VIS_FILE_LIST "dataset/humanseg/test_list.txt"
					   TEST.TEST_MODEL "pretrained_model/deeplabv3_xception65_humanseg"

# 显示最终的分割效果
import matplotlib.pyplot as plt
from PIL import Image
# 定义显示函数
def display(img_dir):
	plt.figure(figsize=(15, 15))
	title = ['Input Image', 'Predicted Mask']
	for i in range(len(title)):
		plt.subplot(1, len(img_dir), i+1)
		plt.title(title[i])
		img = plt.imread(img_dir[i])
		plt.imshow(img)
		plt.axis('off')
	plt.show()
# 显示分割效果
# 注:仅显示其中一张图片的效果。    
#image_dir = "dataset/humanseg/aa6b34b24414bafa7fab8393239c793587513ce6.jpg"
#mask_dir = "visual/aa6b34b24414bafa7fab8393239c793587513ce6.png"
# image_dir = "dataset/humanseg/aa6ff076c7360b8dabc30edd05ebafb65bba9343.jpg"
# mask_dir = "visual/aa6ff076c7360b8dabc30edd05ebafb65bba9343.png"
image_dir = "dataset/humanseg/56173ddd1ccb419e1efdeb5f5cb242ab160142cb.jpg"
mask_dir = "visual/56173ddd1ccb419e1efdeb5f5cb242ab160142cb.png"
imgs = [image_dir, mask_dir]
display(imgs)

im = Image.open(image_dir)#返回一个Image对象
print('image宽:%d,image高:%d'%(im.size[0],im.size[1]))

ma = Image.open(image_dir)#返回一个Image对象
print('mask宽:%d,mask高:%d'%(ma.size[0],ma.size[1]))

一些术语

  • 语义分割库
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页