[[太田研 公開用Wiki]] *自律走行ロボットのための深層学習による物体認識 [#dfba4831] #contents *はじめに [#a31636ba] 本章では,初めに研修背景としてつくばチャレンジという実験走行会について記述した後,それを踏まえて研究目的について説明する. **つくばチャレンジ [#eb58f74b] 人間と共存するロボットの技術開発及び発展の為に,様々な大学や企業によりつくば市で行われている公開実験として「つくばチャレンジ」という実験走行会がある. つくばチャレンジは「人間とロボットが共存する社会の実現」ということを目的とした自律走行ロボットの技術開発及び発展のための複数による公開実験であり,参加者各々が自律走行できるロボットを試作してつくば市内において実験を行い,様々な方式を試した後にその方法や結果を共有することで,技術者達の交流とそれによるロボットの技術レベルを向上させることを目的としている.昨年行われたつくばチャレンジ2018は,ロボットに自律走行させることで,つくば市役所の構内から始まる横断歩道や信号を渡り,近くの公園へ行ってその公園内の決められたスポットを回るコースを走行させたり,途中のエリアにおいて特定の服装の人間を探索し発見するという課題の達成を目指すものであった. 以下の図1.1につくばチャレンジ2018のコースを示す. CENTER:#ref(tsukuba_cource.png,center,65%) CENTER:図1.1:つくばチャレンジ2018のコース **つくばチャレンジのロボットにおける移動補助のための物体検出 [#m4d4c854] つくばチャレンジのロボットは自律走行であるため,予め設計されたプログラムに基づいて走行している.そのため,予めどのような状況があり,またその場合にどのような行動をするなどと言ったことが想定されプログラムとして組み込まれている場合が多い.例としては,ロボットの進行上に人やモノなどの障害物があった場合や,信号や横断歩道などがあった場合などである. しかしながら,ロボットはそのままだと物体の種類の分別はおろか,物体と非物体の区別すら付けられないため,物体に対してどのように対処するかを決めるプログラムだけでは行動できない.そのため,ロボットが物体を認識できるように,物体検出のプログラムを組み込む必要がある. これには先行研究が多くある.何故ならば,一つのプログラムにおいて原則1つの物体を検出しているため,走行中様々な状況が想定されるロボットの自律走行においては多種多様な物体の検出が必要になるからである. 例を2つほど上げよう. 先ず一つ目としては,参考文献 [1] の信号検出手法の研究である.この研究ではつくばチャレンジにおけるロボットの自律走行時に歩行者用信号付きの横断歩道を渡ることがありうるため,歩行者用信号を検出し,色により赤信号か青信号かを識別して検出するプログラムを作成している.コストが軽く検出率も90%近くではあったが,逆光が差し込んでいたり,秋口のために紅葉した落ち葉があったりした場合など環境が少し変わると未検出及び誤検出となっていた. 二つ目としては,参考文献 [2] の特定人物検出手法の研究である.この研究ではつくばチャレンジにおける課題の一つである人物探索及び検出を達成するために,探索対象となる人物の横においてある看板を検出することで擬似的に人を検出しようとしている.手法としては,板の反射強度の違いを用いて,3次元レーザ測域センサを照射し反射させ一定以上の閾値の反射光をクラスタリングすることで,看板の反射強度と同じ物体を看板と考え,検出している.これならば天候や気候の条件や人の顔などに関係なく,人物検出をできているように見える.しかしこれは看板の材質などが予めわかっている必要がある上に,人物検出ではなく看板検出である為,つくばチャレンジの趣旨とは少し異なっている. これらに共通する利点としては,シンプルなため比較的コストが軽く,どのようなスペックの計算機でも大して負荷をかけずに高速で運用できる点である.しかし,1つ目の研究においては信号,2つ目の研究においては特定人物といったように特定の物体のみしか検出できず,汎用性に乏しい.もしこれらの研究を元にして他物体を検出しようとするならば,プログラムと値の調整をこなさなければならないし,2つ目に至っては検出する際の状況から近くにある特徴的な反射率を持つ物体を予測し,その反射率を測定することをしなければならないだろう.これでは,いくら軽いとはいっても自律走行のためには多くのプログラムや数値調整のためのコストが必要となる. 一方で,コストこそかかるが実際の大会等で他の既存手法をことごとく上回り検出率が一位となったアルゴリズムなどの総称を,深層学習という.深層学習は画像のラベリングによりアノテーションをかけたり,学習や検出をする際にコストがかかるだけで,検出の際も高精度かつ比較的速度が速く行うことができる.そこで私は,今流行りの深層学習を用いて物体検出を行えば,汎用性が精度も高い水準で検出が行えるのではないかと思い,深層学習を用いた物体検出の手法を模索した. *深層学習を用いた物体検出 [#wfe59bda] 本章では,深層学習を用いた物体検出アルゴリズムとして,比較のために従来のアルゴリズムを紹介した後,本論文にて評価実験を行うYOLOv3について説明する. **従来の深層学習を用いた物体検出 [#qce28da9] 深層学習を用いた物体検出と一口にいっても様々な種類があるが,私は今回YOLOv3を使って検出を試してみた. YOLOの説明の前に既存の深層学習を用いた物体検出アルゴリズムの例についてまとめる. ***GoogLeNet [#d394b2db] GoogLeNet[3]は深層学習の中で画像認識に特化したもので,訓練データから自動で識別に必要な特徴を抽出するのが特徴である. 構造としてはInceptionモジュールという複数の畳み込み層やpooling層からなる小さなネットワークを定義しており,これを組み合わせて重ねたものを最終的に一つのCNNとしている. また,過学習を抑えるためにpooling層も少々特殊な処理をしている. 参考文献[4]でもこれを用いて信号を検出しようとしていたが,識別に5~10秒かかったり,逆光により青信号が認識できなかったりなどの問題が発生していた. ***R-CNN [#vebede93] 機械学習の中でも最も有名といっても過言ではないCNNの論文[5]で,物体検出においてCNNのアルゴリズムを上手く適用し,一枚の画像が1000クラスのうちどのクラスに属するかという問題を推定するILSVRC 2012の物体認識チャレンジで大差を付けて一位になった論文である. アルゴリズムとしては,入力画像に対してSelective Search[6]という物体らしさを見つけるための既存手法を持ちいて物体候補を探し,その物体の領域画像をすべて一定の大きさにリサイズすることで扱いやすくする.その上で,それらをCNNにかけて特徴量を取り出し,取り出した特徴量を用いて複数のSVMによって学習しカテゴリを識別,regression層により数値として出力することで,Bounting Boxの位置を求めて画像に矩形を描くという流れとなっている. 最近ではFaster R-CNNなどの新しいアルゴリズムが出たりもしているが,速度が圧倒的に遅く,今回の目的においてはリアルタイム検出に耐えうるものではないので適していないといえる. ***SSD [#g9318f98] GoogleNetやR-CNNなどはBounting\ Boxを少しづつずらしながら当てはまり方を調べて,一番スコアが高いところを物体の位置とするようなアルゴリズムだった. しかし,SSDはそれらとは異なり,画像自体を先ずグリッドで分割し,それぞれのグリッドに対して幾つかのBounting\ Boxのスコアを見ている. 更にExtra\ Feature\ Layersという畳み込み層をネットワークに導入しており,層を経るたびに特徴マップの分割領域数を少なくしていくことで,最初に推定したBounting\ Boxのスコアを最終的に纏めてそれぞれのBounting\ Boxが一定の閾値以上にスコアが高い場所を特定物体として検出していた. 参考文献[7]ではSSDを用いて歩行者の検出を行っており,2030枚で学習を行った結果,5m以内の人の検出率が77.8\%,進行方向では58.0\%とチラツキを含めた値なのでそこまででもないが,もしこれをマルチクラスの物体認識にした際には少々不安が残る検出率である. ***つくばチャレンジにおいての物体検出 [#uffec208] 上記に挙げたような深層学習はコストが高い分,学習に汎用性があって学習自体が画像をよみこむだけだったり,様々な種類の物体をそのアルゴリズムだけで検出できる. しかし,GoogleNetやR-CNNはつくばチャレンジにおいての物体検出という点で考えると非常に低速であり,状況が次々と変化するためにリアルタイム検出が必要であるためにつくばチャレンジの物体検出にはあまり用いたくはない. また,SSDにおいては人の検出は高い精度できている上に,リアルタイム検出でも問題ない程度の速度は取れているが,ロボットなどの特徴が全く異なる物体や車など高速で動く物体を検出する際は,やはりまだ不安の残る結果である. R-CNNにおいてはFaster R-CNNや,SSDにおいてはRefineDetなどの新しく高速かつ高精度なアルゴリズムも出ているが,それよりも更に優れているという結果が出ているYOLOv3を用いて実験を行った. **YOLOの概要と説明 [#u63b8af6] yoloはJoseph Redmonらにより作成された,ディープラーニングを用いたニューラルネットワークによる物体検出のアルゴリズムである.darknetという本人が作成したライブラリを用いて作成された. 2015年1月に初版となるyolov1[8]を出し,2016年12月にyolov2[9],2018年にはyolov3[10]という改良版が出ており,実時間制をそこまで損なうことなく精度が向上している. アルゴリズムとしては,まず学習の際に分別したいクラスごとに,Bounting Boxでラベリングした画像を用意する.その画像を読み込む際に画像を均等なグリッドに分割し,ラベリングしたBounting Boxの辺と各グリッドの辺の距離を求めて,その画像上にどのような位置でどのような物体があったかというのを学習する. 検出の際は,その情報を元にまず検出したい画像を同じようにグリッド分割した後,グリッドごとにクラスの確率マップを作成するとともに,学習データから導き出された物体の可能性があるものをBounting Boxで囲み,それぞれのBounting Boxに信頼度をつけたものを作成する.その二つを組み合わせ,信頼度が高く確率マップ出来にも物体であろうというBounting Boxを合体させたり信頼度を見ながら位置を調整することで,最終的に物体を囲んだBounting Boxを検出するというものである. グリッド分割の細かさは,Yolov1では一枚の画像に対し7*7の分割しかできなかった為にあまり精度が取れなかったが,Yolov3では最高608分割と大幅に細かくなっており,実時間制を損なわないながらも精度の向上を実現している. CENTER:#ref(BB.png,center,70%) CENTER:図2.1:Bounting Boxの例 性能としては上記の画像認識のアルゴリズムであるR-CNNなどとは違い,SSDと似たようなものであり,画像認識を回帰問題として扱うことで「画像の領域推定」と「分類」を同時に行うことを実現したアルゴリズムである. そのため,1つのネットワークで完結しているためシンプルであり,既存の手法と比べて幾つかのメリットがある. 1つ目のメリットとしては処理が速いことがある.画像認識について,シンプルな回帰問題としたことで,ニューラルネットワークの処理における複雑なパイプラインを考慮する必要がなくなったため,処理が早くなった. 2つめのメリットとしては,既存の「sliding window」や「Region Proposal」などの手法とは違って,画像全体を学習や検証に使用するため,背景を物体として誤検出することが既存のアルゴリズムと比べて半分以下となっている. 3つ目のメリットとしては,YOLOが汎化性能が高く,様々なものをデータさえ用意すれば高い精度で検出できるということがある. また,YOLOにおいては最先端なアルゴリズムと比較すると処理速度が速い一方,小さいものの検出が苦手で精度の面で劣っていたが,YOLOv3においては画像を分ける際のグリッドを細かくしたことにより,小さいものであろうとも検出できるようになっている.以下に他のアルゴリズムと比較したYOLOv3の検出率と処理速度の相関を示したグラフを提示する. *評価実験 [#f92701bc] 本章では,YOLOv3による学習の方法と,YOLOv3に対して評価実験を行う為の方法を述べた後,実験方法と評価方法を提示する. **YOLOv3の学習方法 [#i7d96c97] YOLOv3などの深層学習による物体認識アルゴリズムの学習のためには,予め検出したい物体が映っている画像に対して,検出したい物体を矩形で囲みそれぞれに対して何の物体か識別できるようにラベルを貼るラベリングという処理が必要になる. 今回は,tzutalin氏により作成されたlabellmgにというラベリングツールにより,つくばチャレンジで実際に撮影した画像に対してラベリングを行い,なんの物体がどの位置にあるかが表記された画像に対するアノテーションファイルを作成した. 以下が実際のラベリング風景である. CENTER:#ref(labelimg.png,center,50%) CENTER:図3.1: ラベリングツール labellmg.py これによって作成したアノテーションファイルと画像を一つのフォルダに纏め,YOLOv3の学習コマンドにより学習した. 学習コマンドを実行すると,画像を1枚1枚見てその画像を事前に設定された数のグリッドに分割し,それとアノテーションファイルを用いることで,それぞれのグリッドの枠線から物体の中心がどれだけ離れているかとそのパターンを学習する. それを繰り返し行うことで最終的に検出したい物体の形状や画像パターンなどを学習する. **学習に使用したデータセット [#g90d294a] 本研究室が出場したつくばチャレンジの,実際の横744px縦480pxのRGB画像データ535枚を使って自分で作成した学習データを用いて検出したい5物体「車・人・信号・自転車・ロボット」に対して検出を行った. 学習に使用したのは以下のような検出したい物体が一つでも映っている画像群である. CENTER:&ref(tsukuba_a0001.jpg,left,55%);&ref(tsukuba_b0001.jpg,center,55%);&ref(tsukuba_d0001.jpg,right,55%); CENTER:&ref(tsukuba_a0001.jpg,left,50%);&ref(tsukuba_b0001.jpg,center,50%);&ref(tsukuba_d0001.jpg,right,50%); CENTER:&ref(tsukuba_f0001.jpg,center,30%);&ref(tsukuba_g0001.jpg,center,30%); CENTER:図3.2:学習に使用した画像群 これらのような画像を利用して学習を行った. **実験方法 [#rc517f21] 今回,学習に使用していない横744px縦480pxのつくばチャレンジの画像2124枚を纏めて動画にして検出を行い,検出した動画を画像一枚ずつに分解することで,それぞれの画像を目視で確認し,それぞれ物体が検出できているか,背景を誤検出していないかを調べ,その画像の枚数をそれぞれ求めた. また,評価の方法としては検出したい物体を全て検出できているか.または背景を一切誤検出していないかを確認し,画像を1枚ずつTP,FN,FP,TNの分類に分けた.それぞれ,TPはTrue Positiveの略であり実際に検出したいものが検出できていることを表し,今回においては検出したい物体が全て検出できていることを表す.FNはFalse Negativeの略であり検出したいものが検出できていないことを表し,今回においては検出したい物体が一つでも検出できていないことを表す.FPはFalse Positiveの略であり検出すべきでないものが検出されていることを表し,今回においては背景を物体として一つでも誤検出していることを表す.TNはTrue Negativeの略であり,検出すべきでないものが正しく検出されていないことを表し,今回においては背景を物体として全て誤検出していないことを表す. 例としては以下の画像のように判別する. CENTER:&ref(tsukuba_TP_TF.jpg,center,100%);&ref(tsukuba_NP_TF.jpg,center,100%);&ref(tsukuba_TP_NF.jpg,center,80%); 図3.3:TPかつTNの画像例 図3.4:FNかつTNの画像例 図3.5:TPかつFPの画像例 このような実験方法と評価方法により検出を行い,結果となるそれぞれの分類の画像の枚数と,それから求められる検出率を算出した. **実験結果 [#a34f3c05] 上に記述したような実験方法において,学習に使用していない画像群2124枚に対して実際に検出及び分別を行ったところ,以下のような結果になった. CENTER:#ref(kekka.png,center,80%) CENTER:図4.1:実験結果 総画像枚数2124枚に対しTP,画像中に存在する検出したい物体である「車・人・信号・自転車・ロボット」を一つ残らず検出できている画像の枚数が1973枚で,反対にFN,画像中に存在する検出したい物体である「車・人・信号・自転車・ロボット」に対し,一つでも検出できない物体がある画像の枚数が151枚であった. またFP,画像中の物体ではない背景を一つでも物体として検出している画像の枚数が159枚で,反対にTN,画像中の物体ではない背景の全てを物体として誤検出していない画像の枚数が1965枚であった. よって,TPとFNの結果より検出したい5物体を全て検出できている画像の全体と比較した割合が92.891%となり,またFPとTNの結果より一つも誤検出をせず背景を正しく背景と認識している割合が92.514%となった. また,GTX1080を用いて38FPSの速度で検出を行えた. *考察 [#e18fa1b6] つくばチャレンジの画像2124枚に検出を行った結果,検出したい5物体を全て検出できている画像の割合が92.891%,検出したくない背景を検出せず背景と背景として全て認識している画像の割合が92.514%高い精度が取れた. この理由には,先ず大きな影響を与えている面としてつくばチャレンジの構成上同じコースを通り続けていることが挙げられると考えられる. つくばチャレンジにおいては実験走行会を行う年度毎に実験走行を行う場所を変更しているため,去年や一昨年は違う場所を走行しており,今回の学習データには一切入っていないため背景の学習ができておらず,少なくとも去年や一昨年の画像で検出をした場合,背景の誤検出は増すと考えられる. しかし,今回の検出においては2018年度のつくばチャレンジの走行データを用いて,同年度のつくばチャレンジのコースに対して検出を行っているため,一部学習が行えていない場所などはあるが,おおよそのコースは同じであるために背景の誤検出が抑えられていると考えられる. 更には,信号という光を放つために天気などの環境光度や周囲の環境に左右されやすく,実際の実験走行会でも日差しの加減により検出できていないロボットが多かった物体もあるが,これはコース上の一定の位置にしかなく,背景とともに学習したために多少光度が変わろうとも高い精度で検出できたものだと考えられる. 実際に,つくばチャレンジでない他の信号に対して検出を行ったところ,検出率は80%近くとなり少し下がった.しかし,これは今回の検出では自動車用信号と歩行者用信号を纏めて信号として認識しているために形状がぶれていることや,またデータの多様性が足りないことも原因として考えられる. また,つくばチャレンジの画像には車や人,自転車などある程度は形状や色が決まっている物体だけではなく,ロボットという様々な形状がある物体が存在した. しかしながら92.891%という高い精度で検出しており,実際に確認した画像においては,高さ,幅,色が全く違う上に,学習データにおいても学習していないロボットが3台ほどあったが,どれもチラつきもなく検出できていた. これは恐らく,つくばチャレンジのルール上,ロボットの自律走行の際には人が必ず近くに付いて何時でも緊急停止できるようにしている必要があり,またロボット自体の形状も四角柱に車輪がついたものが多かったため「人が近くにいる車輪のついた四角柱」という分類で検出されているものと考えられる. 実際に,ロボットを横から撮影して人が見切れている場合などは大幅に検出率が減少したり,また公式が配布している学習データを用いてロボットの映っている画像を検出してみたところ,大凡のロボットが「スーツケース」として認識されるなど「人が近くにいる車輪のついた四角柱」という特徴が大きく出た結果となった. しかし,学習していない状況や形状のロボットも少し精度が低くとも検出できており,学習していない物体に対しての対応性が高いため,学習したデータ以外のデータに対しても正しく物体検出を行える能力である汎化性能が高いと言える. それとは別に,更に精度や速度を向上させる方法についてだが,精度については当初は学習データの数を200枚程度で行っていたが,535枚に増加させたところ明らかに検出できていなかった状況においての物体や背景などを誤りなく検出できるようになっていたため,更に学習に使用するデータ数を増やすことにより精度の向上を図れるのではないかと考えられる. また速度については,単純に更なる高性能なグラフィックボードを使用すれば速度の向上が図れるが,バッテリーなどの電気周りの問題が弊害として発生する.そのため,なるべく別の方法を用いたいところではあるが,確実ではないとはいえ,事前にYOLOv3の公式が配布している100以上の多数の物体を検出できる学習データ重みを使用して行っていた検出ではGTX1080において25FPSしか出なかったのに対し,今回は38FPSであるため,検出したい物体の数や学習の際のオプションを変更することで向上を図れるのではないかと予測できる. *まとめ [#xb1e442f] 結果と考察から,YOLOv3によるつくばチャレンジの実際の画像に対しての検出において,高い精度かつ汎用性が確認できた. しかしながら,動画に対しての検出とはいえ検出の際の矩形にチラつきが生じたり,速度もGTX1080という高性能グラフィックボードを用いながらも38FPSという速度であり,ロボットなどの低速での走行ではリアルタイム検出に問題ないが,もしこれを自動車などの自動運転に応用するなど,高速での走行に転用した場合,精度は確保できているが38FPSの速度では検出の際のチラつきを加味すると不十分な速度である. そのため,学習の際のデータが535枚のところを増加させたり,バッチサイズ等の設定を変えるなどといったことを行いながら比較し,さらなる精度や速度の向上を目指していきたい. また,さらなる学習データ数の増加やオプションの見直しにより,精度や速度の向上が見られ,つくばチャレンジのリアルタイム検出において十分耐えうるだろうと言える結果が得られたら,実際にロボットに搭載して実環境やつくばチャレンジなどの実験走行会で動かしたい. *参考文献 [#wdffce56] [1]江口 純司 : "つくばチャレンジ2016における自律移動ロボットの開発" , TSUKUBACHALLENGE2016参加レポート集 , pp.26-31 つくばチャレンジ実行委員会,つくば市 (2017) [2]加藤 勇気 , 上山 晃司 , 森岡 一幸 : "つくばチャレンジ2016における明治大学総合理工学部森岡研究室の取り組み" , TSUKUBACHALLENGE2016参加レポート集 , pp.49-52 つくばチャレンジ実行委員会,つくば市 (2017) [3]Christian Szegedy,et al : "Going deeper with convolutions" , Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition , pp.1-9 (2015) [4]井関 統 , 饗庭 大 , 小池 陽介 , 田中 凱季 , 大川 一也 : "つくばチャレンジ2016における深層学習を用いた信号検出手法" , TSUKUBACHALLENGE2016参加レポート集 , pp.82-85 つくばチャレンジ実行委員会,つくば市(2017) [5]Krizhevsky, Alex, llya Sutskever, and Geofferey E. Hinton. : "Imagenet classification with deep convolutional neural networks." Advances in neural information processing systems. (2012) [6]Uijlings, Jasper RR, et al. : "Selective search for object recognition." International journal of computer vision 104.2, pp.154-171 (2013) [7]志水 惇哉 , 小出 拓克 , 藤原 康弘 , 今津 篤志 : "つくばチャレンジ2017における大阪市立大学機械力学研究室の取り組み" , TSUKUBACHALLENGE2017参加レポート集 , pp120-122 つくばチャレンジ実行委員会,つくば市 (2018) [8]Joseph Redmon , Santosh Divvala , Ross Girshick , Ali Farhadi : "You Only Look Once: Unified, Real-Time Object Detection" , University of Washington , Cornell University , arXiv:1506.02640 (2015) [9]Joseph Redmon , Ali Farhadi : "YOLO9000: Better, Faster, Stronger" , University of Washington , Cournell University , arXiv:1612.08242 (2016) [10]Joseph Redmon , Ali Farhadi : "YOLOv3: An Incremental Improvement" , University of Washington (2018)