Hatena::ブログ(Diary)

Over&Out その後 このページをアンテナに追加 RSSフィード

2017-11-20

サンフランシスコで就職して1年が経ちました

昨年9月28日に『フリーランスを休業して就職します』という記事を書いてサンフランシスコの会社に就職し、早1年が経ちました。


実際にはもう1年と2ヶ月ほど経ってまして、この2ヶ月間、何度も記事を書こうと思いテキストエディタを開きつつ、まとめきれずに途中で断念・・・ということを繰り返してました。ブログ記事1つにまとめるには多くのことがありすぎました。


レイク・タホに別荘を借りて会社のみんな(とそのファミリー)で連休を過ごしたり、同僚の帰省(ミズーリ州)についていってサンフランシスコとは全く違うアメリカを体験したりといった「楽しい思い出」もあるし、英語について色々と試行錯誤したり学んだりしたこともあるし、会社でどんな感じで仕事してるか/現地でどう生活してるかというのもあるし・・・ということを書いてると永遠にまとまらなそうなので、本記事では「入社を決めた当初の目的に対しての達成度はどうか」というあたりについて書こうと思います。


f:id:shu223:20170616204618j:image:w600

(オフィスの屋上でビールの図)


状況のおさらい

まずは前提となる状況について書いておきますと、

  • 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


機械学習については、弊社の優秀なリサーチエンジニアが、学習させたモデルをMetal Performance Shaders(MPSCNN)を使ってiOSデバイス側で動かすところまでやってしまうので、残念ながら社内の仕事では自分の出番がほぼなかったのですが、自分にそのへんの仕事がまわってくるようにと、

といったことができたので、スタート地点としては満足です。


コンピュータビジョンに関しては、正直なところ知見が深まった感はあまりありません。そのへんのコアなアルゴリズムはリサーチチームが実装(C++)を含めて担当するし、その中身を聞いて理解するにはアカデミックな知識も英語力も不足しているので、及び腰になってしまいます。とはいえこの分野で新たに知ったことも多いし、機械学習もこの分野に関連してるので、進んだといえば進んだといえるかも。


あと、当初の目標としては考えてなかったですが、弊社はプロダクト内でMetalをガッツリ使ってるので、実務でMetalを使う機会があったのもよかったです。OpenGL ESには以前から興味がありつつ手を付けられてなかったので、同じくGPUインターフェースレイヤのMetalをいじれるようになったのは自分にとってかなり大きい収穫でした。


この1年での達成度:英語

これは・・・アメリカの会社で働いているという観点でみると、かなりダメだと思います。いまだにミーティングでのみんなの議論(自分以外 vs 自分以外)についていけません。日本語でも口数が多い方ではないので、そもそも会話の絶対量が少ない。この感じだとあと3年いても無理な気がします。


とはいえ、入社以前の自分から比べてどうか、という観点だと、飛躍的に向上したともいえます。表現の引き出しは増えたし、チャットではわりと苦もなくコミュニケーションできてます。相手が少しゆっくり話してくれて、話すべき明確な用事(タスクとか、仕様とか)があれば、ちゃんと意思疎通できます。ほんの数年前まで2,3行の英語メール書くにも辞書引きながら10分とかかけてたのを思うと、また入社面接でも相手の言ってることが5%も理解できなかったのを思うと、大きな進歩だなと。


ただ、これまではどうも技術に逃げてしまってたところがありました。英語の勉強より技術の勉強、楽しい会話ができなくても技術で認めてもらえばいい、と。

これだとせっかくの「英語を使わざるを得ない環境」がもったいないので、会話量を増やすべく対策を打っていこうと思います。


この1年での達成度:実績面

まず、1年以上は働く、というのは目安として考えていました。日本と比べて社員をクビにしやすいアメリカでは、実力不足の社員はやはり切られます。1年いれば、ちゃんと通用した、といえるんじゃないかなと。これは達成です。


それとは別に「会社で技術力が認められている」ことが客観的にわかりやすい事実として、プロモート(昇進)しました。


採用時は Lead Software Engineer だったのが、Senior Principal Engineer になりました。


f:id:shu223:20171120075700j:image:w500

(新しくしてもらった名刺)


収入も当初のものから年収にしてn百万円上げてもらったので、サンフランシスコの会社で働き、貢献し、評価されている、というわかりやすい証明ができてよかった、と思っています。



ちなみにうちの会社、CEO、CTO、SVP Engineering、SVP Webのファウンダー陣全員が現役バリバリでコード書きます。これの何がいいって、エンジニアが正当に評価される、という実感がハッキリあります。


たとえばある時期、僕はiOSリポジトリのコードを抜本的に改善すべく、iOSチームメンバーのマインドから変えていかないと、ということでレビュー依頼が自分に振られていないものまで結構細かくコメントをつけていたことがありました。頼まれてもないのに人のコードにケチをつけるというのは下手したら相手から嫌われかねないし、自分でコード書いて新機能とかを実装する方がよっぽど楽しいのですが、どうしても必要だと思った(汚染が広がる一方なのを食い止めたかった)のでやってました。


で、そんなある日、CEOから「いつもグレイトなレビューをありがとう!」っていうメッセージが。


CEOがプルリクのレビューコメントを見て、しかもその良し悪しが評価できるって、良くないですか?これはやはり経営陣が現役でコード書いてるならではかなと思います。「昔はバリバリ書いてた」でも厳しいでしょう。あの機能をつくったとか、そういう見えやすい仕事以外での貢献も評価される環境はエンジニアにとって非常に働きやすいなと。


まとめ

まとめると、

  • 技術面・・・手応えあり
  • 英語・・・もっと話さないといけないけどそれでも進歩はあった
  • 実績面・・・アメリカで通用してるぞという明確なものが得られた

という感じで、ここまでの進捗は上々です。


ただこれはコミュニケーション力に難のある僕に対するファウンダー陣や同僚の理解/協力があってこその結果で、「おれはもう世界のどこでもバリバリやれる」という自信がついたかというと、まったくそんなことはないわけで。会社にも、アメリカにももっと食い込んでいけるようにならないとなぁ、というのが今後の要努力ポイントです。


*1:ARKitは、レンダリングはSceneKitや他のフレームワークに任せるようになっている

2017-09-20

ARKitのサンプルコード集「ARKit-Sampler」を公開しました

iOS 11のリリースと同時に、ARKitのサンプル集「ARKit-Sampler」をオープンソースで公開しました。


ARKit Sampler


f:id:shu223:20170920095943p:image:w300


ソースコードは GitHub に置いてあるので、ご自由にご活用ください。


https://github.com/shu223/ARKit-Sampler


使用言語はSwift 4.0です。


ARKitのサンプルは公式のを含めいろいろ出てますが、ARKit-Samplerでは「余計な実装を混ぜずに、できるだけシンプルな実装で伝える」というところに気をつけています。もともとは書籍執筆のために用意したものなので、とくに序盤のサンプルはシンプルで意図が汲みやすいと思います。


ビルド方法

  1. ここから Inceptionv3.mlmodel をダウンロードして mlmodels フォルダ配下に置く
  2. Xcode 9 でビルドしてiOS 11端末にインストール

基本的にビルドするだけですが、Core MLのモデルファイルをダウンロードする必要があります。



サンプル一覧

今のところ8個のサンプルが入っています。少ないですが、随時追加していきます。


3-lines AR

実質3行」のシンプルなAR。ARKitが簡単に扱えるということがわかります。


f:id:shu223:20170913155719j:image:w200


Plane Detection

ARKitの基本機能、水平面の検出方法を示したシンプルなサンプル。


f:id:shu223:20170913173302j:image:w200


Virtual Object

水平面に仮想オブジェクトを設置するサンプル。


f:id:shu223:20170913170249j:image:w200


AR Interaction

仮想オブジェクトや、検出した水平面に対するインタラクションの実装方法を示したサンプル。


f:id:shu223:20170920155917g:image


AR Measure

もはやARKitの定番実装例となっている、ARKitをメジャー(巻尺)代わりに使うサンプル。


f:id:shu223:20170913224145j:image:w200


AR Drawing

空中に絵や文字を書くサンプル。


f:id:shu223:20170825154724j:image:w200


Core ML + ARKit",

Core ML + Visionで認識したオブジェクトに対してARKitで「ARタグ付け」するサンプル。


f:id:shu223:20170909170336j:image:w200



Metal + ARKit

ARKitの描画にMetalを利用するサンプル。


f:id:shu223:20170904173246j:image:w200


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シリーズですが・・・今年はまだありません・・・つくるつもりはあります・・・!


2017-06-27

iOSの技術書をクラウドファンディングで執筆します - 共著者8人の紹介 #peaks_cc

「PEAKS」という技術書のクラウドファンディングサービスで、今日から9人の執筆陣によるiOSの解説書「iOS 11 Programming」のファンディングが始まりました。


f:id:shu223:20170626233655j:image:w600



9人の著者陣に僕も入ってるので、宣伝といえば宣伝なのですが、技術書大好きな自分としては、自分が入ってなくても絶対に買うであろう執筆陣/内容なので、いち読者としてもぜひとも成立して欲しいと思ってまして、本記事を書こうと思った次第です。


そう、念のため書いておきますが、クラウドファンディングなので、成立しなければ出ません😭

購入締切日時 2017年07月28日 23:59 までに、購入者数が目標の 500人 に達した時点で執筆開始となります。購入額の決済は、目標人数が達成された時点で行われます。(目標人数に達しなかった場合はプロジェクト不成立となり、決済は行われません。)


ページ内の著者コメントにも書きましたが、僕がお世話になった著書の執筆者であったり、いつもお世話になってる著名オープンソースライブラリのコミッタの方であったり、いつも素晴らしい記事を書かれている方であったり。期待しかない布陣なのです。


万が一それが伝わってなくても悲しいので、僕「以外」の方々についておこがましいですが簡単に紹介させていただきたいと思います。以下サイトに載ってる順に。*1


吉田 悠一 - Core ML

通称ソンソン(sonson)さん。「iOS SDK Hacks」のメイン著者のひとり。


iOS SDK Hacks ―プロが教えるiPhoneアプリ開発テクニック
吉田 悠一 高山 征大 UICoderz
オライリージャパン
売り上げランキング: 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さん。今年出版された「モバイルアプリ開発エキスパート養成読本」の著者のひとり。


モバイルアプリ開発エキスパート養成読本
技術評論社 (2017-04-11)
売り上げランキング: 38,762


iOSDC等のカンファレンスや勉強会でよく発表されていて、わかりやすくてためになる内容に定評がある方です。


加藤 尋樹 - Drag and Drop / Files と Document Based Application

通称すこんぶさん。try! Swiftの記念すべき第1回目に登壇されていました。

上記はすこんぶさんのブログですが、技術記事はいつも他の記事には書いてない「一歩踏み込んだ」内容で、めちゃくちゃ勉強になります。


川邉 雄介 - UIKitのガイドラインの変更点とAutoLayoutの新機能、アップデート

僕は川邊さんと呼んでますが、ID的にはjeffsukeさん。「よくわかるAuto Layout」の著者の方です。


よくわかるAuto Layout  iOSレスポンシブデザインをマスター
川邉 雄介
リックテレコム
売り上げランキング: 130,872


この本の紹介記事にも書きましたが、「こんなに詳しく、しかも噛み砕いててすごい」と驚く内容の良さでした。*3


ブログ記事もちょっと込み入った内容を綺麗に構造化してわかりやすく書くのが上手い方だなーと思います。


岸川 克己 - Core NFC / PDFKit / SiriKit

通称きしかわさん。きしかわさんです!Realm、try! Swiftの主催、色々な会社の技術顧問、KeychainAccessの作者等いろいろな顔がありますが、なんといっても岸川さんの勉強会等での登壇内容は、そのまま本にして欲しいぐらい詳しく、他で説明されてないような内容まで網羅されていて、それでいてわかりやすいです。


PEAKSクラウドファンディング第1弾は岸川さんの「Inside Swift」でしたが、ぜひとも成立して欲しい企画でした。目標部数が高すぎるからだ!と思わずPEAKSにアンケートでクレームを入れたぐらいでした😭


今回こそは成立させて、岸川さんの書く章を読みたいです。というか、「PDFKit」は何となく岸川さんが書きそうなイメージがありますが、「Core NFC」「SiriKit」というチョイスは個人的にはちょっと意外で、だからこそますます読んでみたい気持ちが高まります・・・!


所 友太 - HomeKit入門とiOS 11における新機能

僕は普通に「ところさん」と呼んでます。みんな持ってたあの「UIKit詳解リファレンス」を書いた方。


iPhoneプログラミングUIKit詳解リファレンス
所 友太
リックテレコム
売り上げランキング: 355,345


「よくわかるAuto Layout」の監修でもあります。あと #potatotips の創始者でもあります。


「UIKit本の次回作は書かないんですか?」と会う度に聞いてて「今書いてます!」と言ってたのに7年経ってもまだ出てないので、こういう機会でもないとなかなか書いてくれない気がしますw 所さんのHomeKit解説、ぜひ読みたいです。


永野 哲久 - Audio/Media関連 新フレームワークとアップデート

iOSのオーディオまわりをいじる人はみんな参考にしたあの「iPhone Core Audioプログラミング」の著者。


iPhone Core Audioプログラミング
永野 哲久
ソフトバンククリエイティブ
売り上げランキング: 88,410


2009年刊行ですが、オーディオ周りの低レイヤのAPIのうちのいくつか(大部分)はこの本にしか書かれてないことが多く、一時期は1万円を超えるプレミア価格がついてました。プログラミング界隈においてはだいたいの情報は英語が源泉ですが、この本をネイティブで読めるので日本語できて良かったーとまで思った一冊です。


この企画の話をいただくまで知らなかったのですが、実はPEAKSの中の人はこの永野さん。今回の発起人でもあります。


おわりに

もしかしたら個人的な思いがほとばしりすぎて宣伝にすらなってないかもしれません。。プロジェクトが成立(=購入者数が目標数に到達)してから執筆される本なので、ある程度内容については著者陣を信用してほしいということになりますが、ガジェット系等のクラウドファンディングと違って成立しなければ決済されないので、"支払ったけど本(電子書籍or紙の本)は届かない"ということはないのでその点はご安心いただきつつ、気になった方はぜひ応援の購入をしていただければありがたいです。



よろしくお願いいたします🙇🏻



*1:なお、紹介に出てくる著書はもちろん全て個人的に所有しております

*2:こういうの何て総称するんでしょう?

*3:「わかりやすいけど内容が薄い」、または「内容は詳しいけど公式ドキュメントの直訳でわかりにくい」(著者が咀嚼できてない)、というパターンは実際にたまに見かける

2016-09-29

フリーランスを休業して就職します

2014年からフリーランスiOSプログラマとして活動を始めて2年と8ヶ月。フリーランスという働き方は自分には最高にしっくりきてて、毎日楽しくお仕事させていただいてたのですが、色々とタイミングが重なりまして、タイトルの通り、いったん休業して「会社員」になることにしました。


どこに就職するのかと言いますと、サンフランシスコにあるFyusionというスタートアップにジョインします。


f:id:shu223:20160929075342p:image:w400


無事H-1Bビザが通りまして、ちょうど昨日、スタンプの押されたパスポートが郵送されてきたところです。


フリーランスとしての実績もまとめたいところですが長くなるのでここでは省略して、ご報告の意味でも、自分の考えを整理しておく意味でも、就職することにした経緯や理由等を書いておこうと思います。


経緯

上述しましたが、僕はフリーランスという立場を100%楽しんでいましたし、海外企業も含めて「就職」したいという願望はありませんでした *1


以下は今年の3月ごろの話です。当時の状況としては、

という感じで、「フリーランスとして」「日本をベースにしつつ」「たまに海外に」行けたら楽しいなというスタンスで動いていました。


投資家からのコンタクト

3月はじめ頃のある日、とあるベンチャーキャピタルの方から会いたいという連絡をいただきました。この時点では何の用事かわからなかったのですが、普通に考えて投資先のアプリ開発を手伝って欲しいという話だろうなと。


(VCの人とか上位レイヤーすぎて、末端で手を動かしてるエンジニアなんて駒としか思ってなさそう)・・・という勝手な偏見もありつつ、ちょっと疑心暗鬼のままお会いしたのですが、まずは自己紹介がてらそのVCの投資先について一通りご説明いただいて、これがまた僕的にはどの会社のプロダクトもおもしろかったわけです。*3


で、実は投資先の会社のCEOが僕と話したいと言ってきてる、と。(たぶんGitHubで見つけたんだと思います。それしか入り口がないので)


その会社がFyusionなわけですが、この時点でもう僕は少なくとも何らかの形で関わりたいと思うぐらいには惹かれていて(後述します)、でもどういう「話」なのかはわからないのでまずは話してみよう、という感じでした。


CEOとのスカイプ

その翌週ぐらいにCEOのRaduとスカイプすることになり、僕が次の用事があったので実質3分ぐらいしか話せなかった *4 のですが、その3分でRaduは、ユーと仕事をしたい、働き方はパートタイムでもフルタイムでもリモートでも希望通りでいいよと。で、僕は働くなら一緒に顔を突き合わせてやりたい、と。おおそれじゃあビザの申請マジで急がないといけないからすぐにファウンダー達と話してよ、と。


3分で一気に事が進みました。


ちなみにこのとき確か3月中旬ぐらい。H-1Bビザの申請は4/1にオープンして、一瞬で埋まります。そしてさらに僕が3月後半からドイツに行く予定があり、申請書類の準備期間は実質一週間ぐらいしかありませんでした。


ファウンダー陣とのスカイプ

メールで時間調整して、翌日の午前中にはファウンダー陣とスカイプすることになりました。


正直、グダグダ、どころか95%相手が何言ってるかわからなかったです。第一声でPardon?って言った気がしますが聞き返しても聞き取れないのでそれも言わなくなりました。


唯一、"Printer"とか特徴的な単語がひとつだけ聞き取れたりして、「Canon時代の仕事について聞いてますか?」と確認してしゃべる、みたいな感じでどうにかこうにか乗り切りました。


参考:


そしてオファー

とはいえ全然トンチンカンなコミュニケーションをしてたとは思うので、これは「ない」だろうなと思ってたら、スカイプの30分後だか1時間後だかにオファーのメールが!


条件を確認して、外出していた奥さんに電話かけて「〜ということなんだけどサインしていい?」って聞いて、サインして返送。あちらからもすぐにサイン入りのが返ってきました。


のべ2時間ぐらいのスピード就活でした。ビザ申請の期限という後押しがなかったらもっと迷っていたかもしれません。


Fyusionに惹かれた点

大きく分けて2点あります。

「欲しいスキル」が得られそうだった

僕が身につけたいと思っているスキルに、「英語」「コンピュータビジョン」「3Dプログラミング」「機械学習」があります。


で、Fyusionは、

  • CEOのRaduは、3D点群処理のオープンソース・プロジェクト「Point Cloud Library (PCL) 」の設立者
  • OpenCVのコミッタでもある
  • 他のファウンダー陣・メンバーもロボット工学・3Dコンピュータビジョン・機械学習とかの博士号もってる人がゴロゴロ
  • 提供しているサービスもそれらの技術をベースとしている
  • もちろん英語を使う

というわけで、全部揃っているなと。


やろうとしていることが腹落ちした

彼らは「空間写真」を撮るアプリ「Fyuse」というプロダクトを既に世に出していて、


f:id:shu223:20160929091526p:image:w300

(Fyuseのわかりやすい記事:動画ともパノラマとも違う“空間写真”ってなんだ? Fyuse創業者に話を聞いた | TechCrunch Japan


こういうものを撮影してソーシャル上にシェアできるアプリです。

f:id:shu223:20160929085556g:image:w200

(Fyuseの空間写真をアニメーションGIFに変換したもの)


このアプリは一見飛び道具感があるのですが、中では実際に撮影された動画とスマホの各センサの値から対象を3次元モデルとして解析しています。


f:id:shu223:20160929041931p:image:w600


上に貼った例をよく見ると、人間の向きと3次元のロゴの向きが一致していることがわかると思います。



これはいわば「普通のスマホのカメラを3Dスキャナにする技術」をSNSという使ってもらいやすい形で提供しているようなもので、


「3次元データがたくさんあれば我々の得意分野である3Dコンピュータビジョンの技術でいろんなおもしろいことができるぞ!」


というところに彼らのやりたいことがあります。単にギミッキーな写真撮影SNSをつくってるわけじゃないぞと。



たとえば最近では、このFyuseで撮ったデータをHoloLensでホログラム投影、みたいなことをやってたりします。


僕はハードウェアという「現実世界のモノ」と繋がるアプリの開発を色々やってきて、やはりその「現実世界を見る『目』」のところで技術的強みがあると楽しいよなー、ということを常々感じていたので、彼らのやろうとしていることは非常に腹落ちしたわけです。



あと、Fyuseは普通に撮影フォーマットとしてもかなり可能性があるんじゃないかと思っています。一見ギミッキーですが、写真よりも多面的に記録でき、動画よりも軽量で柔軟に閲覧でき、2Dだけど3Dモデル的な情報も持っているという点で、「空間を捉える」ためのフォーマットとして普遍的な良さがあるなと。


2ヶ月間リモートワークしてみてのPros/Cons

フリーランスでお手伝いしていたところは7月までに収束させて、8月からリモートで手伝い始めてます。当然Pros/Cons両方あります。

Pros
  • AVFoudation, Core Image, Metal/MetalKit/MetalPerformanceShaders, Acceralateと、iOSアプリ開発の中でも特に興味のある部分の実装に携われている
  • iOS 10とかの新機能を積極的に使っていく雰囲気がある
    • バージョン互換とかは後から考えよう、という感じ
  • CEO, CTO, その他ファウンダー陣全員が毎日ゴリッゴリにコードを書いている
    • 一番ソースを把握してるのは彼ら。
Cons
  • チャットの速さに全然ついていけない
    • 全部読んでたら仕事にならない
    • 流し読みしても情報量0%なのでもはやメンションくれない限り読んでいない
  • フリーランスとしての立場が恋しい
    • おもしろい仕事の話をいただいたり、おもしろいことをやってる人に会っても、そこから展開させられないのがもどかしい

サンフランシスコには引っ越しません

あっちに住んで仕事をしてもOKなビザを獲得したわけですが、家庭の事情もあり、基本的には東京にいます。今のところは、1ヶ月アメリカ(オフィス)、2ヶ月日本(リモートワーク)、ぐらいのつもりです。


が、変わるかもしれません。フリーランスとしての働き方も、最初はリモート指向だったけど早々にお客さんのところに行ってやるスタイルに変えたり、短納期案件が楽しいとかじっくりやる方が楽しいとか時期によって色々変遷があったりもしたので、日米往復生活もやりながら試行錯誤していくつもりです。


まとめ

というわけで、長くなりましたが、フリーランス生活をエンジョイしていたところで急に降ってきたご縁で大きく方向転換することになりました。


そもそもの目的である「身につけたいスキル」は身につくのか、アメリカと日本の往復生活は成立するのか、会議では全然聞き取れないだろうけど仕事になるのか等々、いろいろと不安もあります。通用しなくてすぐに逃げ帰ってくるかもしれません。


が、せっかくの機会なので、楽しみつつ色々と吸収してこようと思います!


*1:3年ほど前はありましたが

*2:詳細はこちら:iOSDCで発表しました『海外のiOSカンファレンスに登壇する - 完全版』 #iOSDC - Over&Out その後

*3:今回就職する会社ではないところで、その後アプリ開発をお手伝いしたところもあります。そこのプロダクトも相当ぶっ飛んでておもしろいので許可がとれたら紹介したい

*4:27分ぐらいRaduが会社の説明をしてて、残り3分になったところで「11時から別のスカイプあるんだけど・・・」とやっと切り出した

2016-09-02

iOSDCのリジェクトコンで『iOSとディープラーニング』について話しました

一昨日メルカリさんのオフィスで開催された iOSDC Reject Conference days2 で、「iOSとディープラーニング」というタイトルで登壇させていただきました。



大層なタイトルですが、僕はディープラーニングや機械学習について詳しいわけではなく、「これから勉強したい」だけの素人です。iOSDCのCFPではLT枠の場合はトーク概要を書く必要がなかったので、タイトルは大きめにしておいて、内容は勉強の進捗に応じて、という算段でした。


で、先週あたりから夜な夜なこのへんの勉強をしていて、

この次に「自分でモデルをつくる」というステップに進みたかったのですが、次から次へとわからないことがでてきて、結局「誰かがつくったサンプルを動かす」「拾ってきたモデルを使う」止まりの発表になってしまいました。


そこは引き続き精進してまいります、ということで、以下補足を。


iPhoneでInception-v3モデルによるリアルタイム物体認識を動かす

TensorFlowのInception-v3を使った一般物体認識のデモをiPhoneで動かしたときの動画がこちらです。


f:id:shu223:20160902082200g:image


最初 [Notebook] [Laptop] を認識していて、カメラが下の方にいくと [Computer Keyboard] の順位が上がり、リモコンを映すと [Remote Control]、メガネを映すと [Sunglasses] が候補の上に上がってきます。*1


パフォーマンスもなかなかではないでしょうか。(用いたデバイスがiPhone 6sなので、ちょっとずるいですが。。)


サンプルを試す手順の詳細は下記記事にあります。


iOS 10で追加されたニューラルネットワーク機能群

LT5分だったのでここまで話せなかったのですが、iOS 10では2つのフレームワークにニューラルネットワークを高速計算するための機能群が追加されました。


ひとつは BNNS (Basic Neural Network Subroutines) と呼ばれていて、Accelerate Framework に新規追加されました。Accelerate は CPUで高速計算を行うためのフレームワークです。


そしてもうひとつは CNN(Convolutional neural network) で、MetalPerformanceShaders Frameworkに新規追加されました。Metal Performance Shaders はGPUで高速計算を行うためのフレームワークです。


で、どちらも同じような用途の機能が用意されていて、素人からするとGPUで処理するほうが良さそう、と思うのですが、わざわざ2種類出してきたからにはきっと一長一短あるのでしょう。もっと詳しい方が書いた記事があり、その記事ではこれらの比較についてこう述べられています。

AccelerateとMetalは、非常によく似たニューラルネットワーク関数群を提供しているので、どちらを選択するかは、各アプリケーションに依存します。GPUは、通常、機械学習に必要な種類の計算には望ましい反面、データの局所性によって、Metal CNNのパフォーマンスが、Accelerate BNNSバージョンより劣る場合があります。GPUにロードされた画像上でニューラルネットワークを動かす場合、例えば、MPSImageと新しいMPSTemporaryImageを使うと、Metalの方が明らかにパフォーマンスが上です。


MPSCNNのサンプル

BNNSの方も公式サンプルはあるのですが、今のところMac OS X用のものしかありません。MPSCNNの方はメリットやパフォーマンスを把握するのに最適なiOS向け公式サンプルが2つ出ています。

  • MPSCNNHelloWorld・・・MPSCNNで手書き数字認識
  • MetalImageRecognition・・・MPSCNN+Inceptionモデルで物体認識

ちなみに"MPS"は MetalPerformanceShaders のプレフィックスで、CNN関連の機能にはMPSCNNというプレフィックスが付いています。


で、上の手書き文字認識の方(MPSCNNHelloWorld)がシンプルで非常に理解しやすく、最初の一歩にすごく良いです。ベータ期間中につきサンプルのスクショは控えます。


f:id:shu223:20160902080706j:image:w500


上の画像(発表資料p35)はWWDC16のセッションスライド内にあった多層ネットワークの概念図に、該当するMPSCNNのクラス名を書いたものですが、わりとそのまんまで、CNNの概念を理解していれば非常に使いやすそうです。

  • Convolution Layer(特徴量の畳み込みを行う層): MPSCNNConvolution
  • Pooling Layer(レイヤの縮小を行い、扱いやすくするための層): MPSCNNPooling
  • Fully Connected Layer(特徴量から、最終的な判定を行う層): MPSCNNFullyConnected

(参考:no title


iOS 9以下でも使えるオープンソースのDL/NNライブラリ

iOS 10の話ばかりしても現実感がないかもしれませんが、"ios deep learning" とか "ios neural" とか "swift neural" とかでGitHub検索するとOSSがざくざく出てきます。


そのうち、100スター以上ついているものをピックアップしてみました。


f:id:shu223:20160902080845p:image:w500


TensorFlowがサンプル含めObjC、C++であるのに対して、Swiftで書かれているものも多いですし、Metal or Acceleratedフレームワークで高速化してあるものも多く、充実している印象です。


が、いざ試してみようとすると、サンプルもなかったり、最近はメンテされてなさそうだったりで、実際に使えるのは実はあまり多くないのかも、とも思いました。


もっともスターが多くついている「Swift-AI」については下記記事で紹介しています。


ディープラーニングの基本概念を学ぶのに良かった本

発表内では触れてないのですが、ディープラーニングというか人工知能というかそういう系の話はWebに解説記事も多く、逆にどこから手を付けていいかわからない、という状態に長らく陥っていました。で、とある機会に会ったこの分野でゴリゴリやってる人に教えてもらったのが下の書籍です。


脳・心・人工知能 数理で脳を解き明かす (ブルーバックス)
講談社 (2016-05-27)
売り上げランキング: 6,089


人間の脳のしくみから読みやすい文章で紹介してあって、いきなり数式ベースの解説があると「また今度にしよう」となってしまう自分には入り口として最適でした。


今後の展望

TensorFlowにしろiOSのBNNS/CNNにしろ、学習済みモデルの中身というかフォーマットがよくわかってないので、次はそのあたりを調べたいと思ってます。


*1:このとき食べていたアイスクリームも見事に認識してくれたのですが、食べかけだったのでカットしました

2009 | 08 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2018 | 02 |