## 1. Requirements
* CUDA 11.1
* TensorRT 7.2.2
* Python 3.8.5
* Cython
* PyTorch 1.8.1
* torchvision 0.9.1
* numpy 1.17.4 (numpy版本过高会出报错)
* python-package setuptools >= 40.0
## 2. Results
[AlphaPose](https://github.com/MVIG-SJTU/AlphaPose/blob/master/docs/MODEL_ZOO.md) 存在多个目标检测+姿态估计模型的组合,
本仓库(fork from [AlphaPose](https://github.com/MVIG-SJTU/AlphaPose) )仅对[YOLOv3_SPP](https://raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov3-spp.cfg) + [Fast Pose](https://github.com/MVIG-SJTU/AlphaPose/blob/master/configs/coco/resnet/256x192_res50_lr1e-3_1x.yaml)
进行加速。
<div align="center">
<img src="docs/2.jpg" , width="400" alt><br>
<b><a>AlphaPose_trt inference rst</a></b>
</div>
AlphaPose在数据预处理部分使用YOLOv3-SPP模型检测出一幅图像中的多个人物,然后将这些人物图像送入到FastPose模型中进行姿态估计。
我们对YOLOv3_SPP模型以及FastPose模型都进行了加速, 并记录了加速前后的mAP值,验证集来自MSCOCO [val2017](https://cocodataset.org/#keypoints-2017) 。 其中ground truth box表示FastPose模型
的检测精度, detection boxes表示YOLOv3_SPP + FastPose模型的检测精度。
<center>
| Method | ground truth box mAP@0.6 | detection boxes mAP@0.6 |
|:-------|:-----:|:-------:|
| AlphaPose | 0.743 |0.718 |
| **AlphaPose_trt** | **0.743** | **0.718** |
</center>
**所有的测试过程都对GPU以及Memory进行了锁频**
GPU Frequency = **1509MHz**, Memory Frequency = **5001MHz**,具体操作如下:
```shell
nvidia-smi -pm 1
nvidia-smi -q -d clock # 查看memory以及gpu的频率
nvidia-smi -ac memoryFrq, gpuFrq
nvidia-smi -lgc gpuFrq,gpuFrq # 将GPU进行锁频
```
### 2.1 YOLOv3-SPP speed up
下表记录了YOLOv3_SPP模型在不同batch size下的推理时间以及吞吐量,并计算了加速比(第三列以及第四列)。
实验环境为:**Tesla T4**
吞吐量: Throughput = 1000 / latency * batchsize
时延: Latency speed up = original latency / trt latency
<center>
| model | Batchsize | Latency (ms) | Throughput | Latency Speedup |Throughput speedup| Volatile GPU-Util |
|:-------|:-----:|:-------:|:-----:|:-------:|:-------:|:-------:|
| YOLOv3-SPP | 1 | 54.1 | 18.48 | 1x | 1x | 87% |
| | 2 | 93.9 | 21.30 | | | 93% |
| | 4 | 172.6 | 23.17 | | | 98% |
| | 8 | 322.8 | 24.78 | | | 100% |
| **YOLOv3-SPP_trt** | 1 | 20.1 | 49.75 | **2.7x** | **2.7x** | **100%** |
| | 2 | 33.7 | 59.35 | **2.8x** | **2.8x** | **100%** |
| | 4 | 60.5 | 66.12 | **2.9x** | **2.9x** | **100%** |
| | 8 | 115.5 | 69.26 | **2.8x** | **2.8x** | **100%** |
</center>
代码实现参考8.2部分
### 2.2 Fast Pose speed up
下表记录了Fast Pose模型在不同batch size下的推理时间以及吞吐量,并计算了加速比(第三列以及第四列)。
实验环境为:**Tesla T4**
<center>
| model | Batchsize | Latency (ms) | Throughput | Latency Speedup |Throughput speedup| Volatile GPU-Util |
|:-------|:-----:|:-------:|:-----:|:-------:|:-------:|:-------:|
| FastPose | 1 | 23.9 | 41.84 | 1x | 1x | 30% |
| | 2 | 24.6 | 81.30 | | | 39% |
| | 4 | 27.9 | 143.37 | | | 64% |
| | 8 | 33.2 | 240.96 | | | 99% |
| | 16 | 56.6 | 282.68 | | | 99% |
| | 32 | 105.8 | 302.46 | | | 99% |
| | 64 | 206.2 | 310.38 | | | 100% |
| **FastPose_trt** | 1 | 1.49 | 671.14 | **16.0x** | **16.0x** | **3%** |
| | 2 | 2.32 | 862.07 | **10.6x** | **10.6x** | **3%** |
| | 4 | 4.06 | 985.22 | **6.9x** | **6.9x** | **38%** |
| | 8 | 7.69 | 1040.31 | **4.3x** | **4.3x** | **100%** |
| | 16 | 15.16 | 1055.41 | **3.7x** | **3.7x** | **100%** |
| | 32 | 29.98 | 1067.38 | **3.5x** | **3.5x** | **100%** |
| | 64 | 59.67 | 1072.57 | **3.5x** | **3.5x** | **100%** |
</center>
代码实现参考8.1部分
### 2.3 YOLOv3-SPP + FastPose speed up
下表记录了YOLOv3_SPP + FastPose模型在不同batch size下的推理时间以及吞吐量,并计算了加速比(第三列以及第四列)。
实验环境为:**Tesla T4**
<center>
| model | Batchsize | Latency (ms) | Throughput | Latency Speedup |Throughput speedup| Volatile GPU-Util |
|:-------|:-----:|:-------:|:-----:|:-------:|:-------:|:-------:|
| AlphaPose | 1 | 78.0 | 12.82 | 1x | 1x | 87% |
| | 2 | 118.5 | 16.87 | | | 94% |
| | 4 | 200.5 | 19.95 | | | 97% |
| | 8 | 356 | 22.47 | | | 100% |
| **AlphaPose_trt** | 1 | 21.59 | 46.32 | **3.6x** | **3.6x** | **100%** |
| | 2 | 36.02 | 55.52 | **3.3x** | **3.3x** | **100%** |
| | 4 | 64.56 | 61.96 | **3.1x** | **3.1x** | **100%** |
| | 8 | 123.19 | 64.94 | **3.5x** | **3.5x** | **100%** |
</center>
代码实现参考8.3部分
## 3. Code installation
AlphaPose的安装参考自[这](https://github.com/MVIG-SJTU/AlphaPose/blob/master/docs/INSTALL.md)
,主要有两种安装方式
#### 3.1 使用conda进行安装
Install conda from [here](https://repo.anaconda.com/miniconda/)
```shell
# 1. Create a conda virtual environment.
conda create -n alphapose python=3.6 -y
conda activate alphapose
# 2. Install PyTorch
conda install pytorch==1.1.0 torchvision==0.3.0
# 3. Get AlphaPose
git clone https://github.com/MVIG-SJTU/AlphaPose.git
# git pull origin pull/592/head if you use PyTorch>=1.5
cd AlphaPose
# 4. install
export PATH=/usr/local/cuda/bin/:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64/:$LD_LIBRARY_PATH
python -m pip install cython
sudo apt-get install libyaml-dev
################Only For Ubuntu 18.04#################
locale-gen C.UTF-8
# if locale-gen not found
sudo apt-get install locales
export LANG=C.UTF-8
######################################################
python setup.py build develop
```
#### 3.2 使用pip进行安装
```shell
# 1. Install PyTorch
pip3 install torch==1.1.0 torchvision==0.3.0
# Check torch environment by: python3 -m torch.utils.collect_env
# 2. Get AlphaPose
git clone https://github.com/MVIG-SJTU/AlphaPose.git
# git pull origin pull/592/head if you use PyTorch>=1.5
cd AlphaPose
# 3. install
export PATH=/usr/local/cuda/bin/:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64/:$LD_LIBRARY_PATH
pip install cython
sudo apt-get install libyaml-dev
python3 setup.py build develop --user
```
## 4. YOLOv3-SPP(PyTorch) to engine
YOLOv3-SPP(PyTorch)可以转成static shape的engine模型以及dynamic shape的engine模型。前者表示engine的输入数据只能是
固定的尺寸,而后者表示我们输入的数据尺寸可以是动态变化的,但是变化的范围要在我们转成engine时所设置的范围内。
### 4.1 转成static shape的engine模型
(1) YOLOv3_SPP转成onnx模型
下载YOLOv3_SPP的[cfg](https://raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov3-spp.cfg) 以及[weights](https://pjreddie.com/media/files/yolov3-spp.weights) ,并分别放在
./detector/yolo/cfg/以及./detector/yolo/data/文件夹下。
YOLOv3_SPP输入数据的尺寸默认为: 1x3x608x608
``` shell
python ./darknet2onnx.py
--cfg ./detector/yolo/cfg/yolov3-spp.cfg
--weight ./detector/yolo/data/yolov3-spp.weights
```
执行该命令之后,会在当前目录下产生一个yolov3_spp_static.onnx模型
(2) 对模型进行修正
由于YOLOv3-SPP模型中存在Padding操作,trt不能直接识别,因此需要onnx进行修改 [this issue](https://github.com/onnx/onnx-tensorrt/blob/master/docs/faq.md#inputsat0-must-be-an-initializer-or-inputsat0is_weights
)。可能需要额外下载tensorflow-gpu == 2.4.1以及polygraphy == 0.22.0模块。
``` shell
polygraphy surgeon sanitize yolov3_spp_static.onnx
--fold-constants
--output yolov3_spp_static_folded.onnx
```
执行该命令之后,会在当前目录下产生一个yolov3_spp_static_folded.onnx模型
(3) 由onnx模型生成engine
需要注册ScatterND plugin,将[this repository](https://github.com/NVIDIA/trt-samples-for-hackathon-cn/tree/master/plugins)
下的plugins文件夹以及Makifile文件放到当前目录下,然后make MakeFile文件,进行编译,编译之后�
__AtYou__
- 粉丝: 3513
- 资源: 2177
最新资源
- springboot项目山西大同大学学生公寓管理系统boot.zip
- springboot项目社区帮扶对象管理系统.zip
- springboot项目社区待就业人员信息管理系统的设计与实现.zip
- springboot项目社区网格化管理平台的构建.zip
- springboot项目社区防疫物资申报系统.zip
- abaqus桩基础 桥墩拟静力试验 包涵实体建模、钢筋建模、材料定义、装配模型、分析步、网格划分、相互作用、载荷、计算等超详细教程(带源文件)
- springboot项目社区医疗服务系统.zip
- springboot项目社区物资交易互助平台.zip
- springboot项目社区医疗服务可视化系统.zip
- springboot项目社区疫情返乡管控系统.zip
- springboot项目社区疫情管理系统.zip
- springboot项目实习生管理系统设计和实现.zip
- COCOS经典小游戏案例,游戏引擎是COCOS,TS开发,包含2048,俄罗斯方块,飞行的小鸟,黄金矿工 4个经典的小游戏,代码工整,逻辑清晰,无论是想学习cocos还是想尝试开发小游戏都非常有帮助
- springboot项目水产养殖系统.zip
- springboot项目数字化农家乐管理平台的设计与实现.zip
- 1.Matlab实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络时间序列预测; 2.输入数据为单变量时间序列数据,即一维数据; 3.运行环境Matlab2020b及以上,data
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈