Open-mmlab mmdetection 포팅하는 방법
mmdetection 는 open-mmlab 에서 개발한 computer vision 프레임워크 이다. 다양한 알고리즘 모델을 쉽게 사용할 수 있도록 미들웨어와 관련 도구를 제공한다. 이 포스팅에서 mmdetection 의 Jetson 에 설치, 포팅, 동작 시키는 방법을 정리한다.
(아래의 참고자료에 있는) 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
MMDetection 을 통해 객체 검출 추론이 완료된 이미지
이상, NVIDIA Jetson 에 MMDetection 를 설치하여 demo 를 수행해보았다. 다음 포스팅에서는 model 변환 과정을 분석해 볼 예정이다.
참고자료
MMDeploy 공식 github 에서 제공하는 설치 메뉴얼을 참고한다.
https://github.com/open-mmlab/mmdeploy/blob/master/docs/en/01-how-to-build/jetsons.md
'NVIDIA Jeston > DNN & TensorRT' 카테고리의 다른 글
Jetson mmdetection 모델 변환 과정 (0) | 2023.01.23 |
---|---|
Jetpack 설치부터 TensorRT Yolo V4 예제 실행하기 (0) | 2022.07.05 |