MMPose的官方文档对于怎么安装其实写得非常清楚,所以本篇文章其实相当于一个过程记录。
1.安装环境
python 3.7.6
pytorch 1.13
cuda 11.6
windows 11
2.安装mmcv
首先安装openmim
pip install -U openmim
安装完成后再使用openmim安装mmcv
mim install mmcv-full
3.安装mmpose
官方给出了两种安装模式:
-
从源码安装(推荐):如果基于 MMPose 框架开发自己的任务,需要添加新的功能,比如新的模型或是数据集,或者使用我们提供的各种工具。
-
作为 Python 包安装:只是希望调用 MMPose 的接口,或者在自己的项目中导入 MMPose 中的模块。
1)从源码安装需要我们从github上下载源代码:
git clone https://github.com/open-mmlab/mmpose.git
cd mmpose
pip install -r requirements.txt
pip install -v -e .
# "-v" 表示输出更多安装相关的信息
# "-e" 表示以可编辑形式安装,这样可以在不重新安装的情况下,让本地修改直接生效
2)作为 Python 包安装
直接使用pip指令即可
pip install mmpose
4.使用HRNet和Lite-HRNet验证安装
因为听说Lite-HRNet虽然浮点运算很低,但是实际运行起来并没有比HRNet快多少,所以这里运行了一下两个网络,并比较了一下推理时间。
首先需要下载两个模型的权重,下面给出两个网络的信息,这里分别下载HRNetW32_256x192(108M)的权重和LiteHRNet-18_256x192(4.82M)的权重
Arch | Input Size | AP | AP50 | AP75 | AR | AR50 | ckpt | log |
---|---|---|---|---|---|---|---|---|
pose_hrnet_w32 | 256x192 | 0.746 | 0.904 | 0.819 | 0.799 | 0.942 | ckpt | log |
pose_hrnet_w32 | 384x288 | 0.760 | 0.906 | 0.829 | 0.810 | 0.943 | ckpt | log |
pose_hrnet_w48 | 256x192 | 0.756 | 0.907 | 0.825 | 0.806 | 0.942 | ckpt | log |
pose_hrnet_w48 | 384x288 | 0.767 | 0.910 | 0.831 | 0.816 | 0.946 | ckpt | log |
Arch | Input Size | AP | AP50 | AP75 | AR | AR50 | ckpt | log |
---|---|---|---|---|---|---|---|---|
LiteHRNet-18 | 256x192 | 0.643 | 0.868 | 0.720 | 0.706 | 0.912 | ckpt | log |
LiteHRNet-18 | 384x288 | 0.677 | 0.878 | 0.746 | 0.735 | 0.920 | ckpt | log |
LiteHRNet-30 | 256x192 | 0.675 | 0.881 | 0.754 | 0.736 | 0.924 | ckpt | log |
LiteHRNet-30 | 384x288 | 0.700 | 0.884 | 0.776 | 0.758 | 0.928 | ckpt | log |
这里选择了一个42秒共1266帧的视频做测试,在RTX 2080S上,两个模型的表现如下(上为lite-hrnet):
load checkpoint from local path: hrnet_w32_coco_256x192-c78dce93_20200708.pth
Running inference...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ] 1265/1266, 5.7 task/s, elapsed: 221s, ETA: 0s
load checkpoint from local path: litehrnet18_coco_256x192-6bace359_20211230.pth
Running inference...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ] 1265/1266, 5.2 task/s, elapsed: 242s, ETA: 0s
可以发现lite-hrnet的推理速度(242s)确实不如hrnet(221s),考虑到lite-hrnet可能在cpu上表现会更好,下面在cpu上进行了测试(i5-12400)。为了节约时间,这里将上一个视频剪短到了3s,共89帧。模型表现如下:
load checkpoint from local path: hrnet_w32_coco_256x192-c78dce93_20200708.pth
Running inference...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 89/89, 0.3 task/s, elapsed: 330s, ETA: 0s
load checkpoint from local path: litehrnet18_coco_256x192-6bace359_20211230.pth
Running inference...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 89/89, 0.3 task/s, elapsed: 259s, ETA: 0s
可以看到lite-hrnet确实要比hrnet推理速度要快。但是也并没有像论文里浮点运算的差距,这很难不让人对论文的产生怀疑。
2023.3.14 更新一下实验
上面的实验结果让我百思不得其解,想了很久。直到有一天我突然想到,hrnet和litehrnet都是top-down的方法,上面实验在推理时使用了mmdet的fasterRCNN,并且视频的处理不是批量处理,故不能真实反映网络的推理性能。所以我又在MPII数据集上进行了验证,使用的GPU是1050ti。在MPII的验证集上,指定batchsize为64,HRNetW32的处理速度为20.3 task/s,而Lite-HRNet18处理速度为39.7 task/s.
这个实验证明,lite确实要比HRNet要快,当然两个网络的精度还是有区别的。