YOLO-Pose: Enhancing YOLO for Multi Person Pose Estimation Using Object Keypoint Similarity Loss
以下为x86 Linux平台的运行过程
python环境
为了导出模型,您需要安装以下python包
- mmengine >= 0.7.1
- mmcv >= 2.0.0rc4
- mmdet >= 3.0.0rc6
- mmyolo >= 0.6.0
ncnn
可以从ncnn的Release页面直接下载预编译包,或者按照ncnn的wiki从源码进行编译安装
如果您选择预编译包,解压缩后将ncnn-xxxx-xx目录移动到detective目录下,并重命名为ncnn
如果您从源码编译,将编译后得到的install目录移动到detective目录下,并重命名为ncnn
opencv-mobile
-
如果您已经安装了opencv,可以选择跳过这一步,并相应地修改CMakeLists.txt,使其能够链接opencv
-
如果您是从源码编译ncnn,并且开启了NCNN_SIMPLEOCV选项(如下所示),同样可以跳过这一步,删除CMakeLists.txt中OpenCV的部分
option(NCNN_SIMPLEOCV "minimal opencv structure emulation" ON)
- 可以从opencv-mobile的Release页面选择一个版本下载预编译包,解压缩后移动到detective目录下,并重命名为opencv-mobile
pnnx
可以从pnnx的Release页面直接下载预编译包
目录结构
在使用opencv-mobile的情况下,当前工程应当有如下结构
detective
├── assets
├── yolox-pose
├── ncnn
│ ├── bin
│ ├── include
│ └── lib
├── opencv-mobile
│ ├── bin
│ ├── include
│ ├── lib
│ └── share
├── ...
├── LICENSE
├── README.md
YOLOX-Pose的模型中含有Focus层,如果使用pytorch->onnx->ncnn的导出方式,得到的onnx算子比较碎,且需要手工修改ncnn的param文件,比较麻烦,这里我们采用pnnx的导出方式。关于pnnx的详细介绍可参考pnnx。另外,mmdet中Focus实际包含了Focus和Conv两个算子,这里我们将其拆开,使Focus不需要导出权重
- 下载权重文件,并放到export目录下;
- 导出pt文件:
cd detective/yolox-pose/export
python export.py
- 得到model.pt后,导出ncnn
./pnnx model.pt \
inputshape=[1,3,640,640] \
inputshape2=[1,3,416,416] \
moduleop=mmdet.models.backbones.csp_darknet.Focus
- 将转换后的model.ncnn.param和model.ncnn.bin重命名为yolox-pose-tiny.param和yolox-pose-tiny.bin,并放到assets目录下
cd detective/yolox-pose
mkdir -p build
cd build/
cmake ..
make -j4
./yoloxpose ../../assets/person.jpg
这里对关键点的可视化参考了detectron2