先週開催された "try! Swift Tokyo 2017" にて、"Client-Side Deep Learning" というタイトルでLTしました。発表資料はこちら。
ディープラーニングは強力なコンピューティングパワーが必要なので、従来はモバイルデバイスでやるものではなかったのですが、iOS 10でMetal Performance Shadersフレームワークに追加された新たしいAPIにより、クライアントサイドのGPUで学習済みCNNの計算を行えるようになったという話です。
その話前もしてたんじゃ・・・と思われるかもしれませんが、今回は自分でモデル作成からアプリ実装まで一通りやってみた上で話をしていたので、僕の中では大違いでした。まぁ、5分のLTなのでそこで得た知見や具体的な実装についてはあまり話せませんでしたが。。
実際にLTの中でライブデモもやりました。手元のネームプレートにあるSwiftロゴの認識に見事成功しました。
(Photo by @inamiy)
緊張かライブデモの恐怖かわかりませんが手がプルプル震えるし、学習データはオレンジバックの白抜きのお馴染みのロゴ画像が中心で、木製ネームプレートに立体的に刻印されたロゴはそもそも今回作成したモデル的には認識が難しいということもあったのですが、無事うまくいって良かったです。
手が震えてたのが逆に良かったというフィードバックもちょこちょこいただきましたw
tsutsumiさんでも手が震えるんだと好印象 #tryswiftconf
— もりし (@m_orishi) 2017年3月3日
つつみさんの発表、デモもあって最高にRockだった😎😎😎 #tryswiftconf
— しほちゃん🍎 (@shihochandesu) 2017年3月3日
ちなみにこちらはライブデモがうまくいかなかったとき用に用意しておいた動画:
(try! Swiftの会場で撮ったもの)
実装について詳細を知りたい方は
MPSCNNについては記事をいろいろ書いてます。今回の実装に関係ありそうな話はこのへん。
- iOSのMPSCNNに渡すモデルパラメータのフォーマット / TensorFlowからの書き出し - Qiita
- iOSのMetalで畳み込みニューラルネットワーク - MPSCNNを用いた手書き数字認識の実装 - Qiita
- Metalでカメラからの動画入力をリアルタイム処理する - Qiita
- Metal逆引きレシピ - Qiita
- 【iOS・GPU】Metalで画像をリサイズする - Qiita
デモ作成にあたって自分でも自分の記事を何度も見返しました。書いといて良かった。。
LTの難しさ
今回は5分しかないLT枠だったわけですが、「何を話さないか」はそれこそ開催前日ぐらいまで悩んでました。色んなものを泣く泣く削りました。
- 自己紹介
- せっかく日本中、世界中から700人ものSwift/iOSエンジニアが集まっているわけだから、自分をアピールしたい
- が、発表の流れの中で不可欠なものではないのでカット
- 弊社での事例紹介
- うちの会社はそれこそiOS 10が出た直後にMPSCNNを利用した機能をリリース*1していて、それを紹介したい気持ちはあった
- が、それをやると付随して説明することが増えてしまうのでカット
- CNNとは何か、ディープラーニングとは何か
- CNN、CNN言いまくってるし、タイトルにDeep Learningとあるので、説明しないわけにはいかない
- この概念は短く説明しても「わかったような、わからないような」にしかならないし、今回の趣旨的にそこをハッキリ理解することは重要ではないので、思い切って"Something great"(何かすごいもの)っていう理解でいいです、ってことにした
- 実装コードの紹介
- ちゃんと実装した上で話してるし、try! "Swift"なのでコードは出したかった
- CNNについての説明なしに、CNNを構築するコードを出しても「既にわかってる人にしかわからない」のでカット
どこかのカンファレンスのCfPに応募して完全版で発表したいなーと思ってます。
その他余談
CfPについて
今回のLTはCfP(Call for Proposal)によって選ばれたわけですが、競争率は7〜8倍あったそうです。
僕は自慢ではないのですが(自慢ですが)国内にしろ海外にしろCfPはほぼ毎回通ってまして、書く際に意識しているポイント等を下記トークの中で話したので、もしよろしければ見てみてください。
ちなみに、タイトルは"Client-Side Neural Network"の方が適切なのでは、という声もありましたが、それはその通りでそのタイトルも候補にはあったのですが、「キャッチーさ」を重視して現行のものにしました。
英語
海外から多くのスピーカー/聴講者が集まる本カンファレンスで、サンフランシスコで働いている僕が日本語で話しはじめてズッコケた人もいるんじゃないかと思うのですが、日本での開催だし、素晴らしい同時通訳もあるし、上述の通り直前まで発表内容がfixできずにいたし、デモはそれこそ当日まで作ってたし、というわけで、英語での発表は早々に諦めてました🙇🏻 *2
こうしてある程度割り切る判断ができるようになったのも前進だ、とか思ってましたが、やっぱり他の日本人スピーカーの方々が堂々とした英語でプレゼンしてるのを見て心に響くものがあったのも事実。来年またチャンスがあればがんばりたいと思います。
弊社チームメンバーとの思い出
うちの会社から僕を含めて4人、try! Swiftに参加してました。
(開催前日、全員集合。渋谷dots.さんにて。この後Ninjaレストランへ)
(配布バッグに入れてもらったチラシ)
3人はサンフランシスコから、1人はブラジルからの参加で、そのブラジルの彼は動画ミーティングではずっと顔を合わせていたものの、直接会うのは初めてだったので、感慨深いものがありました。
(ロボットレストランからのゴールデン街)
チームで長い時間を一緒に過ごせたのも開発合宿的で良かったです。
try! Swiftの感想
セッション内容については、わりと、「デキる」人達からは、辛口の意見を聞きました。内容が浅い、とか。で、僕はどう思ったかというと、自分のトークの準備(主にデモの実装)をまだやってたのと、気持ちがフワフワしてたのとで、実はほとんど聞けてません。後ほど復習します。
が、来年もまたやって欲しいかというと、ぜひやってほしい派です。やっぱりこうして日本中・世界中からSwift/iOSエンジニアが集まって、一つの場・時間を共有するというのは代えがたい経験です。僕はWWDCに求めるものはセッションでもラボでもなく、iOSエンジニアのお祭り的な空気感だということに気付いてWWDCのチケットがなくても毎年SFに行くようになったのと同様に、try! Swiftもそういう価値があると思います。Swiftについての知見を得られる、ということ以外に、このカンファレンスが日本のSwift/iOSエンジニアコミュニティに与えている影響は相当あるんじゃないかと。
これだけの規模のカンファレンス、早朝の準備から夜のパーティが終わるまで、しかもそれが3日間と、主催・運営された皆様の労力は想像を絶するものかと思います。頭が下がるばかりです。素晴らしいカンファレンスを開催していただき、どうもありがとうございました!