Skip to content

Latest commit

 

History

History
executable file
·
156 lines (132 loc) · 9.21 KB

README.md

File metadata and controls

executable file
·
156 lines (132 loc) · 9.21 KB

简体中文

GroundingDINO

目录

1. 简介

GroundingDINO是一种多模态的目标检测模型。 本例程对GroundingDINO官方开源仓库的模型和算法进行移植,使之能在SOPHON BM1684X上进行推理测试,移植过程中针对TPU的推理上对源代码进行了优化和提速。

2. 特性

  • 支持BM1684X(x86 PCIe、SoC)
  • 支持FP16模型编译和推理
  • 支持基于PIL的Python推理
  • 支持基于SOPHON-SAIL的C++推理
  • 支持单batch模型推理
  • 支持图片测试

3. 准备模型与数据

建议使用TPU-MLIR编译BModel,Pytorch模型在编译前要导出成onnx模型,其中Pytorch转onnx模型具体可参考常见问题

​本例程在scripts目录下提供了相关模型和数据的下载脚本download.sh,您也可以自己准备模型和数据集,通过下载的mlir工具tpu-mlir_v1.9.beta.0-89-g009410603-20240715.tar.gz,并参考4. 模型编译进行模型转换。

# 安装unzip,若已安装请跳过,非ubuntu系统视情况使用yum或其他方式安装
sudo apt install unzip
chmod -R +x scripts/
./scripts/download.sh

执行下载脚本后,当前目录下的文件如下:

├── docs
│   └── GroundingDINO_Common_Problems.md        #GroundingDINO 常见问题及解答
├── models
│   ├── bert-base-uncased                       # tokenizer 分词器文件夹					
│   ├── tpu-mlir_v1.9.beta.0-89-g009410603-20240715.tar.gz                       # TPU-MLIR工具包				
│   ├── BM1684X
│   │  └── groundingdino_bm1684x_fp16.bmodel    # 使用TPU-MLIR编译,用于BM1684X的FP16 BModel,batch_size=1
|   ├── BM1688
│   │   └── groundingdino_bm1688_fp16.bmodel    # 使用TPU-MLIR编译,用于BM1688的FP16 BModel,batch_size=1,num_core=1
|   ├── CV186X
│   │   └── groundingdino_cv186x_fp16.bmodel    # 使用TPU-MLIR编译,用于CV186X的FP16 BModel,batch_size=1
│   ├── torch
│   │   └── groundingdino_swint_ogc.pth	     # pytorch模型
│   └── onnx
│       └── GroundingDino.onnx             	 # 导出的onnx动态模型
├── datasets
│   ├── test                                      # 测试图片文件夹
│   ├── test_car_person_1080P.mp4                 # 测试视频
│   ├── coco.names                                # coco类别名文件
│   ├── coco128                                   # coco128数据集,用于模型量化
│   └── coco                                      # coco数据集
│       ├── val2017_1000                          # coco val2017_1000数据集:coco val2017中随机抽取的1000张样本
│       └── instances_val2017_1000.json           # coco val2017_1000数据集标签文件,用于计算精度评价指标  
├── python
│   ├── PostProcess.py                     #后处理脚本
│   ├── README.md                          #python例程执行指南
│   ├── groundingdino_pil.py               #GroundingDINO推理脚本
│   ├── requirements.txt                   #python例程的依赖模块
│   └── utils.py                           #辅助函数文件
├── cpp
│   ├── dependencies                       #依赖推理、预处理头文件与源文件
│   ├── README.md                          #cpp例程执行指南
│   └── groundingdino_sail
│       ├── CMakeLists.txt                 #cpp编译文件
│       ├── groundingdino.cpp              #groundingdino源文件
│       ├── groundingdino.hpp              #groundingdino头文件
│       ├── main.cpp                       #cpp例程入口源文件
│       └── Tokenizer.hpp                  #Tokenizer程序文件
├── scripts                         
│   ├── download.sh                        #下载脚本
│   └── gen_fp16bmodel_mlir.sh             #模型编译脚本
└── README.md                              #GroundingDINO例程指南

4. 模型编译

导出的模型需要编译成BModel才能在SOPHON TPU上运行,如果使用下载好的BModel可跳过本节。若需要自行编译BModel,建议使用前一节下载的TPU-MLIR编译BModel

模型编译前需要安装TPU-MLIR,具体可参考TPU-MLIR环境搭建中1、2、3(3)步骤。安装好后需在TPU-MLIR环境中进入例程目录。使用TPU-MLIR将onnx模型编译为BModel,具体方法可参考《TPU-MLIR快速入门手册》的“3. 编译ONNX模型”(请从算能官网相应版本的SDK中获取)。

  • 生成FP16 BModel

​本例程在scripts目录下提供了TPU-MLIR编译FP16 BModel的脚本,请注意修改gen_fp16bmodel_mlir.sh中的onnx模型路径、生成模型目录和输入大小shapes等参数,并在执行时指定BModel运行的目标平台(支持BM1684X/BM1688/CV186X),如:

# 针对bm1684x平台
./scripts/gen_fp16bmodel_mlir.sh bm1684x
# 针对bm1688平台
./scripts/gen_fp16bmodel_mlir.sh bm1688
# 针对cv186x平台
./scripts/gen_fp16bmodel_mlir.sh cv186x

​执行上述命令会在models/{平台}下生成groundingdino_{平台}_fp16.bmodel 即用于推理的FP16 BModel。

5. 例程测试

目前提供python版本的例程,请参考:

6. 性能测试

6.1 bmrt_test

使用bmrt_test测试模型的理论性能:

# 请根据实际情况修改要测试的bmodel路径和devid参数
bmrt_test --bmodel models/BM1684X/groundingdino_bm1684x_fp16.bmodel

测试结果中的calculate time就是模型推理的时间。

测试各个模型的理论推理时间,结果如下:

测试模型 calculate time(s)
groundingdino_bm1684x_fp16.bmodel 0.532807
groundingdino_bm1688_fp16.bmodel 1.256347
groundingdino_cv186x_fp16.bmodel 1.662021

测试说明

  1. 性能测试结果具有一定的波动性;
  2. calculate time已折算为平均每张图片的推理时间;
  3. SoC和PCIe的测试结果基本一致。

6.2 程序运行性能

参考Python例程运行程序,并查看统计的解码时间、预处理时间、推理时间、后处理时间。目前GroundingDINO仅支持1 batch的fp16模型。

测试datasets/test/zidane.jpg单张图片性能测试结果如下(时间单位为ms),测试结果有一定波动性:

测试平台 测试程序 测试模型 decode_time preprocess_time inference_time postprocess_time
BM1684X SoC groundingdino_pil.py groundingdino_bm1684x_fp16.bmodel 3.50 36.25 547.12 2.73
BM1688 SoC groundingdino_pil.py groundingdino_bm1688_fp16.bmodel 46.94 274.95 1336.27 31.67
CV186X SoC groundingdino_pil.py groundingdino_cv186x_fp16.bmodel 42.92 233.76 1719.74 35.34
SRM1-20 groundingdino_pil.py groundingdino_bm1684x_fp16.bmodel 32.09 200.05 641.01 10.22
BM1684X SoC groundingdino_sail.soc groundingdino_bm1684x_fp16.bmodel 5.81 6.06 468.55 6.12
BM1688 SoC groundingdino_sail.soc groundingdino_bm1688_fp16.bmodel 8.61 11.26 1295.12 8.61
CV186X SoC groundingdino_sail.soc groundingdino_cv186x_fp16.bmodel 8.68 11.04 1364.86 8.61
SRM1-20 groundingdino_sail.pcie groundingdino_bm1684x_fp16.bmodel 22.68 55.29 648.81 6.06

测试说明

  1. 时间单位均为毫秒(ms);
  2. 性能测试结果具有一定的波动性,建议多次测试取平均值;
  3. BM1684/1684X SoC的主控处理器均为8核 ARM A53 42320 DMIPS @2.3GHz,PCIe上的性能由于处理器的不同可能存在较大差异;
  4. 图片分辨率对解码时间影响较大,推理结果对后处理时间影响较大,不同的测试图片可能存在较大差异,不同的阈值对后处理时间影响较大。

7. FAQ

GroundingDINO移植相关问题可参考GroundingDINO常见问题,其他问题请参考FAQ查看一些常见的问题与解答。