Skip to content

Commit

Permalink
Merge branch 'main' into dev-tekton
Browse files Browse the repository at this point in the history
  • Loading branch information
freeliuzc committed Jul 26, 2022
2 parents f94c3a3 + e396e80 commit 6abfe61
Show file tree
Hide file tree
Showing 9 changed files with 344 additions and 39 deletions.
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,10 @@ PaddleCloud 基于 [Tekton](https://github.com/tektoncd/pipeline) 为飞桨模
- [PaddleSpeech镜像仓库](https://hub.docker.com/r/paddlecloud/paddlespeech)
- [PaddleRec镜像仓库](https://hub.docker.com/r/paddlecloud/paddlerec)
- 模型套件Docker化部署案例
- [PP-Human行人检测](./samples/pphuman/pphuman-docker.md)
- [训练PP-YOLOE模型](./samples/pphuman/ppyoloe-docker.md)
- [PP-Human行人检测](./samples/PaddleDetection/pphuman/pphuman-docker.md)
- [训练PP-YOLOE模型](./samples/PaddleDetection/pphuman/ppyoloe-docker.md)
- [PP-OCRv3训推一体部署实战](./samples/PaddleOCR/PP-OCRv3.md)
- [PP-Tracking多目标跟踪实战](./samples/PaddleDetection/PP-Tracking/README.md)

## Kubernetes集群部署

Expand All @@ -72,7 +73,7 @@ PaddleCloud 基于 Kubernetes 的 Operator 机制为您提供了多个功能强
- [快速上手教程](./tekton/example/README.md)
- [kaniko 使用教程](./tekton/tasks/kaniko/README.md)
- 云上飞桨组件使用案例
- [训练 PP-YOLOE 目标检测模型](./samples/pphuman/ppyoloe-k8s.md)
- [训练 PP-YOLOE 目标检测模型](./samples/PaddleDetection/pphuman/ppyoloe-k8s.md)
- [训练 PP-OCRv3 文本识别模型](./samples/PaddleOCR/PP-OCRv3.md)
- 云上模型全链路案例
- [PP-OCR 文字检测模型全链路案例](./samples/pipelines/README.md)
Expand Down
60 changes: 60 additions & 0 deletions docs/zh_CN/docker-paddle-kits-set.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,62 @@
# Paddle-toolkit-collection

该镜像仓库位于 [docker hub](https://hub.docker.com/repository/docker/paddlecloud/paddle-toolkit-collection),主要包含 [paddlepaddle](https://github.com/PaddlePaddle) 多个模型套件和套件的依赖环境,方便模型套件用户进行 Docker 化部署或在云上部署。
Paddle-toolkit-collection 套件的标准镜像基于 [Tekton Pipeline](https://github.com/tektoncd/pipeline) 自动构建,
除了直接使用套件的标准镜像,如果您需要对模型套件进行二次开发并希望能够持续构建定制的镜像,
可以参考 [PaddleCloud Tekton文档](https://github.com/PaddlePaddle/PaddleCloud/blob/main/tekton/README.md)目录下的文档构建您自己的套件镜像CI流水线。

更多关于部署的内容可以参考云上飞桨项目 [PaddleCloud 主页](https://github.com/PaddlePaddle/PaddleCloud)

目前镜像内维护的套件及相应版本如下表所示,其中**镜像仓库**为该模型套件单独的 docker 镜像仓库。

| Paddle 套件 | 镜像仓库 | 维护版本 |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ----------- |
| [PaddleOCR](https://github.com/PaddlePaddle/PaddleOCR) | [PaddleOCR 镜像仓库](https://hub.docker.com/repository/docker/paddlecloud/paddleocr) | release/2.5 |
| [PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection) | [PaddleDetection 镜像仓库](https://hub.docker.com/repository/docker/paddlecloud/paddledetection) | release/2.4 |
| [PaddleNLP](https://github.com/PaddlePaddle/PaddleNLP) | [PaddleNLP 镜像仓库](https://hub.docker.com/repository/docker/paddlecloud/paddlenlp) | develop |
| [PaddleSeg](https://github.com/PaddlePaddle/PaddleSeg) | [PaddleSeg 镜像仓库](https://hub.docker.com/repository/docker/paddlecloud/paddleseg) | release/2.5 |
| [PaddleClas](https://github.com/PaddlePaddle/PaddleClas) | [PaddleClas 镜像仓库](https://hub.docker.com/repository/docker/paddlecloud/paddleclas) | release/2.3 |
| [PaddleSpeech](https://github.com/PaddlePaddle/PaddleSpeech) | [PaddleSpeech 镜像仓库](https://hub.docker.com/repository/docker/paddlecloud/paddlespeech) | develop |
| [PaddleRec](https://github.com/PaddlePaddle/PaddleRec) | [PaddleRec 镜像仓库](https://hub.docker.com/repository/docker/paddlecloud/paddlerec) | master |


## 安装 Docker

如果您所使用的机器上还没有安装 Docker,您可以参考 [Docker 官方文档](https://docs.docker.com/get-docker/) 来进行安装。
如果您需要使用支持 GPU 版本的镜像,则还需安装好 NVIDIA 相关驱动和 nvidia-docker,详情请参考[官方文档](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker)

## 快速上手

使用的Docker环境可以快速上手体验,我们为您提供了CPU和GPU版本的镜像。
如果您是Docker新手,建议您花费几分钟的时间学习下[docker基本用法](https://github.com/PaddlePaddle/PaddleCloud/blob/main/docs/zh_CN/docker-tutorial.md)

**使用CPU版本的Docker镜像**

```bash
docker run --name dev -v $PWD:/mnt -p 8888:8888 -it paddlecloud/paddle-toolkit-collection:2.3.0-cpu /bin/bash
```

**使用GPU版本的Docker镜像**

```bash
docker run --name dev --runtime=nvidia -v $PWD:/mnt -p 8888:8888 -it paddlecloud/paddle-toolkit-collection:2.3.0-gpu-cuda10.2-cudnn7 /bin/bash
```

进入容器内,则可执行各个套件中提供的案例。

**使用 Jupyterlab**

最新版镜像集成了 jupyterlab,进入容器后,可通过以下命令开启服务。
```bash
$ jupyter lab --ip=0.0.0.0 --port=8888 --allow-root --notebook-dir=/home
```
## 镜像列表

镜像 tag 的 2.x.x 代表 Paddle 版本,其中包含的套件为构建日期的最新 commit 版本


| 镜像路径 | 构建时间 |
| ------------------------------------------------------------ | -------------- |
| paddlecloud/paddle-toolkit-collection:2.3.0-gpu-cpu | 2022年05月18日 |
| paddlecloud/paddle-toolkit-collection:2.3.0-gpu-cuda10.2-cudnn7 | 2022年05月18日 |
| paddlecloud/paddle-toolkit-collection:2.3.0-gpu-cuda11.2-cudnn8 | 2022年05月18日 |
1 change: 1 addition & 0 deletions docs/zh_CN/docker-tutorial.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ docker run --name dev --runtime=nvidia -v $PWD:/paddle -p 8888:8888 -it paddlecl
- -it:开启容器和本机的交互式运行
- --rm:退出容器后,自动删除容器,只有当您仅想试用一次时,加上此参数
- --runtime=nvidia:表示使用 nvidia-docker 环境,及挂载相应的 cuda 环境和 GPU。
- --shm-size=16G:将容器共享内存设为16G,建议将此参数设的大一些,比如64G。

注:一般情况下,推荐将代码和数据集保存在本地,通过 -v 挂载到容器内,后续即使将 container 删除,代码和数据集不会受到影响。

Expand Down
244 changes: 244 additions & 0 deletions samples/PaddleDetection/PP-Tracking/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,244 @@
# PP-Tracking多目标跟踪部署实战

**PP-Tracking**是基于飞桨深度学习框架的业界首个开源实时跟踪系统。针对实际业务的难点痛点,PP-Tracking内置行人车辆跟踪、跨镜头跟踪、多类别跟踪、小目标跟踪及流量计数等能力与产业应用,同时提供可视化开发界面。模型集成多目标跟踪,目标检测,ReID轻量级算法,进一步提升PP-Tracking在服务器端部署性能。同时支持python,C++部署,适配Linux,Nvidia Jetson多平台环境。

![](https://ai-studio-static-online.cdn.bcebos.com/c8ffcde8c1974a69863806e3aeaf81c6680f3a8de50d4d56be9a14f155979f9e)

![](https://ai-studio-static-online.cdn.bcebos.com/ad76397a0c954b86b024a4330343e073e8ad0c1261da4a29be2a0f3bdbb196c6)
![](https://ai-studio-static-online.cdn.bcebos.com/38c90f74410041a3964e4f52b98f3ee881b443b6c7264f6ebd063b3c03ff8e4c)


在如下示例中,将介绍如何使用示例代码基于您在BML中已创建的数据集来完成单镜头跟踪模型的训练,评估和推理。以及多镜头的部署。

## Docker化部署

PaddleCloud基于 [Tekton](https://github.com/tektoncd/pipeline) 为Detection模型套件提供了镜像持续构建的能力,并支持CPU、GPU以及常见CUDA版本的镜像。
您可以查看 [PaddleDetection镜像仓库](https://hub.docker.com/r/paddlecloud/paddledetection) 来获取所有的镜像列表。
同时我们也将PP-Tracking多目标跟踪案例放置到了AI Studio平台上,您可以点击 [PP-Tracking之手把手玩转多目标跟踪](https://aistudio.baidu.com/aistudio/projectdetail/3916206?channelType=0&channel=0) 在平台上快速体验。

> **适用场景**:本地测试开发环境、单机部署环境。
## 1. 安装Docker

如果您所使用的机器上还没有安装 Docker,您可以参考 [Docker 官方文档](https://docs.docker.com/get-docker/) 来进行安装。
如果您需要使用支持 GPU 版本的镜像,则还需安装好NVIDIA相关驱动和 [nvidia-docker](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker)

**注意**:如果您使用的是Windows系统,需要开启 [WSL2(Linux子系统功能)功能](https://docs.microsoft.com/en-us/windows/wsl/install)

### 2. 启动容器

**使用CPU版本的Docker镜像**

```bash
# 这是加上参数 --shm-size=32g 是为了防止容器里内存不足
docker run --name ppdet -v $PWD:/mnt -p 8888:8888 -it --shm-size=32g paddlecloud/paddledetection:2.4-cpu-e9a542 /bin/bash
```

**使用GPU版本的Docker镜像**

```bash
docker run --name ppdet --runtime=nvidia -v $PWD:/mnt -p 8888:8888 -it --shm-size=32g paddlecloud/paddleocr:2.4-gpu-cuda10.2-cudnn7-e9a542 /bin/bash
```

进入容器内,则可进行PP-Tracking案例的实战体验。

### 3. 数据集准备

修改mot的配置文件,文件目录如下
整理之前:

```azure
MOT16
└——————train
└——————test
```

整理之后:

```
MOT16
|——————images
| └——————train
| └——————test
└——————labels_with_ids
└——————train
```

如果网速不好可以自行下载和解压数据集

```bash
# 下载数据集
cd ./data && wget https://bj.bcebos.com/v1/paddledet/data/mot/demo/MOT16.zip

mv ./data/MOT16.zip ./PaddleDetection/dataset/mot

# 解压数据集
cd ./PaddleDetection/dataset/mot && unzip MOT16.zip
```

生成labels_with_ids

```bash
cd ./PaddleDetection/dataset/mot/MOT16 && mkdir -p images

cd ./PaddleDetection/dataset/mot/MOT16 && mv ./train ./images && mv ./test ./images

cd ./PaddleDetection/dataset/mot && python gen_labels_MOT.py
```

生成mot16.train文件并且复制到 image_lists下面

```python
import glob
import os.path as osp
image_list = []
for seq in sorted(glob.glob('PaddleDetection/dataset/mot/MOT16/images/train/*')):
for image in glob.glob(osp.join(seq, "img1")+'/*.jpg'):
image = image.replace('PaddleDetection/dataset/mot/','')
image_list.append(image)
with open('mot16.train','w') as image_list_file:
image_list_file.write(str.join('\n',image_list))
```

```bash
mkdir -p ./PaddleDetection/dataset/mot/image_lists && cp -r mot16.train ./PaddleDetection/dataset/mot/image_lists
```

### 4. 修改配置文件里面的数据集

在/home/PaddleDetection/configs/mot/fairmot/fairmot_dla34_30e_1088x608.yml文件最后添加

```yaml
... ...
# for MOT training
# for MOT training
TrainDataset:
!MOTDataSet
dataset_dir: dataset/mot
image_lists: ['mot16.train']
data_fields: ['image', 'gt_bbox', 'gt_class', 'gt_ide']

# for MOT evaluation
# If you want to change the MOT evaluation dataset, please modify 'data_root'
EvalMOTDataset:
!MOTImageFolder
dataset_dir: dataset/mot
data_root: MOT16/images/train
keep_ori_im: False # set True if save visualization images or video, or used in DeepSORT

# for MOT video inference
TestMOTDataset:
!MOTImageFolder
dataset_dir: dataset/mot
keep_ori_im: True # set True if save visualization images or video
```
### 5. 开始训练
使用MOT16-02序列作为训练数据,训练30epoch,V100环境下大约需要30分钟
```bash
# 这里使用GPU设备来训练
cd /home/PaddleDetection/ && python -m paddle.distributed.launch --log_dir=./fairmot_dla34_30e_1088x608/ --gpus 0 tools/train.py -c configs/mot/fairmot/fairmot_dla34_30e_1088x608.yml
```

### 6. 模型评估

为了方便我们可以下载训练好的模型进行eval https://paddledet.bj.bcebos.com/models/mot/fairmot_dla34_30e_1088x608.pdparams

```bash
# 将 model.pdparams 下载并放置到 `output` 文件中
mkdir -p PaddleDetection/output && cd PaddleDetection/output/ && wget https://bj.bcebos.com/v1/paddledet/models/mot/fairmot_dla34_30e_1088x608.pdparams

# 进行模型评估
cd /home/PaddleDetection && CUDA_VISIBLE_DEVICES=0 python tools/eval_mot.py -c configs/mot/fairmot/fairmot_dla34_30e_1088x608.yml -o weights=output/fairmot_dla34_30e_1088x608.pdparams
```

### 7. 模型推理

使用下载好的模型进行推理,为了方便我们只推理了dataset/mot/MOT16/images/test/MOT16-01/img1下面的数据

跟踪输出视频保存在output/mot_outputs/img1_vis.mp4

txt文件结果保存在output/mot_results/img1.txt,输出格式表示为frame_id, id, bbox_left, bbox_top, bbox_width, bbox_height, score, x, y, z

```bash
cd /home/PaddleDetection/ && CUDA_VISIBLE_DEVICES=0 python tools/infer_mot.py -c configs/mot/fairmot/fairmot_dla34_30e_1088x608.yml -o weights=output/fairmot_dla34_30e_1088x608.pdparams --image_dir=dataset/mot/MOT16/images/test/MOT16-01/img1 --save_videos
```

### 8. 导出模型

```bash
cd /home/PaddleDetection && CUDA_VISIBLE_DEVICES=0 python tools/export_model.py -c configs/mot/fairmot/fairmot_dla34_30e_1088x608.yml -o weights=output/fairmot_dla34_30e_1088x608.pdparams
```

### 9. 使用导出的模型进行推理

PP-Tracking中在部署阶段提供了多种跟踪相关功能,例如流量计数,出入口统计,绘制跟踪轨迹等,具体使用方法可以[参考文档](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.3/deploy/pptracking/python#%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E)

```bash
cd /home/PaddleDetection && wget https://bj.bcebos.com/v1/paddledet/data/mot/demo/person.mp4 && wget https://bj.bcebos.com/v1/paddledet/data/mot/demo/entrance_count_demo.mp4

# 输出视频保存在output/person.mp4中
cd /home/PaddleDetection && python deploy/pptracking/python/mot_jde_infer.py --model_dir=output_inference/fairmot_dla34_30e_1088x608 --video_file=person.mp4 --device=GPU

cd /home/PaddleDetection && python deploy/pptracking/python/mot_jde_infer.py --model_dir=output_inference/fairmot_dla34_30e_1088x608 --do_entrance_counting --draw_center_traj --video_file=entrance_count_demo.mp4 --device=GPU
```

## MTMCT 跨镜跟踪体验

跨镜头多目标跟踪是对同一场景下的不同摄像头拍摄的视频进行多目标跟踪,是监控视频领域一个非常重要的研究课题。

相较于单镜头跟踪,跨镜跟踪将不同镜头获取到的跟踪轨迹进行融合,得到跨镜跟踪的输出轨迹。PP-Tracking选用DeepSORT方案实现跨镜跟踪,为了达到实时性选用了PaddleDetection自研的PP-YOLOv2和PP-PicoDet作为检测器,选用PaddleClas自研的轻量级网络PP-LCNet作为ReID模型。更多内容可参考文档

本项目展示城市主干道场景下的车辆跨镜跟踪预测流程,数据来自[AIC21开源数据集](https://www.aicitychallenge.org/)

### 1. 下载预测部署模型

首先我们下载目标检测和ReID预测模型,[下载地址](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/mot/mtmct#deepsort%E5%9C%A8-aic21-mtmctcityflow-%E8%BD%A6%E8%BE%86%E8%B7%A8%E5%A2%83%E8%B7%9F%E8%B8%AA%E6%95%B0%E6%8D%AE%E9%9B%86test%E9%9B%86%E4%B8%8A%E7%9A%84%E7%BB%93%E6%9E%9C) ,然后统一放在~/PaddleDetection/output_inference下

```bash
wget https://paddledet.bj.bcebos.com/models/mot/deepsort/ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle.tar

wget https://paddledet.bj.bcebos.com/models/mot/deepsort/deepsort_pplcnet_vehicle.tar

cd /home/PaddleDetection/ && mkdir -p output_inference

mv ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle.tar ~/PaddleDetection/output_inference

mv deepsort_pplcnet_vehicle.tar ~/PaddleDetection/output_inference

cd ~/PaddleDetection/output_inference && tar -xvf ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle.tar && tar -xvf deepsort_pplcnet_vehicle.tar
```

### 2. 跨镜跟踪预测

在完成模型下载后,需要修改PaddleDetection/deploy/pptracking/python路径下的mtmct_cfg.yml,这份配置文件中包含了跨镜跟踪中轨迹融合的相关参数。首先需要确定cameras_bias中对应的名称与输入视频名称对应;其次,我们本次项目使用轨迹融合中的通用方法,将zone和camera相关的方法设置为False。修改后配置如下:

```yaml
# config for MTMCT
MTMCT: True
cameras_bias:
c003: 0
c004: 0
# 1.zone releated parameters
use_zone: False #True
zone_path: dataset/mot/aic21mtmct_vehicle/S06/zone
# 2.tricks parameters, can be used for other mtmct dataset
use_ff: True
use_rerank: True
# 3.camera releated parameters
use_camera: False #True
use_st_filter: False
# 4.zone releated parameters
use_roi: False #True
roi_dir: dataset/mot/aic21mtmct_vehicle/S06
```
配置完成后即可运行如下命令,输入视频为c003.mp4和c004.mp4两个不同视角的摄像头拍摄结果,跨镜跟踪输出视频保存在
```bash
wget https://bj.bcebos.com/v1/paddledet/data/mot/demo/mtmct-demo.tar && mv mtmct-demo.tar ~/PaddleDetection && cd ~/PaddleDetection && tar xvf mtmct-demo.tar

cd ~/PaddleDetection && python deploy/pptracking/python/mot_sde_infer.py --model_dir=output_inference/ppyolov2_r50vd_dcn_365e_aic21mtmct_vehicle/ --reid_model_dir=output_inference/deepsort_pplcnet_vehicle/ --mtmct_dir=./mtmct-demo --device=GPU --mtmct_cfg=deploy/pptracking/python/mtmct_cfg.yml --scaled=True --save_mot_txts --save_images
```
File renamed without changes
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
## 飞桨K8S大礼包概览

<div align="center">
<img src="./img/PaddleCloudArch.png" width="800"/>
<img src="img/PaddleCloudArch.png" width="800"/>
</div>

- **简单易用的编程接口**
Expand Down Expand Up @@ -46,7 +46,7 @@
- 样本缓存组件基于开源项目JuiceFS实现了样本缓存,旨在解决Kubernetes中计算与存储分离的结构带来的高网络IO开销问题,提升云上飞桨分布式训练作业的执行效率。

<div align="center">
<img src="../../docs/images/sampleset-arch.jpeg" width="600"/>
<img src="../../../docs/images/sampleset-arch.jpeg" width="600"/>
</div>

## 使用云原生组件训练PP-YOLOE
Expand Down
Loading

0 comments on commit 6abfe61

Please sign in to comment.