首页 > 系统相关 >PP-HumanSeg安装、运行、基于PP-HumanSegV2-Lite训练、测试(ubuntu虚拟机 cpu版本)

PP-HumanSeg安装、运行、基于PP-HumanSegV2-Lite训练、测试(ubuntu虚拟机 cpu版本)

时间:2024-04-16 09:00:11浏览次数:25  
标签:PP HumanSegV2 -- config 虚拟机 inference model data 模型

参考paddleseg官网

【PaddleSeg实践范例】PP-HumanSegV2 SOTA人像分割方案

github的readme:

 https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.9/README_CN.md

零、准备工作

0.安装Anaconda

ubantu下安装Anaconda、pycharm

1.用 conda 创建虚拟环境

#1. 查询conda环境下有哪些虚拟环境
conda info --envs

#2. 创建指定python版本的环境
conda create -n PaddleSeg_py_38 python=3.8

#3. 激活环境
conda activate PaddleSeg_py_38

2.设置conda和pip的镜像(查看镜像有无,没有则设置镜像)

 https://www.cnblogs.com/loveDodream-zzt/p/17871994.html

2.1 设置conda的镜像源

// 1. 查看镜像源
conda config --show channels

// 2. 删除添加源,恢复默认源
conda config --remove-key channels

// 3. 添加清华镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/

//终端显示包从哪个channel下载,以及下载地址是什么
conda config --set show_channel_urls yes

2.2 Pip配置清华镜像源(conda和pip都要设置!!!)

 临时使用清华镜像源,如下:

// some-package代表你需要安装的包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

//下面这种方式也是一样的
pip install some-package -i https://pypi.tuna.tsinghua.edu.cn/simple

永久配置清华镜像源, 如下:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

3.网络

因为涉及到github下载,没有网络大文件啥的很费劲而且github不稳定。

https://www.cnblogs.com/loveDodream-zzt/p/18122955

把系统代理关了,开着不能下载paddlepaddle!!!如图:

———————————————————————————————————————————————————————————

一、安装

1. 安装PaddlePaddle

版本要求

  • PaddlePaddle >= 2.0.2

  • Python >= 3.7+

由于图像分割模型计算开销大,推荐在GPU版本的PaddlePaddle下使用PaddleSeg。推荐安装10.0以上的CUDA环境。

推荐安装10.0以上的CUDA环境。安装教程请见PaddlePaddle官网

  • 查询本机支持的CUDA版本

你先确认你的GPU能装什么版本CUDA, 在命令行中输入:

nvidia-smi

就可以看到你的GPU可以装什么版本的CUDA了,如下图:

但是我虚拟机不好 装gpu版本,这里只能装cpu版本了!!!

Windows 安装

  • cpu版本paddlepaddle
conda install paddlepaddle==2.5.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/

2. 下载PaddleSeg仓库

# 若您在本地环境运行,使用git下载PaddleSeg代码
git clone https://github.com/PaddlePaddle/PaddleSeg.git

3.安装依赖

cd PaddleSeg
# git checkout -b release/2.6 origin/release/2.6 2.6训练的时候报错!!!
# 切到2.9分支
git checkout -b release/2.9 origin/release/2.9

# 查看分支
git branch
# 安装依赖 
pip install -r requirements.txt

二、准备模型和数据

以下所有命令均在PaddleSeg/contrib/PP-HumanSeg目录下执行。

cd contrib/PP-HumanSeg
# linux 每次都要设置,不设置就会报错类似‘No module named ...’
export PYTHONPATH=$PYTHONPATH:`pwd`/../..
# windows
# set PYTHONPATH=D:\PaddleSeg

# 打印查看设置的值 
echo $PYTHONPATH

下载推理模型并将其保存在推理模型中

python src/download_inference_models.py

下载测试数据并保存在数据中

python src/download_data.py

三、测试

使用src/seg_demo.py脚本实现肖像分割、背景替换等功能的演示。

src/seg_demo.py脚本的输入数据可以是图片、视频或者摄像头,主要参数说明如下。

参数说明类型是否必选项默认值
config 预测模型中deploy.yaml文件的路径 str -
img_path 待分割图片的路径 str -
video_path 待分割视频的路径 str -
bg_img_path 背景图片的路径,用于替换图片或视频的背景 str -
bg_video_path 背景视频的路径,用于替换视频的背景 str -
save_dir 保存输出图片或者视频的路径 str ./output
vertical_screen 表明输入图片和视频是竖屏 store_true False
use_post_process 设置对输出logit进行后处理,滤除背景干扰 store_true False
use_optic_flow 设置使用光流处理 store_true False
参数说明:

1. 输入图片进行测试

使用背景图片,得到替换背景的图片,结果保存在data/images_result/目录。大家可以进入该目录下,右键单击图片,选择打开进行查看(如下)。

python src/seg_demo.py \
  --config inference_models/portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax/deploy.yaml \
  --img_path data/images/portrait_heng.jpg \
  --bg_img_path data/images/bg_2.jpg \
  --save_dir data/images_result/portrait_heng_v2_withbg.jpg

python src/seg_demo.py \
  --config inference_models/portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax/deploy.yaml \
  --img_path data/images/portrait_shu.jpg \
  --bg_img_path data/images/bg_1.jpg \
  --save_dir data/images_result/portrait_shu_v2_withbg.jpg \
  --vertical_screen

2) 加载data/images/portrait_heng.jpg横屏图像,使用PP-HumanSeg肖像分割模型进行预测

# Use PP-HumanSegV2-Lite
python src/seg_demo.py \
  --config inference_models/portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax/deploy.yaml \
  --img_path data/images/portrait_heng.jpg \
  --save_dir data/images_result/portrait_heng_v2.jpg

# Use PP-HumanSegV1-Lite
python src/seg_demo.py \
  --config inference_models/portrait_pp_humansegv1_lite_398x224_inference_model_with_softmax/deploy.yaml \
  --img_path data/images/portrait_heng.jpg \
  --save_dir data/images_result/portrait_heng_v1.jpg

3) 加载data/images/portrait_shu.jpg竖屏图像,使用PP-HumanSeg肖像分割模型进行预测

python src/seg_demo.py \
  --config inference_models/portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax/deploy.yaml \
  --img_path data/images/portrait_shu.jpg \
  --save_dir data/images_result/portrait_shu_v2.jpg \
  --vertical_screen

2、输入视频进行分割

 1)加载data/videos/video_heng.mp4横屏视频,使用PP-HumanSeg肖像分割模型进行预测,结果保存在data/videos_result/目录。

# Use PP-HumanSegV2-Lite
python src/seg_demo.py \
  --config inference_models/portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax/deploy.yaml \
  --video_path data/videos/video_heng.mp4 \
  --save_dir data/videos_result/video_heng_v2.avi

python src/seg_demo.py \
  --config inference_models/portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax/deploy.yaml \
  --video_path data/videos/video_heng.mp4 \
  --use_post_process \
  --save_dir data/videos_result/video_heng_v2_use_post_process.avi

# Use PP-HumanSegV1-Lite
python src/seg_demo.py \
  --config inference_models/portrait_pp_humansegv1_lite_398x224_inference_model_with_softmax/deploy.yaml \
  --video_path data/videos/video_heng.mp4 \
  --save_dir data/videos_result/video_heng_v1.avi

2)加载data/videos/video_shu.mp4竖屏视频,使用PP-HumanSeg肖像分割模型进行预测

python src/seg_demo.py \
  --config inference_models/portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax/deploy.yaml \
  --video_path data/videos/video_shu.mp4 \
  --save_dir data/videos_result/video_shu_v2.avi \
  --vertical_screen

3)使用背景图片,得到替换背景的视频

python src/seg_demo.py \
  --config inference_models/portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax/deploy.yaml \
  --video_path data/videos/video_heng.mp4 \
  --bg_img_path data/images/bg_2.jpg \
  --use_post_process \
  --save_dir data/videos_result/video_heng_v2_withbg_usepostprocess.avi

4)此外可以使用 DIS(Dense Inverse Search-basedmethod)光流后处理算法 (要求opencv-python版本大于4.0),减少视频预测前后帧闪烁的问题

python src/seg_demo.py \
  --config inference_models/portrait_pp_humansegv2_lite_256x144_inference_model_with_softmax/deploy.yaml \
  --video_path data/videos/video_shu.mp4 \
  --save_dir data/videos_result/video_shu_v2_use_optic_flow.avi \
  --vertical_screen \
  --use_optic_flow

四、训练微调

如果不满足业务要求,大家可以收集、标注数据,基于开源模型进行Finetune。

我们以PP-HumanSeg通用人像分割模型为例,介绍训练、评估、导出的方法。

4.1 准备

参考前文"快速体验 - 准备环境",安装Paddle和PaddleSeg。

执行如下命令,下载mini_supervisely数据集,具体参考前文"快速体验 - 准备模型和数据"。

执行如下命令,下载预训练权重。

cd PaddleSeg/contrib/PP-HumanSeg
# 下载mini_supervisely 测试数据集
python src/download_data.py
# 下载预训练权重
python src/download_pretrained_models.py

4.2 修改配置文件(选用哪一个模型,就修改哪一个配置!!!)

详细见:https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.9/docs/config/pre_config_cn.md

修改配置文件,配置文件为PaddleSeg/configs/human_pp_humansegv2_lite.yml,

 补全路径就可以了!!!

 

 

jkdjlfdjfldjfdljfdlfjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj

jfkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

 

 

 

 

4.3 训练

详细见官文文档:https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.9/docs/train/train_cn.md

准备好配置文件后,我们使用tools/train.py脚本进行模型训练。

在本文档中我们使用PP-LiteSeg模型与optic_disc数据集展示训练过程。请确保已经完成了PaddleSeg的安装工作,并且位于PaddleSeg目录下,执行以下脚本:

cd PaddleSeg/

export CUDA_VISIBLE_DEVICES=0 # Linux上设置1张可用的卡  这里展示的cpu的所以不用设置,gpu版本才设置
# set CUDA_VISIBLE_DEVICES=0  # Windows上设置1张可用的卡

python tools/train.py \
       --config configs/human_pp_humansegv2_lite.yml \
       --do_eval \
       --use_vdl \
       --save_interval 500 \
       --save_dir output

上述训练命令解释:

  • --config指定配置文件。
  • --save_interval指定每训练特定轮数后,就进行一次模型保存或者评估(如果开启模型评估)。
  • --do_eval开启模型评估。具体而言,在训练save_interval指定的轮数后,会进行模型评估。
  • --use_vdl开启写入VisualDL日志信息,用于VisualDL可视化训练过程。
  • --save_dir指定模型和visualdl日志文件的保存根路径。

在PP-LiteSeg示例中,训练的模型权重保存在output目录下,如下所示。总共训练1000轮,每500轮评估一次并保存模型信息,所以有iter_500iter_1000文件夹。评估精度最高的模型权重,保存在best_model文件夹。后续模型的评估、测试和导出,都是使用保存在best_model文件夹下精度最高的模型权重。

train.py脚本输入参数的详细说明如下:

参数名用途是否必选项默认值
iters 训练迭代次数 配置文件中指定值
batch_size 单卡batch size 配置文件中指定值
learning_rate 初始学习率 配置文件中指定值
config 配置文件 -
save_dir 模型和visualdl日志文件的保存根路径 output
num_workers 用于异步读取数据的进程数量, 大于等于1时开启子进程读取数据 0
use_vdl 是否开启visualdl记录训练数据
save_interval 模型保存的间隔步数 1000
do_eval 是否在保存模型时启动评估, 启动时将会根据mIoU保存最佳模型至best_model
log_iters 打印日志的间隔步数 10
resume_model 恢复训练模型路径,如:output/iter_1000 None
keep_checkpoint_max 最新模型保存个数 5

五、评估和预测

5.1 评估

训练完成后,大家可以使用评估脚本 tools/val.py 来评估模型的精度,即对配置文件中的验证数据集进行测试。

假设训练过程中迭代次数(iters)为1000,保存模型的间隔为500,即每迭代1000次数据集保存2次训练模型。因此一共会产生2个定期保存的模型,加上保存的最佳模型best_model,一共有3个模型。

在PP-LiteSeg示例中,执行如下命令进行模型评估。其中,通过--model_path输入参数来指定评估的模型权重。

python tools/val.py \
       --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
       --model_path output/iter_1000/model.pdparams

注意:如果报错:No module name 'paddleseg'类似这种,如下:

 那就是需要添加python path(每次都要添加)!!!!

 这里设置如下:

cd contrib/PP-HumanSeg
# linux 每次都要设置,不设置就会报错类似‘No module named ...’
export PYTHONPATH=$PYTHONPATH:`pwd`/../..
# windows
# set PYTHONPATH=D:\PaddleSeg

# 打印查看设置的值 
echo $PYTHONPATH

5.2 预测

官网链接:https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.9/docs/predict/predict_cn.md

tools/predict.py脚本是专门用来可视化预测的,命令格式如下所示:

python tools/predict.py \
       --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
       --model_path output/iter_1000/model.pdparams \
       --image_path contrib/PP-HumanSeg/data/optic_disc_seg/JPEGImages/H0003.jpg \
       --save_dir output/result

其中image_path可以是一张图片的路径,也可以是一个包含图片路径的文件列表,也可以是一个目录,这时候将对该图片或文件列表或目录内的所有图片进行预测并保存可视化结果图。

如果报错如下:

 则修改--image_path路劲,我的路径为: /home/zzt/ai/PaddleSeg/contrib/PP-HumanSeg/data/optic_disc_seg/JPEGImages/H0003.jpg (全路径)或者 /contrib/PP-HumanSeg/data/optic_disc_seg/JPEGImages/H0003.jpg(这里前面设置了PaddleSeg为pythonpath所以可以省略前边目录)

运行成功打印如下:

六、模型导出

6.1 导出预测模型

官网链接:https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.9/docs/model_export_cn.md

1) 使用PaddleSeg训练好模型后,我们将模型导出为预测模型、使用预测库进行部署,可以实现更快的推理速度。

 

注意,使用--without_argmax --with_softmax参数,则模型导出的时候,模型最后面不会添加Argmax算子,而是添加Softmax算子。 所以,输出是浮点数类型,表示前景的概率,

使得图像融合的边缘更为平滑。

结果文件如下:

在PaddleSeg根目录下,执行如下命令,导出预测模型,保存在 PaddleSeg/output/inference_model目录。

# 现在output文件下,创建inference_model文件夹
cd output
mkdir inference_model
python tools/export.py \
       --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
       --model_path output/iter_1000/model.pdparams \--save_dir output/inference_model

成功如下图:

导出脚本参数解释:

参数名用途是否必选项默认值
config 配置文件的路径 -
model_path 模型权重的路径 -
save_dir 预测模型保存的目录 ./output/inference_model
input_shape 设置模型的输入shape (N*C*H*W),比如传入--input_shape 1 3 1024 1024。如果不设置input_shape,默认导出模型的输入shape是[-1, 3, -1, -1]。 预测shape固定时,建议指定input_shape参数。 None
output_op 设置在模型末端添加的输出算子,支持[argmaxsoftmaxnone]。PaddleSeg模型默认返回logits (N*C*H*W);添加argmax算子,可以得到每个像素的分割类别,结果的维度是N*H*W、数据类型是int32;添加softmax算子,可以得到每个像素每类的概率,结果的维度是N*C*H*W、数据类型是float32 argmax
with_softmax 即将废弃的输入参数,建议使用--output_op。在网络末端添加softmax算子。由于PaddleSeg组网默认返回logits,如果想要部署模型获取概率值,可以置为True False
without_argmax 即将废弃的输入参数,建议使用--output_op。由于PaddleSeg组网默认返回logits,为部署模型可以直接获取预测结果,我们默认在网络末端添加argmax算子。如果设置--without_argmax,则不会在网络末端添加argmax算子。 False

注意:

  • 如果部署模型时,出现和shape相关的问题,请尝试指定input_shape。

 

2) 导出预测模型后,我们可以使用以下方式部署模型:

 

部署场景使用预测库教程
服务器端(Nvidia GPU和X86 CPU) Python部署 Paddle Inference 文档
服务器端(Nvidia GPU和X86 CPU) C++端部署 Paddle Inference 文档
移动端部署 Paddle Lite 文档
服务化部署 Paddle Serving 文档
前端部署 Paddle JS 文档

 

6.2 导出ONNX格式模型(完成6.1的基础上,再进行6.2!!!)

安装Paddle2ONNX(高于或等于0.6版本)。

pip install paddle2onnx

执行如下命令,使用Paddle2ONNX将output文件夹中的预测模型导出为ONNX格式模型。

paddle2onnx --model_dir output \
            --model_filename inference_model/model.pdmodel \
            --params_filename inference_model/model.pdiparams \
            --opset_version 11 \
            --save_file inference_model/output.onnx

导出的ONNX格式模型保存为output.onnx文件。

目前我的执行报错,报错如下:

参考文档:

六、移动端Lite部署

详细见:https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.9/docs/deployment/lite/lite_cn.md

 

 

 

 

 

标签:PP,HumanSegV2,--,config,虚拟机,inference,model,data,模型
From: https://www.cnblogs.com/loveDodream-zzt/p/18137335

相关文章

  • Scratch3之AI集成 - flappy bird AI版本
    AI神秘且有趣,我们一个经典的游戏flappybird集成AI,实现自训练成长的聪明的笨鸟。先上效果:初始化的笨鸟拥有分身,每个分身都有自我学习功能,根据自己的移动轨迹和得分情况进行汇总,进行新一代的笨鸟的迭代,基本经过数十轮的训练和迭代,能完成高智慧的笨鸟,自我闯关能力强。 需要了解......
  • 实验一原型设计—恰饭app
    一、实验题目:原型设计二、实验目的:掌握产品原型设计方法和相应工具使用。三、实验要求:对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点(至少3条)。答:1.适用领域:墨刀:墨刀是一款在线的移动应用原型与线框图工具,适合设计团队和个人用户使用,用于移动端和We......
  • 实验一原型设计——东南西北行app
    一、实验题目:原型设计二、实验目的:掌握产品原型设计方法和相应工具使用。三、实验要求(1)对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点(至少3条)。墨刀、Axure和Mockplus都是流行的原型设计工具,它们各自在适用领域和优缺点上有所不同。以下是对这些工具......
  • 肖sir__app搭建笔记(18)
    app搭建一、app自动化测试环境和用途:主要用于做app端UI自动化,熟悉adb命令(a表示安卓,d表示debug,b表示桥)adb是连接手机设备二、搭建环境的工具(1)jdk  已安装,java的一种编译器 (本地windows安装)(2)android-sdk 软件开发工具组,里面存放一些类和函数    (3)appium-pyt......
  • 肖sir__app测试之介绍(18.0)
    app测试app功能测试和app自动化测试===============================(一)app手工测试app手工测试:就是在app上进行手工测试app自动化测试使用代码或工具来代替手工测试(二)web测试和app测试区别?(1)单纯从功能测试的层面上来讲的化,app测试、web测试在流程和功能测试上是没有区别(2)......
  • 视频汇聚/安防监控平台EasyCVR调试pprof接口信息泄露如何处理?
    EasyCVR视频融合平台基于云边端架构,可支持海量视频汇聚管理,能提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等视频服务。平台兼容性强,支持多协议、多类型设备接入,包括:国标GB/T28181协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SD......
  • 实验一 驾考app
    一、实验题目:原型设计二、实验目的:掌握产品原型设计方法和相应工具使用。三、实验要求(1)对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点(至少3条)。好的,下面是对这三款原型设计工具的适用领域及优缺点的分析比较:墨刀适用领域:适用于移动应用和网站的快......
  • 实现iOS App代码混淆
     简介在开发iOS应用程序时,保护代码安全是至关重要的。代码混淆是一种常用的技术,可以增加逆向工程的难度,防止他人对代码的篡改和盗用。本文将介绍如何实现iOSApp代码混淆的步骤和操作方法。整体流程下面是实现iOSApp代码混淆的整体流程: 接下来,我们将逐步介绍每个步骤的具......
  • 实验一——母婴购物App
    一、分析墨刀、Axure、Mockplus原型设计工具的各自的适用领域及优缺点(一)墨刀适用领域:适用于中小型项目的快速原型设计,尤其适合移动应用设计,需要云端操作和网页分享的场景。优点:1.用户界面简单易用,易上手,支持多人协作,可同时完成一份文件。2.交互制作功能强大,支持多种手势和转......
  • App内测分发是什么意思?内测方式有哪些?
    App内测分发是软件开发流程中的一个重要环节,主要目的是在正式发布前,将尚未公开的应用程序版本分发给特定的测试用户,以获取反馈并发现和修复潜在的问题。内测分发有助于确保应用的质量和用户体验,并减少在正式发布后可能遇到的bug或性能问题。具体来说,App内测分发的方式可以细分为......