「iOS 11 Programming」を共著で執筆しました/本書のおすすめポイント
昨日、共著で執筆したiOSの技術書「iOS 11 Programming」の販売が開始されました!
私は ARKit と Metal の章の執筆を担当しました。
7月頭のクラウドファンディング成立を機に執筆を開始し、脱稿まで約4ヶ月。技術書の執筆期間としては長くはないですが、がんばりました。基本的に週末はほぼ執筆、有休は使い果たしましたし、どこかに出かけてもずっと執筆してました。
(こういう箱に入って届きます。装丁カッコイイです)
本記事では自分の担当章を中心に、「iOS 11 Programming」を紹介させていただきます。
第2章: ARKit
ARKitは、ちょっと試すだけなら超簡単です。APIはシンプルだし、Xcodeのテンプレートからサクッと動くものがつくれます。
しかしまた、ものすごく奥深くもあります。レンダリングはSceneKitやMetalと組み合わせられるので、これだけで3Dプログラミングのほぼあらゆるテクニックが使えるということになりますし、カメラからの生の入力データ`CVPixelBuffer`にもアクセスできるので、Core Image, Core ML, Vision, OpenCV, GPUImage, etc…と組み合わせて、シーケンシャルな画像を入力とするあらゆるテクニックを駆使できるということにもなります。ARKitが検出している特徴点データにもアクセスできます。
そんな手軽さも奥深さも兼ね備えるARKit、ネット上ではiOS 11の正式リリースを待たずして多くのデモが公開され、開発者の間だけではなく一般ユーザーの間でも話題になっていました。
(ARKitで巻尺のように実寸を測るデモ動画)
本章では、そういったARKitの「超簡単な導入」から始めて、最終的にはネットで話題になっていたようなアイデアを実装できるようになるところまでをカバーするように構成しました。
- 2.1 はじめに
- 2.2 ARKit入門その1 - 最小実装で体験してみる
- 2.3 ARKit入門その2 - 水平面を検出する
- 2.4 ARKit入門その3 - 検出した水平面に仮想オブジェクトを置く
- 2.5 ARKit開発に必須の機能
- 2.6 特徴点(Feature Points)を利用する
- 2.7 AR空間におけるインタラクションを実現する
- 2.8 アプリケーション実装例1: 現実空間の長さを測る
- 2.9 アプリケーション実装例2: 空中に絵や文字を描く
- 2.10 アプリケーション実装例3: Core ML + Vision + ARKit
- 2.11 Metal + ARKit
最初の「ARKit入門」では、はじめの一歩として、最小実装でARKitを体験します。実にシンプルな実装で強力なAR機能が利用できることを実感していただけることでしょう。
その後は平面を検出する方法、その平面に仮想オブジェクトを設置する方法、そしてその仮想オブジェクトとインタラクションできるようにする方法…と、読み進めるにつれて「作りながら」引き出しが増えていき、最終的にはARKitを用いた巻尺(メジャー)や、空間に絵や文字を描くといったアプリケーションの実装ができるようになっています。
(本章で作成するサンプル)
PEAKS の iOS 11 Programming 2章 ARKit のアーリーアクセスが来ててはやすぎだろと思いました。
— Toshihiro Goto (@x67x6fx74x6f) 2017年9月20日
ARKit でできることに関してかなり上手くまとまっていて良い。
ARKitのAPIはシンプルとはいえ、リファレンスだけから実装方法を汲み取るのは難しい部分もあります。またAppleのサンプルは動かして試してみたり、ちょっと改変してみたりして用いる分にはいいですが、実装内容は結構複雑で初心者には意図がわかりにくいものになっている面があります。
- ARKitには興味があるけどなかなか手を動かせていない
- 公式サンプルを動かしただけで止まっている
- どこから始めていいかわからない
といった方には、本章は合っているかなと思います。
ARkitとMetalの説明が大変わかりやすかった ARkitやるなら今ならこの本が正解かと トップエンジニアによるiOSプログラミングの最前線「iOS 11 Programming」がWeb販売開始! https://t.co/fG8o2Tg7DR
— うさがに@AR㌠VR (@usaganikki) 2017年11月27日
一部だけですが、PEASKの本書のページでサンプルPDFを読めるので、気になった方はぜひ試し読みを。
第13章: Metal
クラウドファンディング当初は「Metal 2」と題されており、iOS 11のMetalの新機能の紹介を中心とするような章タイトルでしたが、そもそもほとんどのiOSエンジニアがMetalのAPIを自分でたたいて何かを書いたことがないであろう中で新機能についても仕方がないのでは・・・と考え、がっつりMetalの基礎から書きました。
- 13.1 はじめに
- 13.2 Metalの概要
- 13.3 Metalの基礎
- 13.4 MetalKit
- 13.5 Metal入門その1 - 画像を描画する
- 13.6 Metal入門その2 - シェーダを利用する
- 13.7 Metal入門その3 - シェーダでテクスチャを描画する
- 13.8 ARKit+Metalその1 - マテリアルをMetalで描画する
- 13.9 ARKit+Metalその2 - MetalによるARKitのカスタムレンダリング
- 13.10 Metal 2
- 13.11 Metalを動作させるためのハードウェア要件
正直なところMetal 2の機能紹介は多くはありません。なので、従来のMetalについて熟知し、iOS 11での変更点を中心に知りたい方には物足りないかもしれません。
しかし2017年11月現在、Metalについての日本語でのまとまった情報はこれが唯一かと思います。そして、OpenGLやDirectXでGPUに近いレイヤでのグラフィックスプログラミングに親しんで「いない」人達にはMetalはかなりとっつきにくいと思うのですが、そういう方達にとってのわかりやすさにおいては英語の情報ソース含めても随一なのではないかなと勝手に自負しております。
なぜなら、他のMetalについての書籍はそういう方面での経験が豊富な著者が書いている一方で、本書の場合、そのあたりにほとんど知見がなく、四苦八苦しながら勉強した僕が書いたからです(胸を張って言うことではないですが)。「グラフィックスプログラミングの達人による解説」ではありませんが、同じ目線で苦労した人による「わからないところがわかる」解説にはなってるのではないかなと。
堤さんのMetalの章が端的に言って神
— みつよし (@vespid) 2017年11月7日
なぜなんのために置かれているコードなのかわかるようになる
具体的には「Metalの基礎」「入門その1〜その3」。ここは、新しい事項が一気にブワーッと出てこないように、かなり苦労して解説する内容を精査し、順序を考えました。ブリットコマンドエンコーダから解説するMetalの書籍(記事も含め)はあんまりないんじゃないかなと。普通はレンダーコマンドエンコーダから始めることが多いのですが、シェーダを使うと「初心者にとってのおまじない」が爆発的に増えるのです。
そして、それでも「新しい概念」はたくさん出てくるので、本書ではそのへんを「なにをやっているのか」「なぜこの手順が必要なのか」ということがわかるように解説して、納得感を得ながら前に進められるようにしています。
(本書の執筆の真っ最中、iOSDC 2017にてMetalについて「興味ない人向けに」解説したときの動画です。『まったくMetalさわったことないけどわかった』という感想を多くいただきました)
— kenta.nakai (@urouro_n) 2017年9月17日
堤さんのトークでMetalがだいぶ身近になった!ちゃんと勉強してみたい #iosdc #b
— Yuichi Kobayashi (@imk2o) 2017年9月17日
Metal簡単なのではという気持ちになってきた #iosdc #b
— setoh (@seto_hi) 2017年9月17日
PEASKの本書のページのサンプルPDFは他の章は基本的に冒頭2ページの公開となっていますが、Metalの章は僕個人の希望で5ページ読めるようにしていただいてます。Metalが気になる方はぜひ試し読みしてみてください。
全体のPR
ここから本書全体の話。まず、各執筆陣の素晴らしさと、その担当章の組み合わせの妙については以前に書いた記事をご参照ください。
各章のご紹介は著者様ご自身での記事にお任せしつつ、ここで僕が声を大にして言いたいことは、
本書はiOS 12, 13, 14...が登場しても価値を持ち続ける
ということです。
なぜかというと、多くの章で、他の書籍には載っていない、あるいはググってもまとまった情報は見つかりづらい内容について解説しているからです。
- 第1章 iOS 11 概要
- 第2章 ARKit
- 第3章 Core ML
- 第4章 Swift 4の新機能とアップデート
- 第5章 Xcode 9 の新機能
- 第6章 Drag and Drop
- 第7章 FilesとDocument Based Application
- 第8章 レイアウト関連の新機能及び変更点
- 第9章 Core NFC
- 第10章 PDF Kit
- 第11章 SiriKit
- 第12章 HomeKit入門とiOS 11のアップデート
- 第13章 Metal
- 第14章 Audio関連アップデート
たとえばHomeKitの章。長らく謎に包まれていたHomeKit、対応デバイスもなかなか登場しなかった当然それについて書かれた書籍もありませんでした。そしてポツポツとデバイスが出揃ってきた今、満を持しての所さんによる56ページに及ぶ入門〜実践の解説!他の章に用がなくてもHomeKitに興味がある人はこの本はずっと「買い」です。
岸川さんによるSiriKitの章も、以前からあるフレームワークでありつつ「動作のしくみ」から解説されていますし、僕の書いたMetalの章も新機能だけじゃなくて基礎から解説しています。
Core ML、Core NFC、PDF Kit、MusicKit、ARKitといった新フレームワーク、Drag and Drop等の新機能も、まとまった解説は現時点では(そして恐らく当面の間)本書でしか得られないのは同様でしょう*1。
しかも、著書やカンファレンスでの講演に定評のある著者陣による執筆です。たまーに見かける、APIリファレンスを翻訳しただけのような、あるいはさわりをちょろっと解説しただけみたいな章はひとつもありません。それぞれが興味深く読めて、ちゃんと頭に入ってきて、実際の現場で役立つように各著者によって噛み砕かれ、再構成されています。
ひさびさに出た「非入門者向け」の「iOS SDK解説書」*2にして、かなりの良書では、と思います。
トップエンジニアによるiOSプログラミングの最前線「iOS 11 Programming」がWeb販売開始! https://t.co/FBZ4wl2h0L
— epoxy(エポキシ・おまんじゅう) (@drepoxy) 2017年11月27日
入門書じゃないiOS開発本は貴重だと思います。まぁ売れないから出ないんでしょうけど、出版社がだめでもクラウドファンディングで販売に至った本書は実にありがたいものです。
謝辞
ARKit、Metalの章ともに、同僚の登本さんにチェックしていただきました。というかそもそも(ARKitで大いに必要となる)3Dプログラミングの基礎は彼から教えてもらいました。またMetalの章は後藤氏にもチェックしていただきました。Metalのレビューをお願いできる人はなかなかいないので非常に助かりました。改めてお礼を申し上げます。
また非常に精密な校正をしてくださった加藤さん、このお話をくれて、完成まで導いてくれたPEAKSの永野さん、共著者のみなさま、クラウドファンディングで購入してくださったみなさま、アーリーアクセスでコメントいただいたみなさま、どうもありがとうございました!
そして本書について知らなかったけどちょっと気になってきた、というみなさま。本書はPEAKSのサイトで購入可能です:
何卒よろしくお願いいたします。
サンフランシスコで就職して1年が経ちました
昨年9月28日に『フリーランスを休業して就職します』という記事を書いてサンフランシスコの会社に就職し、早1年が経ちました。
実際にはもう1年と2ヶ月ほど経ってまして、この2ヶ月間、何度も記事を書こうと思いテキストエディタを開きつつ、まとめきれずに途中で断念・・・ということを繰り返してました。ブログ記事1つにまとめるには多くのことがありすぎました。
レイク・タホに別荘を借りて会社のみんな(とそのファミリー)で連休を過ごしたり、同僚の帰省(ミズーリ州)についていってサンフランシスコとは全く違うアメリカを体験したりといった「楽しい思い出」もあるし、英語について色々と試行錯誤したり学んだりしたこともあるし、会社でどんな感じで仕事してるか/現地でどう生活してるかというのもあるし・・・ということを書いてると永遠にまとまらなそうなので、本記事では「入社を決めた当初の目的に対しての達成度はどうか」というあたりについて書こうと思います。
状況のおさらい
まずは前提となる状況について書いておきますと、
- 2016年10月、サンフランシスコのスタートアップ「Fyusion」にiOSエンジニアとして就職
- ビザはH-1B
- 僕がちょうど30人目の社員
- 今は40人ぐらい?
- 入社時点では日本人は僕ひとり
- 今はリサーチ(研究開発)チームに日本人の同僚が一人います。
詳細は冒頭にも挙げた昨年の記事に書いてあります。
Fyusion入社の目的:欲しいスキルが得られそうだった
これも昨年の記事に書いたことですが、謳歌していたフリーランスをやめてFyusionに就職することにした理由は、シンプルに言うと「欲しいスキルが得られそうだったから」です。
具体的には以下の4つ。
- コンピュータビジョン
- 3Dプログラミング
- 機械学習
- 英語
で、Fyusionは
- CEOは、3D点群処理のオープンソース・プロジェクト「Point Cloud Library (PCL) 」の設立者であり、OpenCVのコミッタでもある
- 他のファウンダー陣・メンバーも、ロボット工学・3Dコンピュータビジョン・機械学習とかの博士号もってる人がゴロゴロ(スタンフォード等の名門だったり、CVPRベストペーパーを取った人もいたり)
- 提供しているサービスもそれらの技術をベースとしている
- もちろん英語を使う
というわけで、完璧に条件が揃っていたので、これはもう行くしかないということで入社を即決しました。
プラス、これはスキルというよりは経歴面での話ですが、「サンフランシスコの会社で働き、ちゃんと通用した」という実績が得られるのは、もし今後またフリーランスをやる際にも、海外の会社に対して安心材料になるかなと考えていました。
この1年での達成度:技術面
まず、3Dプログラミング・機械学習については、結構達成感があります。いや、どちらも初心者レベルなのですが、何年も前から興味がありつつ、結局ほとんど手を付けられなかった分野で、少なくともスタートを切ることができた、というのは自分にとって非常に大きい。
3Dプログラミングは、ワールド座標とかそういう3Dの基本のキも知らないところから、アプリ内でもSceneKitを利用した機能を実装できたし、ここでSceneKitをさわってたおかげで書籍でARKitについて書くことができました*1。
- iOSの技術書をクラウドファンディングで執筆します - 共著者8人の紹介 #peaks_cc - その後のその後
- ARKitのサンプルコード集「ARKit-Sampler」を公開しました - その後のその後
機械学習については、弊社の優秀なリサーチエンジニアが、学習させたモデルをMetal Performance Shaders(MPSCNN)を使ってiOSデバイス側で動かすところまでやってしまうので、残念ながら社内の仕事では自分の出番がほぼなかったのですが、自分にそのへんの仕事がまわってくるようにと、
- Courseraで機械学習の基礎を勉強
- プライベートの時間で自分でモデルを学習してiOS上でMPSCNNを使って動かすサンプルを作成
- try! Swiftや海外カンファレンスでのトークに昇華
といったことができたので、スタート地点としては満足です。
コンピュータビジョンに関しては、正直なところ知見が深まった感はあまりありません。そのへんのコアなアルゴリズムはリサーチチームが実装(C++)を含めて担当するし、その中身を聞いて理解するにはアカデミックな知識も英語力も不足しているので、及び腰になってしまいます。とはいえこの分野で新たに知ったことも多いし、機械学習もこの分野に関連してるので、進んだといえば進んだといえるかも。
あと、当初の目標としては考えてなかったですが、弊社はプロダクト内でMetalをガッツリ使ってるので、実務でMetalを使う機会があったのもよかったです。OpenGL ESには以前から興味がありつつ手を付けられてなかったので、同じくGPUインターフェースレイヤのMetalをいじれるようになったのは自分にとってかなり大きい収穫でした。
この1年での達成度:英語
これは・・・アメリカの会社で働いているという観点でみると、かなりダメだと思います。いまだにミーティングでのみんなの議論(自分以外 vs 自分以外)についていけません。日本語でも口数が多い方ではないので、そもそも会話の絶対量が少ない。この感じだとあと3年いても無理な気がします。
とはいえ、入社以前の自分から比べてどうか、という観点だと、飛躍的に向上したともいえます。表現の引き出しは増えたし、チャットではわりと苦もなくコミュニケーションできてます。相手が少しゆっくり話してくれて、話すべき明確な用事(タスクとか、仕様とか)があれば、ちゃんと意思疎通できます。ほんの数年前まで2,3行の英語メール書くにも辞書引きながら10分とかかけてたのを思うと、また入社面接でも相手の言ってることが5%も理解できなかったのを思うと、大きな進歩だなと。
ただ、これまではどうも技術に逃げてしまってたところがありました。英語の勉強より技術の勉強、楽しい会話ができなくても技術で認めてもらえばいい、と。
これだとせっかくの「英語を使わざるを得ない環境」がもったいないので、会話量を増やすべく対策を打っていこうと思います。
この1年での達成度:実績面
まず、1年以上は働く、というのは目安として考えていました。日本と比べて社員をクビにしやすいアメリカでは、実力不足の社員はやはり切られます。1年いれば、ちゃんと通用した、といえるんじゃないかなと。これは達成です。
それとは別に「会社で技術力が認められている」ことが客観的にわかりやすい事実として、プロモート(昇進)しました。
採用時は Lead Software Engineer だったのが、Senior Principal Engineer になりました。
(新しくしてもらった名刺)
収入も当初のものから年収にしてn百万円上げてもらったので、サンフランシスコの会社で働き、貢献し、評価されている、というわかりやすい証明ができてよかった、と思っています。
ちなみにうちの会社、CEO、CTO、SVP Engineering、SVP Webのファウンダー陣全員が現役バリバリでコード書きます。これの何がいいって、エンジニアが正当に評価される、という実感がハッキリあります。
たとえばある時期、僕はiOSリポジトリのコードを抜本的に改善すべく、iOSチームメンバーのマインドから変えていかないと、ということでレビュー依頼が自分に振られていないものまで結構細かくコメントをつけていたことがありました。頼まれてもないのに人のコードにケチをつけるというのは下手したら相手から嫌われかねないし、自分でコード書いて新機能とかを実装する方がよっぽど楽しいのですが、どうしても必要だと思った(汚染が広がる一方なのを食い止めたかった)のでやってました。
で、そんなある日、CEOから「いつもグレイトなレビューをありがとう!」っていうメッセージが。
CEOがプルリクのレビューコメントを見て、しかもその良し悪しが評価できるって、良くないですか?これはやはり経営陣が現役でコード書いてるならではかなと思います。「昔はバリバリ書いてた」でも厳しいでしょう。あの機能をつくったとか、そういう見えやすい仕事以外での貢献も評価される環境はエンジニアにとって非常に働きやすいなと。
まとめ
まとめると、
- 技術面・・・手応えあり
- 英語・・・もっと話さないといけないけどそれでも進歩はあった
- 実績面・・・アメリカで通用してるぞという明確なものが得られた
という感じで、ここまでの進捗は上々です。
ただこれはコミュニケーション力に難のある僕に対するファウンダー陣や同僚の理解/協力があってこその結果で、「おれはもう世界のどこでもバリバリやれる」という自信がついたかというと、まったくそんなことはないわけで。会社にも、アメリカにももっと食い込んでいけるようにならないとなぁ、というのが今後の要努力ポイントです。
*1:ARKitは、レンダリングはSceneKitや他のフレームワークに任せるようになっている
iOSDC2017で「飛び道具ではないMetal」という話をしました #iOSDC
9月15日〜17日の3日間にわたって開催された iOSDC Japan 2017 にて、「飛び道具ではないMetal」と題して登壇させていただきました。
発表資料はこちら・・・と普段ならここでスライドを貼るところですが、その前に、「あーMetalね。関係ないや」と思われた方。今回はむしろそういう方向けです。MetalのAPIを直接たたくことはなくても、UIKitの下回りでもMetalが使われていて、間接的に誰もがMetalの恩恵を受けています。今日はお祭りなので、そんなMetalにちょっと目を向けてみませんか・・・と、そういう内容です。「Metalをさわったことない人が、Metalについてわかった気になれる」というところをゴールとして設定して発表を構成しました。(そういう切り口でもないと、誰も興味がない話になってしまうので。。)
#iOSDC のCfPが採択されました!「Metal興味ないし一生触るつもりない」という方がほとんどだと思いますが、なるべく多くの開発者に関係しそうな切り口からMetalについて話してみたいと思います / 飛び道具ではないMetal https://t.co/OOQa30cCb0
— Shuichi Tsutsumi (@shu223) 2017年8月2日
今日の午後イチ、13:30〜B会場にて登壇します。「Metalか・・・うちには関係ないな」という方にこそむしろ聞いて欲しい内容となってるので、興味ない方もぜひ15分いただけますと幸いです🙏 #iosdchttps://t.co/OOQa30cCb0
— Shuichi Tsutsumi (@shu223) 2017年9月17日
CfPに書いた内容はこちら。
WWDC17でもMetalのセッション会場は閑古鳥が鳴いてました。Metalって3Dゲームとかカメラアプリとかのトリッキーなエフェクト用でしょ、うちには関係ないなぁ・・・と思われている方も多いかもしれません。しかし、UIKitの下回りもMetalですし、色んな所で実はMetalは暗躍しています。そんなMetalにもっと多くの開発者に興味を持ってもらうため、非ゲーム・非カメラアプリ開発者にも関係しそうな切り口からMetalやGPUについて紹介してみたいと思います。
以上、前置きが長くなりましたが発表資料はこちらです。
今日公開されたばかりの動画がこちら。たった15分の短い発表なので、ぜひ見てみてください。
当日の様子・いただいた感想
絶対みんなこっち見に行くだろーっていうセッションが裏にあり、コアなMetalユーザがパラパラと来るだけだったらどうしよう・・・と思ってたのですが、ありがたいことに多くの方に来ていただけました。
ルームB既に満席! #iosdc #b pic.twitter.com/BOP8XrPDbC
— しめじ🍄 (@TAKA_0411) 2017年9月17日
こういう反響をいただきました。
— kenta.nakai (@urouro_n) 2017年9月17日
堤さんのトークでMetalがだいぶ身近になった!ちゃんと勉強してみたい #iosdc #b
— Yuichi Kobayashi (@imk2o) 2017年9月17日
— kenta.nakai (@urouro_n) 2017年9月17日
Metal簡単なのではという気持ちになってきた #iosdc #b
— setoh (@seto_hi) 2017年9月17日
— Yoshikuni Kato (@yoshikuni_kato) 2017年9月17日
あとNextstep.fmというPodcastで、sonson氏が『Metal書いたことなかったけど、「こういう感じなんや―」っていうのがわかってよかった』と言ってくれてました。
多くの方に期待した感じで伝わったようで良かったです。
お知らせ1: Metalについて書いた本が出ます!
ARKitの章とMetalの章を担当しました。
Metalの章は、新機能というよりどちらかというとゼロから入門するところに力を入れて書いています。また別記事で詳しく書きたいと思います。今日か明日にでもクラウドファンディングで購入された方々にはβリリースされて、近いうちに一般販売開始とのことです。
お知らせ2: try! Swift 2018に登壇します!
本日発表になりましたが、ついに念願かなって来年のtry! Swiftに登壇させていただくことになりました。
あと4ヶ月、ネタを推敲して臨みます!
ARKitのサンプルコード集「ARKit-Sampler」を公開しました
iOS 11のリリースと同時に、ARKitのサンプル集「ARKit-Sampler」をオープンソースで公開しました。
ソースコードは GitHub に置いてあるので、ご自由にご活用ください。
https://github.com/shu223/ARKit-Sampler
使用言語はSwift 4.0です。
ARKitのサンプルは公式のを含めいろいろ出てますが、ARKit-Samplerでは「余計な実装を混ぜずに、できるだけシンプルな実装で伝える」というところに気をつけています。もともとは書籍執筆のために用意したものなので、とくに序盤のサンプルはシンプルで意図が汲みやすいと思います。
ビルド方法
- ここから Inceptionv3.mlmodel をダウンロードして mlmodels フォルダ配下に置く
- Xcode 9 でビルドしてiOS 11端末にインストール
基本的にビルドするだけですが、Core MLのモデルファイルをダウンロードする必要があります。
サンプル一覧
今のところ8個のサンプルが入っています。少ないですが、随時追加していきます。
Coming soon...
- Audio + ARKit
- Core Location / MapKit + ARKit
- Face Tracking
- etc...
Special Thanks
アイコンデザインはいつものおかず氏です。
書籍「iOS 11 Programming」
ARKitとMetalの章の執筆を担当しています。
ARKitの章は本日アーリーアクセス公開予定です。
iOS-11-Samplerは?
毎年iOSのニューバージョンと同時に公開していたiOS Samplerシリーズですが・・・今年はまだありません・・・つくるつもりはあります・・・!
コロラド州デンバーで開催されたiOSカンファレンス「360|iDev 2017」に登壇した話 #360iDev
今月の8月13日〜16日にかけて、アメリカ合衆国コロラド州デンバーにて開催された「360|iDev 2017」にて登壇してきました。
(発表中の様子)
トークのタイトルは "Deep Learning on iOS" で、スライドはこちら。
持ち時間が45分もあったので、スライドの内容プラス、トークの序盤・終盤でライブデモを2つ(配布されているモデルを使用した一般物体認識/自分で学習させたモデルを使用したロゴ認識)実施しました。
360 iDev カンファレンスについて
raywenderlich.com の毎年の恒例記事 "Top 10 iOS Conferences" に3年連続でエントリーしている、歴史と由緒あるカンファレンスです。
- https://www.raywenderlich.com/149517/top-10-ios-conferences-2017
- https://www.raywenderlich.com/127022/top-10-ios-conferences-in-2016
- https://www.raywenderlich.com/93886/top-10-ios-conferences-in-2015
参加人数は今年は250人程度とのこと。
開催場所のコロラド州デンバーは、カリフォルニアから東に行った、アメリカのちょうど真ん中あたりにあります。
登壇の経緯
相変わらず招待されたとかではなくて、4月に出したCfPが採択されての登壇でした。今年の3月にtry! Swift TokyoのLTで話した内容 *1 の完全版をどこかでやりたくて、応募しました。
ちなみに今年のCfPはいまのところ4つのカンファレンスに応募して、3勝1敗(通った: try! Swift, 360iDev, iOSDC, 落ちた: UIKonf)です。
カンファレンスの様子
スピーカーは飛行機代が出るのと、会期中のホテルはカンファレンスが用意してくれます。
開催前日の夜はスピーカーディナー。
(写ってないように見えますが、写ってます。。)
スピーカーディナーは今までちょっと苦手意識があったのですが、今回はAltConfのオーガナイザーやってて僕のことを覚えててくれた人や、日本語勉強してて僕のブログを読んでくれている(!)人、ベルリンのカンファレンスで同じくスピーカーだった人とかもいて、今回は非常に楽しめました。
会場はホテル内にあり、最大4トラックが同時進行します。
(ゲストスピーカー用の一番広い会場)
SlackにはポケモンGOチャンネルやNintendo Switchでマリオカートやるチャンネルとかもありました。
(会場から届くとこにフリーザーが出たのでみんなで狩るの図 )
ランチのシステムがユニークで、カンファレンスでもらえるバウチャー持って、フードトラックが集まる公園まで行って、自分で好きなのを注文して食べる、という形式。
観光にもなるし、会場の外の空気を吸えるので非常にいい仕組みだと思いました。
こちらはスポンサーブースでももらった、Firebaseのハンドスピナー、ホットソース、ウッドステッカー。
ハンドスピナーは(置いて回すときは)回転中もロゴが見えるし、色で個性も出しやすいので企業やサービスのグッズとしては結構いいのではないでしょうか。
僕の出番は2日目のランチ前。
(いよいよ次…)
出る直前はソワソワしましたが、話し始めたら緊張は忘れて、練習時よりもうまくしゃべれたと思います。
デモもうまくいったし(バックアッププランもたくさん用意しておいた)、終わった後「良かったよ」と声もかけてもらえました。
ただ正直な所、今回のトークの「内容」については100%最高と思える所まで持っていけたとは思ってなくて、悔やまれる部分もあります。そこらへんは結局のところ自分の準備不足、努力不足に帰結するので、今後精進します。(詳しくは後述)
まぁそんなわけでちょっと発表内容については勝手に凹んだりしてたのですが、かの世界的に有名なiOSチュートリアルサイト "raywenderlich.com" の『360|iDev 2017 Conference Highlights』(360iDevのハイライト)という記事で、なんと僕のセッションが紹介されてました。
"Can't miss"(必見!)と書いてあったので、嬉しかったです。
準備段階での悩み
今回は悩みまくりました。CfPを出した時点では、WWDC17開催前で、つまりCore MLの発表前で、Metal Performance Shaders の CNN API (MPSCNN) 使って実際にiOSデバイス上でGPU AcceleratedでCNN走らせてる人って当時はあまりいなくて、情報もものすごく少なかったので、まだ価値があったわけですよ。
それが、Core MLが発表されて、MPSCNNのレイヤーを直接たたく意味はあまりなくなってしまった。敷居がグッと下がって、注目度がバーンと上がって、プレイヤーもドッと増えて。
Core ML使うとiOS側の実装云々よりもほとんど機械学習側での知見と努力がモノを言うのだけど、Courseraのコースやっただけの自分はまだ人様に講釈するようなレベルではないし。。
悩みに悩んで、
- MPSCNNであればiOS 10でも使える
- BNNSとの使い分け
- Core ML+Visionはどこをどう簡単にしたか
- デモ
という話で構成しました。こういう切り口としては、わかりやすく、かつ理解と興味がつながっていくようにうまく説明できたと思います。
ただ、try! SwiftでのLT含め、そもそもの僕がこの分野でプライベートの時間を使って勉強したり勉強会やカンファレンスで登壇したりしてきたのは、「いろいろと革新的で面白いことができそう」というワクワク感からで、ここをほとんど「実践」できないまま登壇して、結果的に自分のトーク内容にもその「ワクワク感」があまりこめられなかったなと。理想的には、もっと色々な実案件をやったり大量のデモをつくってみたりして、そういうのを紹介しつつ、どう、おもしろそうでしょう、というところから話を展開したかった。WWDCの発表で大幅に当初の思惑が狂ったとはいえ、既存の知見をこねくりまわしてどう発表に落とし込むかに準備時間の大半を使ってしまったなと反省しています。
その後のデンバー滞在/リモートワーク
生まれて初めてのデンバー行きで、「この広いアメリカ、同じ場所をもう一度訪れるチャンスはそうそうないかもしれない」と思い、滞在を1週間ほど延長して、リモートワークしてました。これが最高に良かったのですが、facebookに日々色々と書いてたのでここでは割愛します。
(皆既日食中のデンバー)
*1:LTは5分だったので、具体的なことはほとんど何も説明できなかった
Core ML vs MPS vs BNNS #fincwwdc
昨日FiNCさんのオフィスで開催された「WWDC2017振り返り勉強会」で『Core ML vs MPS vs BNNS』というタイトルでLTしてきました。
iOS 11で追加されたCore MLが非常に注目を集めていますが、「既存の機械学習フレームワークを使って学習させたモデル(のパラメータ)をiOS側に持ってきて推論を実行する」ということ自体はiOS 10からあって、そこに不便さがあったので広まらず、Core MLでやっと使われるようになった、という側面はもちろんありつつも、いややはりそれでも単にそういうことがiOS 10できるようになったということ自体が知られていなかっただけなのではと。
それにしてもCoreMLはこんなに話題になるのに、なぜMPSCNN(MPS)はあんまり盛り上がらなかったのか。「iOS側でのネットワーク実装とかモデル持ってくるのとか色々面倒」というCoreMLで改善された部分がネックになる以前に、そもそも
— Shuichi Tsutsumi (@shu223) 2017年7月16日
(つづき)そもそも「他ツールで学習させたモデルを利用してiOS側で推論を実行できるようになったよ」っていうこと自体もあまり知られてなかった気がする。(そしてCore MLでそれができるようになった!って言ってる記事も見かける。。) https://t.co/SA23gU4WII
— Shuichi Tsutsumi (@shu223) 2017年7月16日
確かに自分も Metal Performance Shaders のCNN APIを用いた機能を実装しようとしたときに、情報があまりに少なく、何ができて何ができないのか、どうやるのかがよくわからなかった、ということがありました。
で、そのへんをシンプルに説明したら、もっと興味をもつ人も出てくるんじゃないかなと思い、実装手順を3ステップで解説してみました。
- Step 1: モデルをつくる
- Step 2: ネットワークを実装する
- Step 3: 推論の実行処理を書く
意外と簡単そう/使えそうではないでしょうか?
ところが・・・
っていうつらさがあり、他にも色々と面倒な点があり、やっぱりCore ML & Visionのおかげで各段に便利になった、という話でした。
最後にAccelerateフレームワークのBNNSの使いどころについてWWDC17のMetal Labで聞いた話が出てきます。
(登壇の様子 by yucovin さん)
つつみさん、10分の発表でスライド45枚に挑戦中!!!(( ゚ロ゚)ノ #fincwwdc #そこじゃない pic.twitter.com/DcAUxlwV2P
— ゆこびん@WWDC2017*アプリ道場 (@yucovin) 2017年7月24日
なぜこの話をしたのか
上の説明だけを読むとまるでMPSCNNの普及活動をしている人みたいですが、動機はそこではなくて、来月登壇する アメリカのiOSカンファレンス で、"Deep Learning on iOS" というタイトルで発表することが決まっていて、
で、これってWWDC17開催前にCfPを出して通ったやつなので、応募当時はMPSCNNの話をするつもりだったのに、Core MLが出てしまって事情が変わってしまった、どうしよう、という。。
じゃあCore MLの話をすればいいじゃん、と思うかもしれません。その通りかもしれません。でも僕自身がまだあまり試せてないのと、Core MLの場合はiOS側が便利になりすぎてむしろ機械学習フレームワーク側(Kerasとか)がメインになるけどそっちは初心者とすらいえないレベルだし、ってことでMPSCNNの方に解説を寄せよう、という試行錯誤の中で「こんな切り口はどうだろう」と考えたのが昨日の発表なのでした。
実際に話してみて、正直なところコレジャナイ感はちょっとありました。もうちょっとワクワクする感じにならないか、実例とかデモとかを増やす感じでブラッシュアップしてみようと思ってます。(来月のカンファレンスは発表時間が45分もあるので、個々の解説ももうちょっと丁寧にやる予定)
おわりに
WWDCには参加したものの、そのままアメリカにいたのでこういう振り返り勉強会に参加できず(※例年勉強会発表ドリブンで新APIを勉強していた)、あっちではこういうLTで気軽に登壇できる勉強会もあまりないので、1ヶ月後というわりとWWDC勉強会としては珍しいタイミングで開催された本イベントは大変ありがたかったです。
LTですが非常に中身の濃い発表が多く、勉強になりました。懇親会で出てくる料理もさすがFiNCさん、ヘルシーで美味しいものばかりでした。どうもありがとうございました!
追記:BNNSについていただいたコメント
Facebookでsonsonさんからコメントいただきました。
BNNSとMPSCNNの使い分けは,難しいけど,電力と計算スピードのバランスかなぁと思います.
あと,GPUのメモリとCPUのメモリ間の転送に時間がかかるので,オーバーヘッドをカバーできるくらい,データや計算量大きくないと,GPUは意味ないでしょう.
BNNSは,SIMDなので,これも当然CPUのコンテキストスイッチのためのオーバーヘッド(ノーマルモードとSIMDモードの切り替え)があるのですが,GPUほどではないので,小さいネットワークだとGPUよりBNNSの方が速いというのはありそうです.
まぁ,なんで,電力と速度の限界に挑戦する場合は,ベンチマークとって極限を目指そうって感じですかねw
なるほど、単に「CNNの計算はGPUが向いてるでしょ」とか「Appleの人も言ってた」とかってだけでBNNSのことは忘れようとか言ってちゃいけないですね。確かにGPU↔CPU間の転送速度のボトルネックとGPUによる高速化がどれぐらい見込まれるかのバランスによる、というのは非常に納得です。また「SIMDモードへの切り替えのオーバーヘッド」(はあるがGPUとの転送ほどではない)というあたりもまったく考慮できてなかったところです。
CPU、GPUの負荷がそれぞれどれぐらいか、というのはXcodeで簡単に見れますが、GPU↔CPU間の転送状況を見る方法もあるのでしょうか?GPUまわりの計測・デバッグ手法はもうちょっと勉強したいところです。
ちなみにsonsonさんは例の(私も参加させていただく)クラウドファンディング本で「Core ML」のパートを担当されます。
7/28まで買えるみたいなのでまだの方はぜひご検討を!
iOSの技術書をクラウドファンディングで執筆します - 共著者8人の紹介 #peaks_cc
「PEAKS」という技術書のクラウドファンディングサービスで、今日から9人の執筆陣によるiOSの解説書「iOS 11 Programming」のファンディングが始まりました。
- PEAKS(ピークス)|堤 修一, 吉田 悠一, 池田 翔, 坂田 晃一, 加藤 尋樹, 川邉 雄介, 岸川 克己, 所 友太, 永野 哲久 - 第一線の開発者陣による「iOS 11 Programming」執筆プロジェクト!
9人の著者陣に僕も入ってるので、宣伝といえば宣伝なのですが、技術書大好きな自分としては、自分が入ってなくても絶対に買うであろう執筆陣/内容なので、いち読者としてもぜひとも成立して欲しいと思ってまして、本記事を書こうと思った次第です。
そう、念のため書いておきますが、クラウドファンディングなので、成立しなければ出ません😭
購入締切日時 2017年07月28日 23:59 までに、購入者数が目標の 500人 に達した時点で執筆開始となります。購入額の決済は、目標人数が達成された時点で行われます。(目標人数に達しなかった場合はプロジェクト不成立となり、決済は行われません。)
ページ内の著者コメントにも書きましたが、僕がお世話になった著書の執筆者であったり、いつもお世話になってる著名オープンソースライブラリのコミッタの方であったり、いつも素晴らしい記事を書かれている方であったり。期待しかない布陣なのです。
万が一それが伝わってなくても悲しいので、僕「以外」の方々についておこがましいですが簡単に紹介させていただきたいと思います。以下サイトに載ってる順に。*1
吉田 悠一 - Core ML
通称ソンソン(sonson)さん。「iOS SDK Hacks」のメイン著者のひとり。
オライリージャパン
売り上げランキング: 226658
2010年とかなり黎明期に書かれた本ですが、Method Swizzling や Accelerate.framework といった他著では扱ってないトピックについて書かれていて、その後何年も本書を開いて参考にさせていただきました。
コンピュータビジョンや機械学習を専門とされていて、今回Core MLについて書かれるということで、ブログ記事や他著にありそうなチュートリアルをなぞってみた的なところを超えた、「中身がわかってる人ならではの解説」が非常に楽しみです。
池田 翔 - Swift 4の新機能とアップデート
通称いけしょーさん。あの Carthage、ReactiveSwift のコミッタであり、Himotoki の作者です。Carthageというパッケージマネージャ、ReactiveSwiftというリアクティブプログラミングをするためのライブラリ*2、Himotokiという「Swift自体がそのコアコンセプトを後追いすることになった」JSONパーサの中身をコミッタ・作者レベルで理解している人が解説するSwift 4、読みたすぎます。
坂田 晃一 - Xcode 9 の新機能
僕は坂田さんと呼んでますがID的にはhuinさん。今年出版された「モバイルアプリ開発エキスパート養成読本」の著者のひとり。
売り上げランキング: 38,762
iOSDC等のカンファレンスや勉強会でよく発表されていて、わかりやすくてためになる内容に定評がある方です。
加藤 尋樹 - Drag and Drop / Files と Document Based Application
通称すこんぶさん。try! Swiftの記念すべき第1回目に登壇されていました。
上記はすこんぶさんのブログですが、技術記事はいつも他の記事には書いてない「一歩踏み込んだ」内容で、めちゃくちゃ勉強になります。
川邉 雄介 - UIKitのガイドラインの変更点とAutoLayoutの新機能、アップデート
僕は川邊さんと呼んでますが、ID的にはjeffsukeさん。「よくわかるAuto Layout」の著者の方です。
リックテレコム
売り上げランキング: 130,872
この本の紹介記事にも書きましたが、「こんなに詳しく、しかも噛み砕いててすごい」と驚く内容の良さでした。*3
ブログ記事もちょっと込み入った内容を綺麗に構造化してわかりやすく書くのが上手い方だなーと思います。
岸川 克己 - Core NFC / PDFKit / SiriKit
通称きしかわさん。きしかわさんです!Realm、try! Swiftの主催、色々な会社の技術顧問、KeychainAccessの作者等いろいろな顔がありますが、なんといっても岸川さんの勉強会等での登壇内容は、そのまま本にして欲しいぐらい詳しく、他で説明されてないような内容まで網羅されていて、それでいてわかりやすいです。
PEAKSクラウドファンディング第1弾は岸川さんの「Inside Swift」でしたが、ぜひとも成立して欲しい企画でした。目標部数が高すぎるからだ!と思わずPEAKSにアンケートでクレームを入れたぐらいでした😭
今回こそは成立させて、岸川さんの書く章を読みたいです。というか、「PDFKit」は何となく岸川さんが書きそうなイメージがありますが、「Core NFC」「SiriKit」というチョイスは個人的にはちょっと意外で、だからこそますます読んでみたい気持ちが高まります・・・!
所 友太 - HomeKit入門とiOS 11における新機能
僕は普通に「ところさん」と呼んでます。みんな持ってたあの「UIKit詳解リファレンス」を書いた方。
リックテレコム
売り上げランキング: 355,345
「よくわかるAuto Layout」の監修でもあります。あと #potatotips の創始者でもあります。
「UIKit本の次回作は書かないんですか?」と会う度に聞いてて「今書いてます!」と言ってたのに7年経ってもまだ出てないので、こういう機会でもないとなかなか書いてくれない気がしますw 所さんのHomeKit解説、ぜひ読みたいです。
永野 哲久 - Audio/Media関連 新フレームワークとアップデート
iOSのオーディオまわりをいじる人はみんな参考にしたあの「iPhone Core Audioプログラミング」の著者。
ソフトバンククリエイティブ
売り上げランキング: 88,410
2009年刊行ですが、オーディオ周りの低レイヤのAPIのうちのいくつか(大部分)はこの本にしか書かれてないことが多く、一時期は1万円を超えるプレミア価格がついてました。プログラミング界隈においてはだいたいの情報は英語が源泉ですが、この本をネイティブで読めるので日本語できて良かったーとまで思った一冊です。
この企画の話をいただくまで知らなかったのですが、実はPEAKSの中の人はこの永野さん。今回の発起人でもあります。
おわりに
もしかしたら個人的な思いがほとばしりすぎて宣伝にすらなってないかもしれません。。プロジェクトが成立(=購入者数が目標数に到達)してから執筆される本なので、ある程度内容については著者陣を信用してほしいということになりますが、ガジェット系等のクラウドファンディングと違って成立しなければ決済されないので、"支払ったけど本(電子書籍or紙の本)は届かない"ということはないのでその点はご安心いただきつつ、気になった方はぜひ応援の購入をしていただければありがたいです。
- PEAKS(ピークス)|堤 修一, 吉田 悠一, 池田 翔, 坂田 晃一, 加藤 尋樹, 川邉 雄介, 岸川 克己, 所 友太, 永野 哲久 - 第一線の開発者陣による「iOS 11 Programming」執筆プロジェクト!
よろしくお願いいたします🙇🏻