目录

一、CPU模型环境的安装

        1.虚拟环境创建

        2.PyTorch_CPU版本安装

        3.YOLO模型所需包安装

        4.Paddle模型所需包安装

二 、CPU上运行部署模型

        1.YOLO模型部署

        2.Paddle模型部署


一、CPU模型环境的安装

        在GPU上训练好模型之后,对于实际部署应用模型时,可能需要在CPU上运行模型代码进行预测,本文记录如何在CPU环境使用YOLO和Paddle模型。

        1.虚拟环境创建

conda create -n yolo_paddle_cpu python=3.9

        2.PyTorch_CPU版本安装

pip install torch==1.12.1+cpu torchvision==0.13.1+cpu torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cpu

         安装成功后的结果:

        3.YOLO模型所需包安装

        yolo 作为模型预测,在已有训练好的模型参数 yolo.pt 下,需要用相关包加载图片信息传入模型,以及模型本身的加载。所需包如下,主要是 opencv 和 yolov5 包:

        Pip导入YOLO模型相关包:

# 导入opencv包
pip install opencv-python

# 导入yolo包
pip install yolov5

        安装成功后结果:

        4.Paddle模型所需包安装

        Paddle 模型安装较为复杂,具体可以参考官方文档安装教程:

        https://paddledetection.readthedocs.io/tutorials/INSTALL_cn.html#

        一方面需要安装相关Python包;另一方面还需访问源码地址,将源码项目下载到本地使用(因为Paddle模型的预测需要使用指令行命令预测),源码地址如下:

        国内Gitee地址:https://gitee.com/paddlepaddle/PaddleDetection

        国外GitHub地址:https://github.com/PaddlePaddle/PaddleDetection


        首先,安装 paddle 模型所需相关包。下面是CPU版本的 paddlepaddle 安装,GPU版本可以参考官方文档介绍。

        安装 Paddlepaddle。注意,不要选择官网的版本1.8.4安装,会报错,选择更高的版本 paddlepaddle。

pip install paddlepaddle==2.4.2 -i https://mirror.baidu.com/pypi/simple

        安装成功结果:

        安装 pycocotools、Cython。

# 安装pycocotools
pip install pycocotools

# 若Cython未安装,请安装Cython
pip install Cython

        安装 requirements.txt,克隆好 paddle 项目源码后,在项目目录进入虚拟环境,安装requirements文本文件中所需所有包。       

        安装requirements可能会存在一些报错。以下文章链接记录报错解决流程方法。

        pip install lap失败:pip install lap报错解决

二 、CPU上运行部署模型

        1.YOLO模型部署

        YOLO模型有Python的接口函数,可以通过 import 导入的方式,根据本地模型参数加载模型后,使用模型进行图片检测任务。具体代码如下。

import os
import json
import cv2
import yolov5

MODEL_PATH = 'model_path/best.pt'   # 模型参数.pt文件保存地址
JPG = '//jpg/'      # 待预测图片文件夹
SAVE_PATH = 'save_path/save.json'        # 模型结果保存位置,结果为json格式

#####################(分界线)上述是需根据情况修改的参数,以下函数不需修改

def save_box():
    # 模型位置
    model = yolov5.load(MODEL_PATH)
    json_content = []
    # 待预测图像位置
    folder_path = JPG
    files = os.listdir(folder_path)
    idx = 0
    for file in files:
        print(file)
        if file == 'Thumbs.db':
            continue
        file_path = os.path.join(folder_path, file)
        img = cv2.imread(file_path)
        results = model(img)
        predictions = results.pred[0]
        boxes = predictions[:, :6].tolist()
        for box in boxes:
            result = {}
            result['id'] = idx
            idx+=1
            result['name'] = file
            result['box'] = box
            json_content.append(result)
        # 预测结果保存位置
        with open(SAVE_PATH,'w') as f:
            json.dump(json_content, f)

save_box()

        在模型输出保存文件目录下的 json 文件内容如下,包含框 id 、图片名和框信息,框信息是框的对角坐标、预测的置信度和框类别。

        2.Paddle模型部署

        paddle 模型在克隆的源码文件夹下,将预测的图片和模型参数放入对应的文件,使用命令行指令即可实现部署预测。如果需要其他的进阶指令,可以访问其官方文档查询:https://paddledetection.readthedocs.io/tutorials/index.html

        下面给出具体的基础指令及解释。

        一个完整的预测指令代码如下:

python tools/infer.py -c configs/model.yml -o use_gpu=false weights=/best_model.pdparams --infer_dir=/dataset/jpg/ --output_dir=/output/paddle_predict/ --draw_threshold=0.5 

        上述指令分为主要的 5 个部分:

        -c:后面跟的地址是模型的配置文件.yml,这和你一开始训练模型的配置文件一致,需要根据你的模型选择的具体情况调整修改地址。

        -o:后面跟着两个参数,一个 use_gpu 代表是否使用gpu预测,此处为cpu部署,默认为 false;wight=后面是训练好的模型参数,需要根据实际模型存放的地址修改。

        --infer_dir=:后面对应存放预测图片的地址,根据实际情况修改。

        --output_dir=:后面对应模型输出结果保存的地址,根据需求情况修改。

        --draw_threshold=0.5:默认参数,无需修改(也可省略)。


        此时还不能运行上述指令代码,paddle 项目中还有几处源代码需要修改,以满足部署的输出要求,具体如下。

# tools/infer.py 第168行
FLAGS.save_results = True

# ppdet/engine/trainer.py 第970行
with open(output_dir+"image.json",'w') as f:
    json.dump(imid2path,f)

        在 tools/infer.py 中需要添加一个参数设置——FLAGS.save_results = True,这样做的效果是使得结果保存的时候会将所有的框信息保存到一个名为 bbox.json 的文件中。

        在 ppdet/engine/trainer.py 中添加一个图片信息保存的代码操作,这将在结果保存文件夹下生成一个 image.json 的文件,其保存每个图片的具体绝对地址信息。

        有了上述两个修改以后,运行命令行指令将在设置的保存文件夹位置得到paddle预测结果——框信息和图片位置信息的两个json文件。

        

写在结尾

        后续将整理归纳YOLO和paddle模型的训练过程。

        对于训练中的数据预处理过程如何进行,参加博文:

        https://blog.csdn.net/qq_58718853/article/details/137225306

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐