soma0sd

코딩 & 과학 & 교육

NVIDIA Jetson 딥러닝 추론 준비하기

반응형

여기서는 Jetson을 위한 추론 도구 유틸리티인 jetson-inference를 설치하고 Python에서 추론 기능을 활용합니다.

젯슨 추론 도구

엔비디아의 수석 기술 마케팅 엔지니어인 더스틴 프랭클린(Dustin Franklin)은 Jetson을 위한 여러 도구와 사용 예제, 문제 해결방법을 연구하고 결과를 공개합니다.

이번에 소개하는 jetson-inference 또한 더스틴 프랭클린의 공개 작업물인데요. TensorRT를 이용한 텐서코어 추론을 지원합니다. 주로 이미니와 영상의 딥러닝 추론을 지원합니다. jetson-inference는 다음 추론 예제와 가이드를 제공합니다.

  • ImageNet을 이용한 이미지 분류
  • DetectNet을 이용한 객체 인식
  • SegNet을 이용한 이미지 분할
  • PoseNet을 이용한 자세 추정
  • DepthNet을 이용한 단안 깊이 추정
  • ResNet의 이미지 분류/인식 재훈련
  • SSD-MobileNet의 객체 인식 재훈련

라이브러리는 C++과 Python을 지원하며 여기서는 우선 Python을 중점으로 다룹니다.

추론 도구 빌드

다음 명령을 Jetson에서 실행하여 저장소를 로컬에 복제합니다.

# 패키지 목록 업데이트
sudo apt-get update

# 패키지 종속성 설치
sudo apt-get install git cmake libpython3-dev python3-numpy

# 서브모듈과 함께 저장소 클론
git clone --recursive https://github.com/dusty-nv/jetson-inference
cd jetson-inference

# 프로젝트 빌드 디렉토리 생성
mkdir build
cd build

빌드 디렉토리를 만들고 위치를 이동한 뒤 빌드를 시작합니다. 아래 빌드 속성 중에서 사용하고자 하는 의도에 맞게 빌드 명령을 수행하세요.

일반 빌드: 빌드 과정에서 엔비디아가 제공하는 모델과 파이토치(PyTorch) 설치여부를 제어

cmake ../

기본값 빌드: 사용자 설정을 건너뛰고 엔비디아 기본 모델만 설치

cmake -DBUILD_INTERACTIVE=NO ../

빌드를 완료한 뒤 빌드한 프로젝트 패키지를 설치합니다.

make -j$(nproc)
sudo make install
sudo ldconfig

설치한 패키지와 파이썬 바인딩이 잘 작동하는지 확인하기 위해 ImageNet 예제를 한번 실행해보도록 하겠습니다. 현재 디렉토리는 아직 프로젝트 빌드를 위해 이동했던 build/입니다.

cd aarch64/bin
./imagenet.py images/orange_0.jpg images/test/output_0.jpg

오렌지를 정확히 인식했습니다. 처음에는 이미지 분류를 위해 사용하는 GoogleNet의 엔진을 초기화하는 작업을 수행하느라 시간이 걸립니다. 터미널에 실제로 얼마나 걸렸는지 표시되긴 하지만 체감이 잘 안되니 다른이미지로 한번 더 해봅시다.

./imagenet.py images/fruit_2.jpg images/test/output_1.jpg

이렇게 이미지 분류를 잘 수행했습니다. 패키지와 Python 바인딩에 문제는 없는 것 같네요.

가끔 생기는 문제

VideoSoure()를 사용하는 중에 간혹 nvbuf_utils: dmabuf_fd ${address} mapped entry NOT found 오류가 발생하는 경우가 있습니다. 개발자는 이를 무시해도 문제가 없다고 하지만 다른 디버그 메시지가 묻힐 정도로 많이 발생하는 경우에는 다음 명령으로 다시 빌드합니다.

# 추론 도구 디렉토리로 이동
cd jetson-inference

# 빌드 디렉토리 삭제 후 다시 생성
rm -rf build
mkdir build
cd build

# NVMM을 사용하지 않는 추론도구로 다시 빌드
cmake -DENABLE_NVMM=OFF ../

# 다시 인스톨
make -j$(nproc)
sudo make install
sudo ldconfig
반응형
태그:

댓글

End of content

No more pages to load