LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

PaddleDetection的配置及踩坑经验

前言

本人人工智能领域小白。近日有需求使用PaddlePaddle框架,运用图像识别中的行人影响追踪技术,折腾了大半天,中途踩了不少坑,才将基本的环境配置好。经验证,网上有些教学博客的方法已经过时,于是写一篇博客,帮助和我一样什么也不懂的技术小白们,体验最基础的图像识别框架的构建。

本文以64位x86架构Windows 11系统,Python3.9.13为例

参考资料

Paddlepaddle官方安装教程

Paddlepaddle官方文档

Github仓库:PaddleDetection

经典手把手教学快速安装Anaconda+百度飞桨paddlepaddle

各pipeline的参考文档

………

安装Anaconda

Anaconda指的是一个开源的Python发行版本
其包含了conda、Python等180多个科学包及其依赖项

因为包含了大量的科学包,Anaconda 的下载文件比较大
如果只需要某些包,或者需要节省带宽或存储空间
也可以使用Miniconda这个较小的发行版(仅包含conda和 Python)

Anaconda以其非常简单易安装的环境、科学包
非常适合入门的初学者进行Python和R语言的学习

  • 下载与安装

Anaconda下载链接:Anaconda Distribution

进入网站,翻到最下面,选择对应的版本

1

进入安装界面

2

此处勾选上第二个选项,等待安装成功

  • 新环境搭建

得益于Anaconda完善的的的科学包管理系统,我们可以方便地新建测试环境

打开Anaconda Navigater 4

依次点击左边”Environment”、下方”Create”,创建新环境(名称最好使用英文,以防不必要的麻烦) 5

然后打开新环境中的终端 6 7

后续所有的命令行操作在此终端中进行

安装Paddlepaddle环境

为了加快下载速度,先换源到清华源

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/main/
conda config --set show_channel_urls yes
  • GPU版本的Paddlepaddle(仅针对拥有NVIDIA® GPU的计算机)

先安装CUDA

在本计算机上,对于 CUDA 11.6,需要搭配 cuDNN 8.4.0,安装命令为:

conda install paddlepaddle-gpu==2.4.1 cudatoolkit=11.6 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge

其他版本的安装只需要改变命令中的版本号,详见Windows 下的 Conda 安装

  • CPU版本的Paddlepaddle

conda install paddlepaddle==2.4.1 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
  • 验证安装

使用python进入Python解释器,输入import paddle ,再输入 paddle.utils.run_check()

如果出现PaddlePaddle is installed successfully!,说明安装成功 8

Jupyter Notebook的使用

本文的运行工具为Jupyter

Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。

简而言之,Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码运行代码,代码的运行结果也会直接在代码块下显示的程序。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。

Anaconda的默认环境自带Jupyter,但paddle环境并没有,所以先安装Jupyter库

pip install jupyter

在paddle环境的终端中输入jupyter notebook可进入Jupyter 9

Paddle Detection的安装

本文以PaddleDetection中的一个pipeline——PP-HumanV2为例

在终端中运行如下指令

# 克隆PaddleDetection仓库
mkdir ~/work
cd ~/work/
git clone https://github.com/PaddlePaddle/PaddleDetection.git

# 安装其他依赖
cd PaddleDetection
mkdir -p demo_input demo_output
pip install -r requirements.txt

克隆到本地的配置文件在C:\Users\用户名\PaddleDetection

接下来使用Jupyter运行。打开Jupyter并进入C:\Users\用户名\work\PaddleDetection中,右上角创建新Python3文件 10

注:Jupyter的使用说明详见Jupyter notebook 入门教程等,此处不再赘述

配置与使用

  • 配置

    PP-Human的配置文件在C:\Users\zhrli\work\PaddleDetection\deploy\pipeline\config\infer_cfg_pphuman.yml,可通过修改配置文件来改变功能。配置文件的编辑详见https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.5/deploy/pipeline/docs/tutorials

  • 导入训练模型

    下载https://www.paddlepaddle.org.cn/modelsDetail?modelId=11中的模型,将其解压至./output_inference文件夹(没有就新建)

  • 使用

    以下为几组示例,引用自https://www.paddlepaddle.org.cn/modelsDetail?modelId=11

    #直接使用默认配置或者examples中配置文件,或者直接在`infer_cfg_pphuman.yml`中	修改配置:
    
    # 例:行人检测,指定配置文件路径和测试图片,图片输入默认打开检测模型
    !wget -P demo_input -N https://paddledet.bj.bcebos.com/modelcenter/images/PP-Human/human_attr.jpg 
    !python deploy/pipeline/pipeline.py --config deploy/pipeline/config/infer_cfg_pphuman.yml --image_file=demo_input/human_attr.jpg --device=cpu --output_dir=demo_output
    
    # 例:行人属性识别,直接使用examples中配置
    !wget -P demo_input -N https://paddledet.bj.bcebos.com/modelcenter/images/PP-Human/human_attr.mp4
    !python deploy/pipeline/pipeline.py --config deploy/pipeline/config/examples/infer_cfg_human_attr.yml --video_file=demo_input/human_attr.mp4 --device=cpu --output_dir=demo_output
    
    #使用命令行进行功能开启,或者模型路径修改:
    
    # 例:行人跟踪,指定配置文件路径,模型路径和测试视频, 命令行中指定的模型路径优先级高于配置文件
    !wget -P demo_input -N https://paddledet.bj.bcebos.com/modelcenter/images/PP-Human/human_count.mp4
    !python deploy/pipeline/pipeline.py --config deploy/pipeline/config/infer_cfg_pphuman.yml -o MOT.enable=True --video_file=demo_input/human_count.mp4 --device=cpu --output_dir=demo_output
    
    # 例:行为识别,以摔倒识别为例,命令行中开启SKELETON_ACTION模型
    !wget -P demo_input -N https://paddledet.bj.bcebos.com/modelcenter/images/PP-Human/human_falldown.mp4
    !python deploy/pipeline/pipeline.py --config deploy/pipeline/config/infer_cfg_pphuman.yml -o SKELETON_ACTION.enable=True --video_file=demo_input/human_falldown.mp4 --device=cpu --output_dir=demo_output
    
    #rtsp推拉流
    
    #对rtsp拉流的支持,使用--rtsp RTSP [RTSP ...]参数指定一路或者多路rtsp视频流,如果是多路地址中间用空格隔开。(或者video_file后面的视频地址直接更换为rtsp流地址),示例如下:
    
    # 例:行人属性识别,单路视频流
    !python deploy/pipeline/pipeline.py --config deploy/pipeline/config/examples/infer_cfg_human_attr.yml -o visual=False --rtsp rtsp://[YOUR_RTSP_SITE]  --device=cpu
    
    # 例:行人属性识别,多路视频流
    !python deploy/pipeline/pipeline.py --config deploy/pipeline/config/examples/infer_cfg_human_attr.yml -o visual=False --rtsp rtsp://[YOUR_RTSP_SITE1]  rtsp://[YOUR_RTSP_SITE2] --device=cpu
    
    
    # 视频结果推流rtsp
    
    # 预测结果进行rtsp推流,使用--pushurl rtsp:[IP] 推流到IP地址端,PC端可以使用[VLC播放器](https://vlc.onl/)打开网络流进行播放,播放地址为 `rtsp:[IP]/videoname`。其中`videoname`是预测的视频文件名,如果视频来源是本地摄像头则`videoname`默认为`output`.
    
    # 例:行人属性识别,单路视频流,该示例播放地址为 rtsp://[YOUR_SERVER_IP]:8554/test_video
    !python deploy/pipeline/pipeline.py --config deploy/pipeline/config/examples/infer_cfg_human_attr.yml --video_file=test_video.mp4 --device=cpu --pushurl rtsp://[YOUR_SERVER_IP]:8554
    
    # 注:
    # 1. rtsp推流服务基于 [rtsp-simple-server](https://github.com/aler9/rtsp-simple-server), 如使用推流功能请先开启该服务.
    # 2. rtsp推流如果模型处理速度跟不上会出现很明显的卡顿现象,建议跟踪模型使用ppyoloe_s版本,即修改配置中跟踪模型mot_ppyoloe_l_36e_pipeline.zip替换为mot_ppyoloe_s_36e_pipeline.zip。
    
    1. 其中的image_file和video_file后面的内容是要处理的文件名称(带扩展名)
    2. 若用GPU加载,应将CPU改为GPU
    3. 待处理的视频与图片文件应放在C:\Users\用户名\work\PaddleDetection\demo_input文件夹中,输出在C:\Users\用户名\work\PaddleDetection\demo_output文件夹中

遇到的问题与解决措施

  1. 我曾经同时安装了两个版本的Python,将环境配置得一塌糊涂,于是采用了全部清空重装的措施。

    Anaconda卸载指南 Python卸载指南

    但当我重新安装上Anaconda并试着使用python --version检测安装时,命令行什么都没返回。上网一查,我的问题出现在安装了多个版本的Python上,但先前我已经卸载了Python,在”程序与功能”面板上也无法找到Python。于是使用where python命令,找到了python的路径,发现真的是之前的Python没有卸载干净,将其删除就可以了。但是之前的python.exe位于我的C:\Users\zhrli\AppData\Local\Microsoft\WindowsApps路径中,直接删除会出现以下报错

    3

    所以我又从网上查询到了解决方法。在拥有管理员权限的命令行中使用如下指令

    rd /s/q 文件夹路径  (强制删除文件文件夹和文件夹内所有文件)
    del /f/s/q 文件路径  (强制删除文件,文件名必须加文件后缀名)
    

    此命令可以强制删除文件(详见博客windows删除文件报错《0x80070780系统无法访问此文件》)

    将python.exe和python3.exe删除后,python可以正常运行了

  2. 装Anaconda时报错Solving environment: failed with initial frozen solve. Retrying with flexible solve.

    解决方法:

    # 更新conda
    conda update -n base conda
    conda update -all
    # 修改频道 
    conda config --add channels conda-forge
    conda config --set channel_priority flexible
    # 安装成功!
    
  3. 安装CPU版本的Paddlepaddle时不用去折腾CUDA和cuDNN。这两个东西在国内下载奇慢无比,不建议从NVIDIA官网下载,推荐使用镜像站。而且一定要装对版本,使其完美匹配,否则无法运行。

  4. Paddle Detection的安装中,运行”安装依赖”指令往往会出现很多问题。

    • ERROR:Could not build wheels for pycocotools, which is required to install pyproject.toml-based

      解决方法:密码i5d7 下载该文件,将pycocotools两个文件夹放到anaconda3\Lib\site-packages中

    • error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools”: https://visualstudio.microsoft.com/visual-cpp-build-tools/

      解决方法:下载[Microsoft Visual C++ Build Tools](Microsoft Visual C++ Build Tools),选择以下内容安装 11

    • error: subprocess-exited-with-error

      解决方法:没有通解,仔细研究错误日志,缺什么库补什么库

      利用好pip install指令

    • Python setup.py bdist_wheel did not run successfullylegacy-install-failure

      解决方法:安装并更新Cmake,Wheel,pip,setuptools。参照https://bobbyhadz.com/blog/python-setup-py-bdist-wheel-did-not-run-successfully

    • imbalanced-learn 0.7.0 requires joblib>=0.11, which is not installed. imbalanced-learn 0.7.0 requires scikit-learn>=0.23, which is not installed.

      解决方法:改变安装的包的版本。使用如下指令

      pip install xxx==版本号 -i https://pypi.doubanio.com/simple
      
    • DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.9 it will stop working

      解决方法:修改C:\Users\用户名\work\PaddleDetection\deploy\pipeline\pipeline.py文件的24行为

      from collections import defaultdict
      from collections.abc import Sequence
      
    • ‘wget‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

      解决方法:1.直接pip install wget

后记

折腾这一阵子,也算有了几点启发。

  1. 最好顺着一个教程一直走,直到走不通才去查阅别的资料……不要这里看一点那里看一点,否则可能会无意中重复已经进行过的操作,导致错误。
  2. 切记程序的运行环境是很重要的。如本案例一定要在Paddle环境中操作,不要切回默认环境。本人因此耽误了不少时间。
  3. 看到报错不该有畏难心理。应当仔仔细细地分析报错日志,一点一点地尝试解决问题。
  4. 应当大力锻炼使用搜索引擎的能力,多去看英文博客与文献,不要嫌麻烦。

希望我的一番折腾经历可以帮助到与我一样迷茫的萌新们。

showimg