2022-08-19 09:30:13 +08:00
|
|
|
|
# 如何支持新的后端
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
|
|
|
|
MMDeploy 支持了许多后端推理引擎,但我们依然非常欢迎新后端的贡献。在本教程中,我们将介绍在 MMDeploy 中支持新后端的一般过程。
|
|
|
|
|
|
2022-08-19 09:30:13 +08:00
|
|
|
|
## 必要条件
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
|
|
|
|
在对 MMDeploy 添加新的后端引擎之前,需要先检查所要支持的新后端是否符合一些要求:
|
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
- 后端必须能够支持 ONNX 作为 IR。
|
|
|
|
|
- 如果后端需要“.onnx”文件以外的模型文件或权重文件,则需要添加将“.onnx”文件转换为模型文件或权重文件的转换工具,该工具可以是 Python API、脚本或可执行程序。
|
|
|
|
|
- 强烈建议新后端可提供 Python 接口来加载后端文件和推理以进行验证。
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-08-19 09:30:13 +08:00
|
|
|
|
## 支持后端转换
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
|
|
|
|
MMDeploy 中的后端必须支持 ONNX,因此后端能直接加载“.onnx”文件,或者使用转换工具将“.onnx”转换成自己的格式。在本节中,我们将介绍支持后端转换的步骤。
|
|
|
|
|
|
|
|
|
|
1. 在 `mmdeploy/utils/constants.py` 文件中添加新推理后端变量,以表示支持的后端名称。
|
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
**示例**:
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
```Python
|
|
|
|
|
# mmdeploy/utils/constants.py
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
class Backend(AdvancedEnum):
|
|
|
|
|
# 以现有的TensorRT为例
|
|
|
|
|
TENSORRT = 'tensorrt'
|
|
|
|
|
```
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
|
|
|
|
2. 在 `mmdeploy/backend/` 目录下添加相应的库(一个包括 `__init__.py` 的文件夹),例如, `mmdeploy/backend/tensorrt` 。在 `__init__.py` 中,必须有一个名为 `is_available` 的函数检查用户是否安装了后端库。如果检查通过,则将加载库的剩余文件。
|
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
**例子**:
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
```Python
|
|
|
|
|
# mmdeploy/backend/tensorrt/__init__.py
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
def is_available():
|
|
|
|
|
return importlib.util.find_spec('tensorrt') is not None
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
if is_available():
|
|
|
|
|
from .utils import from_onnx, load, save
|
|
|
|
|
from .wrapper import TRTWrapper
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
__all__ = [
|
|
|
|
|
'from_onnx', 'save', 'load', 'TRTWrapper'
|
|
|
|
|
]
|
|
|
|
|
```
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
|
|
|
|
3. 在 `configs/_base_/backends` 目录中创建一个配置文件(例如, `configs/_base_/backends/tensorrt.py` )。如果新后端引擎只是将“.onnx”文件作为输入,那么新的配置可以很简单,对应配置只需包含一个表示后端名称的字段(但也应该与 `mmdeploy/utils/constants.py` 中的名称相同)。
|
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
**例子**
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
```python
|
|
|
|
|
backend_config = dict(type='tensorrt')
|
|
|
|
|
```
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
但如果后端需要其他文件,则从“.onnx”文件转换为后端文件所需的参数也应包含在配置文件中。
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
**例子**
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
```Python
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
backend_config = dict(
|
|
|
|
|
type='tensorrt',
|
|
|
|
|
common_config=dict(
|
|
|
|
|
fp16_mode=False, max_workspace_size=0))
|
|
|
|
|
```
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
在拥有一个基本的后端配置文件后,您已经可以通过继承轻松构建一个完整的部署配置。有关详细信息,请参阅我们的[配置教程](../02-how-to-run/write_config.md)。下面是一个例子:
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
```Python
|
|
|
|
|
_base_ = ['../_base_/backends/tensorrt.py']
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
codebase_config = dict(type='mmcls', task='Classification')
|
|
|
|
|
onnx_config = dict(input_shape=None)
|
|
|
|
|
```
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
|
|
|
|
4. 如果新后端需要模型文件或权重文件而不是“.onnx”文件,则需要在相应的文件夹中创建一个 `onnx2backend.py` 文件(例如,创建 `mmdeploy/backend/tensorrt/onnx2tensorrt.py` )。然后在文件中添加一个转换函数`onnx2backend`。该函数应将给定的“.onnx”文件转换为给定工作目录中所需的后端文件。对函数的其他参数和实现细节没有要求,您可以使用任何工具进行转换。下面有些例子:
|
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
**使用python脚本**
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
```Python
|
|
|
|
|
def onnx2openvino(input_info: Dict[str, Union[List[int], torch.Size]],
|
|
|
|
|
output_names: List[str], onnx_path: str, work_dir: str):
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
input_names = ','.join(input_info.keys())
|
|
|
|
|
input_shapes = ','.join(str(list(elem)) for elem in input_info.values())
|
|
|
|
|
output = ','.join(output_names)
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
mo_args = f'--input_model="{onnx_path}" '\
|
|
|
|
|
f'--output_dir="{work_dir}" ' \
|
|
|
|
|
f'--output="{output}" ' \
|
|
|
|
|
f'--input="{input_names}" ' \
|
|
|
|
|
f'--input_shape="{input_shapes}" ' \
|
|
|
|
|
f'--disable_fusing '
|
|
|
|
|
command = f'mo.py {mo_args}'
|
|
|
|
|
mo_output = run(command, stdout=PIPE, stderr=PIPE, shell=True, check=True)
|
|
|
|
|
```
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
**使用可执行文件**
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
```Python
|
|
|
|
|
def onnx2ncnn(onnx_path: str, work_dir: str):
|
|
|
|
|
onnx2ncnn_path = get_onnx2ncnn_path()
|
|
|
|
|
save_param, save_bin = get_output_model_file(onnx_path, work_dir)
|
|
|
|
|
call([onnx2ncnn_path, onnx_path, save_param, save_bin])\
|
|
|
|
|
```
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
|
|
|
|
5. 在 `mmdeploy/apis` 中创建新后端库并声明对应 APIs
|
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
**例子**
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
```Python
|
|
|
|
|
# mmdeploy/apis/ncnn/__init__.py
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
from mmdeploy.backend.ncnn import is_available
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
__all__ = ['is_available']
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
if is_available():
|
|
|
|
|
from mmdeploy.backend.ncnn.onnx2ncnn import (onnx2ncnn,
|
|
|
|
|
get_output_model_file)
|
|
|
|
|
__all__ += ['onnx2ncnn', 'get_output_model_file']
|
|
|
|
|
```
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-12-28 11:38:01 +08:00
|
|
|
|
从 BaseBackendManager 派生类,实现 `to_backend` 类方法。
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
**例子**
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
```Python
|
2022-12-28 11:38:01 +08:00
|
|
|
|
@classmethod
|
|
|
|
|
def to_backend(cls,
|
|
|
|
|
ir_files: Sequence[str],
|
|
|
|
|
deploy_cfg: Any,
|
|
|
|
|
work_dir: str,
|
|
|
|
|
log_level: int = logging.INFO,
|
|
|
|
|
device: str = 'cpu',
|
|
|
|
|
**kwargs) -> Sequence[str]:
|
|
|
|
|
return ir_files
|
2022-06-17 09:19:10 +08:00
|
|
|
|
```
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
Sync master docs (#1052)
* make -install -> make install (#621)
change `make -install` to `make install`
https://github.com/open-mmlab/mmdeploy/issues/618
* [Fix] fix csharp api detector release result (#620)
* fix csharp api detector release result
* fix wrong count arg of xxx_release_result in c# api
* [Enhancement] Support two-stage rotated detector TensorRT. (#530)
* upload
* add fake_multiclass_nms_rotated
* delete unused code
* align with pytorch
* Update delta_midpointoffset_rbbox_coder.py
* add trt rotated roi align
* add index feature in nms
* not good
* fix index
* add ut
* add benchmark
* move to csrc/mmdeploy
* update unit test
Co-authored-by: zytx121 <592267829@qq.com>
* Reduce mmcls version dependency (#635)
* fix shufflenetv2 with trt (#645)
* fix shufflenetv2 and pspnet
* fix ci
* remove print
* ' -> " (#654)
If there is a variable in the string, single quotes will ignored it, while double quotes will bring the variable into the string after parsing
* ' -> " (#655)
same with https://github.com/open-mmlab/mmdeploy/pull/654
* Support deployment of Segmenter (#587)
* support segmentor with ncnn
* update regression yml
* replace chunk with split to support ts
* update regression yml
* update docs
* fix segmenter ncnn inference failure brought by #477
* add test
* fix test for ncnn and trt
* fix lint
* export nn.linear to Gemm op in onnx for ncnn
* fix ci
* simplify `Expand` (#617)
* Fix typo (#625)
* Add make install in en docs
* Add make install in zh docs
* Fix typo
* Merge and add windows build
Co-authored-by: tripleMu <865626@163.com>
* [Enhancement] Fix ncnn unittest (#626)
* optmize-csp-darknet
* replace floordiv to torch.div
* update csp_darknet default implement
* fix test
* [Enhancement] TensorRT Anchor generator plugin (#646)
* custom trt anchor generator
* add ut
* add docstring, update doc
* Add partition doc and sample code (#599)
* update torch2onnx tool to support onnx partition
* add model partition of yolov3
* add cn doc
* update torch2onnx tool to support onnx partition
* add model partition of yolov3
* add cn doc
* add to index.rst
* resolve comment
* resolve comments
* fix lint
* change caption level in docs
* update docs (#624)
* Add java apis and demos (#563)
* add java classifier detector
* add segmentor
* fix lint
* add ImageRestorer java apis and demo
* remove useless count parameter for Segmentor and Restorer, add PoseDetector
* add RotatedDetection java api and demo
* add Ocr java demo and apis
* remove mmrotate ncnn java api and demo
* fix lint
* sync java api folder after rebase to master
* fix include
* remove record
* fix java apis dir path in cmake
* add java demo readme
* fix lint mdformat
* add test javaapi ci
* fix lint
* fix flake8
* fix test javaapi ci
* refactor readme.md
* fix install opencv for ci
* fix install opencv : add permission
* add all codebases and mmcv install
* add torch
* install mmdeploy
* fix image path
* fix picture path
* fix import ncnn
* fix import ncnn
* add submodule of pybind
* fix pybind submodule
* change download to git clone for submodule
* fix ncnn dir
* fix README error
* simplify the github ci
* fix ci
* fix yapf
* add JNI as required
* fix Capitalize
* fix Capitalize
* fix copyright
* ignore .class changed
* add OpenJDK installation docs
* install target of javaapi
* simplify ci
* add jar
* fix ci
* fix ci
* fix test java command
* debugging what failed
* debugging what failed
* debugging what failed
* add java version info
* install openjdk
* add java env var
* fix export
* fix export
* fix export
* fix export
* fix picture path
* fix picture path
* fix file name
* fix file name
* fix README
* remove java_api strategy
* fix python version
* format task name
* move args position
* extract common utils code
* show image class result
* add detector result
* segmentation result format
* add ImageRestorer result
* add PoseDetection java result format
* fix ci
* stage ocr
* add visualize
* move utils
* fix lint
* fix ocr bugs
* fix ci demo
* fix java classpath for ci
* fix popd
* fix ocr demo text garbled
* fix ci
* fix ci
* fix ci
* fix path of utils ci
* update the circleci config file by adding workflows both for linux, windows and linux-gpu (#368)
* update circleci by adding more workflows
* fix test workflow failure on windows platform
* fix docker exec command for SDK unittests
* Fixed tensorrt plugin not found in Windows (#672)
* update introduction.png (#674)
* [Enhancement] Add fuse select assign pass (#589)
* Add fuse select assign pass
* move code to csrc
* add config flag
* remove bool cast
* fix export sdk info of input shape (#667)
* Update get_started.md (#675)
Fix backend model assignment
* Update get_started.md (#676)
Fix backend model assignment
* [Fix] fix clang build (#677)
* fix clang build
* fix ndk build
* fix ndk build
* switch to `std::filesystem` for clang-7 and later
* Deploy the Swin Transformer on TensorRT. (#652)
* resolve conflicts
* update ut and docs
* fix ut
* refine docstring
* add comments and refine UT
* resolve comments
* resolve comments
* update doc
* add roll export
* check backend
* update regression test
* bump version to 0.6.0 (#680)
* bump vertion to 0.6.0
* update version
* pass img_metas while exporting to onnx (#681)
* pass img_metas while exporting to onnx
* remove try-catch in tools for beter debugging
* use get
* fix typo
* [Fix] fix ssd ncnn ut (#692)
* fix ssd ncnn ut
* fix yapf
* fix passing img_metas to pytorch2onnx for mmedit (#700)
* fix passing img_metas for mmdet3d (#707)
* [Fix] Fix android build (#698)
* fix android build
* fix cmake
* fix url link
* fix wrong exit code in pipeline_manager (#715)
* fix exit
* change to general exit errorcode=1
* fix passing wrong backend type (#719)
* Rename onnx2ncnn to mmdeploy_onnx2ncnn (#694)
* improvement(tools/onnx2ncnn.py): rename to mmdeploy_onnx2ncnn
* format(tools/deploy.py): clean code
* fix(init_plugins.py): improve if condition
* fix(CI): update target
* fix(test_onnx2ncnn.py): update desc
* Update init_plugins.py
* [Fix] Fix mmdet ort static shape bug (#687)
* fix shape
* add device
* fix yapf
* fix rewriter for transforms
* reverse image shape
* fix ut of distance2bbox
* fix rewriter name
* fix c4 for torchscript (#724)
* [Enhancement] Standardize C API (#634)
* unify C API naming
* fix demo and move apis/c/* -> apis/c/mmdeploy/*
* fix lint
* fix C# project
* fix Java API
* [Enhancement] Support Slide Vertex TRT (#650)
* reorgnize mmrotate
* fix
* add hbb2obb
* add ut
* fix rotated nms
* update docs
* update benchmark
* update test
* remove ort regression test, remove comment
* Fix get-started rendering issues in readthedocs (#740)
* fix mermaid markdown rendering issue in readthedocs
* fix error in C++ example
* fix error in c++ example in zh_cn get_started doc
* [Fix] set default topk for dump info (#702)
* set default topk for dump info
* remove redundant docstrings
* add ci densenet
* fix classification warnings
* fix mmcls version
* fix logger.warnings
* add version control (#754)
* fix satrn for ORT (#753)
* fix satrn for ORT
* move rewrite into pytorch
* Add inference latency test tool (#665)
* add profile tool
* remove print envs in profile tool
* set cudnn_benchmark to True
* add doc
* update tests
* fix typo
* support test with images from a directory
* update doc
* resolve comments
* [Enhancement] Add CSE ONNX pass (#647)
* Add fuse select assign pass
* move code to csrc
* add config flag
* Add fuse select assign pass
* Add CSE for ONNX
* remove useless code
* Test robot
Just test robot
* Update README.md
Revert
* [Fix] fix yolox point_generator (#758)
* fix yolox point_generator
* add a UT
* resolve comments
* fix comment lines
* limit markdown version (#773)
* [Enhancement] Better index put ONNX export. (#704)
* Add rewriter for tensor setitem
* add version check
* Upgrade Dockerfile to use TensorRT==8.2.4.2 (#706)
* Upgrade TensorRT to 8.2.4.2
* upgrade pytorch&mmcv in CPU Dockerfile
* Delete redundant port example in Docker
* change 160x160-608x608 to 64x64-608x608 for yolov3
* [Fix] reduce log verbosity & improve error reporting (#755)
* reduce log verbosity & improve error reporting
* improve error reporting
* [Enhancement] Support latest ppl.nn & ppl.cv (#564)
* support latest ppl.nn
* fix pplnn for model convertor
* fix lint
* update memory policy
* import algo from buffer
* update ppl.cv
* use `ppl.cv==0.7.0`
* document supported ppl.nn version
* skip pplnn dependency when building shared libs
* [Fix][P0] Fix for torch1.12 (#751)
* fix for torch1.12
* add comment
* fix check env (#785)
* [Fix] fix cascade mask rcnn (#787)
* fix cascade mask rcnn
* fix lint
* add regression
* [Feature] Support RoITransRoIHead (#713)
* [Feature] Support RoITransRoIHead
* Add docs
* Add mmrotate models regression test
* Add a draft for test code
* change the argument name
* fix test code
* fix minor change for not class agnostic case
* fix sample for test code
* fix sample for test code
* Add mmrotate in requirements
* Revert "Add mmrotate in requirements"
This reverts commit 043490075e6dbe4a8fb98e94b2b583b91fc5038d.
* [Fix] fix triu (#792)
* fix triu
* triu -> triu_default
* [Enhancement] Install Optimizer by setuptools (#690)
* Add fuse select assign pass
* move code to csrc
* add config flag
* Add fuse select assign pass
* Add CSE for ONNX
* remove useless code
* Install optimizer by setup tools
* fix comment
* [Feature] support MMRotate model with le135 (#788)
* support MMRotate model with le135
* cse before fuse select assign
* remove unused import
* [Fix] Support macOS build (#762)
* fix macOS build
* fix missing
* add option to build & install examples (#822)
* [Fix] Fix setup on non-linux-x64 (#811)
* fix setup
* replace long to int64_t
* [Feature] support build single sdk library (#806)
* build single lib for c api
* update csharp doc & project
* update test build
* fix test build
* fix
* update document for building android sdk (#817)
Co-authored-by: dwSun <dwsunny@icloud.com>
* [Enhancement] support kwargs in SDK python bindings (#794)
* support-kwargs
* make '__call__' as single image inference and add 'batch' API to deal with batch images inference
* fix linting error and typo
* fix lint
* improvement(sdk): add sdk code coverage (#808)
* feat(doc): add CI
* CI(sdk): add sdk coverage
* style(test): code format
* fix(CI): update coverage.info path
* improvement(CI): use internal image
* improvement(CI): push coverage info once
* [Feature] Add C++ API for SDK (#831)
* add C++ API
* unify result type & add examples
* minor fix
* install cxx API headers
* fix Mat, add more examples
* fix monolithic build & fix lint
* install examples correctly
* fix lint
* feat(tools/deploy.py): support snpe (#789)
* fix(tools/deploy.py): support snpe
* improvement(backend/snpe): review advices
* docs(backend/snpe): update build
* docs(backend/snpe): server support specify port
* docs(backend/snpe): update path
* fix(backend/snpe): time counter missing argument
* docs(backend/snpe): add missing argument
* docs(backend/snpe): update download and using
* improvement(snpe_net.cpp): load model with modeldata
* Support setup on environment with no PyTorch (#843)
* support test with multi batch (#829)
* support test with multi batch
* resolve comment
* import algorithm from buffer (#793)
* [Enhancement] build sdk python api in standard-alone manner (#810)
* build sdk python api in standard-alone manner
* enable MMDEPLOY_BUILD_SDK_MONOLITHIC and MMDEPLOY_BUILD_EXAMPLES in prebuild config
* link mmdeploy to python target when monolithic option is on
* checkin README to describe precompiled package build procedure
* use packaging.version.parse(python_version) instead of list(python_version)
* fix according to review results
* rebase master
* rollback cmake.in and apis/python/CMakeLists.txt
* reorganize files in install/example
* let cmake detect visual studio instead of specifying 2019
* rename whl name of precompiled package
* fix according to review results
* Fix SDK backend (#844)
* fix mmpose python api (#852)
* add prebuild package usage docs on windows (#816)
* add prebuild package usage docs on windows
* fix lint
* update
* try fix lint
* add en docs
* update
* update
* udpate faq
* fix typo (#862)
* [Enhancement] Improve get_started documents and bump version to 0.7.0 (#813)
* simplify commands in get_started
* add installation commands for Windows
* fix typo
* limit markdown and sphinx_markdown_tables version
* adopt html <details open> tag
* bump mmdeploy version
* bump mmdeploy version
* update get_started
* update get_started
* use python3.8 instead of python3.7
* remove duplicate section
* resolve issue #856
* update according to review results
* add reference to prebuilt_package_windows.md
* fix error when build sdk demos
* improvement(dockerfile): use make -j$(nporc) when build ncnn (#840)
* use make -j$(nporc) when build ncnn
* improve cpu dockerfile
* fix error when set device cpu && fix docs error (#866)
* [Feature]support pointpillar nus version (#391)
* support pointpillar nus version
* support pointpillar nus version
* add regression test config for mmdet3d
* fix exit with no error code
* fix cfg
* fix worksize
* fix worksize
* fix cfg
* support nus pp
* fix yaml
* fix yaml
* fix yaml
* add ut
* fix ut
Co-authored-by: RunningLeon <mnsheng@yeah.net>
* Fix doc error of building C examples (#879)
* fix doc error of building C demo examples
Path error in cmake compilation of C demo examples
* fix en doc error of building C demo examples
Path error in cmake compilation of C demo examples
* fix adaptive_avg_pool exporting to onnx (#857)
* fix adaptive_avg_pool exporting to onnx
* remove debug codes
* fix ci
* resolve comment
* docs(project): sync en and zh docs (#842)
* docs(en): update file structure
* docs(zh_cn): update
* docs(structure): update
* docs(snpe): update
* docs(README): update
* fix(CI): update
* fix(CI): index.rst error
* fix(docs): update
* fix(docs): remove mermaid
* fix(docs): remove useless
* fix(docs): update link
* docs(en): update
* docs(en): update
* docs(zh_cn): remove \[
* docs(zh_cn): format
* docs(en): remove blank
* fix(CI): doc link error
* docs(project): remove "./" prefix
* docs(zh_cn): fix mdformat
* docs(en): update title
* fix(CI): update docs
* fix mmdeploy_pplnn_net build error when target device is cpu (#896)
* docs(zh_cn): add architect (#882)
* docs(zh_cn): add architect
docs(en): add architect
fix(docs): readthedocs index
* docs(en): update architect.md
* docs(README.md): update
* docs(architecture): fix review advices
* add device backend check (#886)
* add device backend check
* safe check
* only activated for tensorrt and openvino
* resolve comments
* support multi-batch test in profile tool (#868)
* test batch profile with resnet pspnet yolov3 srcnn
* update doc
* update docs
* fix ut
* fix mmdet
* support batch mmorc and mmrotate
* fix mmcls export to sdk
* resolve comments
* rename to fix #819
* fix conflicts with master
* [Fix] fix device error in dump-info (#912)
* fix device error in dump-info
* fix UT
* improvement(cmake): simplify build option and doc (#832)
* improvement(cmake): simplify build option
improvement(cmake): convert target_backends with directory
* fix(dockerfile): build error
* fix(CI): circle CI
* fix(docs): snpe and cmake option
* fix(docs): revert update cmake
* fix(docs): revert
* update(docs): remove useless
* set test_mode for mmdet (#920)
* fix
* update
* [Doc] How to write a customized TensorRT plugin (#290)
* first edition
* fix lint
* add 06, 07
* resolve comments
* update index.rst
* update title
* update img
* [Feature] add swin for cls (#911)
* add swin for cls
* add ut and doc
* reduce trt batch size
* add regression test
* resolve comments
* remove useless rewriting logic
* docs(mmdet3d): give detail model path (#940)
* add cflags explicitly in ci (#945)
* improvement(installation): add script install mmdeploy (#919)
* feat(tools): add build ubuntu x64 ncnn
* ci(tools): add ncnn auto install
* fix(ci): auto install ncnn
* fix(tools): no interactive
* docs(build): add script build
* CI(ncnn): script install ncnn
* docs(zh_cn): fix error os
* fix
* CI(tools/script): test ort install passed
* update
* CI(tools): support pplnn
* CI(build): add pplnn
* docs(tools): update
* fix
* CI(tools): script install torchscript
* docs(build): add torchscript
* fix(tools): clean code and doc
* update
* fix(CI): requirements install failed
* debug CI
* update
* update
* update
* feat(tools/script): support user specify make jobs
* fix(tools/script): fix build pplnn with cuda
* fix(tools/script): torchscript add tips and simplify install mmcv
* fix(tools/script): check nvcc version first
* fix(tools/scripts): pplnn checkout
* fix(CI): add simple check install succcess
* fix
* debug CI
* fix
* fix(CI): pplnn install mis wheel
* fix(CI): build error
* fix(CI): remove misleading message
* Support risc-v platform (#910)
* add ppl.nn riscv engine
* update ppl.nn riscv engine
* udpate riscv service (ncnn backend)
* update _build_wrapper for ncnn
* fix build
* fix lint
* update default uri
* update file structure & add cn doc
* remove copy input data
* update docs
* remove ncnn server
* fix docs
* update zh doc
* update toolchain
* remove unused
* update doc
* update doc
* update doc
* rename cross build dirname
* add riscv.md to build_from_source.md
* update cls model
* test ci
* test ci
* test ci
* test ci
* test ci
* update ci
* update ci
* [Feature] TorchScript SDK backend (#890)
* WIP SDK torchscript support
* support detection task
* make torchvision optional
* force link torchvision if enabled
* support torch-1.12
* fix export & sync cuda stream
* hide internal classes
* handle error
* set `MMDEPLOY_USE_CUDA` when CUDA is enabled
* [Bug] fix setitem with scalar or single element tensor (#941)
* fix setitem
* add copy symbolic
* docs(convert_model): update description (#956)
* [Enhancement] Support DETR (#924)
* add detr support
* fix softmax
* add reg test, update document
* fix ut failed (#951)
* [Enhancement] Rewriter support pre-import function (#899)
* support preimport
* update rewriter
* fix batched nms ort
* add_multi_label_postprocess (#950)
* 'add_multi_label_postprocess'
* fix pre-commit
* delete partial_sort
* delete idx
* delete num_classes and num_classes_
* Fix right brackets and spelling errors in lines 19 and 20
Co-authored-by: gaoying <gaoying@xiaobaishiji.com>
* fix ci (#964)
* [Fix] Close onnx optimizer for ncnn (#961)
* close onnx optimizer for ncnn
* fix docformatter
* fix lint
* remove Release dir in mmdeploy package (#960)
* CI(tools/scripts): add submodule init and update (#977)
* fix mmroate (#976)
* Fix mmseg pointrend (#903)
* support mmseg:pointrend
* update docs
* update docs for torchscript
* resolve comments
* Add CI to test full pipeline (#966)
* add mmcls full pipeline test ci
* update
* update
* add mmcv
* install torch
* install mmdeploy
* change clone with https
* install mmcls
* update
* change mmcls version
* add mmcv version
* update mmcls version
* test sdk
* tast with imagnet
* sed pipeline
* print env
* update
* move to backend-ort ci
* install mim
* fix regression test (#958)
* fix reg
* set sdk wrapper device id
* resolve comment
* fix(CI): typo (#983)
* fix(CI): ort test all pipeline (#985)
* add missing sqrt for PAAHead's score calculation (#984)
Co-authored-by: xianghongyi1 <xianghongyi1@sensetime.com>
* Fix: skip tests for uninstalled codebases (#987)
* skip tests if codebase not installed
* skip ort run test
* fix mmseg
* [Feature] Ascend backend (#747)
* add acl backend
* support dynamic batch size and dynamic image size
* add preliminary ascend backend
* support dtypes other than float
* support dynamic_dims in SDK
* fix dynamic batch size
* better error handling
* remove debug info
* [WIP] dynamic shape support
* fix static shape
* fix dynamic batch size
* add retinanet support
* fix dynamic image size
* fix dynamic image size
* fix dynamic dims
* fix dynamic dims
* simplify config files
* fix yolox support
* fix negative index
* support faster rcnn
* add seg config
* update benchmark
* fix onnx2ascend dynamic shape
* update docstring and benchmark
* add unit test, update documents
* fix wrapper
* fix ut
* fix for vit
* error handling
* context handling & multi-device support
* build with stub libraries
* add ci
* fix lint
* fix lint
* update doc ref
* fix typo
* down with `target_link_directories`
* setup python
* makedir
* fix ci
* fix ci
* remove verbose logs
* fix UBs
* export Error
* fix lint
* update checkenv
Co-authored-by: grimoire <yaoqian@sensetime.com>
* fix(backend): disable cublaslt for cu102 (#947)
* fix(backend): disable cublaslt for cu102
* fix
* fix(backend): update
* fix(tensorrt/util.py): add find cuda version
* fix
* fix(CI): first use cmd to get cuda version
* docs(tensorrt/utils.py): update docstring
* TensorRT dot product attention ops (#949)
* add detr support
* fix softmax
* add placeholder
* add implement
* add docs and ut
* update testcase
* update docs
* update docs
* fix mmdet showresult (#999)
* fix mmdet showresult
* Consider compatibility
* mmdet showresult add *args
* Revert "mmdet showresult add *args"
This reverts commit 82265a31cf910618a1dff4aab65e9dc793a623c4.
Co-authored-by: whhuang <whhuang@hitotek.com>
* support coreml (#760)
* sdk inference
* fix typo
* fix typo
* add convert things
* fix missling name
* add cls support
* add more pytorch rewriter
* add det support
* support det wip
* make Model export model_path
* fix nms
* add output back
* add docstring
* fix lint
* add coreml build action
* add zh docs
* add coreml backend check
* update ci
* update
* update
* update
* update
* update
* fix lint
* update configs
* add return value when error occured
* update docs
* update docs
* update docs
* fix lint
* udpate docs
* udpate docs
* update
Co-authored-by: grimoire <streetyao@live.com>
* fix mmdet ut (#1001)
* [Feature] Add option to fuse transform. (#741)
* add collect_impl.cpp to cuda device
* add dummy compute node wich device elena
* add compiler & dynamic library loader
* add code to compile with gen code(elena)
* move folder
* fix lint
* add tracer module
* add license
* update type id
* add fuse kernel registry
* remove compilier & dynamic_library
* update fuse kernel interface
* Add elena-mmdeploy project in 3rd-party
* Fix README.md
* fix cmake file
* Support cuda device and clang format all file
* Add cudaStreamSynchronize for cudafree
* fix cudaStreamSynchronize
* rename to __tracer__
* remove unused code
* update kernel
* update extract elena script
* update gitignore
* fix ci
* Change the crop_size to crop_h and crop_w in arglist
* update Tracer
* remove cond
* avoid allocate memory
* add build.sh for elena
* remove code
* update test
* Support bilinear resize with float input
* Rename elena-mmdeploy to delete
* Introduce public submodule
* use get_ref
* update elena
* update tools
* update tools
* update fuse transform docs
* add fuse transform doc link to get_started
* fix shape in crop
* remove fuse_transform_ == true check
* remove fuse_transform_ member
* remove elena_int.h
* doesn't dump transform_static.json
* update tracer
* update CVFusion to remove compile warning
* remove mmcv version > 1.5.1 dep
* fix tests
* update docs
* add elena use option
* remove submodule of CVFusion
* update doc
* use auto
* use throw_exception(eEntryNotFound);
* update
Co-authored-by: cx <cx@ubuntu20.04>
Co-authored-by: miraclezqc <969226879@qq.com>
* Add RKNN support. (#865)
* save codes
* support resnet and yolov3
* support yolox
* fix lint
* add mmseg support and a doc
* add UT
* update supported model list
* fix ci
* refine docstring
* resolve comments
* remote output_tensor_type
* resolve comments
* update readme
* [Fix] Add isolated option for TorchScript SDK backend (#1002)
* add option for TorchScript SDK backend
* add doc
* format
* bump version to v0.8.0 (#1009)
* fix(CI): update link checker (#1008)
* New issue template (#1007)
* update bug report
* update issue template
* update bug-report
* fix mmdeploy builder on windows (#1018)
* fix mmdeploy builder on windows
* add pyyaml
* fix lint
* BUG P0 (#1044)
* update api in doc (#1021)
* fix two stage batch dynamic (#1046)
* docs(scripts): update auto install desc (#1036)
* Fix `RoIAlignFunction` error for CoreML backend (#1029)
* Fixed typo for install commands for TensorRT runtime (#1025)
* Fixed typo for install commands for TensorRT runtime
* Apply typo-fix on 'cn' documentation
Co-authored-by: Tümer Tosik <tumer_t@hotmail.de>
* merge master@a1a19f0 documents to dev-1.x
* missed ubuntu_utils.py
* change benchmark reference in readme_zh-CN
Co-authored-by: Ryan_Huang <44900829+DrRyanHuang@users.noreply.github.com>
Co-authored-by: Chen Xin <xinchen.tju@gmail.com>
Co-authored-by: q.yao <yaoqian@sensetime.com>
Co-authored-by: zytx121 <592267829@qq.com>
Co-authored-by: RunningLeon <mnsheng@yeah.net>
Co-authored-by: Li Zhang <lzhang329@gmail.com>
Co-authored-by: tripleMu <gpu@163.com>
Co-authored-by: tripleMu <865626@163.com>
Co-authored-by: hanrui1sensetime <83800577+hanrui1sensetime@users.noreply.github.com>
Co-authored-by: Bryan Glen Suello <11388006+bgsuello@users.noreply.github.com>
Co-authored-by: zambranohally <63218980+zambranohally@users.noreply.github.com>
Co-authored-by: AllentDan <41138331+AllentDan@users.noreply.github.com>
Co-authored-by: tpoisonooo <khj.application@aliyun.com>
Co-authored-by: Hakjin Lee <nijkah@gmail.com>
Co-authored-by: 孙德伟 <5899962+dwSun@users.noreply.github.com>
Co-authored-by: dwSun <dwsunny@icloud.com>
Co-authored-by: Chen Xin <irexyc@gmail.com>
Co-authored-by: OldDreamInWind <108687632+OldDreamInWind@users.noreply.github.com>
Co-authored-by: VVsssssk <88368822+VVsssssk@users.noreply.github.com>
Co-authored-by: 梦阳 <49838178+liu-mengyang@users.noreply.github.com>
Co-authored-by: gy77 <64619863+gy-7@users.noreply.github.com>
Co-authored-by: gaoying <gaoying@xiaobaishiji.com>
Co-authored-by: Hongyi Xiang <Groexhy@users.noreply.github.com>
Co-authored-by: xianghongyi1 <xianghongyi1@sensetime.com>
Co-authored-by: munhou <51435578+munhou@users.noreply.github.com>
Co-authored-by: whhuang <whhuang@hitotek.com>
Co-authored-by: grimoire <streetyao@live.com>
Co-authored-by: cx <cx@ubuntu20.04>
Co-authored-by: miraclezqc <969226879@qq.com>
Co-authored-by: Jelle Maas <typiqally@gmail.com>
Co-authored-by: ichitaka <tuemerffm@hotmail.com>
Co-authored-by: Tümer Tosik <tumer_t@hotmail.de>
2022-09-16 11:31:50 +08:00
|
|
|
|
6. 将 OpenMMLab 的模型转换后(如有必要)并在后端引擎上进行推理。如果在测试时发现一些不兼容的算子,可以尝试按照[重写器教程](support_new_model.md)为后端重写原始模型或添加自定义算子。
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
|
|
|
|
7. 为新后端引擎代码添加相关注释和单元测试:).
|
|
|
|
|
|
2022-08-19 09:30:13 +08:00
|
|
|
|
## 支持后端推理
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
|
|
|
|
尽管后端引擎通常用C/C++实现,但如果后端提供Python推理接口,则测试和调试非常方便。我们鼓励贡献者在MMDeploy的Python接口中支持新后端推理。在本节中,我们将介绍支持后端推理的步骤。
|
|
|
|
|
|
|
|
|
|
1. 添加一个名为 `wrapper.py` 的文件到 `mmdeploy/backend/{backend}` 中相应后端文件夹。例如, `mmdeploy/backend/tensorrt/wrapper` 。此模块应实现并注册一个封装类,该类继承 `mmdeploy/backend/base/base_wrapper.py` 中的基类 `BaseWrapper` 。
|
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
**例子**
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
```Python
|
|
|
|
|
from mmdeploy.utils import Backend
|
|
|
|
|
from ..base import BACKEND_WRAPPER, BaseWrapper
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
@BACKEND_WRAPPER.register_module(Backend.TENSORRT.value)
|
|
|
|
|
class TRTWrapper(BaseWrapper):
|
|
|
|
|
```
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
|
|
|
|
2. 封装类可以在函数 `__init__` 中初始化引擎以及在 `forward` 函数中进行推理。请注意,该 `__init__` 函数必须接受一个参数 `output_names` 并将其传递给基类以确定输出张量的顺序。其中 `forward` 输入和输出变量应表示tensors的名称和值的字典。
|
|
|
|
|
|
|
|
|
|
3. 为了方便性能测试,该类应该定义一个 `execute` 函数,只调用后端引擎的推理接口。该 `forward` 函数应在预处理数据后调用 `execute` 函数。
|
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
**例子**
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
```Python
|
|
|
|
|
from mmdeploy.utils import Backend
|
|
|
|
|
from mmdeploy.utils.timer import TimeCounter
|
|
|
|
|
from ..base import BACKEND_WRAPPER, BaseWrapper
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
@BACKEND_WRAPPER.register_module(Backend.ONNXRUNTIME.value)
|
|
|
|
|
class ORTWrapper(BaseWrapper):
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
def __init__(self,
|
|
|
|
|
onnx_file: str,
|
|
|
|
|
device: str,
|
|
|
|
|
output_names: Optional[Sequence[str]] = None):
|
|
|
|
|
# Initialization
|
|
|
|
|
#
|
|
|
|
|
# ...
|
|
|
|
|
super().__init__(output_names)
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
def forward(self, inputs: Dict[str,
|
|
|
|
|
torch.Tensor]) -> Dict[str, torch.Tensor]:
|
|
|
|
|
# Fetch data
|
|
|
|
|
# ...
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
self.__ort_execute(self.io_binding)
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
# Postprocess data
|
|
|
|
|
# ...
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-08-19 09:30:13 +08:00
|
|
|
|
@TimeCounter.count_time('onnxruntime')
|
2022-06-17 09:19:10 +08:00
|
|
|
|
def __ort_execute(self, io_binding: ort.IOBinding):
|
|
|
|
|
# Only do the inference
|
|
|
|
|
self.sess.run_with_iobinding(io_binding)
|
|
|
|
|
```
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-12-28 11:38:01 +08:00
|
|
|
|
4. 从 `BaseBackendManager` 派生接口类,实现 `build_wrapper` 静态方法
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
2022-06-17 09:19:10 +08:00
|
|
|
|
**例子**
|
|
|
|
|
|
|
|
|
|
```Python
|
2022-12-28 11:38:01 +08:00
|
|
|
|
@BACKEND_MANAGERS.register('onnxruntime')
|
|
|
|
|
class ONNXRuntimeManager(BaseBackendManager):
|
|
|
|
|
@classmethod
|
|
|
|
|
def build_wrapper(cls,
|
|
|
|
|
backend_files: Sequence[str],
|
|
|
|
|
device: str = 'cpu',
|
|
|
|
|
input_names: Optional[Sequence[str]] = None,
|
|
|
|
|
output_names: Optional[Sequence[str]] = None,
|
|
|
|
|
deploy_cfg: Optional[Any] = None,
|
|
|
|
|
**kwargs):
|
|
|
|
|
from .wrapper import ORTWrapper
|
|
|
|
|
return ORTWrapper(
|
|
|
|
|
onnx_file=backend_files[0],
|
|
|
|
|
device=device,
|
|
|
|
|
output_names=output_names)
|
2022-06-17 09:19:10 +08:00
|
|
|
|
```
|
2022-03-08 16:11:46 +08:00
|
|
|
|
|
|
|
|
|
5. 为新后端引擎代码添加相关注释和单元测试 :).
|
2022-05-27 14:23:28 +08:00
|
|
|
|
|
2022-08-19 09:30:13 +08:00
|
|
|
|
## 将MMDeploy作为第三方库时添加新后端
|
2022-06-17 09:19:10 +08:00
|
|
|
|
|
2022-05-27 14:23:28 +08:00
|
|
|
|
前面的部分展示了如何在 MMDeploy 中添加新的后端,这需要更改其源代码。但是,如果我们将 MMDeploy 视为第三方,则上述方法不再有效。为此,添加一个新的后端需要我们预先安装另一个名为 `aenum` 的包。我们可以直接通过`pip install aenum`进行安装。
|
|
|
|
|
|
|
|
|
|
成功安装 `aenum` 后,我们可以通过以下方式使用它来添加新的后端:
|
2022-06-17 09:19:10 +08:00
|
|
|
|
|
2022-05-27 14:23:28 +08:00
|
|
|
|
```python
|
|
|
|
|
from mmdeploy.utils.constants import Backend
|
|
|
|
|
from aenum import extend_enum
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
Backend.get('backend_name')
|
|
|
|
|
except Exception:
|
|
|
|
|
extend_enum(Backend, 'BACKEND', 'backend_name')
|
|
|
|
|
```
|
2022-06-17 09:19:10 +08:00
|
|
|
|
|
2022-05-27 14:23:28 +08:00
|
|
|
|
我们可以在使用 MMDeploy 的重写逻辑之前运行上面的代码,这就完成了新后端的添加。
|