Google의 Edge TPU를 포함한 임베디드 보드인 Coral Dev Board의 설정법과 딥러닝 모델을 실행시키는 예제를 다룬다. 시리얼 콘솔 프로그램: screen 사용. 우분투 환경이므로 설치해서 사용 했다. sudo apt install screen 최신 버전의 fastboot: Android SDK Platform-tools이므로 따로 다운받은 후에 PATH 설정 한다. 아래와 같이 eMMC mode 인지 확인한다. 필자의 경우 택배 받을 떄 부터 이 상태여서 따로 핀 설정은 하지 않았다. udev rule을 호스트 컴퓨터에 설치 한다. 시리얼포트를 연결한다. 단, 이때 파워는 아직 연결하면 안된다. 파워 연결하면 오랜지 레드 LED가 꺼지므로 안 된다. 전원 케이블을 연결한다. 컴퓨터와 연결하는 방식으로 전원을 공급하면 안된다. u-boot에서 아래와 같이, USBtypeC케이블도 연결한다. 준비사항으로 android sdk의 fastboot를 환경설정 잘 했다면, host 컴퓨터에서 fastboot를 사용할 수 있다. mendel linux 다운로드 후 퓨징 타겟에서의 serial consol화면 위와 같이 screen에서 발생된 화면에서 로그인이 정상적으로 수행되면 mendel linux가 정상적으로 퓨징된 것이다. Dev-board의 package들의 업데이트를 위해서 아래와 같이 유선이던지 무선이던지 network과 연결시켜 준다. 업데이트 Mendel Development Tool (MDT)를 통해서 Dev-board와 쉽게 호스트는 연결 가능하다. 호스트에 MDT 설치 맨 처음에 딱 한 번은 USB-typeC를 통해서 호스트와 타겟 보드를 연결해야 한다. 그 다음 부터 LAN이나 Wi-Fi로도 연결 가능하다. MDT를 사용하지 않고 일반 ssh를 이용하기 위해선 pulbickey를 board로 push 해야한다. host에서 192.168.100.2:4664로 접속하면 아래와 같이 영상에서 object detection을 수행하는 화면을 볼 수 있다. MobileNet과 SSD가 조합된 object detection 알고리즘이다. Edge TPU Python Library에서는 Image Classification도 간단하게 지원한다. host board에서 아래와 같이 실행한다.Coral Dev Board (Google Edge TPU) 설정 및 사용후기
처음에 보드를 실행하면 u-boot만 설절된 상태이다. 따라서 제공하는 mendel linux를 퓨징해야 여타 예제들이 실행 가능하다.준비물
보드에 이미지 플래쉬
이 설정 시에는 반드시 모든 연결선을 해제한 후에 핀 설정을 수행 한다.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
위와 같이 시리얼만 연결한 상태에서 아래와 같이 잘 되었는지 확인 한다.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
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=>
fastboot 0
을 입력한다.
그럼 대기 모드로 진입 한다.
TypeC 케이블이 정상적으로 연결 되었다면 아래와 같은 메시지를 확인 할 수 있다.jemin@jemin:~/development/coral-dev$ fastboot devices
050a49d6ef944d3f fastboot
호스트 컴퓨터에서 아래와 같이 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
# 퓨징 과정
[ 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:~$
타겟보드의 인터넷 연결 및 페키지 업데이트 (Dev-board)
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를 이용한 호스트에서 타겟으로의 연결
맨 처음에 u-boot 연결시에만 typeB 케이블이 필요하며 mendel linux 퓨징후에는 더이상 필요는 없다.
호스트에서 실행pip3 install --user model-development-tool
#!/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
이를 위해서 아래와 같이 호스트에서 실행 한다.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
Image Classification
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 |