본문 바로가기
NVIDIA Jeston/DNN & TensorRT

Jetson mmdetection 포팅 가이드

by makepluscode 2023. 1. 21.
반응형

Open-mmlab mmdetection 포팅하는 방법

mmdetection 는 open-mmlab 에서 개발한 computer vision 프레임워크 이다. 다양한 알고리즘 모델을 쉽게 사용할 수 있도록 미들웨어와 관련 도구를 제공한다. 이 포스팅에서 mmdetection 의 Jetson 에 설치, 포팅, 동작 시키는 방법을 정리한다.

NVIDIA jetson + mmdetection

 

(아래의 참고자료에 있는) open-mmlab 의 Jeston 설치 가이드를 따라서 실험해보았다. 보다 자세한 내용은 open-mmlab 자료를 참고한다.

open-mmlab 추천 플랫폼

'23.1 현재 아래의 4가지 Jetson 하드웨어를 지원한다. Docker 를 사용하면 다른 Jeston Platform 에도 설치 가능할 것으로 보인다. Docker 를 통한 설치는 다른 포스팅에서 다루겠다.

  • Jetson Nano
  • Jetson Xavier NX
  • Jetson TX2
  • Jetson AGX Xavier

'23.1 현재 Jetson 용 mmdetection 은 Jetpack 4.6 부터 검증이 되었고 Jetpack 4.6.1 을 권장한다. (TensorRT 8.0.1.6)

Jetson Xavier NX 에 mmdetection 을 설치해보자!

테스트 환경

  • Jetson Xavier NX devkit (production module)
  • Jetpack 4.6.1

1. 빌드 도구 설치

mmdetection 을 위한 build 관련 도구를 설치한다.

STEP1-1. Archiconda 설치

Anaconda 는 Jetson 용으로 제작된 Wheel 을 제공하지 않는다. Anaconda 대신에 Achiconda 를 설치한다.

wget https://github.com/Archiconda/build-tools/releases/download/0.2.3/Archiconda3-0.2.3-Linux-aarch64.sh
bash Archiconda3-0.2.3-Linux-aarch64.sh -b

echo -e '\n# set environment variable for conda' >> ~/.bashrc
echo ". ~/archiconda3/etc/profile.d/conda.sh" >> ~/.bashrc
echo 'export PATH=$PATH:~/archiconda3/bin' >> ~/.bashrc

echo -e '\n# set environment variable for pip' >> ~/.bashrc
echo 'export OPENBLAS_CORETYPE=ARMV8' >> ~/.bashrc

source ~/.bashrc
conda --version

Achiconda 를 이용하여 mmdepoly 가상 환경을 생성한다.

# get the version of python3 installed by default
export PYTHON_VERSION=`python3 --version | cut -d' ' -f 2 | cut -d'.' -f1,2`
conda create -y -n mmdeploy python=${PYTHON_VERSION}

생성 후 Achiconda 환경을 활성화 한다.

conda activate mmdeploy

STEP1-2. PyPorch 설치하기 - 30min

# pytorch
wget https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl -O torch-1.10.0-cp36-cp36m-linux_aarch64.whl
pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl

# torchvision
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev libopenblas-base libopenmpi-dev  libopenblas-dev -y
git clone --branch v0.11.1 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.11.1
pip install -e .

STEP1-3. CMake 재설치

Jetpack 4.6.1 에는 cmake 3.10.2 이 설치되어 있다. mmdetection 에서 요구하는 3.23.1 버전으로 재설치한다.

# purge existing
sudo apt-get purge cmake -y

# install prebuilt binary
export CMAKE_VER=3.23.1
export ARCH=aarch64
wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-linux-${ARCH}.sh
chmod +x cmake-${CMAKE_VER}-linux-${ARCH}.sh
sudo ./cmake-${CMAKE_VER}-linux-${ARCH}.sh --prefix=/usr --skip-license
cmake --version

2. MMDeploy 모델 변환기 종속 패키지 설치

Jetson 플랫폼에서 mmdetection 알고리즘 모델 변환에 필요한 패키지를 설치하고 준비한다.

STEP2-1. TensorRT 준비

JetPack SDK 에는 이미 tensorrt 가 포함되어있다. conda 환경에서 불러서 사용하기 위해 tensorrt 패키지를 복사한다.

cp -r /usr/lib/python${PYTHON_VERSION}/dist-packages/tensorrt* ~/archiconda3/envs/mmdeploy/lib/python${PYTHON_VERSION}/site-packages/
conda deactivate
conda activate mmdeploy
python -c "import tensorrt; print(tensorrt.__version__)" # Will print the version of TensorRT

다음 단계에 있는 mmdeploy 를 빌드하기 위해 bashrc 에 환경변수를 미리 설정해둔다.

echo -e '\n# set environment variable for TensorRT' >> ~/.bashrc
echo 'export TENSORRT_DIR=/usr/include/aarch64-linux-gnu' >> ~/.bashrc

# this is not needed if you use NVIDIA SDK Manager with "Jetson SDK Components" for installing JetPack.
# this is only needed if you install JetPack using SD Card Image Method.
echo -e '\n# set environment variable for CUDA' >> ~/.bashrc
echo 'export PATH=$PATH:/usr/local/cuda/bin' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64' >> ~/.bashrc

source ~/.bashrc

STEP2-2. MMCV 설치 - 90 min

'23.01 현재 Jetson 를 위한 mmcv prebuilt 패키지가 없다. mmdeloy 가상 환경을 활성화하고 mmcv 를 소스에서 직접 빌드한다. 

conda activate mmdeploy

mmcv 를 소스에서 직접 빌드한다. 

sudo apt-get install -y libssl-dev
git clone --branch v1.4.0 https://github.com/open-mmlab/mmcv.git
cd mmcv
MMCV_WITH_OPS=1 pip install -e .

STEP2-3. ONNX 설치

onnx-1.13.0 를 설치한다.

# Execute one of the following commands
conda install -c conda-forge onnx

STEP2-4. h5py 와 pycuda 설치

모델 변환기는 HDF5를 사용하여 TensorRT INT8 양자화를 위한 보정 데이터를 저장한다. GPU 를 사용하기 위한 pycuda 도 설치한다.

sudo apt-get install -y pkg-config libhdf5-100 libhdf5-dev
pip install versioned-hdf5 pycuda

3. 추론 SDK 종속 패키지 설치

MMDeploy C/C++ Inference SDK 에서 요구되는 패키지를 설치한다.

STEP3-1. spdlog 설치

C/C++ 로깅을 위한 라이브러리를 설치한다.

sudo apt-get install -y libspdlog-dev

STEP3-2. ppl.cv 설치 - 15min

C/C++ 이미지 프로세싱 라이브러리를 설치한다.

git clone https://github.com/openppl-public/ppl.cv.git
cd ppl.cv
export PPLCV_DIR=$(pwd)
echo -e '\n# set environment variable for ppl.cv' >> ~/.bashrc
echo "export PPLCV_DIR=$(pwd)" >> ~/.bashrc
./build.sh cuda

4. MMDeploy 설치

STEP4-1 mmdelploy 저장소 생성

github 에서 mmdeploy 를 clone 한다.

git clone --recursive https://github.com/open-mmlab/mmdeploy.git
cd mmdeploy
export MMDEPLOY_DIR=$(pwd)

STEP4-2 모델 변환기 설치

OpenMMLab 의 일부 연산자는 tensort 에서 지원되지 않는다. 이 연산자들을 위한 tensort 플러그 인을 빌드하고 설치한다.

# build TensorRT custom operators
mkdir -p build && cd build
cmake .. -DMMDEPLOY_TARGET_BACKENDS="trt"
make -j$(nproc) && make install

# install model converter
cd ${MMDEPLOY_DIR}
pip install -v -e .
# "-v" means verbose, or more output
# "-e" means installing a project in editable mode,
# thus any local modifications made to the code will take effect without re-installation.

STEP4-3 C/C++ 추론 SDK 설치

C/C++ inference SDK 를 빌드하고 설치한다.

mkdir -p build && cd build
cmake .. \
    -DMMDEPLOY_BUILD_SDK=ON \
    -DMMDEPLOY_BUILD_SDK_PYTHON_API=ON \
    -DMMDEPLOY_BUILD_EXAMPLES=ON \
    -DMMDEPLOY_TARGET_DEVICES="cuda;cpu" \
    -DMMDEPLOY_TARGET_BACKENDS="trt" \
    -DMMDEPLOY_CODEBASES=all \
    -Dpplcv_DIR=${PPLCV_DIR}/cuda-build/install/lib/cmake/ppl
make -j$(nproc) && make install

5. MMDetection 설치

MMDetection은 PyTorch 기반 open source 의 객체 검출 도구 이다.

STEP5-1 MMDetection 설치

github 에서 mmdetection 를 clone 하고 설치하자.

 

git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -r requirements/build.txt
pip install -v -e .  # or "python setup.py develop"

STEP5-2 MMDetection demo 실행

demo 실행을 위해서 mmdeploy 디렉토리로 이동한다.

cd mmdeploy

checkpoint 파일을 download 한다.

wget https://download.openmmlab.com/mmdetection/v2.0/retinanet/retinanet_r18_fpn_1x_coco/retinanet_r18_fpn_1x_coco_20220407_171055-614fd399.pth

아래의 명령어로 demo 를 실행한다.

python ./tools/deploy.py \
    configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py \
    /home/nvidia/mmdetection/configs/retinanet/retinanet_r18_fpn_1x_coco.py \
    retinanet_r18_fpn_1x_coco_20220407_171055-614fd399.pth \
    /home/nvidia/mmdetection/demo/demo.jpg \
    --work-dir work_dir \
    --show \
    --device cuda:0 \
    --dump-info

NVIDIA jetson + mmdetection

MMDetection 을 통해 객체 검출 추론이 완료된 이미지

NVIDIA jetson + mmdetection

이상, NVIDIA Jetson 에 MMDetection 를 설치하여 demo 를 수행해보았다. 다음 포스팅에서는 model 변환 과정을 분석해 볼 예정이다.

참고자료

MMDeploy 공식 github 에서 제공하는 설치 메뉴얼을 참고한다.

https://github.com/open-mmlab/mmdeploy/blob/master/docs/en/01-how-to-build/jetsons.md

 

GitHub - open-mmlab/mmdeploy: OpenMMLab Model Deployment Framework

OpenMMLab Model Deployment Framework. Contribute to open-mmlab/mmdeploy development by creating an account on GitHub.

github.com

반응형