Google Coral Accelerator
- 컴퓨터의 보조 프로세서로 Edge TPU를 제공하는 USB 장치
- Linux, Mac, Windows 호스트 컴퓨터에 연결되어 기계 학습 모델에 대한 추론을 가속화한다.
- 구글 코랄을 사용하기 위해선 Edge TPU 런타임과 Tensorflow Lite 라이브러리를 다운로드해야 한다.
서론
나는 프로젝트를 진행하기 위해서 구글 코랄 엑셀러레이터를 구매했다.
프로젝트에서 라즈베리파이가 사용되는데 라즈베리파이는 GPU 성능이 너무 안좋아서 딥러닝 추론을 하기에 적합하지 않았다.
그래서 딥러닝 연산에 최적화된 기계인 구글 코랄을 구매하게 되었다. 단순히 라즈베리파이에 연결하여 계산만 넘겨주는데도
20 프레임 이상의 성능 개선을 보이는 것을 유튜브 영상들을 통해 확인했어서 기대가 크다.
요구 사항
- Linux, Mac, Windows 환경 모두 가능하다. 우분투 20.04에서도 동작함을 이미 직접 확인한 상태이다.
- 최적의 성능을 나타내려면 USB 3.0 포트를 이용해야 한다.
- python 3.5, 3.6, 3.7만 지원한다고 한다. python 3.8이 가능한지는 확인하지 못했다. 일단 요구 사항이 최대 3.7이므로 본인의 컴퓨터가 그 이상의 파이썬 버전이라면 다운그레이드를 하는 것을 추천한다. (3.8 사용가능 확인)
설치
1. Edge TPU 런타임 설치
Linux 환경
Linux 환경에 대해서만 설명한다. 어차피 ROS 같은 프로젝트를 진행하는 사람들은 리눅스 환경을 선호할테니까..
시스템에 Debian 패키지 저장소를 추가한다.
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
Edge TPU 런타임을 설치한다.
sudo apt-get install libedgetpu1-std
여기까지 완료되었다면 이제 구글 코랄을 USB 3.0 포트에 연결하면 된다.
위 코드에서는 클럭 주파수를 표준으로 설정하였는데, 만약 최대 클럭으로 구동시키고 싶다면 아래의 코드를 입력한다.
다만 USB가 가열되어 화상을 입을 수도 있다고 한다. 아마도 자체 발열이 엄청 심한 듯 하다.
sudo apt-get install libedgetpu1-max
2. PyCoral 라이브러리 설치
PyCoral 라이브러리를 설치하겠다.
파이코랄 라이브러리는 TensorFlow Lite 라이브러리를 기반으로 만들어졌다. 이 라이브러리를 이용하면 추론 프로그램을 구현할 때 코드의 크기를 상당히 줄일 수 있다고 한다. PyCoral 라이브러리를 사용하는 것을 추천한다지만 TensorFlow Lite 라이브러리로 바로 만들어도 상관없다고 한다.
sudo apt-get install python3-pycoral
3. Edge TPU에 모델 실행해보기
이제 구글 코랄을 사용할 준비가 모두 되었다. 이제 모델을 구글 코랄로 실행해보자.
1) 우선 깃허브에서 모델 예제를 다운받는다.
mkdir coral && cd coral
git clone https://github.com/google-coral/pycoral.git
cd pycoral
2) pycoral 폴더에 모델과 레이블, 새의 사진을 다운받는다.
bash examples/install_requirements.sh classify_image.py
3) 모델을 구동해본다.
python3 examples/classify_image.py \
--model test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \
--labels test_data/inat_bird_labels.txt \
--input test_data/parrot.jpg
위 사진의 앵무새에 대한 추론을 진행한다.
나는 라즈베리파이에서 진행하려고 했으나 계속 원격접속이 끊겨서 그냥 노트북에 연결하여 진행했다.
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
13.8ms
4.5ms
4.7ms
4.5ms
4.6ms
-------RESULTS--------
Ara macao (Scarlet Macaw): 0.76953
처음에는 모델에 대한 추론 시간이 길어질 수도 있다고 한다.
5번의 추론 끝에 위 사진이 금강앵무새(Ara macao)라는 것을 0.76953의 정확도로 확인하였다.
코드 동작 방식을 알고 싶다면 해당 폴더로 이동해서 classify_image.py 소스코드를 직접 확인하자.
Haemorhous cassinii (Cassin's Finch)
Aramus guarauna (Limpkin)
Rupornis magnirostris (Roadside Hawk)
Cyanocitta cristata (Blue Jay)
Cyanocitta stelleri (Steller's Jay)
~~~
Garrulus glandarius (Eurasian Jay)
Anser anser domesticus (Domestic Goose)
Mitrephanes phaeocercus (Tufted Flycatcher)
Ardenna creatopus (Pink-footed Shearwater)
Ardenna gravis (Great Shearwater)
background
inat_bird_labels.txt에 어떤 레이블들이 있는지 확인해보았다. 총 964개(1개는 background)의 bird Label이 존재했다.
Label에 존재하는 다른 새의 사진을 추론해보겠다.
구글에서 붉은 이마 앵무새의 사진을 가져왔다. Label 텍스트파일에 따르면 941번 레이블에 해당한다.
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
13.8ms
4.4ms
4.8ms
4.4ms
4.4ms
-------RESULTS--------
Cyanoramphus novaezelandiae (Red-crowned Parakeet): 0.57031
정확도가 0.57031로 매우 낮긴했지만 이게 붉은 이마 앵무새임을 알아냈다.
다른 사진에 대한 추론을 진행해보고 싶다면 사진을 test_data에 저장하고 코드의 jpg를 변경하면 되겠다.
다양한 모델
다양한 모델을 실행하고 싶으면 위 사이트에서 직접 모델을 다운받고 진행하면 된다.
출처
- Google Coral: https://coral.ai/