# YOLOX-CPP-MegEngine
Cpp file compile of YOLOX object detection base on [MegEngine](https://github.com/MegEngine/MegEngine).
## Tutorial
### Step1: install toolchain
* host: sudo apt install gcc/g++ (gcc/g++, which version >= 6) build-essential git git-lfs gfortran libgfortran-6-dev autoconf gnupg flex bison gperf curl zlib1g-dev gcc-multilib g++-multilib cmake
* cross build android: download [NDK](https://developer.android.com/ndk/downloads)
* after unzip download NDK, then export NDK_ROOT="path of NDK"
### Step2: build MegEngine
* git clone https://github.com/MegEngine/MegEngine.git
* then init third_party
* then export megengine_root="path of MegEngine"
* cd $megengine_root && ./third_party/prepare.sh && ./third_party/install-mkl.sh
* build example:
* build host without cuda: ./scripts/cmake-build/host_build.sh
* build host with cuda : ./scripts/cmake-build/host_build.sh -c
* cross build for android aarch64: ./scripts/cmake-build/cross_build_android_arm_inference.sh
* cross build for android aarch64(with V8.2+fp16): ./scripts/cmake-build/cross_build_android_arm_inference.sh -f
* after build MegEngine, you need export the `MGE_INSTALL_PATH`
* host without cuda: export MGE_INSTALL_PATH=${megengine_root}/build_dir/host/MGE_WITH_CUDA_OFF/MGE_INFERENCE_ONLY_ON/Release/install
* host with cuda: export MGE_INSTALL_PATH=${megengine_root}/build_dir/host/MGE_WITH_CUDA_ON/MGE_INFERENCE_ONLY_ON/Release/install
* cross build for android aarch64: export MGE_INSTALL_PATH=${megengine_root}/build_dir/android/arm64-v8a/Release/install
* you can refs [build tutorial of MegEngine](https://github.com/MegEngine/MegEngine/blob/master/scripts/cmake-build/BUILD_README.md) to build other platform, eg, windows/macos/ etc!
### Step3: build OpenCV
* git clone https://github.com/opencv/opencv.git
* git checkout 3.4.15 (we test at 3.4.15, if test other version, may need modify some build)
* patch diff for android:
* ```
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f6a2da5310..10354312c9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -643,7 +643,7 @@ if(UNIX)
if(NOT APPLE)
CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD)
if(ANDROID)
- set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m log)
+ set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m log z)
elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD|NetBSD|DragonFly|OpenBSD|Haiku")
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m pthread)
elseif(EMSCRIPTEN)
```
* build for host
* ```
cd root_dir_of_opencv
mkdir -p build/install
cd build
cmake -DBUILD_JAVA=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=$PWD/install
make install -j32
```
* build for android-aarch64
* ```
cd root_dir_of_opencv
mkdir -p build_android/install
cd build_android
cmake -DCMAKE_TOOLCHAIN_FILE="$NDK_ROOT/build/cmake/android.toolchain.cmake" -DANDROID_NDK="$NDK_ROOT" -DANDROID_ABI=arm64-v8a -DANDROID_NATIVE_API_LEVEL=21 -DBUILD_JAVA=OFF -DBUILD_ANDROID_PROJECTS=OFF -DBUILD_ANDROID_EXAMPLES=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=$PWD/install ..
make install -j32
```
* after build OpenCV, you need export `OPENCV_INSTALL_INCLUDE_PATH ` and `OPENCV_INSTALL_LIB_PATH`
* host build:
* export OPENCV_INSTALL_INCLUDE_PATH=${path of opencv}/build/install/include
* export OPENCV_INSTALL_LIB_PATH=${path of opencv}/build/install/lib
* cross build for android aarch64:
* export OPENCV_INSTALL_INCLUDE_PATH=${path of opencv}/build_android/install/sdk/native/jni/include
* export OPENCV_INSTALL_LIB_PATH=${path of opencv}/build_android/install/sdk/native/libs/arm64-v8a
### Step4: build test demo
* run build.sh
* host:
* export CXX=g++
* ./build.sh
* cross android aarch64
* export CXX=aarch64-linux-android21-clang++
* ./build.sh
### Step5: run demo
> **Note**: two ways to get `yolox_s.mge` model file
>
> * reference to python demo's `dump.py` script.
> * wget https://github.com/Megvii-BaseDetection/storage/releases/download/0.0.1/yolox_s.mge
* host:
* LD_LIBRARY_PATH=$MGE_INSTALL_PATH/lib/:$OPENCV_INSTALL_LIB_PATH ./yolox yolox_s.mge ../../../assets/dog.jpg cuda/cpu/multithread <warmup_count> <thread_number>
* cross android
* adb push/scp $MGE_INSTALL_PATH/lib/libmegengine.so android_phone
* adb push/scp $OPENCV_INSTALL_LIB_PATH/*.so android_phone
* adb push/scp ./yolox yolox_s.mge android_phone
* adb push/scp ../../../assets/dog.jpg android_phone
* login in android_phone by adb or ssh
* then run: LD_LIBRARY_PATH=. ./yolox yolox_s.mge dog.jpg cpu/multithread <warmup_count> <thread_number> <use_fast_run> <use_weight_preprocess> <run_with_fp16>
* <warmup_count> means warmup count, valid number >=0
* <thread_number> means thread number, valid number >=1, only take effect `multithread` device
* <use_fast_run> if >=1 , will use fastrun to choose best algo
* <use_weight_preprocess> if >=1, will handle weight preprocess before exe
* <run_with_fp16> if >=1, will run with fp16 mode
## Bechmark
* model info: yolox-s @ input(1,3,640,640)
* test devices
* x86_64 -- Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
* aarch64 -- xiamo phone mi9
* cuda -- 1080TI @ cuda-10.1-cudnn-v7.6.3-TensorRT-6.0.1.5.sh @ Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
| megengine @ tag1.4(fastrun + weight\_preprocess)/sec | 1 thread |
| ---------------------------------------------------- | -------- |
| x86\_64 | 0.516245 |
| aarch64(fp32+chw44) | 0.587857 |
| CUDA @ 1080TI/sec | 1 batch | 2 batch | 4 batch | 8 batch | 16 batch | 32 batch | 64 batch |
| ------------------- | ---------- | --------- | --------- | --------- | --------- | -------- | -------- |
| megengine(fp32+chw) | 0.00813703 | 0.0132893 | 0.0236633 | 0.0444699 | 0.0864917 | 0.16895 | 0.334248 |
## Acknowledgement
* [MegEngine](https://github.com/MegEngine/MegEngine)
* [OpenCV](https://github.com/opencv/opencv)
* [NDK](https://developer.android.com/ndk)
* [CMAKE](https://cmake.org/)
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
多目标跟踪-使用yolox+deepsort开发的多目标跟踪算法项目-优质项目实战-附完整流程教程.zip (152个子文件)
gradlew.bat 2KB
cocoeval.cpp 20KB
yolox_openvino.cpp 18KB
yolox.cpp 17KB
yolox.cpp 16KB
yoloXncnn_jni.cpp 14KB
yolox.cpp 13KB
vision.cpp 524B
.gitkeep 0B
build.gradle 496B
build.gradle 335B
settings.gradle 15B
gradlew 5KB
logging.h 16KB
cocoeval.h 3KB
gradle-wrapper.jar 53KB
MainActivity.java 8KB
yoloXncnn.java 566B
train.jpg 59KB
README.md 6KB
README.md 4KB
README.md 4KB
README.md 4KB
README.md 3KB
README.md 3KB
README.md 1KB
README.md 1KB
README.md 1023B
README.md 868B
README.md 68B
README.md 65B
yolox.param 17KB
gradle-wrapper.properties 232B
yolo_head.py 23KB
json_logger.py 11KB
trainer.py 11KB
voc.py 10KB
demo.py 9KB
mosaicdetection.py 9KB
data_augment.py 9KB
yolox_base.py 8KB
kalman_filter.py 8KB
coco_evaluator.py 7KB
dist.py 7KB
launch.py 7KB
voc_evaluator.py 7KB
demo.py 7KB
lr_scheduler.py 6KB
yolo_head.py 6KB
linear_assignment.py 6KB
dataloading.py 6KB
eval.py 6KB
train.py 6KB
network_blocks.py 6KB
darknet.py 6KB
network_blocks.py 6KB
openvino_inference.py 6KB
fast_coco_eval_api.py 6KB
voc_eval.py 6KB
darknet.py 6KB
nn_matching.py 5KB
track.py 5KB
coco.py 4KB
io.py 4KB
boxes.py 4KB
tracker.py 4KB
datasets_wrapper.py 4KB
AIDetector_pytorch.py 4KB
yolox_voc_s.py 4KB
visualize.py 4KB
visualize.py 4KB
yolo_pafpn.py 3KB
train.py 3KB
evaluation.py 3KB
yolo_pafpn.py 3KB
deep_sort.py 3KB
samplers.py 3KB
model_utils.py 3KB
original_model.py 3KB
model.py 3KB
tracker.py 3KB
export_onnx.py 3KB
metric.py 3KB
yolov3.py 3KB
allreduce_norm.py 3KB
iou_matching.py 3KB
demo_utils.py 3KB
onnx_inference.py 3KB
logger.py 3KB
process.py 3KB
ema.py 3KB
yolo_fpn.py 2KB
test.py 2KB
data_prefetcher.py 2KB
trt.py 2KB
yolo_fpn.py 2KB
base_exp.py 2KB
preprocessing.py 2KB
feature_extractor.py 2KB
losses.py 2KB
共 152 条
- 1
- 2
资源评论
极智视界
- 粉丝: 2w+
- 资源: 1354
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功