Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
IoT分野へのRuby言語/OSS適用試行~試行のユースケースを具体化・最新化~
2018年2月
日本OSS推進フォーラム アプリケーション部会
株式会社HTKエンジニアリング
仲村 秀樹
Copyright 2018 Japan OSS Promotion Forum
1.はじめに
2.2017年度活動
3.デモ構成、工夫・苦労
4.Embedded Technology 2017
5.最後に
Copyright 2018 Japan OSS Promotion Forum
目次
1
これまでの活動
Copyright 2018 Japan OSS Promotion Forum
1.はじめに
3
2014年度 2015年度 2016年度 2017年度
Ruby言語
OSS推進フォーラムアプリ部会活動
IoT分野へのRuby言語適用施行
Ruby(1995年~)
mruby(2012年~)
mruby/c
Ruby・mruby Ruby・mruby Ruby・mruby Ruby・mruby/c
IoTへの適用施行システム拡張
mruby深堀Deeplearning
機器追加
IoT試行の変遷 2014~2015
Rubyに着目したIoT適用試行
2016
OSS全般を活用したIoT適用試行に拡大
IoT適用シーンをより具体化
AI(DeepLearning)を適用
Copyright 2018 Japan OSS Promotion Forum
1.はじめに
4
これまで活動に対し、次の観点で試行を追加
Bluetooth Low Energy(BLE)ビーコン制御→mruby/Cを用いたIoTセンサ機器の拡充
ディープラーニングのさらなる深堀→工場のライン制御を意識したAI適用試行
カメラ入力制御の高精度化→カメラ単体で画像処理までを実施
Copyright 2018 Japan OSS Promotion Forum
2.2017年度活動
6
活動チームメンバー紹介(敬称略)
Copyright 2018 Japan OSS Promotion Forum
2.2017年度活動
7
廣田 哲也
田坂 有史
岩城 有美子
津々美 利夫、福田 凌平
Copyright 2018 Japan OSS Promotion Forum
3.デモ構成
10
ビーコン
mruby/c
ゲートウェイ
Ruby
クラウド
Ruby
ディープラーニング
緑茶
ディープラーニング
Tensorflow:ディープラーニングフレームワーク
Keras: Tensorflowのラッパ。Tensorflowを直接使うよりも簡単.
Flask: REST API提供のため使用
Gunicorn: APIサーバとして使用
Nginx
Copyright 2018 Japan OSS Promotion Forum
3.システム構成 – 利用OSS
11
BLEビーコン/ゲートウェイ
Ruby:ゲートウェイプログラム
Bluez:BLEデータ受信のために使用
センサー/カメラ
Ruby:カメラや通信制御に利用
OpenCV:画像処理ライブラリ(ruby-opencv経由で使用)
Copyright 2018 Japan OSS Promotion Forum
3.システム構成 – 利用OSS
12
クラウド
RubyでWebアプリ/APIサーバを実装するため、以下のOSSを利用
ActiveRecord
Sinatra
Unicorn
Nginx
MySQL
Copyright 2018 Japan OSS Promotion Forum
3.システム構成 – 利用OSS
13
判定精度向上のための施策
学習率を変えることにより精度を上げた
学習率を最適な値にしないと過学習や未学習といった問題が起きることから、最適化関数のパラメータである学習率を中心に試行錯誤した。
データセットを用意することに苦労した
事前に用意した学習データで作った学習モデルを使用すると判定精度が出なかった。学習する画像の背景を本番環境に合わせたり、学習データ画像の水増しを行うことで精度を上げていった
Copyright 2018 Japan OSS Promotion Forum
3.ディープラーニング
15
学習率のチューニング Resnet50というニューラルネットワークで転移
学習を行った。転移学習をするにあたって出力層を今回認識する物体の数に合わせている。
Resnet50による学習で使用する最適化関数は原論文から「SGD + Momentum」を使うと書かれている。よって、これを使用した。
今回作成したデータセットは3クラス768枚の画像で、ペットボトルを様々な方向から撮影したものある。学習に使う画像が少ないことから過学習や未学習といった問題が発生した。
過学習や未学習を回避するためには、最適化関数のパラメータをチューニングする必要がある。今回は主に学習率のチューニングを行った。
Copyright 2018 Japan OSS Promotion Forum
3.ディープラーニング
16
学習に用いるデータセットの工夫 事前に擬似環境で撮影した学習データを使った場合、判
定精度が上がらなかった。(失敗)そのため、リハーサル環境で撮影した画像を学習データに用いた。
画像処理により学習データの水増しを行った。移動や拡大縮小による水増しに加え、デモ環境では人の出入りによる対象物に影や光のあたり具合が変わるため、ガンマ補正を行った(次ページ)
Copyright 2018 Japan OSS Promotion Forum
3.ディープラーニング
17
擬似環境で撮影、データセット作成
⇒失敗
水増し
有効
18
縦横移動 ペットボトル部分を切り取り、縦横に動かして水増ししている。
拡大縮小 画像を拡大・縮小し、リサイズして水増ししている。
3.ディープラーニング
ガンマ補正(明るさの調整) 画像のガンマ値を変更して、明るさが変わることによって水増ししている。
ガンマ補正
画像の水増し
拡大・縮小
縦横移動
Copyright 2018 Japan OSS Promotion Forum
3.BLEビーコン
Ruby mruby, mruby/c
主にWeb開発で利用マイコンなどの
組込み開発で利用
mruby/cは、mrubyよりも1/10以下の省メモリで稼動することが特徴
mruby/cは、Cortex-M3とよばれるCPUの環境下で動作が確認済み
19
Copyright 2018 Japan OSS Promotion Forum
3.BLEビーコン
※mruby/cをPsoC5LPで動かす|Chapter01「LED点滅」 しまねソフト研究開発センター
( http://www.s-itoc.jp/activity/research/mrubyc/mrubyc_tutorial/405 ) (参照 2018-02-22)
PSoC5
CY8CKIT-059 PSoC® 5LP Prototyping Kit With Onboard Programmer and
Debugger
Cortex-M3
を搭載したSoC
Cortex-M0
を搭載したSoC
PSoC4
CY8CKIT-143A PSOC® 4 BLE 256KB MODULE
デモで使用したPSoC4チュートリアルで使用しているPSoC5
20
Cortex-Mシリーズは組込み向けのCPU
Copyright 2018 Japan OSS Promotion Forum
3.BLEビーコン
Cortex-M3 Cortex-M0
DMIPS 1.25DMIPS/MHz 0.9MIPS/MHz
電力 0.045mW/MHz 0.015mW/MHz
アンアラインドデータアクセス
可 不可
Nordic Semiconductor、日本国内の主要5社より提供の
nRF51822 SoC搭載RFモジュールをワイヤレスジャパンで発表
NORDIC SEMICONDUCTOR
(https://www.nordicsemi.com/jpn/node_206/node_305/Product-Related-News/Nordic-Semiconductor-nRF51822-SoC-RF )
(参照 2018-02-22)Pebble公式サイト
(https://www.pebble.com/pebble-time-steel-smartwatch-features )
(参照 2018-02-22)
Pebble-Smartwatch
Cortex-M3を使用
nRF51822
Cortex-M0を使用
性能はM3に劣るが
省電力・小型・低コスト
21
目的1
目的2
Copyright 2018 Japan OSS Promotion Forum
3.BLEビーコン
mruby/c
mruby
Ruby
実行時のメモリ消費量
数MB
<400KB
<50KB ⇒ mruby/cが動き出すメモリ消費量は?
HW(PSoC4)
Cortex-M0
mruby/c VM
mruby/c アプリ
HW(PSoC5)
Cortex-M3
mruby/c VM
mruby/c アプリ
※「mruby/c」の利用期待分野~M2Mでの利用~ 九州工業大学
( https://www.slideshare.net/shimane-itoc/mrubycm2m160726 ) (参照 2018-02-22)
22
mruby/cでBLEビーコンのアプリを作成
mruby/c:2017年8月9日時点のコードを取得commit 738a9a005ae12ff04d453a9f214b450232589701
アプリ:50ms毎にBLEの電波を発信
HW:CY8CKIT-143A PSoC® 4
Copyright 2018 Japan OSS Promotion Forum
3.BLEビーコン
要素
CPU Cortex-M0
Flush memory 256KB
SRAM 32KB
CY8CKIT-143A PSOC® 4 BLE 256KB MODULE
23
問題:PSoC5で使用したmruby/cをPSoC4に移植してもLEDが点灯しない。
原因:アンアラインドデータへのアクセス
対処:アライメントの調整
long(32)
char(8) uint(32)・・・
short(16) ・・・!
・・・uint(32)
long(32)
char(8)
short(16) ・・・
uint(32)
Copyright 2018 Japan OSS Promotion Forum
3.BLEビーコン
24
消費メモリの調査
Copyright 2018 Japan OSS Promotion Forum
3.BLEビーコン
mruby/cなし mruby/c VMあり mruby/c アプリ(BLE)あり
2.5KB
約7.5KB
約8.5KB
※参考 PSoC4でBLEを送信するのに必要なメモリ使用量
mruby/cを動かすのに
必要なメモリ使用量
SRAM使用量
10.0KB
18.5KB
HW(PSoC4)
Cortex-M0
アプリ(While文のみ)
PSoCを動かすためのコード
HW(PSoC4)
Cortex-M0
mruby/c VM
PSoCを動かすためのコード
mruby/cアプリ(BLE)
HW(PSoC4)
Cortex-M0
mruby/c VM
PSoCを動かすためのコード
25
サマリ
アライメントを考慮すればCortex-M0でも動く
mruby/cだけを最低限の機能で動かすには約7.5KBのRAMで動く
今回使用したチップとmruby/cの組み合わせでは、合計18.5KBのRAMが必要だった
Cortex-M0でmruby/cを使ったアプリ開発をする際には、RAM7.5KBの使用量を考慮して開発する必要がある。
Copyright 2018 Japan OSS Promotion Forum
3.BLEビーコン
26
撮影用カメラをUSBカメラからRaspberry Pi カメラモジュール(Raspberry Pi Camera V2)に変更
撮影方法をfswebcamコマンドによるものからOpenCV(ruby-opencv)による映像取込みに変更
上記2つの変更により、写真1枚当たりの撮影速度が向上(3秒程度→1秒程度)
動く物体を撮影するため、一回の撮影トリガで5枚連続で写真を撮影するように変更
画像ファイルサイズの軽量化のためにOpenCVで取り込んだ画像を一時ファイルとして保存した上でRaspberry Pi上でImageMagick(RMagick)を使用してjpeg圧縮を行った
ImageMagick(RMagick)に明示的にメモリ解放ができる仕組みがあるため
Copyright 2018 Japan OSS Promotion Forum
3.カメラ制御
27
2016年度までの開発資産を有効活用したため、大きな変更・追加は行わず
今年度は開発時間を確保することがほとんどできなかったが、RubyとSinatraの構成により、わずかな変更で新機能に対応できた。
Copyright 2018 Japan OSS Promotion Forum
3.クラウド
28
11/15~11/17@パシフィコ横浜
「福岡県Ruby・コンテンツビジネス振興会議」様のご好意により「フクオカ&しまねmrubyパビリオン」ブースに展示させていただいた
Copyright 2017 Japan OSS Promotion Forum
4.Embedded Technology 2017
30
会場でアンケートを実施。19名から回答をいただいた 設問
mruby/cを組込み開発で使用してみたいと思いますか
組み込み開発分野 mruby/cはCよりも優位になると思いますか
あなたがIoT分野で重要視する要件はなんですか
IoTシステムのそれぞれでの開発言語は、あなたなら何を選定しますか
AIの適用実績はありますか
ディープラーニングを行う場合、どの言語を使用したいですか
使用した・使用したいディープラーニングフレームワークを教えて下さい
Copyright 2017 Japan OSS Promotion Forum
4.Embedded Technology 2017
31
Copyright 2017 Japan OSS Promotion Forum
4.Embedded Technology 2017
32
mruby/cを組込み開発で使用してみたいと思いますか
印象的な・特徴が現れた結果
はい
74%
いいえ
10%
未記入
16%
はい
いいえ
未記入
Copyright 2017 Japan OSS Promotion Forum
4.Embedded Technology 2017
33
組み込み開発分野 mruby/cはCよりも優位になると思いますか
印象的な・特徴が現れた結果
はい
42%
いいえ
32%
未記入
26%
はい
いいえ
未記入
Copyright 2017 Japan OSS Promotion Forum
4.Embedded Technology 2017
34
IoTシステムで選定する開発言語は?:センサー
印象的な・特徴が現れた結果
アセンブラ
12%
C/C++
63%
Ruby/mruby
17%
Python
8%
Java
0%
アセンブラ
C/C++
Ruby/mruby
Python
Java
Copyright 2017 Japan OSS Promotion Forum
4.Embedded Technology 2017
35
AIの適用実績はありますか
印象的な・特徴が現れた結果
ある
5%
ない
69%
検討している
21%
個人的に使ったこ
とはある
5%
ある
ない
検討している
個人的に使ったことはある
Copyright 2018 Japan OSS Promotion Forum
4.Embedded Technology 2017
36
ET2014でのアンケート結果との比較考察
開発言語選定はほぼ同様の傾向センサー(組み込み機器)はC/C++が強いクラウドはRuby,Python,Javaを利用
組込み分野へRuby/mruby適用したい・有用との意見は多いが、実際に利用されるのはC/C++
来年度活動
「IoT」のキーワードは継続
ロボティクス
センサーに加え、アクチュエータも
最新トレンド追従
エッジコンピューティング
OSSの従来適用分野から特化分野への活用試行
mruby/Cの活用拡充
etc..(考え中...)
Copyright 2018 Japan OSS Promotion Forum
5.最後に
38
成果はGithubで公開しています
Copyright 2018 Japan OSS Promotion Forum
5.最後に
39
https://github.com/ossforumjp-app-IoT