[[太田研 公開用Wiki]] *Haar-like特徴量を用いたカスケード分類器による前方車両の識別 [#te0b4608] #contents *はじめに [#z7a60fe1] 現在、自動車の自動運転技術に関する研究が盛んに行われており、本大学でも 自動運転に関する研究が行われている。 &br; 自動運転において前方車両に合わせた速度の調節や、前方車両の急停止に対す る追突の回避など様々な場面で前方車両の検出が必要となる。そこで前方車両の 検出に関する研究を行った。&br; 前方の障害物の探知はレーザーやステレオビジョンなど様々な手法がある。しかし障害物は車だけでなく、人や壁、自転車等様々なものが考えられる。その中 で自動車を識別する必要があり、そのためには画像処理を用いた手法が有効だと 考えられる。&br; しかし車は形状や色などデザインは様々であり、単純な画像処理で一般化する のは難しい。そこで機械学習と画像処理を併用した手法を用いての前方車両の検 出を目指す。 *提案手法 [#b2194a16] **機械学習 [#g52b4610] 機械学習とは大量のデータをコンピュータに与え、そのデータから コンピュータ自身に共通点や対象の持つパターンなどを見つけさせる 手法である。~ 機械学習と一言に言ってもSVMやニューラルネットワークなど、様々な手法 がある。本研究では高速に処理できるという点から、カスケード分類器による 前方車両の検出を試みた。 ~カスケード分類器はPAUL VIOLAとMICHAEL J.JONESが顔検出 のための提案した手法である。 **カスケード分類器[#o2f66efa] カスケード分類器とは複数の識別器を組み合わせた分類器である。 複数の識別器の全てが正解画像だと判断した画像を正解画像、識別器のうち一つでも 不正解であると判断した画像が不正解画像となるように識別器を調整した 分類器をカスケード分類器という。各識別器は不正解画像を誤って正解画像とみなすことはあるが正解画像だけは必ず正解画像であるとみなすような識別器である。~ このような分類器になるように正解画像と不正解画像のサンプルを与えながら、各識別器の閾値を調整する。~ CENTER:#ref(cascade.png,center,50%) CENTER:&size(14){図1:カスケード分類器};~ カスケード分類器は多くの画像を最初の数回の識別器で振り落とすことができるため 高速に処理できる。またより早い段階で使用する識別器ほど閾値を下げることで、 一回ごとの検出時間を短くなるように調整する。これによって画像が多い時には 一枚あたりにかける時間を短くし、画像が減ってからしっかりとした検出を 行うようになり、高速で精度を保った検出を可能としている。~ カスケード分類器の特徴量としてLBPやHaar-like、HOG等が存在するが、 今回は足掛かりとしてViolaとJonesの論文でカスケード分類器の識別器 として用いられた手法であるHaar-like特徴量を使用する。 **Haar-like特徴量 [#h4f39dae] カスケード分類器の識別器としてHaar-like特徴量を用いた。Haar-like 特徴量は複数の局所領域の明暗差から求めた特徴量である。 CENTER:#ref(Haar-like.png,center,50%) CENTER:&size(14){図2:局所領域の明暗差};~ CENTER:#ref(Haar-like.png,center,50%) CENTER:&size(14){図3:Haar-like特徴量};~ 例えば人の顔画像であれば図2のように目元に比べて頬の辺り が明るい色となる。このような明暗差による特徴を用いたものが Haar-like特徴量である。こうした特徴量を複数集めたものが図3 である。図3の特徴量をみたす画像を対象の画像とみなす 識別器とする。~ 今回の研究では車両の画像を用いてHaar-like特徴による識別器を 作成し、カスケード分類器に使用する。 *学習 [#c76451d2] Haar-like特徴量の取得には多数の正解画像が、またカスケード分類器 の作成には多数の正解画像と不正解画像の双方が必要となる。~ まず、正解画像として車両の映っている画像を集めた。本研究では 精度を上げるために一般車両かつ車両の後方部の画像に絞って集めている。 図4は正解画像として使用した画像の一例である。 #ref(psam1.PNG,center,50%) #ref(psam2.PNG,center,50%) #ref(psam6.PNG,center,50%) CENTER:&size(14){図4:ポジティブサンプル画像群};~ その後、不正解画像として車両の映っていない画像も収集し使用した。初めに 数十枚をランダムに集めた。その後その画像群を不正解画像として分類器を作成 ・検出を行い、誤検出したものを不正解画像に加えてから再び分類器を作成した。 この作業を繰り返すことで不正解画像を増やしていった。図5は 今回収集した不正解画像の一例である。~ #ref(nsam1.PNG,center,50%) #ref(nsam3.PNG,center,50%) #ref(nsam6.PNG,center,50%) CENTER:&size(14){図5:ネガティブサンプル画像群};~ 以上のようにして正解画像を3172枚、不正解画像を2100枚用意し、学習を 行わせた。~ なお正解画像、不正解画像ともにサイズが様々であるため、学習を行う 際には正規化して使用する。 *実験 [#q6d1337c] 入力画像としてドライブレコーダーによって撮影した動画を画像に変換したものを 使用した。\\ この画像群は車のフロント部分が映っている。しかしフロント部分に車両が 存在することはあり得ないため、フロント部分が含まれるように検出された 領域は除外した。~ また画像の左右の両端部は車両が存在する可能性 が低く、検知する意義も薄いことからフロント部分と同様に除外した。 図6における赤線より外側が除外する領域となる。~ また前方車両は基本的に地平線上を通過するように存在するはずである。 そこで画像中央部分(図6における緑線)を通過しない領域は車両ではない画像 として除外した。これにより道路上の影等の路上に発生する誤検出や 樹木、建物等による高い場所に発生する誤検出を排除できた。~ CENTER:#ref(memo2.jpg,center,25%) CENTER:&size(14){図6:探索範囲};~ **実験方法 [#k49e84f5] 以上のように作成したカスケード分類器に実際に画像を与え実行させた。 **結果 [#n36e50e6] 図7と図8は色や形が異なる車両だが、誤検出こそあるものの 両者ともに車両の検出に成功している事が分かる。~ CENTER:#ref(G003000049.jpg,center,25%) CENTER:&size(14){図7:例1};~ CENTER:#ref(G306000375.jpg,center,25%) CENTER:&size(14){図8:例2};~ 同様に車の映っている画像2602枚に対し実行させた結果が表1である。~ ||入力画像|検出成功|未検出|検出率|h |一般道 | 1813| 1642 | 171 | 90.6%| |高速道路 | 568 | 554 | 35 | 97.6%| |計 | 2602 | 2396 | 211 | 92.1%|f *まとめ [#i421d2f2] カスケード分類器による前方車両の検出は第4章の示したように高い検出率が カスケード分類器による前方車両の検出は実験結果で示したように高い検出率が 得られた。一方で図7や以下の図9、図10 のような誤検出が大量に発生した。 CENTER:#ref(G003000007.jpg,center,25%) CENTER:&size(14){図9:例3};~ CENTER:#ref(G105000636.jpg,center,25%) CENTER:&size(14){図10:例4};~ 今回、車の検出率の減少を回避するために、極めて特徴の類似するであろう 車の前方画像は不正解画像として扱っていないため、図9のように 車両の前方部分のみの誤検出は当然起こりうる誤検出である。~ 一方で図7や図10のような関係のない 物体による誤検出も多発した。~ 検出に成功した画像2391枚のうち誤検出が0だった画像は僅か21枚 であり、誤検出の多くは車両の前方部分以外による誤検出であった。結果として ほぼすべての画像に許容できない誤検出が見られた。~ 誤検出が多い理由としては、画像枚数の不足が考えられる。このカスケード 分類器は学習時のサンプルを増やすことで精度を上げる事ができる。 そのためサンプル画像を増やし、精度を上げていきたい。~ また、今回は両端や地平線から外れた領域などの排除を行った。この 探索領域の決定をより厳密に定義することで誤検出を減らせると考えられる。~ またそれ以外の誤検出の要因として車両の持つHaar-like特徴が 非常にシンプルである可能性などが考えられる。そこで他の特徴量との比較 を行い、良い特徴量の選択も行っていきたい。 *参考文献 [#x8274716] [1]PAUL VIOLA ,MICHAEL J.JONES,『Robust real-time face detection』, International Journal of Computer Vision (IJCV) 57(2), 137-154, 2004 ~[2]OpenCV:http://opencv.org/ ~[3]カスケード型分類器 — opencv 2.2 documentation - OpenCV.jp:http://opencv.jp/opencv-2svn/py/objdetect_cascade_classification.html