【飞桨AI实战】人像分割:手把手带你入门PaddleSeg,从模型训练、推理部署到应用开发
前言
本次分享将带领大家从0到1完成一个语义分割任务,覆盖数据准备、模型训练评估和推理部署的全流程,项目将采用以PaddleSeg为核心的飞浆深度学习框架进行开发,并总结开发过程中踩过的一些坑,希望能为有类似项目需求的同学提供一点帮助。
项目背景和目标
背景:
- 语义分割是计算机视觉的一个基础任务。本次选用的案例来自现实生活场景,通过人像分割,实现背景替换。项目最后,将实现一个AI证件照的应用,并将应用部署到 AI Studio 平台,由于场景对实时性有更高要求,本次采用百度自研的 PP-LiteSeg 进行模型训练和部署。
目标:
- 基于paddlepaddle深度学习框架完成一个语义分割任务;
- 完成模型的训练、评估、预测和部署等深度学习任务全过程。
百度AI Studio平台
本次实验将采用AI Studio实训平台中的免费GPU资源,在平台注册账号后,点击创建项目-选择NoteBook任务,然后添加数据集,如下图所示,完成项目创建。启动环境可以自行选择CPU资源 or GPU资源,创建任务每天有8点免费算力,推荐大家使用GPU资源进行模型训练,这样会大幅减少模型训练时长。
飞浆深度学习开发框架介绍
PaddlePaddle百度提供的开源深度学习框架,其中文名是“飞桨”,致力于为开发者和企业提供最好的深度学习研发体验,国产框架中绝对的榜一大哥!其核心优势是生态完善,目前集成了各种开发套件,覆盖了数据处理、模型训练、模型验证、模型部署等各个阶段的工具。下面简要介绍一下本项目用到的几个核心组件:
- PaddleSeg:一个语义分割任务的工具集,集成了丰富的主流分割算法和百度自研的最新模型,提供覆盖分割任务全流程的API。
- PaddleServing:将模型部署成一个在线预测服务的库,支持服务端和客户端之间的高并发和高效通信。
- PaddleLite:将模型转换成可以端侧推理的库,比如将模型部署到手机端进行推理。
- Fastdeploy:一款全场景、易用灵活、极致高效的AI推理部署工具,支持云边端等各种部署方式。
从零开始实战
1 PaddleSeg完成模型训练
1.1 安装PaddleSeg
在项目中打开终端,然后运行如下命令:
# (可选)conda安装虚拟环境,环境会持久保存在项目中 conda create -p envs/py38 python=3.8 source activate envs/py38 # 安装paddlepaddle,根据云端环境选择cpu版本和gpu版本 pip install --upgrade paddlepaddle -i https://mirror.baidu.com/pypi/simple pip install --upgrade paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple # 下载PaddleSeg代码 注意要安装2.9版本,gitee上是2.8 # 如果国内下载太慢,加上镜像https://mirror.ghproxy.com/ git clone https://github.com/PaddlePaddle/PaddleSeg.git # 安装 cd PaddleSeg pip install -r requirements.txt pip install -v -e . # 测试是否安装成功 sh tests/install/check_predict.sh
1.2 数据准备
数据集介绍
本次实验使用的数据集来自开源的人像语义分割数据集,数据集总共有 7082 张图片,手动划分为训练集、验证集和测试集,其中训练集 5666 张,验证集 1416 张。只包含两种标签类型:背景和人物。大家也可以选择其他开源的人像语义分割数据集。
我们需要制作符合PaddleSeg框架要求的数据集格式:参考准备自定义数据集。
step1: 解压数据集
# 打开终端 cd ~/data/ # -d 指定解压缩的路径,会在data0文件夹下生成koto数据集,持久保存在云端环境种 unzip data59640/koto.zip -d ../data0
step2: 制作标签文件
python generate_dataset.py # 其中generate_dataset.py中的代码如下: ''' import os import cv2 import numpy as np from tqdm import tqdm # modify the data txt file dataset_dir = '/home/aistudio/data0/koto' for txt in ['train_list.txt', 'valid_list.txt']: output = [] with open(dataset_dir + '/' + txt, 'r') as f: lines = f.readlines() for line in lines: image, label = line.strip().split(' ') image = image.replace('/mnt/d/data/koto/', '') label = label.replace('/mnt/d/data/koto/', '') output.append(image + ' ' + label) with open(dataset_dir + '/new_' + txt, 'w') as f: f.writelines(f'{line}'+'\n' for line in output) # 将Label图像转换为标签,0:背景,1:人像 anno_dir = '/home/aistudio/data0/koto/annos' annos = os.listdir(anno_dir) for anno in tqdm(annos): anno_file = os.path.join(anno_dir, anno) label = cv2.imread(anno_file, 0) new_label = np.zeros(label.shape, dtype=np.uint8) if label[0, 0] 128] = 1 else: new_label[label
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

