Skip to content

Commit 7bb533d

Browse files
committed
支持YOLOX-Pose
1 parent 02afe52 commit 7bb533d

File tree

6 files changed

+966
-1
lines changed

6 files changed

+966
-1
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
- [ ] RTMDet-Rotate
1717

1818
### **人体姿态估计**
19-
- [ ] YOLO-Pose
19+
- [X] [YOLOX-Pose](yolox-pose)
2020

2121
## 感谢
2222

yolox-pose/CMakeLists.txt

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
cmake_minimum_required(VERSION 3.10)
2+
3+
project(yoloxpose)
4+
5+
cmake_minimum_required(VERSION 3.10)
6+
7+
set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/../opencv-mobile/lib/cmake/opencv4)
8+
find_package(OpenCV REQUIRED)
9+
10+
set(ncnn_DIR ${CMAKE_SOURCE_DIR}/../ncnn/lib/cmake/ncnn)
11+
find_package(ncnn REQUIRED)
12+
13+
add_executable(yoloxpose src/yoloxpose.cpp)
14+
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
15+
target_link_libraries(${PROJECT_NAME} ncnn)

yolox-pose/README.md

+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# YOLOX-Pose
2+
3+
[YOLO-Pose: Enhancing YOLO for Multi Person Pose Estimation Using Object Keypoint Similarity Loss](https://arxiv.org/abs/2204.06806)
4+
5+
## 如何运行
6+
7+
以下为x86 Linux平台的运行过程
8+
9+
### 准备
10+
11+
**python环境**
12+
13+
为了导出模型,您需要安装以下python包
14+
15+
+ mmengine >= 0.7.1
16+
+ mmcv >= 2.0.0rc4
17+
+ mmdet >= 3.0.0rc6
18+
+ mmyolo >= 0.6.0
19+
20+
**ncnn**
21+
22+
可以从ncnn的[Release](https://github.com/Tencent/ncnn/releases)页面直接下载预编译包,或者按照ncnn的[wiki](https://github.com/Tencent/ncnn/wiki/how-to-build)从源码进行编译安装
23+
24+
如果您选择预编译包,解压缩后将ncnn-xxxx-xx目录移动到detective目录下,并重命名为ncnn
25+
26+
如果您从源码编译,将编译后得到的install目录移动到detective目录下,并重命名为ncnn
27+
28+
**opencv-mobile**
29+
30+
+ 如果您已经安装了opencv,可以选择跳过这一步,并相应地修改CMakeLists.txt,使其能够链接opencv
31+
32+
+ 如果您是从源码编译ncnn,并且开启了NCNN_SIMPLEOCV选项(如下所示),同样可以跳过这一步,删除CMakeLists.txt中OpenCV的部分
33+
34+
```cmake
35+
option(NCNN_SIMPLEOCV "minimal opencv structure emulation" ON)
36+
```
37+
38+
+ 可以从opencv-mobile的[Release](https://github.com/nihui/opencv-mobile/releases)页面选择一个版本下载预编译包,解压缩后移动到detective目录下,并重命名为opencv-mobile
39+
40+
**pnnx**
41+
42+
可以从pnnx的[Release](https://github.com/pnnx/pnnx/releases)页面直接下载预编译包
43+
44+
**目录结构**
45+
46+
在使用opencv-mobile的情况下,当前工程应当有如下结构
47+
48+
```
49+
detective
50+
├── assets
51+
├── yolox-pose
52+
├── ncnn
53+
│   ├── bin
54+
│   ├── include
55+
│   └── lib
56+
├── opencv-mobile
57+
│   ├── bin
58+
│   ├── include
59+
│   ├── lib
60+
│   └── share
61+
├── ...
62+
├── LICENSE
63+
├── README.md
64+
```
65+
66+
### 导出
67+
68+
模型的[结构](https://github.com/open-mmlab/mmyolo/blob/main/configs/yolox/pose/yolox-pose_tiny_8xb32-300e-rtmdet-hyp_coco.py)[权重](https://download.openmmlab.com/mmyolo/v0/yolox/pose/yolox-pose_s_8xb32-300e-rtmdet-hyp_coco/yolox-pose_s_8xb32-300e-rtmdet-hyp_coco_20230427_005150-e87d843a.pth)文件来自mmyolo的实现。
69+
70+
YOLOX-Pose的模型中含有Focus层,如果使用pytorch->onnx->ncnn的导出方式,得到的onnx算子比较碎,且需要手工修改ncnn的param文件,比较麻烦,这里我们采用pnnx的导出方式。关于pnnx的详细介绍可参考[pnnx](https://github.com/pnnx/pnnx)。另外,mmdet中Focus实际包含了Focus和Conv两个算子,这里我们将其拆开,使Focus不需要导出权重
71+
72+
1. 下载[权重](https://download.openmmlab.com/mmyolo/v0/yolox/pose/yolox-pose_s_8xb32-300e-rtmdet-hyp_coco/yolox-pose_s_8xb32-300e-rtmdet-hyp_coco_20230427_005150-e87d843a.pth)文件,并放到export目录下;
73+
2. 导出pt文件:
74+
```bash
75+
cd detective/yolox-pose/export
76+
python export.py
77+
```
78+
3. 得到model.pt后,导出ncnn
79+
```shell
80+
./pnnx model.pt \
81+
inputshape=[1,3,640,640] \
82+
inputshape2=[1,3,416,416] \
83+
moduleop=mmdet.models.backbones.csp_darknet.Focus
84+
```
85+
4. 将转换后的model.ncnn.param和model.ncnn.bin重命名为yolox-pose-tiny.param和yolox-pose-tiny.bin,并放到assets目录下
86+
87+
### 运行
88+
89+
```shell
90+
cd detective/yolox-pose
91+
mkdir -p build
92+
cd build/
93+
cmake ..
94+
make -j4
95+
./yoloxpose ../../assets/person.jpg
96+
```
97+
98+
这里对关键点的可视化参考了[detectron2](https://github.com/facebookresearch/detectron2/blob/main/detectron2/utils/visualizer.py)
99+
100+
101+
## 感谢
102+
103+
+ [ncnn](https://github.com/Tencent/ncnn)
104+
+ [opencv-mobile](https://github.com/nihui/opencv-mobile)
105+
+ [mmyolo](https://github.com/open-mmlab/mmyolo)
106+
+ [detectron2](https://github.com/facebookresearch/detectron2)

0 commit comments

Comments
 (0)