Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

【Techの道も一歩から】第28回「深層学習による物体検出で遊んでみる」

f:id:kanjirz50:20190104142720j:plain

こんにちは。DSOC 研究開発部の高橋寛治です。 新型コロナウイルス感染症対策では、外出自粛を徹底することが大事とされており、自宅でできる遊びを日々模索中です。

さて、今回は自宅のノートパソコンや物を使って、深層学習による物体検出で遊びます。 物体検出はなんとなく知っていただけなのですが、実際動かしてみると楽しいものです。

今回作るもの

リアルタイムでの任意の物体検出を作ります。 今回、検出したいものはゲームのコントローラー類です。

似たようなものばかり買って何になるのかと、家族に言われるかもしれません。 でも、物体検出器は似たようなものと文句を言わず、きっと種別を分けて認識してくれるはずです。

今回、リアルタイムの物体検出には、YOLO(You only look once)を用います。 YOLOはリアルタイム物体検出で最先端なモデルと言われており、扱いやすいツールキットを提供しています。

公式マニュアルの次の箇所を見れば進められるはずです。

環境構築

家のノートパソコンがNVIDIA製GPUを積んだWindowsですので、Windows上で環境構築を行います。

Darknet と呼ばれるニューラルネットワークフレームワークで書かれた YOLO ツールキットを用います。

Windowsでのセットアップですが、次のソフトウェアをインストールします。 括弧内は私がインストールしたバージョンです。 Visual Studioから順にインストールします。

その後、公式リファレンスのここに記載されているように、順に CMake や Visual Studio を操作し、darknet をビルドします。 CUDA や OpenCV が CMake で認識されているか忘れないように確認しておきましょう。 もし認識されない場合は、パスが通っていないかもしれないので、確認してください。

アノテーションツールもREADMEに書いてある通りに進め、ビルドします。

画像の準備

対象とするゲームコントローラをいくつか並べて、写真をいろいろな角度から十数枚撮影します。 そして、アノテーションツールで、アノテーションします。

f:id:kanjirz50:20200430190116p:plain

今回は12枚撮影し、5クラスとしました。

  • GC: 色違いのゲームキューブコントローラーやホリ クラシックコントローラー for Nintendo SwitchもGCコンとする
  • PRO: Proコントローラー
  • JOY: Joy-Con
  • SNES: スーパーファミコン コントローラー
  • XBOX: Xbox ワイヤレス コントローラー

枚数がかなり少ないですが、まずはお試しということで取り組みます。

学習

Yolo v4の事前学習済みモデルを用いて、追加で学習します。 ノートパソコン用のRTX2060で約10時間学習にかかりました。 GPUメモリが少ないため、バッチサイズ(batch=32)と画像サイズ(width=320, height=320)を変更しました*1。 コンフィグファイルは、クラス数に合わせていくつかの箇所を書き換えます。

f:id:kanjirz50:20200430193237p:plain

このようにだんだんとロスが小さくなります。

デモ

実際にWebカメラの映像をリアルタイムに物体検出してみました。 カメラを動かせるように、USBカメラを接続して物体検出した様子を動画化しました。

ノートパソコン用のRTX2060で約30FPS出ていました*2。 この映像中のXBOXワイヤレスコントローラー以外は、学習には含みません。

マリオカラーのゲームキューブコントローラーが見事に認識されています。

Joy-Conの色違いのグレーは、Xbox ワイヤレスコントローラーのブラックと角度によって間違えるようです。言われてみれば、ボタンの配置や形は似ているかもしれません。

スーパーファミコンコントローラのそっくりさんは、スーパーファミコンコントローラとして認識されています。 知らない人が見ると、スーパーファミコンコントローラと思いますね。

ただし、枚数が少ないことと学習データのバリエーションが少ないことから、違う背景の場所だと認識がうまくいきません。 また、全く別のものを持ってきても定義した5クラスに分類しようとします。

限定した場所かつ限定した物体の場合は、非常に強力に分類してくれそうです。

動かすのはやっぱり楽しい

カメラで動画を撮影し、その中に映っているゲームコントローラを検出できれば面白いな、と思って取り組んだところ、一日でここまで作ることができました。 物体検出のすごさと、お手軽さに感動を覚えました。

プログラミングはデータさえあれば何かできるため、自宅でできる遊びとしていいのではないでしょうか。 (中学生のころに出会っていれば夏休みはこれで無限に遊んでいたかもしれません笑)

▼本連載のほかの記事はこちら

buildersbox.corp-sansan.com

執筆者プロフィール

高橋寛治 Sansan株式会社 DSOC (Data Strategy & Operation Center) R&Dグループ研究員

阿南工業高等専門学校卒業後に、長岡技術科学大学に編入学。同大学大学院電気電子情報工学専攻修了。在学中は、自然言語処理の研究に取り組み、解析ツールの開発や機械翻訳に関連する研究を行う。大学院を卒業後、2017年にSansan株式会社に入社。キーワード抽出など自然言語処理を生かした研究開発に取り組む。

*1:Out of memoryで落ちました。TITAN RTX使ってみたい。

*2:カメラが30FPSまでなので、その制約かもしれません

© Sansan, Inc.