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

Jetson mmdetection 모델 변환 과정

by makepluscode 2023. 1. 23.
반응형

Jetson mmdetection 예제를 통한 모델 변환 과정 분석

mmdetection 는 open-mmlab 에서 개발한 CV 를 위한 framework 이다. 이 framework 는 다양한 알고리즘 모델을 쉽게 사용할 수 있도록 미들웨어와 관련 도구를 제공한다.

NVIDIA Jetson 에 복잡한 과정을 통해 mmdetection 를 설치하였다.

2023.01.21 - [NVIDIA Jeston/DNN & TensorRT] - Jetson mmdetection 포팅 가이드

 

Jetson mmdetection 포팅 가이드

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

makepluscode.tistory.com

Jetson mmdetection 설치과정

다시한번 Jetson 플랫폼에 mmdetection 를 설치하는 과정을 정리해보면,

  1. 개발환경 Tool 설치 (Archiconda, PyPorch, CMake)
  2. MMDeploy 모델 변환기 설치
  3. C/C++ 추론 SDK 설치
  4. MMDetection 설치

로 정리할 수 있다. 마지막으로 다음의 명령어로 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 의 설치와 demo 를 실행하였으니, 이 과정을 통해서 동작 방식을 이해해보자. demo 명령어의 입력과 출력에 대해서 알아본다.

MMDeploy 모델변환 과정

MMDeploy 모델 변환 과정에 필요한 입력

deploy config 파일

추론 모델에 대한 framework 형태, 양자화 여부, 입력텐서 모양 등을 기술하는 설정파일 이다. 설정파일의 이름은 아래의 형식을 가진다.

(task name)_(backend name)_(dynamic or static).py
  • task name: model 의 task 유형 (예. dectection, segmentation, classification, ocr, ...)
  • backend name: 벡엔드 이름, 지원되는 백엔드는 ONNXRuntime , TensorRT , ncnn , PPLNN , OpenVINO 이다. 만약 양자화 기능을 사용하는 경우 양자화 유형을 표시한다. (예. tensorrt-int8), 
  • dynamic or static: 동적 또는 정적 입력텐서, 백엔드 네트워크의 입력되는 텐서의 모양(크기)을 명시 (예. static 또는 dynamic-320x320-1344x1344)

이 예제에서 사용된 detection_tensorrt_dynamic-320x320-1344x1344.py 의 경우 detection 을 수행하며, tensorrt 백엔드 프레임워크를 사용하고, 동적인 입력텐서(최소 320x320, 최대1344x1344)를 의미한다. 해당 config 파일의 실제 내용을 살펴본다.

_base_ = ['./base_dynamic.py', '../../_base_/backends/tensorrt.py']

backend_config = dict(
    common_config=dict(max_workspace_size=1 << 30),
    model_inputs=[
        dict(
            input_shapes=dict(
                input=dict(
                    min_shape=[1, 3, 320, 320],
                    opt_shape=[1, 3, 800, 1344],
                    max_shape=[1, 3, 1344, 1344])))
    ])

detection_tensorrt_dynamic-320x320-1344x1344.py 의 구성은 파일 명에서 보이는 것 처럼 backend 로 tensorrt 를 사용한다. 네트워크에 입력될 tensor 의 모양을 정할 수 있다. 위 최소입력텐서 (320x320), 최적입력텐서 (800x1344), 최대입력텐서 (1344x1344) 로 설정되었다. 최대 batch 의 크기는 1 이다.

동적입력형태 및 batch 지원에는 더 많은 메모리가 필요할 수 있다. 특히 Jetson 과 같은 임베디드 장치에서는 고정된 입력텐서를 사용하는 것을 권장하고 있다. 추론속도 개선을 위해 고정크기의 단일 텐서로 수정해서 실험할 예정

model config 파일

model config 파일은 알고리즘 네트워크에 대한 설정을 기술한다. retinanet_r18_fpn_1x_coco.py 모델 설정 파일의 내용은 다음과 같다. 파일의 이름에서 알수있듯이 retinanet 네트워크를 사용하며 coco 데이터세트를 통해서 학습되었다.

_base_ = [
    '../_base_/models/retinanet_r50_fpn.py',
    '../_base_/datasets/coco_detection.py',
    '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
]

# optimizer
model = dict(
    backbone=dict(
        depth=18,
        init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet18')),
    neck=dict(in_channels=[64, 128, 256, 512]))
optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001)

# NOTE: `auto_scale_lr` is for automatically scaling LR,
# USER SHOULD NOT CHANGE ITS VALUES.
# base_batch_size = (8 GPUs) x (2 samples per GPU)
auto_scale_lr = dict(base_batch_size=16)

checkpoint 파일

MMDeploy 모델 변환 과정에서 PyTorch 형식의 체크포인트 파일이 필요하다.  이 예제에서 사용된 체크포인트 파일은 coco 로 학습된 retinanet 모델이다.

retinanet_r18_fpn_1x_coco_20220407_171055-614fd399.pth

기타 파라미터

  • work-dir ONNX 모델을 저장할 디렉터리 (기본값 ./work-dir)
  • --device cuda:0 모델 변환에 사용된느 장치명 (예. cpu 또는 cuda:0)
  • --show 추론 결과를 시각화하는 옵션
  • --dump-info  추론 결과를 출력하는 옵션

MMDeploy 모델 변환 산출물

MMDeploy 모델 변환 후에 생성되는 산출물의 리스트는 다음과 같다.

  • *.json 모델 변환 과정의 meta data
  • *.onnx onnx model 파일
  • *.engine TensorRT engine
~/mmdeploy$ tree work_dir/
work_dir/
├── deploy.json
├── detail.json
├── end2end.engine
├── end2end.onnx
└── pipeline.json

0 directories, 5 files

참고자료

open-mmlab 의 mmdeploy 공식 github 를 참고한다.

https://github.com/open-mmlab/mmdeploy

 

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

반응형