[목차]


필자는 인공지능 개발에 활용이 가능한 Edge TPU 가속모듈인 USB 타입 구글 코랄(Coral) 장치를 구입하고 코랄 공식홈페이에 제시된 예제인 분류모델을 실행해보았습니다. 이미지 파일을 입력받아 분류하는것이라 카메라의 실시간 영상을 입력받아 처리할수 있는 방법이 궁금하였습니다. 검색을 하다 보니 라즈베리파이 3와 구글 코랄 USB 장치를 활용하여 Mobilenet-SSD v2로 카메라의 영상에서 사물을 디텍션하고 분류하는 내용을 찿아볼수 있어 실행해보기로 하였습니다.



■ 테스트 장치 환경

영상을 입력받아 발견(Detection)하고 이를 분류(Classification)하기 위해서는 이전 포스트 [2. 구글 코랄(Coral) 환경설정 및 예제 분류 모델 실행해보기.] 에서 활용했던 장치인 Raspberry3 b+USB 구글 코랄(Coral) 가속기외에 카메라 장치가 추가로 필요했습니다. 필자의 라즈베리파이는 케이스에 조립한 상태라 이번 포스트는 USB 웹캠을 사용하였습니다. 


필자가 사용한 장치인 라즈베리파이3 b+, Google Coral Accelerator, Logitech C270 웹캠입니다.

장치를 연결후 USB 장치가 잘 인식되었는지 확인해보기위해 lsusb 명령어를 입력해보았습니다.

> lsusb
Bus xxx Device xxx: ID xxxx:xxxx Google Inc.
Bus xxx Device xxx: ID xxxx:xxxx Logitech, Inc. Webcam C270

구글 코랄(Coral) 딥러닝 추론 가속기 장치와 로지텍(Logitech) C270 웹캠 장치가 정상적으로 인식된것을 확인할수 있었습니다.



■ 실행코드 및 Open CV 설치

필자가 참조한 일본어 사이트의 포스트는 파이선 코드를 명세하고 있었습니다. 해당코드를 직접 편집기에 작성하여 py 파일을 생성하였습니다. 모델과 라벨파일은 예제 분류모델을 실행할때 다운받은것을 활하면되었기 때문에 파이썬 실행 파일만 생성하면 실행이 가능하였습니다. 파일의 생성 순서는 다음과 같습니다.

> cd /home/pi/python-tflite-source/edgetpu/demo
> nano MobileNet-SSD-TPU-async.py

i. 위의 명령어를 입력하여 nano 편집기를 실행시킵니다.

ii. https://qiita.com/PINTO/items/dd6ba67643bdd3a0e595 사이트에 접속하여 4-2 항목의 MobileNet-SSD-TPU-async.py 코드를 복사하여 붙여넣습니다.

iii. ctrl + o 키를 눌러 저장한후 ctrl + x 키를 눌러 편집기를 종료합니다..


실행해 보려고 하니 에러를 출력하는군요 MobileNet-SSD-TPU-async.py 파일의 코드를 확인해보니 import cv2 라인을 포함하고 있었습니다. 라즈베리안의 pythone3 에서 openCV를 사용하기위해 openCV를 빌드해보았으나 너무 오래걸리는 관계로 AI Robots KR 커뮤니티 카카오톡 오픈채팅방의 Gygy님께서 알려주신 링크인 [라즈베리파이 OpenCV 설치(빌드 없이 설치파일로)] 포스트의 내용을 참고 하여 OpenCV를 설치하였습니다.



■ 실행해보기 및 결과

OpenCV 설치가 완료 되었으니 실행을 해보기로 했습니다. 파이썬 코드만 작성하였기 때문에 모델과 라벨 파일을 지정해야 합니다. 참고한 일본어사이트에는 실행 명령어를 제시하고 있지 않는군요 일본어 사이트 포스트 제목에 MS-COCO라는 문구가 존재하네요 Edge TPU런타임의 디렉토리를 살펴보니 지정할수 있는 모델과 라벨 파일이 존재하고 있어 이것을 사용하기로 하고 명령어를 입력하였습니다.

> cd /home/pi/python-tflite-source/edgetpu/
> python3 demo/MobileNet-SSD-TPU-async.py --model test_data/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite --label test_data/coco_labels.txt


위의 명령를 실행시켜보니 C270 카메라로 받은 영상이 정상적으로 디텍팅 되고 분류가 수행되는군요 (필자는 98% 사람으로 인식되는군요 그럼.... 나머지 2%는.....?????? ^^ ) 포스트의 사진에 표시된 플레이백 프레임과 디텍션 프레임은 참고한 사이트의 수치보다 낮은 수치가 나오고 있지만 라즈베리파이가 장시간 opencv 를 빌드하느라 발열로 인하여 성능이 떨어진 상태에서 실행한것을 촬영한것이라 낮게 나온것 같네요 다음날 다시 실행해보니 꽤 올라간 프레임 수치가 나오는것을 확인할수 있었습니다.


- 2019.04.15 달의날에 프미케 -

[목차]

 
■ 테스트 환경

몇일전에 구입한 머신러닝 개발 사용할수 있는 가속기 모듈인 구글 코랄(Coral)이 생각보다 빨리 도착해서 공식홈페이지에 있는 Doc 메뉴를 읽어보며 예제를 실행해보기로했습니다.  내용중에 USB타입 코랄 엑설러레이터의 경우 X86_64 환경 혹은 armv8 아키텍쳐 환경에서 예제를 실행할수 있다는 내용을 볼수 있었습니다.

아쉽게도 필자가 보유하고 있는 SBC(Single Board Compuer)들은 모두 armv7아키텍쳐의 프로세서가 탑재된것이라 가지고 있는SBC는 사용을 할수가 없었습니다. 하지만 리눅스 박스로 사용하고있는 저전력 컴퓨터는 구형이기는 하지만 Atom330과 E350프로세서를 탑재하고 있기때문에 X86_64환경을 충족하고 있었습니다. 일단 예제를 실행 시켜보기위해 Edge TPU 런타임 설치 및  예제 실행 명령어를 입력해보니 Illegal instruction 에러가 출력되고 (E350의 데비안에서는 Illegal instruction (core dumped)라고 출력되는군요) 실행이 되지 않았습니다. 

검색을해보니  텐서플로우 1.6 이상버전 부터는 CPU의 AVX명렁어가 사용되도록 빌드되어 CPU가 AVX를 지원하지 않을경우 Illegal instruction (core dumped) 에러를 띄운다는 내용을 찾을수 있었습니다. 정확히는 모르지만 edge TPU 런타임의 경우도 같은이유가 아닐까라는 추측하고 하고 명령어를 입력해 확인해보았습니다.

> grep avx /proc/cpuinfo 

확인을 위해 위의 명령를 입력해보니 atom330, E350 둘다 아무내용이도 출력되지 않는 것으로 보아 필자의 리눅스박스는 avx 명령어는 지원하지 않는 프로세서를 사용하고 있는 것이네요. 불필요한 삽질을 피하기 위해 armv8 환경이 지원되는 프로세서가 탑재된 라즈베리파이3 b+ 모델을 구입하였습니다.


■ Edge TPU 런타임 및 Python 라이브러리 설치

> wget http://storage.googleapis.com/cloud-iot-edge-pretrained-models/edgetpu_api.tar.gz
> tar xzf edgetpu_api.tar.gz
> cd python-tflite-source
> bash ./install.sh

Google Coral EdgeTPU 튜토리얼은 python 3.5버전 이상을 요구하고 있다고 합니다. 라즈베즈베리안의 파이썬3는 3.5버전이 이미 설치되어 있네요 다른 패키지를 설치할 필요 없이 예제 문서에 있는대로 설치 명령어를 입력하였습니다. 

라즈베리파이 b+에서는 특별한 경고나 오류 없이 잘설치가 되는것을 볼수 있었습니다. bash ./install.sh 를 입력하면 최대 동작 주파수를 사용할것이냐는 질의가 나오는데 최대 주파수의 동작의 경우 발열이 있다는 내용이 있어 일단은 N 을 선택하여 설치를 진행하였습니다. 

 예제 분류 모델 실행 

> cd edgetpu/
> python3 demo/classify_image.py --model  test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --label test_data/inat_bird_labels.txt --image test_data/parrot.jpg 

Get started with the USB Accelerator 튜토리얼에 나온대로 분류 모델 실행을 위해 문서에 명세된대로 위의 명령어를 입력해보았습니다. 

ERROR: Failed to retrieve TPU context
ERROR: Node number 0 (edgetpu-custom-op) failed to prepare 

에러가 출력되는군요 코랄 USB 가속기가 연결되지 않았다는 내용인데 설치하기전에 USB를 연결하고 설치 한것이 문제였나보네요 USB를 뽑았다 다시 연결하여 lsub명령어로 확인해보았더니 설치 스크립트 실행전에 는  Global Unichip Corp.  인식됬던 장치가 Google Inc. 장치로 변경된것을 확인하고 실행 명령어를 다시 입력해 보았습니다.

-------------------------------
Ara macao (Scarlet Macaw)

Score :  0.613281
-------------------------------
Platycercus elegans (Crimson Rosella)
Score :  0.152344

정상적으로 실행이 잘되는군요. Illegal instruction 에러로 인해 조금 당황하기도 했지만 공식홈의 시작하기 튜토리얼 따라해보며 구글 코랄(Coral) 인공지능 가속기를 사용한 분류 모델이 잘 동작하는 것을 확인할수 있었습니다.


- 2019.04.08 달의날에 프미케 -

+ Recent posts