AI项目十五:PP-Humanseg训练及onnxruntime部署

这篇具有很好参考价值的文章主要介绍了AI项目十五:PP-Humanseg训练及onnxruntime部署。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

若该文为原创文章,转载请注明原文出处。

关于PP-Humanseg是在正点原子的3568开发板AI测试例子里看到的,目的也是想自己训练并部署,这里记录一下训练和在onnxruntime部署运行的全过程,会转成ONNX,至于部署到rk3568上,会在另一篇文章説明ONNX转成RKNN并部署到RK3568.

一、训练模型

一、介绍

本文将PaddleSeg的人像分割(PP-HumanSeg)模型导出为onnx,并使用onnxruntime部署,实现人像分割,效果如下图所示。

AI项目十五:PP-Humanseg训练及onnxruntime部署,AI计算机视觉,人工智能

二、环境搭建

使用的是AutoDL服务器,配置如下:

AI项目十五:PP-Humanseg训练及onnxruntime部署,AI计算机视觉,人工智能

创建虚拟环境

conda create -n ppseg_env python=3.8 -y

激活环境

conda activate ppseg_env

AI项目十五:PP-Humanseg训练及onnxruntime部署,AI计算机视觉,人工智能

三、安装PaddlePaddle

直接安装

python -m pip install paddlepaddle-gpu==2.4.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

也可以源码其他的,参考

开始使用_飞桨-源于产业实践的开源深度学习平台

四、安装PaddleSeg

git clone https://github.com/PaddlePaddle/PaddleSeg
cd PaddleSeg
pip install -r requirements.txt
pip install -v -e .

AI项目十五:PP-Humanseg训练及onnxruntime部署,AI计算机视觉,人工智能

五、下载数据

PP-Humanseg位于contrib/PP-HumanSeg目录下,在目录下有个 readme.md文件,根据文件,下载数据及模型

进入PP-HumanSeg目录下

cd PaddleSeg/contrib/PP-HumanSeg

1、下载Inference Model

python src/download_inference_models.py

2、下载测试数据

python src/download_data.py

六、测试

测试的数据可以是视频也可以是图片,这里测试图片

执行下面指令:

# 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

结果会保存到data/images_result目录下,结果如下:

AI项目十五:PP-Humanseg训练及onnxruntime部署,AI计算机视觉,人工智能

视频可以自我测试,不在演示,使用如下 命令:

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

七、训练

配置文件保存在`./configs`目录下,如下。配置文件中,已经通过`pretrained`设置好预训练权重的路径。

AI项目十五:PP-Humanseg训练及onnxruntime部署,AI计算机视觉,人工智能

执行如下命令,进行模型微调,模型训练的详细文档,请参考[链接](../../docs/train/train_cn.md)

export CUDA_VISIBLE_DEVICES=0 # Linux下设置1张可用的卡
# set CUDA_VISIBLE_DEVICES=0  # Windows下设置1张可用的卡
python ../../tools/train.py --config configs/human_pp_humansegv2_lite.yml --save_dir output/human_pp_humansegv2_lite --save_interval 100 --do_eval --use_vdl

训练完成后,模型会保存在output目录下

AI项目十五:PP-Humanseg训练及onnxruntime部署,AI计算机视觉,人工智能

八、评估模型

python ../../tools/val.py --config configs/human_pp_humansegv2_lite.yml --model_path output/human_pp_humansegv2_lite/best_model/model.pdparams

AI项目十五:PP-Humanseg训练及onnxruntime部署,AI计算机视觉,人工智能

看起来评估的结果还是可以的。

九、预测 

python ../../tools/predict.py --config configs/human_pp_humansegv2_lite.yml --model_path output/human_pp_humansegv2_lite/best_model/model.pdparams --image_path data/images/human.jpg --save_dir ./data/images_result

AI项目十五:PP-Humanseg训练及onnxruntime部署,AI计算机视觉,人工智能

接下来是重头戏,需要导出模型

十、导出静态模型

输入图片大小是192x192

python ../../tools/export.py --config configs/human_pp_humansegv2_lite.yml --model_path output/human_pp_humansegv2_lite/best_model/model.pdparams --save_dir output/human_pp_humansegv2_lite --input_shape 1 3 192 192 

AI项目十五:PP-Humanseg训练及onnxruntime部署,AI计算机视觉,人工智能

十一、预测导出静态模型

参考deploy下的测试

python ../../deploy/python/infer.py --config output/human_pp_humansegv2_lite/deploy.yaml  --image_path ./human.jpg --save_dir ./data/images_result3

至此,导出的静态模型测试完成

AI项目十五:PP-Humanseg训练及onnxruntime部署,AI计算机视觉,人工智能

二、ONNX模型转换

一、安装paddle2onnx

pip install paddle2onnx

二、导出ONNX模型 

paddle2onnx --model_dir output/human_pp_humansegv2_lite/ \
            --model_filename model.pdmodel \
            --params_filename model.pdiparams \
            --opset_version 12 \
            --save_file output.onnx

三、测试

测试使用的是onnxruntime环境测试,所以需要先安装onnxruntime

pip install onnxruntime

测试代码是自己编写的,文件为predict.py

import cv2
import numpy as np
import onnxruntime as rt


def normalize(im, mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]):
    im = im.astype(np.float32, copy=False) / 255.0
    im -= mean
    im /= std
    return im


def resize(im, target_size=608, interp=cv2.INTER_LINEAR):
    if isinstance(target_size, list) or isinstance(target_size, tuple):
        w = target_size[0]
        h = target_size[1]
    else:
        w = target_size
        h = target_size
    im = cv2.resize(im, (w, h), interpolation=interp)
    return im


def preprocess(image, target_size=(192, 192)):
    image = normalize(image)
    image = resize(image, target_size=target_size)
    image = np.transpose(image, [2, 0, 1])
    image = image[None, :, :, :]
    return image


def display_masked_image(mask, image, color_map=[255, 0, 0], weight=0.6):
    mask = mask > 0
    c1 = np.zeros(shape=mask.shape, dtype='uint8')
    c2 = np.zeros(shape=mask.shape, dtype='uint8')
    c3 = np.zeros(shape=mask.shape, dtype='uint8')
    pseudo_img = np.dstack((c1, c2, c3))
    for i in range(3):
        pseudo_img[:, :, i][mask] = color_map[i]
    vis_result = cv2.addWeighted(image, weight, pseudo_img, 1 - weight, 0)
    return vis_result


onnx_model_path = './output.onnx'
sess = rt.InferenceSession(onnx_model_path,providers=['AzureExecutionProvider', 'CPUExecutionProvider'])
input_name = sess.get_inputs()[0].name
label_name = sess.get_outputs()[0].name

target_size = (192, 192)

#cap_video = cv2.VideoCapture('./human.jpg')
#if not cap_video.isOpened():
#    raise IOError("Error opening video stream or file.")
path = "./human.jpg"

while 1:
    #ret, raw_frame = cap_video.read()
    ret = 1
    raw_frame  = cv2.imread(path)
    pre_shape = raw_frame.shape[0:2][::-1]
    if ret:
        frame = cv2.cvtColor(raw_frame, cv2.COLOR_BGRA2RGB)
        frame = preprocess(frame, target_size)
        pred = sess.run(
            [label_name],
            {input_name: frame.astype(np.float32)}
        )[0]
        pred = pred[0]
        raw_frame = resize(raw_frame, target_size)
        image = display_masked_image(pred, raw_frame)
        image = resize(image, target_size=pre_shape)
        #cv2.imshow('HumanSegmentation', image)
        cv2.imwrite('result.jpg',image)
        print("finish! result save result.jpg")
        break
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
#cap_video.release()

执行python predict.py

AI项目十五:PP-Humanseg训练及onnxruntime部署,AI计算机视觉,人工智能

运行正常

AI项目十五:PP-Humanseg训练及onnxruntime部署,AI计算机视觉,人工智能

以上是完整的一个过程 ,在onnxruntime上部署成功

如有侵权,或需要完整代码,请及时联系博主。文章来源地址https://www.toymoban.com/news/detail-726513.html

到了这里,关于AI项目十五:PP-Humanseg训练及onnxruntime部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [AI医学] 医学领域几个微调&预训练大模型的项目

    :AI医学,医学大模型,指令微调,PubMed 领域指令微调样本生成框架OpenGPT与医疗健康大模型NHS-LLM ChatDoctor:借助医学知识库生成微调样本构建医疗领域大模型 前面整理了两篇具有代表性的AI医学领域大模型,主要讲了领域大模型在微调数据生成及在通用大模型基础上微

    2024年02月16日
    浏览(39)
  • (十五)视频处理、不用事先训练

    本文的代码的功能是:可以对人物视频进行操作,不用预先耗时训练模型,效率极高; 可进行视频处理,使用了人工智能的算法。 注:请移步最新博文(十八)… 一、主要功能: 以下的Python代码的功能:选择视频、主要包括: 1、对视频进行操作,并输出变换后的文件;

    2024年02月03日
    浏览(37)
  • AI模型部署 | onnxruntime部署YOLOv8分割模型详细教程

    本文首发于公众号【DeepDriving】,欢迎关注。 0. 引言 我之前写的文章《基于YOLOv8分割模型实现垃圾识别》介绍了如何使用 YOLOv8 分割模型来实现垃圾识别,主要是介绍如何用自定义的数据集来训练 YOLOv8 分割模型。那么训练好的模型该如何部署呢? YOLOv8 分割模型相比检测模型

    2024年04月24日
    浏览(38)
  • PP-Matting: AI高精度图像前景Matting,让抠图轻而易举

    分割和Matting的一个重要区别是:分割返回的是像素分类标签,其结果是整型数据;而Matting返回的是属于前景或背景的概率P,从而在前景与背景交互区域产生渐变的效果,使得抠图更加自然。Matting分割模型训练完成后,对于原始图像每个位置上的像素,都将生成一个表示其前

    2024年02月15日
    浏览(39)
  • 大语言模型之十五-预训练和监督微调中文LLama-2

    这篇博客是继《大语言模型之十二 SentencePiece扩充LLama2中文词汇》、《大语言模型之十三 LLama2中文推理》和《大语言模型之十四-PEFT的LoRA》 前面博客演示了中文词汇的扩充以及给予LoRA方法的预训练模型参数合并,并没有给出LoRA模型参数是如何训练得出的。 本篇博客将分析

    2024年02月08日
    浏览(44)
  • 训练自己的ai模型(四)学习笔记与项目实操(什么也不懂,但有数据,怎么搞?无监督学习算法)

    很开心有人还在催更,有点小震惊吧。 (原来真有人在csdn发学习记录啊) (原来真有人在csdn看学习记录啊) ai模型方向的知识,我也在学习中,可能疑惑不比大家少。 直接开始! 不管你的是什么数据,只要你有数据,你就可以试一试,跑一跑。 使用 无监督学习算法 。

    2024年02月07日
    浏览(69)
  • (十五)视频换脸、无训练高速换脸、一张图片即可完成、批量处理

    本文的代码的功能是:可以对人物视频进行操作,不用预先耗时训练模型,效率极高; 可进行视频处理,使用了人工智能的算法。 注:请移步最新博文(十八)… 一、主要功能: 以下的Python代码的功能:选择视频、主要包括: 1、对视频进行操作,并输出变换后的文件;

    2023年04月18日
    浏览(43)
  • 【蓝桥杯 第十五届模拟赛 Java B组】训练题(A - I)

     目录 A、求全是字母的最小十六进制数 B、Excel表格组合 C、求满足条件的日期 D、 取数字 - 二分 (1)暴力 (2)二分 E、最大连通块 - bfs F、哪一天? G、信号覆盖 - bfs (1)bfs(60%) (2)暴力 H、清理水域 - 暴力(弱智版) 可以差分 I、滑行 - dfs + dp (1)dfs(30%) (2)

    2024年02月05日
    浏览(54)
  • 目标检测笔记(十五): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)

    目标检测(Object Detection)是计算机视觉领域的一项重要技术,旨在识别图像或视频中的特定目标并确定其位置。通过训练深度学习模型,如卷积神经网络(CNN),可以实现对各种目标的精确检测。常见的目标检测任务包括:人脸检测、行人检测、车辆检测等。目标检测在安防

    2024年02月09日
    浏览(46)
  • 【读点论文】PP-YOLOE: An evolved version of YOLO,面向友好部署的模型设计,为项目后续产业落地提供了更加有效的参考

    在本报告中,我们介绍了PP-YOLOE,一种具有高性能和友好部署的工业最先进的目标探测器。我们在之前的PP-YOLOv2的基础上进行优化,采用无锚模式,更强大的骨干和颈部配备CSPRepResStage, ET-head和动态标签分配算法TAL。我们为不同的实践场景提供s/m/l/x模型。结果,pp - yoloe - 1在

    2024年02月15日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包