ABEJA Tech Blog

中の人の興味のある情報を発信していきます

長期インターンで凄腕エンジニアと動画解析プラットフォームをスタートアップした話

こんにちは、長期インターンの木村(@takuk_ultimater)です。ABEJAで働くのも気が付けば1年間が経ち、入社当初はフルスタックエンジニアを目指し専門領域を決めていなかったものの、今ではML大好きマンになりました。

私は2021年の3月から1年間機械学習やエンジニアリングを専門としお客様のDXを推進するData Science(DS)チームに所属し、ベータ版の動画解析プラットフォームであるMotionIOの開発に携わっています。また、社内ミーティングにも出席したり、週2回技術共有するBrain Stormingで月1で発表したりしています。他には、物体検出やXAIに関する業務のお手伝いもしました。業務外ではKaggleでチームを組ませていただき、 銀メダルを獲得する貴重な経験をしました。

メンターには、DSチームのチームリーダーであるAndyさんが付いてくれました。AndyさんはGoogleのCEOやTwitterのCTOを輩出しているインド工科大学を卒業していて、1年間指導してもらって分かったのですが、Andyさんは性格がとても良くて強過ぎます(語彙力のなさ)。 自分が読んだ最先端の論文は基本的に全部知っているし、問題に対するアプローチがラマヌジャン並みに天才的な閃きばかりです。MotionIOもフルスタックで1人で作っています。

こんなこれ以上ない恵まれた環境で、たくさんの優秀なエンジニアの方々やプロジェクトマネージャーの方々からはたくさんの大切なことを学びました。また、直接的な関わりはなかったものの社員全員が毎日参加し自分の好きな内容を発表する朝会では、全員から明るさをいただきました。気が付けば自分も深層学習に熱中していて、機械学習界隈で生きていくことを決めることができました。

そんな濃くて充実したこの1年間で携わった業務を今回紹介したいと思います!
(インターンのきっかけについては学生/社会人エンジニアインターンの心構え - Qiita)

MotionIOの機能改善・新機能の実装

ABEJAには、ABEJA Platformと呼ばれるAIを活用するにあたり必要となるアノテーション・学習・推論・分析・デプロイの全ての工程をワンストップで行えるプラットフォームがあります。AIに関わることであれば全てノーコードで行うことができるため専門的な知識を必要とせずAIを活用できるだけでなく、その作成したAIをクラウド・オンプレに問わずデプロイできます。また、デベロッパーの方には様々なAPIも提供しているためカスタマイズも可能です。

MotionIOは、動画解析に特化したベータ版のプラットフォームです。ABEJA Platformをバックエンドで利用するためにABEJA Platformで提供されている幅広い機能を用いることができるだけでなく、動画解析に絞った機能も提供しています。

MotionIOの分析結果画面

MotionIOは、動画解析のさまざまモデルが揃っており、動画認識モデルではSlowFast, AVT, X3D, MoViNet, ACAR, 自己教師あり学習手法ではTCC、3次元の姿勢推定モデルではST-GCNなど最先端のモデルもノーコードで扱うことができます。

導入実績としては、主に製造業で業務効率化のために作業の各工程を計測しデータとして蓄積することや作業における異常を検知することや姿勢推定により作業を特定することがありますが、取り揃えている数々のAIは動画に関する汎用的なタスクに用いることができるので、お客様の課題に柔軟に対応することができます。

MotionIOが解決できる課題

入社した当初の面談でシリコンバレーでエンジニアになることを漠然と目指していることを伝えると、英語が話せる環境を用意してもらえAndyさんがメンターとなりました。

初めてのタスクは、MotionIOに慣れるために、MotionIO上で実装されている自己教師あり学習手法TCCに大規模データでの効果検証を行うことでした。

TCCは, 2019年にGoogle ResearchとDeepmindにより発表された同じ工程を有する学習動画に特化した自己教師あり学習手法です。製造業の作業は同じ工程を踏むため相性が良く、推論は過去の工程を踏まえて行え、少量のラベルデータで学習することができます。

2つの動画を元に自己教師あり学習を行うTCC

データセットにはゴルフのスイング工程を分類するGolfDBを用いました。その当時は、大規模データをUI上では扱えなかったため, WebAPIを用いたり, MongoDBを直接操作して学習を行いました。

このタスクに3月いっぱい取り組みました。自己教師あり学習手法を知ったのが初めてだったので、当時はかなり苦戦しました。NoSQLのMongoDBも自分にとっては新しい概念だったので学習に時間がかかりました。しかし、このタスクが終わる頃には、コード構成にも慣れてやっと貢献できる状態になりました。

このタスクが終わったあたりから7月までは就活が本格化し出したため、UIの改善、デバグ、小さな新機能追加を主に行いました。

実装したアノテーションをcsvをダウンロードできる機能

8月は, 就活や授業で疲れていたので一ヶ月間お休みをいただいて別府の温泉で癒されていました。

9月からは、DSチームに所属し優秀な社員さんに感化されDSの面白さに再び気付き出したので将来的にデータサイエンスを専門領域として頑張っていくことを決めました。その旨をAndyさんに伝えると、AI関連のタスクをいくつも与えてもらいました。分析ページにCAMによる可視化を載せたり、T-SNEなどの可視化手法を載せたりしました。その他には動画認識モデルの調査を行ったり、大規模データを扱えるように処理速度が上がるようにリファクタリングしたりしました。

DS Brainstorming

DS Brainstormingは、DSチームに所属する各メンバーがそれぞれが関心がある領域に付いて説明したりプロジェクトで得た知見を共有する場です。お金がもらえて勉強できます。過去の発表では、Kaggle Masterの方によるKaggleで用いることができるBackboneの調査やAutoMLやFederated Learningなどの1人では学習しづらい分野を扱っていたりします。 私は、最新のGANに関する手法、物体検出手法、CAM手法、データ水増し手法の発表を行なっています。発表にはこだわりがあって、強々エンジニアの貴重な時間をいただく以上、しっかりした発表をしたかったので、発表の前にそのトピックの論文を必ず10本以上読むことを自分に課していました。そのおかげでこの1年間で200本以上の論文が読め、ML大好きマンになりました。僕は飽き性なので、自分で論文を読むとどうしても続かないのですが、Brainstormingがあったからこそ、最先端の研究に目を向け続けられました。

発表したスライドの一部

最後に

ABEJAで働いていることで、就活で高評価をいただいたり、ロールモデルになる方々に出会えて最高でした!!! 興味があれば、ABEJAでの長期インターンに応募してみてください!

careers.abejainc.com