From 46e0a3abc640b542ed1475a33686fe3a0a36ed57 Mon Sep 17 00:00:00 2001
From: hanrui1sensetime <83800577+hanrui1sensetime@users.noreply.github.com>
Date: Tue, 12 Oct 2021 14:24:33 +0800
Subject: [PATCH] [Documentation] add ncnn backend docs (#122)
* add ncnn backend docs
* remove fix version
* reply for code review
---
docs/backends/ncnn.md | 62 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 62 insertions(+)
diff --git a/docs/backends/ncnn.md b/docs/backends/ncnn.md
index 1fc3cfb89..bf644cc4f 100644
--- a/docs/backends/ncnn.md
+++ b/docs/backends/ncnn.md
@@ -1,3 +1,65 @@
## ncnn Support
### Installation
+
+#### Install ncnn
+
+- Download VulkanTools for the compilation of ncnn.
+ ```bash
+ wget https://sdk.lunarg.com/sdk/download/1.2.176.1/linux/vulkansdk-linux-x86_64-1.2.176.1.tar.gz?Human=true -O vulkansdk-linux-x86_64-1.2.176.1.tar.gz
+ tar -xf vulkansdk-linux-x86_64-1.2.176.1.tar.gz
+ export VULKAN_SDK=$(pwd)/1.2.176.1/x86_64
+- Check your gcc version.
+You should ensure your gcc satisfies `gcc >= 6`.
+- Prepare ncnn Framework
+
+ - Download ncnn source code
+ ```bash
+ git clone git@github.com:Tencent/ncnn.git
+ ```
+ - Make install ncnn library
+ ```bash
+ cd ncnn
+ mkdir build
+ cmake -DNCNN_VULKAN=ON -DNCNN_SYSTEM_GLSLANG=ON -DNCNN_BUILD_EXAMPLES=ON -DNCNN_PYTHON=ON -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=ON -DNCNN_BUILD_TESTS=ON ..
+ make install
+ ```
+ - Install pyncnn module
+ ```bash
+ cd ncnn/python
+ pip install .
+ ```
+
+#### Build custom ops
+
+Some custom ops are created to support models in OpenMMLab, the custom ops can be built as follows:
+
+```bash
+cd ${MMDEPLOY_DIR}
+mkdir build
+cd build
+cmake -DBUILD_NCNN_OPS=ON ..
+make -j$(nproc)
+```
+
+If you haven't installed NCNN in default path, please add `-DNCNN_DIR` flag in cmake.
+
+```bash
+ cmake -DBUILD_NCNN_OPS=ON -DNCNN_DIR=${NCNN_DIR} ..
+ make -j$(nproc)
+```
+
+### Convert model
+- This follows the tutorial on [How to convert model](tutorials/how_to_convert_model.md).
+- The converted model has two files: `.param` and `.bin`, as model structure file and weight file respectively.
+
+### FAQs
+1. When running ncnn models for inference with custom ops, it fails and shows the error message like:
+
+ ```
+ TypeError: register mm custom layers(): incompatible function arguments. The following argument types are supported:
+ 1.(ar0: ncnn:Net) -> int
+
+ Invoked with:
+ ```
+ This is because of the failure to bind ncnn C++ library to pyncnn. You should build pyncnn from C++ ncnn source code, but not by `pip install`