[목차]


필자는 인공지능 개발에 활용이 가능한 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 달의날에 프미케 -

[목차]


얼마전 텐서플로우(TenosrFlow) 관련 자료를 인터넷에서 검색하다보니 딥러닝 추론에 사용할수 있는 ASIC 형태의 구글 Edge TPU가 적용된 인공지능 가속모듈인 Coral의 소식을 접하고 조금더 알아보기위해 Coral 공식 홈페이지방문해보았습니다.


Coral 공식 홈페이지를 방문해 보니 mouserseeedstudio사이트를 통해서 Coral 을 구입할수 있는것을 확인할수 있었습니다. 두곳다 해외인데다가 시드스튜디오는 프리오더 버튼이보이네요 예정일은 5월 정도로 표기되어 있었습니다. 마우저 사이트에서는 구매버튼이 활성화 되어있어 구매가 가능한데 예정일이 4월 16일로 표기되어 있어서 물품을 받으려면 시간이 좀 소요될것 이라고 생각하고 
하고 주문을 하였습니다.. 주머니 사정을 생각해 SBC 보드타입이 아닌 USB타입을 구매해보았습니다. 주문페이지에는 배송비가 무료로 뜨는군요 배송비 없이  $74.99에 주문을 할수 있었습니다.



<위 - Coral 공식홈페이지,  가운데 - SeeeedStudio 사이트 coral 판매페이지 , 아래 - mouser 사이트  coral 판매페이지> 



<박스를 열어봤더니 안에 Coral Accelerator 이라고 적힌 제품 박스가 보였습니다.>



<제품 박스 안에는 안내문, Coral 가속기 본체, USB케이블의 구성품이 들어 있었습니다.>


주문 페이지를 이것저것 눌러보다가 본 내용중에는 
송 예정일이 4월 16일로 표기된부분의 내용이 있어서  시간이 좀 걸릴것이라고 생각했었는데 주문 다음날 DHL KOREA로부터 통관정보를 입력해달라는 알림톡이 전달되었습니다. 운송번호를 추적해보니 주문일에 바로 배송이 시작된것을 확인할수 있었습니다. 주말이 지나고 어제(4월 1일) 제품이 도착했습니다. 목요일날 주문해서 월요일에 받으니 주말을 보내서 그런지 해외주문인데도 불구하고 국내택배로 착각할 정도로 배송이 빠르게 느껴졌습니다.

USB 타입 코랄 가속기 박스의 의 구성품 내용은 안내문, 코랄 가속기본체, USB케이블의 구성품이 들어있었습니다. 의외로 빨리 도착해 놀랍기도 했었지만 출시된지 얼마안된 것이라 그런지 적용사례 및 유저 튜토리얼 등의 자료를 검색하기가 아직은 어려웠습니다. 우선은 코랄 공식홈페이지 Docs 메뉴에서 볼수있는 머신러닝(ML) 예제 모델들을 하나씩 실행해 보면서 가속기의 성능을 체감해 보야야 할것같습니다. 

- 2019.04.02 불의날에 프미케 -


+ Recent posts