Coral Dev Board (Google Edge TPU) 설정 및 사용후기


Google의 Edge TPU를 포함한 임베디드 보드인 Coral Dev Board의 설정법과 딥러닝 모델을 실행시키는 예제를 다룬다.
처음에 보드를 실행하면 u-boot만 설절된 상태이다. 따라서 제공하는 mendel linux를 퓨징해야 여타 예제들이 실행 가능하다.

준비물

  • ubuntu 18.04환경에서 실행한다. (MAC도 지원 한다.)
  • USB typeB 케이블: 보드의 시리얼 포트와 호스트 PC를 연결하기 위함
  • USB typeC 케이블: data port 연결을 위한 것으로 추후에 퓨징시에 사용한다. (fastboot)
  • 2-3A (5v) USB typeC 파워 서플라이: 폰 충전기도 사용 가능하다. 필자는 그냥 C케이블에 전원 허브 연결한곳에 꽂아서 사용했다.
  • 이더넷 케이블 또는 Wi-Fi connection: Wi-Fi 커넥션은 모듈은 내장된 것 같고 별도의 설정이 필요한 것 같다. 필자는 그냥 케이블 이용 했다.
  • 시리얼 콘솔 프로그램: screen 사용. 우분투 환경이므로 설치해서 사용 했다.

    sudo apt install screen

  • 최신 버전의 fastboot: Android SDK Platform-tools이므로 따로 다운받은 후에 PATH 설정 한다.

보드에 이미지 플래쉬

아래와 같이 eMMC mode 인지 확인한다.
이 설정 시에는 반드시 모든 연결선을 해제한 후에 핀 설정을 수행 한다.

devboard-bootmode-emmc

필자의 경우 택배 받을 떄 부터 이 상태여서 따로 핀 설정은 하지 않았다.

udev rule을 호스트 컴퓨터에 설치 한다.

sudo sh -c "echo 'SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0525\", MODE=\"0664\", \
GROUP=\"plugdev\", TAG+=\"uaccess\"' >> /etc/udev/rules.d/65-edgetpu-board.rules"

sudo udevadm control --reload-rules && udevadm trigger

시리얼포트를 연결한다. 단, 이때 파워는 아직 연결하면 안된다. 파워 연결하면 오랜지 레드 LED가 꺼지므로 안 된다.
devboard-serial-co
위와 같이 시리얼만 연결한 상태에서 아래와 같이 잘 되었는지 확인 한다.

dmesg | grep ttyUSB

[96434.235923] usb 1-14: cp210x converter now attached to ttyUSB0
[96434.237250] usb 1-14: cp210x converter now attached to ttyUSB1

# 잘 되었으면 screen으로 연결 한다.
sudo screen /dev/ttyUSB0 115200

전원 케이블을 연결한다. 컴퓨터와 연결하는 방식으로 전원을 공급하면 안된다.
devboard-serial-power-co
screen terminal에서 아래와 같은 메시지를 확인 할 수 있어야 한다.

U-Boot SPL 2017.03 (Dec 06 2018 - 19:26:58)
power_bd71837_init
pmic debug: name=BD71837
Board id: 2
check ddr4_pmu_train_imem code
check ddr4_pmu_train_imem code pass
check ddr4_pmu_train_dmem code
check ddr4_pmu_train_dmem code pass
Training PASS
Training PASS
check ddr4_pmu_train_imem code
check ddr4_pmu_train_imem code pass
check ddr4_pmu_train_dmem code
check ddr4_pmu_train_dmem code pass
Training PASS
Normal Boot
Trying to boot from MMC1


U-Boot 2017.03 (Dec 06 2018 - 19:26:58 +0000)

CPU:   Freescale i.MX8MQ rev2.0 1500 MHz (running at 1000 MHz)
CPU:   Commercial temperature grade (0C to 95C) at 32C
Reset cause: POR
Model: Freescale i.MX8MQ Phanbell
DRAM:  1 GiB
Board id: 2
Baseboard id: 1
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial

 BuildInfo:
  - ATF
  - U-Boot 2017.03

flash target is MMC:0
Net:   
Error: ethernet@30be0000 address not set.
No ethernet found.
Fastboot: Normal
Hit any key to stop autoboot:  0


**********************************************************************
Welcome to your new Coral EdgeTPU Development Board!
**********************************************************************

To get started, you need to download and flash the latest firmware.
Please follow the instructions at g.co/coral/setup.


u-boot=>

u-boot에서 fastboot 0을 입력한다.
그럼 대기 모드로 진입 한다.

아래와 같이, USBtypeC케이블도 연결한다.
devboard-serial-power-data-co

준비사항으로 android sdk의 fastboot를 환경설정 잘 했다면, host 컴퓨터에서 fastboot를 사용할 수 있다.
TypeC 케이블이 정상적으로 연결 되었다면 아래와 같은 메시지를 확인 할 수 있다.

jemin@jemin:~/development/coral-dev$ fastboot devices

050a49d6ef944d3f    fastboot

mendel linux 다운로드 후 퓨징
호스트 컴퓨터에서 아래와 같이 mendel 파일을 다운받고 퓨징을 수행 한다.

#다운로드
curl -O https://dl.google.com/coral/mendel/enterprise/mendel-enterprise-chef-13.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  432M  100  432M    0     0  10.6M      0  0:00:40  0:00:40 --:--:-- 11.1M

#압축 풀기
unzip mendel-enterprise-chef-13.zip
Archive:  mendel-enterprise-chef-13.zip
 inflating: mendel-enterprise-chef-13/boot_arm64.img  
 inflating: mendel-enterprise-chef-13/flash.sh  
 inflating: mendel-enterprise-chef-13/partition-table-16gb.img  
 inflating: mendel-enterprise-chef-13/partition-table-64gb.img  
 inflating: mendel-enterprise-chef-13/partition-table-8gb.img  
 inflating: mendel-enterprise-chef-13/recovery.img  
 inflating: mendel-enterprise-chef-13/rootfs_arm64.img  
 inflating: mendel-enterprise-chef-13/u-boot.imx  
 inflating: mendel-enterprise-chef-13/README  

# 플러쉬
jemin@jemin:~/development/coral-dev/mendel-enterprise-chef-13$ ./flash.sh
Sending 'bootloader0' (1006 KB)                    OKAY [  0.056s]
Writing 'bootloader0'                              OKAY [  0.234s]
Finished. Total time: 0.311s
Rebooting into bootloader                          OKAY [  0.025s]
Finished. Total time: 0.226s
< waiting for any device >
Sending 'gpt' (33 KB)                              OKAY [  0.017s]
Writing 'gpt'                                      OKAY [  0.362s]
Finished. Total time: 0.398s
Rebooting into bootloader                          OKAY [  0.022s]
Finished. Total time: 0.273s
< waiting for any device >
Erasing 'misc'                                     OKAY [  0.071s]
Finished. Total time: 0.081s
Sending 'boot' (131072 KB)                         OKAY [  5.014s]
Writing 'boot'                                     OKAY [  4.163s]
Finished. Total time: 9.227s
Sending sparse 'rootfs' 1/3 (397265 KB)            OKAY [ 15.286s]
Writing 'rootfs'                                   OKAY [ 29.069s]
Sending sparse 'rootfs' 2/3 (408325 KB)            OKAY [ 15.656s]
Writing 'rootfs'                                   OKAY [ 56.172s]
Sending sparse 'rootfs' 3/3 (352960 KB)            OKAY [ 13.574s]
Writing 'rootfs'                                   OKAY [101.246s]
Finished. Total time: 231.033s
Rebooting                                          OKAY [  0.005s]
Finished. Total time: 0.155s

타겟에서의 serial consol화면

# 퓨징 과정
[   52.001636] IPv6: ADDRCONF(NETDEV_UP): usb0: link is not ready

# 로그인
Mendel GNU/Linux (chef) orange-yarn ttymxc0
orange-yarn login: mendel
Password: mendel

mendel@orange-yarn:~$

위와 같이 screen에서 발생된 화면에서 로그인이 정상적으로 수행되면 mendel linux가 정상적으로 퓨징된 것이다.

타겟보드의 인터넷 연결 및 페키지 업데이트 (Dev-board)

Dev-board의 package들의 업데이트를 위해서 아래와 같이 유선이던지 무선이던지 network과 연결시켜 준다.

mendel@orange-yarn:~$ nmcli connection show
NAME                UUID                                  TYPE            DEVICE
Wired connection 1  729a235d-a3c0-361b-8742-67a167f8f027  802-3-ethernet  eth0   
usb0                61b97cdc-20b5-4599-8bca-de1f90c72d13  802-3-ethernet  usb0

업데이트

echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
sudo apt-get update
sudo apt-get dist-upgrade

MDT를 이용한 호스트에서 타겟으로의 연결

Mendel Development Tool (MDT)를 통해서 Dev-board와 쉽게 호스트는 연결 가능하다.
맨 처음에 u-boot 연결시에만 typeB 케이블이 필요하며 mendel linux 퓨징후에는 더이상 필요는 없다.

호스트에 MDT 설치
호스트에서 실행

pip3 install --user model-development-tool

맨 처음에 딱 한 번은 USB-typeC를 통해서 호스트와 타겟 보드를 연결해야 한다.

#!/usr/bin/env bash
jemin@jemin:~/development/coral-dev$ mdt devices
orange-yarn        (192.168.100.2)
jemin@jemin:~/development/coral-dev$ mdt shell
Waiting for a device...
Connecting to orange-yarn at 192.168.100.2
Key not present on orange-yarn -- pushing
Linux orange-yarn 4.9.51-imx #1 SMP PREEMPT Fri Apr 5 00:17:46 UTC 2019 aarch64

The programs included with the Mendel GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Mendel GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Apr 19 22:59:36 2019
mendel@orange-yarn:~$
mendel@orange-yarn:~$
mendel@orange-yarn:~$ ls
mendel@orange-yarn:~$ ls -al
total 24
drwxr-xr-x 3 mendel mendel 4096 Aug 13 09:59 .
drwxr-xr-x 3 root   root   4096 Nov  3  2016 ..
-rw-r--r-- 1 mendel mendel  220 Nov  3  2016 .bash_logout
-rw-r--r-- 1 mendel mendel 3526 Nov  3  2016 .bashrc
-rw-r--r-- 1 mendel mendel  675 Nov  3  2016 .profile
drwx------ 2 mendel mendel 4096 Aug 13 09:59 .ssh

그 다음 부터 LAN이나 Wi-Fi로도 연결 가능하다.

MDT를 사용하지 않고 일반 ssh를 이용하기 위해선 pulbickey를 board로 push 해야한다.
이를 위해서 아래와 같이 호스트에서 실행 한다.

ssh-keygen
# Follow steps to create key
mdt pushkey ~/.ssh/id_rsa.pub
ssh mendel@192.168.100.2

데모 실행 결과

영상에서 object detection 하기

mdt shell
edgetpu_demo --stream

host에서 192.168.100.2:4664로 접속하면 아래와 같이 영상에서 object detection을 수행하는 화면을 볼 수 있다.

스크린샷, 2019-08-13 19-04-31

MobileNet과 SSD가 조합된 object detection 알고리즘이다.

Image Classification

Edge TPU Python Library에서는 Image Classification도 간단하게 지원한다.

host board에서 아래와 같이 실행한다.

cd ~

wget https://dl.google.com/coral/canned_models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \
https://dl.google.com/coral/canned_models/inat_bird_labels.txt \
https://coral.withgoogle.com/static/docs/images/parrot.jpg

cd /usr/lib/python3/dist-packages/edgetpu/demo/

python3 classify_image.py \
--model ~/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \
--label ~/inat_bird_labels.txt \
--image ~/parrot.jpg

# 실행 결과
INFO: Initialized TensorFlow Lite runtime.
---------------------------
Ara macao (Scarlet Macaw)
Score :  0.761719

참고자료


'AI > Embedded Deep learning' 카테고리의 다른 글

ONNX  (4) 2020.05.04
Glow 설치법  (1) 2019.11.19
Glow: graph lowering compiler for hardware accelerators  (0) 2019.02.07
TensorFlow Lite 예제 실행  (2) 2017.12.05
TensorFlow Lite 개발자 프리뷰 공개  (0) 2017.12.01

+ Recent posts