【つくばチャレンジ2017】tinyYOLO,YOLO v2を使って対象人物検知モデルを学習させる

つくばチャレンジとは

「つくばチャレンジ」は、つくば市内の遊歩道等の実環境を、移動ロボットに自律走行させる技術チャレンジであり、地域と研究者が協力して行う、人間とロボットが共存する社会の実現のための先端的技術への挑戦です。(下記HPから引用)

つくばチャレンジ

大雑把に言うと、遊歩道2kmをロボットに自律走行させるコンテスト。そのコンテストの課題の中に、エリアのどこかにいる探索対象を発見し、その探索対象に向けてロボットをアプローチさせるという課題がある。
今回、探索対象の検出部分担当として、土浦プロジェクトというチーム名でつくばチャレンジに参加し、探索対象全員の検知に成功したので、その概要を示す。

f:id:t_nkb:20171217181611j:plain
探索対象

つくばチャレンジ2016における成果と課題

つくばチャレンジ2016では、sliding window、CNNを使用して、THETAの全方位画像から、看板が領域内にあるかどうかを識別させることで、探索対象の看板を検出した。
sliding windowとCNNを用いて検出を行う方法は、認識精度は比較的高いが計算負荷が大きく、画像サイズを64*1280ピクセルに縮小して検出させても、JetsonTX1でおよそ3FPS程度が限界であり、探索対象を検出する前にロボットが探索対象を通りすぎてしまうことがあった。
よって、今年度はより高速なR-CNN手法であるYOLOv2,tinyYOLO(Darknet: Open Source Neural Networks in C)を用いて探索対象を検出させることとし、それぞれのモデルにおいて精度の評価を行った。

昨年度のまとめは以下↓
t-nkb.hatenablog.com

学習データの作成

検出モデルを構築する上で最も問題となるのが、学習データをどう集めるかという点である。
特にR-CNNで学習させるためには、画像一枚一枚に対して位置情報等のアノテーションを付与する必要があるが、作業時間が限られていることから、作業できる枚数には限界がある。
そこで、昨年度同様、Deep Learningで用いるデータを「生成」してみた | 技ラボを参考として、探索対象の透過画像20枚と、つくばチャレンジ走行ルートで撮影した背景画像500枚を用いて10000枚の合成画像を作り、学習データとした。
また、画像中から小さな対象物を見つけるためには、Context(探索対象は地面の上に立っている、等の探索対象周辺の文脈情報)が重要だという報告がされている([1612.04402] Finding Tiny Faces)ことから、合成時にカメラの幾何拘束を考慮し、可能な限り現実に近い学習データとなるように考慮して合成を行った。

f:id:t_nkb:20171217174159p:plainf:id:t_nkb:20171217174207p:plainf:id:t_nkb:20171217174229p:plainf:id:t_nkb:20171217174317p:plainf:id:t_nkb:20171217174234p:plain
探索対象の画像例

f:id:t_nkb:20171217175449p:plain
合成画像例
#本画像はContextを考慮"していない"バージョンの合成画像
 Context考慮版では現実にはあり得ない位置(上記画像の中央画像の様な位置)には人を合成しない

YOLOによる学習

Start Training YOLO with Our Own Data - Guanghan Ning's Blogを参考に、上記で作成した画像を、1クラスのR-CNNとしてYOLO,tinyYOLOで学習させた。
学習データサイズは224*1280ピクセル固定とし、バッチサイズ32で25000エポック学習させた。
(注)YOLOに特化したテクニックではあるが、学習モデルを定義するcfgファイル中のrandomの項目を有効にすると、学習データを320*320ピクセル等の複数のサイズにリサイズして学習する。この項目は、ある程度正方形に近い画像を学習させる際には、探索対象のサイズ変化によるロバスト性が上がるため有効とした方が良いが、今回のような、224*1280ピクセルという長方形の学習データに適応してしまうと、逆に性能が悪化してしまうため注意が必要である。

モデルの評価

上記で作成したモデルを、実際のログデータを用いて評価した。テスト精度を向上させるために、多くのテスト画像を用いて評価を行いたいが、学習データの作成同様、画像一枚一枚に対して位置情報等のアノテーションを付与することは非常に時間がかかる。
そのため、「作成したモデルの検出に成功した場合、bounding boxの位置は正しい」という前提を置き、テストデータのアノテーションとして、探索対象が「いるか」、「いないか」、という情報のみを付与し、検出・非検出のRecognition問題としてモデルを評価することとした。
このように検出・非検出のRecognition問題として評価することで、テストデータを安易に大量に生成し、評価することができる。
上記の通りアノテーションを付与した探索対象がいるデータ111枚と、探索対象がいないデータ1000枚を用いて、各モデルの評価を行った。その結果を以下に示す。
このように体系立てて評価することで、以下のことが判った。
・YOLOv2,tinyYOLO共に、合成画像を看板⇒看板+人⇒看板+人(Context考慮)と、探索対象と対象情報周辺の情報(context)を増やすことで精度が向上する
・学習画像が同じであれば、モデルによる精度の差はほとんどない

モデル 合成画像 精度(Precision) 再現率(Recall) TN 処理時間(TX2,1枚)
sliding window+CNN 看板 76.2% 43.2% 98.5% 0.35s
tinyYOLO 看板 81.0% 27.0% 99.3% 0.18s
tinyYOLO 看板+人 88.3% 61.2% 99.1% 0.18s
tinyYOLO 看板+人(Context考慮) 90.9% 63.0% 99.3% 0.18s
YOLOv2 看板 87.3% 43.2% 99.3% 0.22s
YOLOv2 看板+人 91.3% 56.8% 99.4% 0.22s
YOLOv2 看板+人(Context考慮) 91.9% 61.2% 99.4% 0.22s

本走行の結果

つくばチャレンジ2017の本走行では、tinyYOLO(看板+人)バージョンを使用し、TX2上で動作させることで、対象人物全員の検知に成功した。
(Context版は本走行後に評価を行ったため、性能がいいにもかかわらず本走行では使用できなかった)

まとめ

つくばチャレンジ2017において、tinyYOLOを採用し、学習済みモデルをRecognition問題として評価することで性能の良いモデルを選定し、探索対象4人全員の検出に成功した。
ただし、今回探索に成功したのは、つくばチャレンジ2017の課題において、「探索対象は必ず看板の隣にいる」という画像処理しやすい条件が設定されていたためであることが大きく、「迷子の子供を探す」といったより現実に近い課題設定になると、現在の手法の延長では対応できなくなる可能性が高いと感じている。
このような実環境に近い課題を解くためには、現実に近い学習データを生成するsimGAN等、より高度なデータオーグメンテーションが必要になると感じている。