ひでみのアイデア帳 https://sweetcafe.jp/ https://sweetcafe.jp/ https://sweetcafe.jp/favicon.ico AQUAXIS Sun, 24 Mar 2019 22:00:37 +0900 ja-JP Sun, 24 Mar 2019 22:00:37 +0900 Blog RISC-V用のLLVM 8.0をビルド https://sweetcafe.jp/?*20190324-220037 RISC-V用のLLVM 8.0をビルド

Ultra96にMIPIボードを繋げようと思った。

しかし、I2Cの電圧が+3.3Vに上がっていなかったので1608サイズの4.7kΩを入手して付けてみようとした。

そしたら、パッドサイズは1005だったようなんだけど、まぁ、それはいいとして付けようと挑戦したんだけど、なかなか見えないし、部品間も狭くてピンセットのサイズの大きく・・・

で、半田付けに失敗した・・・(^-^;

ショボ〜ンとして、半田付けは諦めて気分転換に違うことをすることにした。

そういえば、LLVMが8.0がリリースって見たよなぁ・・・。

RISC-V用のLLVMのビルド

ビルド方法はGetting Started with the LLVM Systemに書かれているので別に迷うこと無いんだけど・・・

こんな感じでいいのかな?

$ git clone https://github.com/llvm/llvm-project.git
$ cd llvm-project.git
$ git checkout llvmorg-8.0.0
$ mkdir build
$ cd build
$ cmake -DLLVM_ENABLE_PROJECTS=clang -G "Unix Makefiles" ../llvm
$ export RISCV=${HOME}/riscv32
$ cmake -DLLVM_ENABLE_PROJECTS=clang -G "Unix Makefiles" -DCMAKE_BUILD_TYPE="Debug" -DBUILD_SHARED_LIBS=True -DLLVM_USE_SPLIT_DWARF=True -DLLVM_OPTIMIZED_TABLEGEN=True -DLLVM_BUILD_TESTS=True -DLLVM_DEFAULT_TARGET_TRIPLE="riscv32-unknown-elf"   -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="RISCV" ../llvm
$ make

とりあえず、ビルドは時間がかかるのでコンパイルテストはまた次回。

]]>
Sun, 24 Mar 2019 22:00:37 +0900 https://sweetcafe.jp/2019-03-24 22:00:37
EOS Kiss M https://sweetcafe.jp/?*20190321-212637 EOS Kiss M

子供の進学に合わせて、カメラを新調した。

ミラーレス一眼のEOS Kiss Mです。

一年落ちで安かったです。

今日は途中から天気もよく、近くに桜が咲き始めているのがあったので試し撮りしてみました。

初めての一眼なんですが、いい感じに撮れていて満足です。

ただ、外に出るのは花粉が飛んでて辛いんですがね。

]]>
Thu, 21 Mar 2019 21:26:37 +0900 https://sweetcafe.jp/2019-03-21 21:26:37
sfdiskでパーティショニング https://sweetcafe.jp/?*20190314-224648 sfdiskでパーティショニング

忘れてしまいそうなので備忘録。

SDカードのパーティショニングをするとき、fdiskを使うんだけどfdiskってスクリプトにするの面倒くさいよね。

シェルスクリプトで<<EOFまでとかするのってあまり好きじゃないんだよね。

ついつい、忘れがちなんだけどsfdiskを使う。

ディスクのサイズを見る

引数'-l'でデバイス情報を取得する。

$ sudo sfdisk -l /dev/sdc
Disk /dev/sdc: 14.8 GiB, 15854469120 bytes, 30965760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0007c9c0

ディスク情報のファイルを作成する

次のようにstartとsizeにセクタ番号とセクタ数を書くことでパーティションを設定します。

label: dos
label-id: 0x0007c9c0
device: /dev/sdc
unit: sectors

/dev/sdc1 : start=        2048, size=     2097152, type=83, bootable
/dev/sdc2 : start=     2099200, size=    28866560, type=c

これをdisk.txtとする。

ディスクの書き換え

ディスク情報のファイルを次のようにsfdiskに流し込みます。

$ sudo sfdisk /dev/sdc < disk.txt
Checking that no-one is using this disk right now ... OK

Disk /dev/sdc: 14.8 GiB, 15854469120 bytes, 30965760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0007c9c0

Old situation:

>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Created a new DOS disklabel with disk identifier 0x0007c9c0.
/dev/sdc1: Created a new partition 1 of type 'Linux' and of size 1 GiB.
/dev/sdc2: Created a new partition 2 of type 'W95 FAT32 (LBA)' and of size 13.8 GiB.
/dev/sdc3: Done.

New situation:
Disklabel type: dos
Disk identifier: 0x0007c9c0

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sdc1  *       2048  2099199  2097152    1G 83 Linux
/dev/sdc2       2099200 30965759 28866560 13.8G  c W95 FAT32 (LBA)

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

ディスクの確認

引数-lで出来上がったディスクを確認する。

$ sudo sfdisk -l /dev/sdc
Disk /dev/sdc: 14.8 GiB, 15854469120 bytes, 30965760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0007c9c0

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sdc1  *       2048  2099199  2097152    1G 83 Linux
/dev/sdc2       2099200 30965759 28866560 13.8G  c W95 FAT32 (LBA)

既にディスクがあるなら

バックアップの意味も兼ねて既にディスクがあるのなら引数-dでディスク情報を抜き出すことができる。

$ sudo sfdisk -d /dev/sdc
label: dos
label-id: 0x0007c9c0
device: /dev/sdc
unit: sectors

/dev/sdc1 : start=        2048, size=     2097152, type=83, bootable
/dev/sdc2 : start=     2099200, size=    28866560, type=c
]]>
Thu, 14 Mar 2019 22:46:48 +0900 https://sweetcafe.jp/2019-03-14 22:46:48
謎のARMアクセラレータ・その2 https://sweetcafe.jp/?*20190309-160445 謎のARMアクセラレータ・その2

追加チュートリアルをやってみた。

参照元はここ

まずは再学習?

$ DEMO_DIR=/tmp
$ wget -P ${DEMO_DIR} http://download.tensorflow.org/example_images/flower_photos.tgz
$ tar zxf ${DEMO_DIR}/flower_photos.tgz -C ${DEMO_DIR}
$ wget -P ${DEMO_DIR} http://storage.googleapis.com/cloud-iot-edge-pretrained-models/canned_models/mobilenet_v1_1.0_224_quant_embedding_extractor_edgetpu.tflite
$ cd python-tflite-source/edgetpu/
$ python3.5 demo/classification_transfer_learning.py --extractor ${DEMO_DIR}/mobilenet_v1_1.0_224_quant_embedding_extractor_edgetpu.tflite --data ${DEMO_DIR}/flower_photos --output ${DEMO_DIR}/flower_model.tflite --test_ratio 0.95
----------------------      Args    ----------------------
Embedding extractor : /tmp/mobilenet_v1_1.0_224_quant_embedding_extractor_edgetpu.tflite
Data set : /tmp/flower_photos
Output path : /tmp/flower_model.tflite
Ratio of test images: 95%
---------------      Parsing data set    -----------------
Dataset path: /tmp/flower_photos
Image list successfully parsed! Category Num =  5
---------------- Processing training data ----------------
This process may take more than 30 seconds.
Processing category: daisy
Processing category: sunflowers
Processing category: tulips
Processing category: dandelion
Processing category: roses
----------------      Start training     -----------------
----------------     Training finished!  -----------------
Model saved as :  /tmp/flower_model.tflite
Labels file saved as : /tmp/flower_model.txt
------------------   Start evaluating   ------------------
Evaluating category [ daisy ]
Evaluating category [ sunflowers ]
Evaluating category [ tulips ]
Evaluating category [ dandelion ]
Evaluating category [ roses ]
----------------     Evaluation result   -----------------
Top 1 : 80%
Top 2 : 91%
Top 3 : 97%
Top 4 : 99%
Top 5 : 100%

そして、推論?

wget -O ${DEMO_DIR}/rose.jpg https://c2.staticflickr.com/4/3062/3067374593_f2963e50b7_o.jpg
$ time python3.5 demo/classify_image.py --model ${DEMO_DIR}/flower_model.tflite --label ${DEMO_DIR}/flower_model.txt --image  ${DEMO_DIR}/rose.jpg
---------------------------
roses
Score :  0.226562
---------------------------
tulips
Score :  0.207031
---------------------------
daisy
Score :  0.191406

real    0m3.385s
user    0m0.106s
sys 0m0.022s

チュートリアルの性能はこんなものということで・・・

]]>
Sat, 09 Mar 2019 16:04:45 +0900 https://sweetcafe.jp/2019-03-09 16:04:45
謎のARMアクセラレータ https://sweetcafe.jp/?*20190309-003504 謎のARMアクセラレータ

本日、謎のARMアクセラレータが届きました。

中身はCoralと言って「EDGE TPU COPROCESSOR」でした。

こんな感じです。

セットアップ

セットアップ環境はUbuntu 18.04.1LTSです。

下記のURLを参照しながらチュートリアルを進めます。

https://coral.withgoogle.com/tutorials/accelerator/

Setup for Linux or Raspberry Pi

とりあえず、APIのインストールをします。

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

Ubuntu 18.04ではPythonが3.6なので次のエラーが発生します。

./install.sh: line 96: python3.5: command not found

Python 3.5インストール

次のようにPython 3.5をインストールします。

wget https://www.python.org/ftp/python/3.5.6/Python-3.5.6.tgz
tar xzf Python-3.5.6.tgz
cd Python-3.5.6
./configure --enable-optimizations
sudo make altinstall

インストールの再開

Python 3.5をインストールできたらAPIのインストールを再開します。

bash ./install.sh

念の為、udevを確認します。

$ cat /etc/udev/rules.d/99-edgetpu-accelerator.rules
SUBSYSTEM=="usb",ATTRS{idVendor}=="1a6e",GROUP="plugdev"
SUBSYSTEM=="usb",ATTRS{idVendor}=="18d1",GROUP="plugdev"

さらに念の為、udevを再読み込みます。

sudo udevadm control --reload-rules

USBを確認してみます。

$ lsusb
Bus 002 Device 004: ID 1a6e:089a Global Unichip Corp.

googleじゃないんだ・・・

サンプルの実行

サンプルを実行してみます。

cd edgetpu/
$ time python3.5 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
---------------------------
Ara macao (Scarlet Macaw)
Score :  0.61328125
---------------------------
Platycercus elegans (Crimson Rosella)
Score :  0.15234375

real    0m3.035s
user    0m0.338s
sys     0m0.045s

もうひとつ、サンプルを実行してみます。

"--output"を付けると結果を出力することができます。

$ time python3.5 demo/object_detection.py \
--model test_data/mobilenet_ssd_v2_face_quant_postprocess_edgetpu.tflite \
--input test_data/face.jpg \
--output ~/detection_results.jpg
-----------------------------------------
score =  0.99609375
box =  [474.22854804992676, 38.03488787482766, 738.8013491630554, 353.5309683683231]
-----------------------------------------
score =  0.9921875
box =  [205.4297697544098, 110.28378465056959, 487.75309658050537, 439.73802454331343]
-----------------------------------------
score =  0.83203125
box =  [6.2277887016534805, 182.35811898071842, 127.13575917482376, 326.5376813379348]
-----------------------------------------
score =  0.5
box =  [859.8422718048096, 213.5472493581642, 1008.978108882904, 383.9367261515483]

real    0m3.094s
user    0m0.401s
sys     0m0.046s

その他

結構、暖かくなります。

]]>
Sat, 09 Mar 2019 00:35:04 +0900 https://sweetcafe.jp/2019-03-09 00:35:04