Hack & Sports

Microsoft エバンジェリスト&トライアスリート 大田 昌幸の個人ブログ

未踏 IoT 合宿に参加してきた(1回目)

6/3(金)~6/5(日)の2泊3日で未踏IoT開発合宿(OB/OG合宿)に参加しました! Things側(デバイス側)初心者として学んだことのメモがメインですが、今後始める人の役に立てばいいなと思い、ブログにもポストします。

atnd.org

一緒に参加した稲津さんはブログ、西尾さんはSlideShareで資料あげているので、あわせてお楽しみください。

今回の目的は大まかに2つだったのですが、無事達成!やっぱ日ごろから中国に発注している人と一緒に開発すると早い!!

  • バイス側開発の全体像を知る

  • 実際の開発方法をある程度経験する

参加した背景

そもそも合宿に参加した経緯としては、下記のとおりです。端的に言うと、自分が見ている範囲にHello World or Deep 情報しかないので勉強する場が欲しかったのです。

  1. 親父「実家の事業の中でこういうことしたいのだけど、実現方法考えて」
  2. まさ「あぁ、いわゆるIoTだね。データ吸いだしてダッシュボード作ればいいのか。IoT Hub + Stream Analytics + Power BI あたりで何とかなるよ。Cloudにデータ出せたらデータ見るまで工数1日未満だと思う」
  3. 親父「ふ~ん、デバイス側ってどうやるの?」
  4. まさ「わかんないから勉強してくる!」
  5. まさ いろんな人のブログ読んで勉強しようっと => Lチカ(LEDチカチカ)どまりが多いなぁ。もしくは情報ディープすぎて辛い・・。入門からミドルくらいまでの勉強したいなぁ
  6. 上田さん@未踏会議 「IoT合宿やります!」
  7. まさ「これだ!参加します!」

バイス側開発の全体像を知る

今回は Raspberry Pi 2 とデバイス類を使って開発! デバイスとコンピュータ(Raspberry Pi)を接続する方式は全部で3つ習いました

詳細はWikipediaを見てもらうとして、それぞれざっくり説明すると、

  • GPIOは基本。アナログデータを送受信するときに使用
  • I2Cはデジタルデータ(センサーで撮った温度とか)を送受信するときに使う。複数センサーを制御できるけど、速度は2Mbpsくらい
  • SPIはデジタルデータを高速(50Mbps)送受信。

最近はI2Cのセンサーが多いらしく、また、自分的にはI2Cセンサー扱いやすかったので今後もI2Cやっていこうと思いました。

実際の開発方法をある程度経験する

実際の開発工程としては、だいたいこんな感じでした。

  1. やりたいこと決める!
  2. バイス選定する(今回は慣れのために適当にRGBセンサーを使いました)
  3. バイスのデータシート(仕様)を解読
  4. データシートに書いてあることをもとにデバイスつなぐ+Pythonで実装

1はデバイス開発以前のことなのでスキップします。

2はI2Cセンサーで手ごろなRGBセンサーを選定。今後は自分の目的に合わせてカメラ購入予定です。

3はメーカーの製品ページにだいたいリンクがあります。例えば、RGBセンサーのページにあるTechnical DetailsにあるリンクをたどるとこんなPDFにたどり着きます。これを読んでデバイスの仕様を理解する。例えば、下図のような感じです

f:id:NT-D:20160608212052j:plain

f:id:NT-D:20160608203226j:plain

3で理解した内容をもとに4では実際に実装! f:id:NT-D:20160608205105j:plain (この写真はRGBではない別のやつです)

バイスつなぐのは慣れてなくて、上田さん、矢萩さん、西尾さんに教えてもらいながらどうにかこうにか。Pythonもサンプルを見せてもらいつつ、Raspberry PiSSHで入ってガチャガチャ実装。もっと実力をあげて自力でやり遂げたい!

ちなみに、工程3はしんどいしめんどいです・・できればベトナムとかのクラウドソーシング先に渡して1センサー1万円くらいで解読とサンプル作成を依頼したいなぁと思いました。

感想

未踏合宿というだけあって「皆さんエンジニアなのでセットアップとかコーディングはできますよね?英語は読めますよね?わからない人はググって下さい」という前提でサクサク進むので受ける側としては良い緊張感が持てた。

逆に、本当に詰まりそうなポイントについては丁寧に教えていただけるので、そこは助かりました。できる人と開発するとガンガン進むので、2回目も是非行きたいです! (すでに製品できている人も多かったので、普通に悔しいしなぁ。。)

次やりたいこと

  • I2Cで取得した水温情報 + カメラ情報をIoT Hub を使ってAzureに投げ込む
  • Azure側で処理をしてデータをリアルタイム可視化する
  • ブレッドボードで繋いだ基盤をベースに量産する方法を勉強する(現実世界へのDeploy方法)

クラウド上の機械学習サービスを実案件に採用するときの経験談

マイクロソフトエバンジェリストをしている大田です。

この記事では、クラウド上で提供されている機械学習サービスを実案件に採用するときの経験談をまとめます。

自分のプロジェクトで活用する際の参考情報になれば幸いです。

//主観的な内容も含まれているかもしれませんが、ご容赦ください。また、技術的な詳細よりもわかりやすさを優先するため、「機械学習サービス」と統一した呼び方にします。

 

サービスの種類/適用範囲

最近様々なベンダーが提供している機械学習サービスを自社プロダクトに取り入れる場合、大きく分けて以下3つの方針があげられます。

  • API サービスの活用 (SaaS)
  • Tool の活用 (PaaS)
  • 独自作りこみ/外注 (IaaS)

 

API サービスの活用 (SaaS)

これから導入する人もいると思うので、「そもそも API サービスとは何でしょうか? 」というところから始めていきます。

API サービスの特徴は、下記のとおりです。

  • 特定用途に特化している
  • 使用料 (1000回呼び出しごとに xx円) に応じた課金
  • 実装コスト低い
  • 自分側でシステムを開発する必要がなく、あくまでマッシュアップ(組み合わせる)を前提としている

機械学習 API というのはどういうものかというと、下記のようなことが実現できます。

  • 顔認識
  • 性別/年齢の認識
  • 画像のアダルト度測定
  • 画像に含まれる文字列認識
  • 話している人の認識.. などなど

このカテゴリに該当するのは Microsoft であれば Project OxfordGoogle さんも最近 Google Cloud Machine Learning というサービスを出していて、この辺りが該当します(Google のサービスではまだ遊んでいないので、もしずれていたらフィードバックください)。

 

この手のものはサクッと始められて実装コストは低いので始めるのは容易です。一方で、ある程度用途は限られているので、自分のシナリオに合わない場合にはアイディアソン/ハッカソン止まりになってプロダクトには反映されないこともあります。合う場合は最高です。

 

Tool の活用 (PaaS)

 機械学習を取り入れるための、ある程度作りこみ可能なツールのことをここでは Tool と呼んでいます。

このカテゴリの特徴は下記のとおりです。

  • 賢い処理をするための脳みそ(モデル)が用意されている
  • 画像/動画/音声/文字列認識などではなく、価格予測やレコメンドなど数値を使った分析が得意
  • できる限りコードを書かなくて済むようになっている
  • 脳みそを賢くするために必要なデータのインポート/加工のためのツールも用意されている
  • データを可視化するツールが提供されている
  • 脳みそが本当に賢くなったかをテストするツールも用意されている
  • 別システムから呼び出すための機能が提供されている

なんだか便利そうですね。でも、はじめに紹介した API と異なり、使う側にも専門性が少し必要になってきます。また、案件では下記のような意識が必要です。

  • そもそもどのような結果を出したいか?という定義を自分でする
  • その結果を出すために機会に学習させられる規則性があるか?という仮定を自分で設定する
  • あくまで「開発」なので、Tool が提示してくる統計的な情報等を理解しながら自分でロジックを組む

 

このカテゴリに該当するのは、Azure Machine Learning Amacon Machine Learning が該当します(僕 Amazon ユーザーじゃないので、もし違っていたらフィードバックをください。)

 

この手のものは、APIサービスほど楽ではなくなりますが、自分ですべてコードを書き起こすよりは楽です。「機械学習に特化した会社にしたい」とかでなければ、使ってみるとよいと思います。例えば、医療系データを扱っている会社さんなどが、これまでとは異なる切り口で解析を進める際に使っており、成果が上がってきているようです(論文発表の関係があり、公表はできないですが・・)。

繰り返しになりますが、開発を補助するツールなので「自分で開発する」前提で進めましょう。なお、定義や仮説を立てられない際には、コンサル会社さんに頼ることが多く、例えばテクノスデータサイエンス・マーケティング様ブレインパッド様を紹介しています。

 

独自作りこみ/外注 (IaaS)

 上記2つの方針で実現できないときには、最後の砦「独自開発/外注」にやってきます。

このカテゴリの特徴は下記のとおりです。

  • 自分で実装をする
  • 専門性高い会社は、論文読みながら独自実装している (開発と研究両方の側面が必要)
  • 目的に合わせたライブラリの選定や実装を行う
  • (頑張れば) 自社プロダクトに最適化した実装が可能

なんか大変そうですね。大変です。このカテゴリを実現できる会社は、コンピューターサイエンスの素養のある方々が集まって開発していることが多いので、競争するのは大変です。アプリケーション開発とは全く異なる専門性が必要になります。

 

このカテゴリに該当するのは、以下のようなツールです。

独自開発しているエンジニアさんたちには頭が上がらないです。お会いするみなさん研究力・開発力本当に高い。

 

この手のものは、自力で実装したければそれなりの人的・時間的・金銭的リソースをそろえていく必要があります。

ただ、実案件になると、「自分たちの実現したいことが実現できればOK」ということが多いので、作りこみをやってくれるパートナー企業を紹介していたりします。自分達目標が「機械学習特化」というわけでなく、例えば「業界一のERPパッケージ開発のための差別化要因追加」「製品品質を機械の力で省力化」などであれば、外注してくれるパートナーさんと組むのが良いと思います。

餅は餅屋と考えないと、実担当者的には「終わらない残業」が始まる一方で、経営サイドからすると「予算積んで目的達成できるのであればそれでよいのに」という不幸なすれ違いも起きるので。

「やらない方が良い」というわけではなく、「どこにフォーカスするか」意思決定することで方向性が変わりますということを言いたいです。

 

まとめ

 様々な機械学習サービスの特徴と、実案件での経験談を書いてみました。図にまとめると下記のような感じでしょうか(以前発表したスライドを参照)。

f:id:NT-D:20160328111515p:plain

SaaS (API)はピンポイントだけど「期待した結果」までたどり着きやすく、PaaS, IaaS となると適用範囲は広がるが、「期待した結果」までの距離がある。

案件進めるときは以下のように進めることが多いですが、それぞれの強み、弱みを理解しながら、実案件では意思決定をしてみてください。

  1. 画像/音声などのインテリジェントな処理の場合、API (SaaS) でできるか検証してみる
  2. 数値解析系なら Tool (PaaS) 試してみる
  3. 無理なら作りこみ or 外注

 

 

個別に作りこみが必要な場合には

 

 で、外注できるパートナーさんってどこさ?って話になるのですが、現在リクルーティングしており、4月末ごろに発表予定です(このブログに記載します。)

画像/文字列/音声解析分野で、製品品質要求の厳しい大企業と案件をこなしてきたパートナーさんのソリューションや技術を紹介していきます。

 

それでは、良い1日を!

 

 

 

 

クラスタリング アルゴリズムを学びつつ Azure Machine Learning で実装するための情報

こんにちは、Microsoft  テクニカル エバンジェリストの大田です。

先日機械学習関連のセミナーを開催したのですが、その際の資料や動画の準備が整ったのでここにログしておきます。

 

セミナーのコンセプト

データ解析・機械学習に関して、様々な入門者向け情報を提供してきましたが、やはり実案件になると色々と躓くことが増えてきました。

どんなところで躓くかというと、下記のポイントが多いです。

  1. どんな成果を求めて、どんなデータを使うかという「ゴール設定力」
  2. 期限を決めて根気よく繰り返すための「精神力(というか慣れ)」
  3. データを貯めたり定期的に処理しするための「インフラ構築力」
  4. 解析をする際のモデル手法の選定や、その内容を理解するための「統計解析力」
  5. そのモデルを実現するための「実装力」

# もちろん、案件で経験を積めばさらに課題が見えるかもしれないです。

 

そのため、このポイントを「みんなで解決していこう」というコンセプトでセミナーを開催しました。いきなり全部はできないので、今回は「インフラ構築力」「統計解析力」「実装力」を鍛えるためのコンテンツを共有しました。

 

セミナー資料と動画

セミナー資料はそれぞれ下記に公開しています。

 

上坂さん、清水さんのは「インフラ構築力」に特化しています。

上坂さんは Hadoop の解説と Azure ML との連携方法を紹介しています。

清水さんは、定期的な処理・データの移動・可視化について紹介しています。

 

三上さんは「統計解析力」に特化した情報を提供しています。具体的にはクラスタリングの全体像や K-means クラスタリングについて解説してくれています。

大田は「実装力」に特化した資料になっており、K-means クラスタリングを Azure ML で実現する方法を紹介しました。

 

アルゴリズムから学ぶAzure ML モジュールの使いこなし方 -- Azure Machine Learning との連携について学ぶ -- HDInsight編
株式会社ネクストスケープ エバンジェリスト
上坂 貴志

 

K meansによるクラスタリングの解説と具体的なクラスタリングの活用方法の紹介
フリーランス
三上 威

 

Azure Machine Learning でのK-means 法の具体的な活用方法
日本マイクロソフト テクニカル エバンジェリスト
大田 昌幸

 

未来を見据える Power BI! Azure Machine Learning との連携
日本マイクロソフト サポート エンジニア
清水 磨

 

資料の詳細な解説・デモを見たい場合には、Chennnl 9 というMS動画サイトで公開しているので活用してください。

channel9.msdn.com