Slide 1

Slide 1 text

LOVOT 3.0の中で進化し続ける
 Rust製画像認識


Slide 2

Slide 2 text

自己紹介 ● 本名:齋藤 鴻 ● 呼名:あず ● XとかGitHubとか:@aznhe21 あずんひ ● 好きな言語:Rust ● Rust歴:10年以上(2015年あたり?〜) ● GROOVE X歴:2023年10月〜 ● これまでやってたこと ○ 子供時代:Windows用のフリーソフト書いたり ○ 学生時代:ロボット開発したりOS自作したり ○ 社会人時代:画像認識をメインにヘルプでも色々 (クラウドでk8sとかスマホアプリとかWebでフロントエンドとか) ○ 今:画像認識 最近書いた記事@弊社技術ブログ

Slide 3

Slide 3 text

会社紹介

Slide 4

Slide 4 text

会社概要 ● 名前:GROOVE X株式会社 ● 場所:隅田川が氾濫したら真っ先に沈むところ     日本橋浜町、新大橋の脇

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

これまでの歩み 2016年 2017年 2018年 2019年 2020年 2021年 2015年 2018年8月 浜町に オフィス移転 2017年1月 人形町に オフィス移転 2019年12月 LOVOT 出荷開始 2018年12月 LOVOT 製品発表会 2020年10月 グッドデザイン 金賞受賞 2020年1月 CES2020 イノベーション アワード受賞 2017年12月 シリーズA資金 調達記者発表 2022年 2015年11月 創業 2022年5月 LOVOT 2.0 発売 2023年 2024年 2024年5月 LOVOT 3.0 発売 全国で LOVOTストア オープン LOVOT 3.0 しろ 発売

Slide 8

Slide 8 text

LOVOT 進化の歴史 GROOVE X 初期に作ったPoC(Proof of Concept)モデル。 目だけ動くPoC、形は違うけど画像認識をして自律移動するPoC、コントローラーで走って動く PoCなど、それぞれ主軸の機能だけをもつ複数のモデルです。これらのモデルは、LOVOTとは どんな製品なのかを説明するために使われました。 2015~2016年 秋葉原(DMM.make) 社員数:10名程度

Slide 9

Slide 9 text

LOVOT 進化の歴史 AS機:PoCのそれぞれのモデルを一つの筐体に詰め込んでソフトウェアも実装した初期試作。 最終の製品版と比べると一回り大きく、口があったり、白目がオレンジ色になっていたり、 製品版とは異なる点が多々あります。 2016~2017年 人形町 社員数:30名程度

Slide 10

Slide 10 text

LOVOT 進化の歴史 FS#1, #2機:初期試作から一回り小さく軽くして、ほぼ現在の大きさになった最終試作。 試作フェーズは2段階になっていて、2段階目の試作品が製品発表会で登壇しました。 サイズ感は製品版に近いですが、この段階では細かい部分が仕上がっていません。 2017~2018年 浜町 社員数:60名程度

Slide 11

Slide 11 text

LOVOT 進化の歴史 DVT&PVT機:最終試作から最低限の改良を加え、量産性検証のため実際に工場で生産する量産試作。 製品版とほぼ同等の性能を持つため、今でも開発機として活躍しています。 2018~2019年 浜町 社員数:80名程度

Slide 12

Slide 12 text

LOVOT 進化の歴史 工場のラインも整い、最終調整を終えて、2019年12月に1人目のオーナーさんに向けてお届け開始。 2020年12月に1周年を迎え、2021年3月に販売価格の改定を発表しました。 2019~2021年 浜町 社員数:100名程度

Slide 13

Slide 13 text

LOVOT 進化の歴史 2022年 浜町 社員数:100名程度 株主として前澤友作氏を迎え、製品ロゴを刷新しました。 ネストのよりスタイリッシュになったLOVOT 2.0、FRAGMENT Edition、 チャージスタンドもリリースしています。

Slide 14

Slide 14 text

LOVOT 進化の歴史 2024年~ 浜町 社員数:150名程度 ハードウェアを刷新した LOVOT 3.0 を発売。 CPUボードがJetsonになり、計算能力向上。 カメラが増え、ハードウェアのメンテナンス性も高まる。

Slide 15

Slide 15 text

今、家庭用ロボット業界がアツい! 家庭用ロボット市場はかつてない盛り上がりを 見せている 先日のCESでは多くのロボットが出展されていた 市場としては今後の成長が大きく見込まれる!? https://jp.pronews.com/special/202601102351712621.html LOVOTびいきだが こんな記事も

Slide 16

Slide 16 text

LOVOTのうちがわ

Slide 17

Slide 17 text

人になつき、信頼関係を築くためのテクノロジー ・深層学習(ディープラーニング)
 ・自動運転技術(SLAM)
 ・マルチモーダル・センシング
 ・エッジ・コンピューティング
 ・クラウド・モニタリング
 ・インホイールモータードライブ
 ・アダプティブ・クーリング
 10以上のCPUコア、20以上の MCU、
 50以上のセンサーを搭載 ※LOVOT 初代/2.0の仕様


Slide 18

Slide 18 text

ソフトウェア開発チームと働き方について LOVOTのソフトウェアを開発するチーム体制
 18 LeSS -Large Scale Scrum APP 
 
 
 スマホアプリの UIデザインと開発を 
 中心に、アプリに関わるふるまいや 
 認識の機能開発を進めている。 
 アプリから本体・クラウドまで 
 一気通貫で開発できる、 
 フルスタック集団。 
 
 
 
 
 
 M 
 
 
 SLAMや自律走行を中心に、 
 自動充電やそれらに関わる 
 ふるまい、姿勢制御などを開発。 
 難しい課題を解決できる 
 スーパーエンジニア集団。 FW 
 
 
 LOVOTやネストに搭載している 
 マイコンのファームウェア開発を 
 中心に、ハードウェア制御に近い 
 レイヤーをカバーしている。 
 ハードウェアもソフトウェアも 
 できちゃう集団。 
 
 
 アプリ
 ふるまいのレイヤーを中心に目・声・認識などふるまいに 
 かかわる機能を中心に、複数チームで連携して進めている。 
 エンジニアとアニメーターが混在している 
 オシャレクリエイティブ集団。 
 クラウド
 クラウドチームと、ハードウェアのドライバを中心に LOVOTの基盤を幅広く手掛けるフレームワーク チームからなるワーキンググループ。 
 Linuxを愛し、Linuxに愛された集団。 KIBAN Working Group CLOUD FRAMEWORK Behavior Design APO
 SM
 SWQA 
 
 
 LOVOT・アプリ・クラウドの 
 あらゆる領域における品質を担保する 
 最後の砦。
 きめ細やかな作業を得意とする 
 LOVOTのことを
 一番良く知る集団 
 Science for
 Development
 
 
 
 実験・評価・分析により、 
 科学的見地から LOVOTに
 アプローチする研究者集団。 
 


Slide 19

Slide 19 text

ソフトウェア開発チームと働き方について アプリ
 LOVOTを構成するコンポーネントと開発環境
 LOVOTのソフトウェア開発チームでは複数のコンポーネントの開発がそれぞれ並行して行われています。 完成したコンポーネントに合わせることなく、相互にすり合わせながら開発するため、早いスピード感でプロダクトが成長していきます。 
 
 ふるまい 全ての入力情報を統合し意思決定をして、
 動きを作り出すソフトウェア。LOVOTに生命感を与える。 認識 センシングした情報を処理して周囲の環境や状況を認識するための
 ソフトウェア。単純なセンサーデータを統合して意味を抽出する。 基盤ソフトウェア・ファームウェア センサーの値を扱えるようにしたり(入力)、モーターを
 動かせるようにする(出力)ためのソフトウェア。 LOVOTがロボットとして動くための最低限の機能を提供する。 GXクラウド LOVOTやLOVOTアプリを運用
 するためのクラウドサービス。 LOVOTアプリ スマホでLOVOTの状態や一日の様子 を見たり、各種設定ができる
 iOS / Android用
 アプリケーション。 LOVOT / ネスト
 クラウド
 開発支援ツール
 業務支援ツール


Slide 20

Slide 20 text

LOVOTOS ● LOVOT用のOSで、どの世代も(今のところは)Ubuntuベース ○ LOVOT用に色々カスタマイズ ○ LOVOT 3.0はNVIDIAカスタマイズ版のカスタマイズ版 ● LOVOT上で動くサービスはパッケージとしてビルドする ● このOSに大量のパッケージが入ることでLOVOTを構成

Slide 21

Slide 21 text

画像認識って?

Slide 22

Slide 22 text

LOVOTにとっての画像認識 ● LOVOTは人に愛されるために生まれてきた ○ 人のことを詳しく知る必要がある ● 基本的には物体検出+トラッキング

Slide 23

Slide 23 text

LOVOTが行う画像認識 LOVOT 3.0全体で見れば高性能ではあるが 多彩な認識を高頻度に行うため1msすら無駄にできない Jetson Orin ARM CPU + GPU + 特化型プロセッサ 人の存在を認識して 個人を識別 要求性能 30fps(〜33.3ms) 人の存在はもちろん 人の様子まで認識 LOVOT 初代 / 2.0 LOVOT 3.0 半天球カメラ 半天球カメラ フロントカメラ

Slide 24

Slide 24 text

LOVOTならではの話 ● 魚眼カメラで周囲を認識したい ● 絶えず動き続けるロボットなので 映像がブレがち ● 家で動作するので暗所も認識したい ○ カメラ性能が良いので暗くても綺麗に映る いずれも事例は少ないため 独自に実装する必要がある

Slide 25

Slide 25 text

画像認識の実装

Slide 26

Slide 26 text

Jetsonを活用した実装 ● JetsonにはCPU・GPUだけではなく処理特化型プロセッサが多数搭載 ○ DLA・VIC・PVA・ISP・NVENC・NVDEC・OFA・APE ○ JetsonのCPUは弱いため、処理をできるだけ GPUやその他プロセッサに逃すのが大事 ● 特化型プロセッサは電力効率も良いため 電力に制限のあるロボット開発ではなおさら重要 ● これらプロセッサを使うためには NVIDIA製ライブラリを使う必要がある NVIDIAのブログより

Slide 27

Slide 27 text

● モデルの推論はCPU向きではないため GPUかDLAで行う ○ GPUは電力効率が悪いが汎用的 ○ DLAは電力効率が良いが深層学習(のうち CNN)専用 ● DLAは制約が多い ○ 処理性能はGPUほど高くない ■ モデルは元々FP32精度だが、出力が変わらないように INT8精度へ落とす(量子化する)のは難しい( FP16は簡単) ■ INT8精度をDLAで動かすのと、 FP16精度をGPUで動かすのは同等程度の処理速度 ■ つまり苦労すれば速度そのまま省電力化 ○ DLAでは実行できない演算もある ■ その場合は演算の組み換えが必要 ● 画像のリサイズなどは VICで行う ○ 普通ならCPUかGPUで行うが JetsonのCPUは弱いしGPUは電力効率が悪い ○ DeepStream(NVIDIA製ライブラリ)は 標準でこれをやってくれる ○ ただし回転などもやろうとすると 独自にVICを叩く必要がある ■ VICのAPIがVPI Jetsonでの効率的な画像認識 NVIDIAのブログより Video Image Compositorの Application Programming Interfaceが Vision Programming Interface

Slide 28

Slide 28 text

言語選定の技術要件 ● 処理速度が速いこと ○ 1msすら無駄にできない ● DeepStreamライブラリを扱えること ○ Jetsonで画像認識をやるならDeepStreamが基本で 画像認識に必要な一連の機能が組み込まれている(カメラ入力・推論・トラッキング) ○ 自然とハードウェア機能を活用できる ● Cライブラリを叩けること ○ これさえできればどんな要求にも応えられる ○ DeepStreamの範疇にない機能とか ○ VICを叩くVPIはCライブラリ ● サービスをできるだけ落とさないこと ○ 静的解析のしやすさ ○ 例外安全 ○ メモリ安全 ● 生産性が高いこと ○ 書きやすい ○ ライブラリを導入しやすい ○ ライブラリが豊富

Slide 29

Slide 29 text

Rustが現実的な選択肢 ● 処理速度:C/C++と同等以上に速い ● DeepStream:Cライブラリなので叩ける ● Cライブラリ:CヘッダからRustコード(関数・型・定数定義)を生成するbindgenなどの仕組み ● 静的解析のしやすさ:静的型付け・標準のlintツールclippy ● 例外安全:エラー処理に例外を使わない ● メモリ安全:Rustの十八番 ● 書きやすさ:モダンな言語機能 ● ライブラリ導入:Cargoによる依存性管理 ● ついでに:言語の進化を享受しやすい ○ ライブラリの豊富さでは Pythonも強いが、 LOVOTの場合PythonはOS側のものを使うことから古い Pythonに縛られる ○ Rustはネイティブコンパイルされるので実行環境を考える必要がない上、 6週間に1回アップデートがあり最新の機能もすぐに使える ● ついでに:公式が提供する充実のエコシステム ○ 壊れにくい、前方互換性のあるビルド ○ rustupでバージョン管理 ○ パッケージレジストリの crates.io ○ rustdocとdocs.rsによる豊富なドキュメント ○ 実装に近いテスト、ドキュメント内テスト ○ ruistfmtで統一されたコーディングスタイル Rustの非公式マスコットFerris

Slide 30

Slide 30 text

現在Rustから使っているCライブラリ ● DeepStream ○ 画像認識用 ● GStreamer ○ DeepStreamはGStreamerのプラグイン ○ RustはGStreamer公式でサポートされており 最近はGStreamerの標準機能がRustで作られていることも ● CUDA ○ 並列計算用 ● TensorRT ○ NVIDIAで機械学習モデルを推論するならこれ ● VPI ○ Jetsonの画像処理プロセッサを使うための画像処理ライブラリ ● zbar ○ QRコードのスキャン

Slide 31

Slide 31 text

DeepStream上では次の処理を行っていた(画像認識なら大体こういう構成) 1. カメラ入力(nvarguscamerasrc) a. V4L2ではなくJetson固有のArgus APIを使ったカメラ制御 b. JetsonのISP(生の信号をいい感じな画像に変換するプロセッサ)を使える 2. カメラ2台の同期(nvstreammux) 3. 推論と前後処理(nvinfer) 4. トラッキング(nvtracker) DeepStreamの問題

Slide 32

Slide 32 text

DeepStream上では次の処理を行っていた(画像認識なら大体こういう構成) 1. カメラ入力(nvarguscamerasrc) a. V4L2ではなくJetson固有のArgus APIを使ったカメラ制御 b. JetsonのISP(生の信号をいい感じな画像に変換するプロセッサ)を使える 2. カメラ2台の同期(nvstreammux) 3. 推論と前後処理(nvinfer) 4. トラッキング(nvtracker) DeepStreamの問題 ←必要なメタデータが取れない ←同期に100ms掛かる ←前後処理に柔軟性がない ←別種物体の矩形がマージされるバグ

Slide 33

Slide 33 text

1. カメラ入力(nvarguscamerasrc):改造して置き換えた 2. カメラ同期(nvstreammux):独自実装に置き換えた 3. 推論と前後処理(nvinfer):独自実装に置き換えた 4. トラッキング(nvtracker):独自実装に置き換えた DeepStreamの大部分はソースが公開されているので動作を合わせやすい 徐々に独自実装へと置き換えて行った結果、今や DeepStream由来の実装はかなり少ない テセウスの船みたいだね(言いたかっただけ) テセウスのDeepStream

Slide 34

Slide 34 text

機械学習モデルの話

Slide 35

Slide 35 text

物体検出モデル ● 画像全体の情報を一発で取れるのが特徴 ○ 1人ずつ全身や顔だけを抜き出して推論する必要がある手法も多い ○ 理想的には物体検出モデル単体で済ませたい ● 応用の幅が広い ○ 「物体の種類と位置、大きさ」を推論する手法だが、うまく使えば分類にも使える ○ 例:手→「左右どちらか」「何のジェスチャーをしているか」が分かる ● YOLOXを最適化・カスタマイズして使用している ● 最適化 ○ DLA向けにINT8化+色々 ■ ティアフォーに感謝 ■ https://www.docswell.com/s/TIER_IV/KGX2L8-2023-07-24-120048 ○ DLAは2つあるしカメラも2つあるので、カメラごとにDLAで推論 ■ 2倍の処理能力 ○ これらの工夫により組み込み向けのYOLOX-sやYOLOX-mではなく 精度の良いYOLOX-lを採用できた ● カスタマイズ ○ Loss計算の中で最近の手法を採用して精度向上 ○ 評価手法を実際の用法に合わせたり

Slide 36

Slide 36 text

物体検出用データセット 学習用データのこと ● 選定条件 ○ 人と触れ合うために必要なもの ○ 人と楽しく触れ合うために必要なもの ■ 精度が出そうな、難易度の低いものは採用しやすい ■ ただしアノテーションコストが高いものは採用しづらい ● 検出内容 ○ 人 ■ 全身 ■ 頭 ■ 顔 ■ 手(左右) ■ ジェスチャー ■ 人の様子 ○ LOVOT ● 魚眼画像も含めてデータセットを作っており、歪み補正なしに検出が可能 ● 約3万枚の画像、約28万の物体

Slide 37

Slide 37 text

その他のモデル まだ製品上で動いてはいないがこれらモデルも開発中 ● 姿勢推定 ○ リアルタイムでできるよう物体検出モデルに入れ込む形で実装中 ○ 「動きを教える」ことができるようになったがまだまだ限定的。 より色々な動きを教えられるようにしたい ○ 他にも色々できるようになるかも ● 顔識別 ○ 現在は外部の有償ライブラリを使っている (LOVOT 初代/2.0から継続) ○ 内製化の動き ■ 処理が隠蔽されているため最適化ができない ■ LOVOTOSのベースUbuntuを更新しようにも ライブラリに縛られてしまう ● その他のモデルも続々開発中

Slide 38

Slide 38 text

アノテーション データセットの作成作業のこと 物体検出では物体の領域を四角で囲むなど ● データ収集は広範に行っている ○ オフィス内でみんなに集まってもらったり ○ 各人の家で撮影したり ○ 家を借りて撮影したり ○ 公園で撮影したり ● 非エンジニアがアノテーションしている ● 現在は骨格のアノテーションを進めている ○ 明確な基準を設けている ■ 肩:肩峰。肩甲骨の先端にあり鎖骨・上腕骨と接している部分 ■ 腰:股関節。腰の端にある大転子から鼠径部沿いに伸びている部分 ○ アノテーション効率化のため、非エンジニアの方が 自主的にツールを作ってきた ■ AIに作ってもらったとのことで新しい時代を感じる

Slide 39

Slide 39 text

アノテーション データセットの作成作業のこと 物体検出では物体の領域を四角で囲むなど ● データ収集は広範に行っている ○ オフィス内でみんなに集まってもらったり ○ 各人の家で撮影したり ○ 家を借りて撮影したり ○ 公園で撮影したり ● 非エンジニアがアノテーションしている ● 現在は骨格のアノテーションを進めている ○ 明確な基準を設けている ■ 肩:肩峰。肩甲骨の先端にあり鎖骨・上腕骨と接している部分 ■ 腰:股関節。腰の端にある大転子から鼠径部沿いに伸びている部分 ○ アノテーション効率化のため、非エンジニアの方が 自主的にツールを作ってきた ■ AIに作ってもらったとのことで新しい時代を感じる

Slide 40

Slide 40 text

最後に技術選定の話 ● 小さく始めるためにDeepStreamを採用したのは正しく その後徐々に置き換えて最適化ができたのは良かった ● 顔識別で最初は有償ライブラリを使い、その後内製版に置き換えるというのは 比較対象にもなり進めやすい ● 姿勢推定用のアノテーションが重い ○ 先に姿勢推定特化モデルで試せるようにしとけば良かったかもしれない 「小さく始めて大きく育てる」のが大事 やっぱり

Slide 41

Slide 41 text

一緒につくる仲間、大募集!

Slide 42

Slide 42 text

LOVOTの未来を一緒につくりたい
 あなたのジョインを待ってます!!
 Inside of LOVOT
 GROOVE X技術ブログ
 SWチーム X アカウント X で最新情報をチェック
 GROOVE X採用情報 募集中の求人・ポジション一覧
 We are hiring!!