[Jetson-inference] Classifying Images with ImageNet 실습

본 글은 jetson-inference를 바탕으로 정리한 글입니다. 영어를 한글로 번역하는(이해하는) 과정에서 오류가 있을 수 있으니 참고해주시기 바랍니다. 또한, 해당 글은 Python만을 다루므로 참고해주시기 바랍니다.


먼저 jetson nano의 시스템 설정(Jetpack 설치 등)을 해주어야 합니다. 관련 링크에서 기기의 스펙에 따라 참고하여 설치해주면 됩니다. 추가로 Building the Project from Source에서 필요한 파일을 설치해주면 됩니다. 이에 대한 자세한 설명은 아래와 같습니다.

Building the Project from Source

  • 원하는 위치에 jetson-inference 파일을 clone 해줍니다. 저의 경우, 바탕화면에 github라는 폴더를 생성한 후 그곳에 clone을 해주었습니다. 터미널 창을 열어 아래의 명령어를 차례대로 입력해줍니다.
$ sudo apt-get update
$ sudo apt-get install git cmake
$ git clone --recursive https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference
$ sudo apt-get install libpython3-dev python3-numpy

위의 명령어 입력을 완료했다면 다음은 아래의 명령어를 입력해줍니다. 각각의 명령어가 무엇을 의미하는지 궁금하다면 링크를 참고해주시기 바랍니다.

$ cd jetson-inference	# 만약에 jetson-inference 폴더에 이미 위치해있다면 생략합니다
$ mkdir build
$ cd build
$ cmake ../

위의 명령어 입력을 완료했다면 아래의 창이 출력될 것입니다. 필요한 Model을 설치해줍니다. 저의 경우, 우선 기본 설정되어있는 모델을 설치했습니다.

추후에 필요한 모델을 추가로 설치하고 싶다면 아래의 명령어를 통해 설치할 수 있습니다.

$ cd jetson-inference/tools
$ ./download-models.sh

위의 과정을 수행했다면 다음은 파이토치(PyTorch)를 설치하라는 창이 출력됩니다. 파이썬 버전에 맞추어 파이토치를 설치해줍니다.

파이토치 설치는 다소 오래 걸리니 참고해주시기 바랍니다.

파이토치 설치가 완료되었다면 아래의 명령어를 입력해줍니다.

$ cd jetson-inference/build		# 이미 build 디렉토리 내에 있다면 생략해도 됩니다
$ make
$ sudo make install
$ sudo ldconfig

위의 과정을 완료했다면 시스템 설정은 끝 마치게됩니다. 이제부터 ImageNet 데이터셋을 활용하여 이미지를 분류해보겠습니다.


Inference

1. Classifying Images with ImageNet

1.1 Using the ImageNet Program on Jetson

이전의 Building the Project from Source 과정이 성공적으로 설치되었는지 확인해보기 위해 아래의 명령어를 터미널에 입력하여 이미지 분류를 해보도록 한다.

$ cd jetson-inference/build/aarch64/bin

$ ./imagenet.py images/orange_0.jpg images/test/output_0.jpg	# 필자의 경우, 파이썬만을 사용하므로 python 파일을 실행함

파이썬 파일을 실행할 경우, 처음에는 몇분 정도 걸립니다. 처음 실행할 경우 네트워크를 최적화하는 과정이 오래 걸리지만 이후 실행할 경우에는 해당 네트워크가 디스크에 저장되어있어 더 빨리 실행시킬 수 있습니다.

출력 이미지가 지정한 위치(images/test/output_0.jpg)에 잘 저장되었는지 확인해보기 위해 아래의 명령어를 입력하여 이미지를 출력해봅니다.

$ cd images/test
$ eog output_0.jpg

아래의 이미지를 통해 정상적으로 출력 이미지가 저장되어있는 것을 확인할 수 있습니다. 오렌지 이미지에 대해 왼쪽 상단에 96.68%라는 분류 결과값을 출력해주었습니다.

이번에는 딸기 이미지에 대해 분류해보도록 하겠습니다. 아래의 명령어를 입력합니다.

$ cd jetson-inference/build/aarch64/bin

$ ./imagenet.py images/strawberry_0.jpg images/test/output_1.jpg

or

$ python3 imagenet.py images/strawberry_0.jpg images/test/output_1.jpg

추가로 다른 분류 모델을 사용해보고 싶다면 링크를 참고해주시기 바랍니다.

Using Different Classification Models

다른 분류모델(resnet-18)을 사용하기 위해 아래의 명령어를 입력합니다.

$ ./imagenet.py --network=resnet-18 images/jellyfish.jpg images/test/output_jellyfish.jpg

이전과 마찬가지 이유로, 다른 모델을 처음 실행할 때는 상대적으로 오래 걸리는점 참고해주시기 바랍니다.

이외에도 비디오나 다른 스트림 방법을 알고 싶다면 Camera Streaming and Multimedia를 참고해주시기 바랍니다.


1.2 Coding Your Own Image Recognition Program (Python)

1.3 Running the Live Camera Recognition Demo

본인이 구매한 카메라에 맞게 관련 설정을 해줍니다. 저의 경우, 라즈베리파이 카메라 V2를 구매하여 관련 모듈을 설치하여 필요한 설정을 해주었습니다. 카메라 설정이 궁금하시다면 Camera Streaming and Multimedia를 참고해주시기 바랍니다.

필자가 사용한 명령어

# 관련 모듈 설치
$ sudo apt-get install v4l-utils

# 카메라 연결 및 포트 확인
$ v4l2-ctl --list-devices

# 카메라 영상의 포맷 확인
$ v4l2-ctl --device=/dev/video0 --list-formats-ext
$ ./imagenet.py /dev/video0		# V4L2 camera

위의 명령어를 입력하면 된다고 하지만, 저는 작동하지 않습니다. 이유는 모르겠으나(젯슨 나노 2GB라 성능이 부족한가...?) 추후에 재도전 해보도록 하고 다음 단계로 넘어가도록 하겠습니다.


Reference

참고할만한 사이트

추가로 알고싶은 내용

  • Docker

좋은 웹페이지 즐겨찾기