深層学習による人物検出 - sirai's...

25
2016 年度 卒業論文 深層学習による人物検出 深層学習による人物検出 深層学習による人物検出 深層学習による人物検出 指導教員 白井英俊 教授 中京大学 工学部 電気電子工学科 学籍番号 T213021 氏名 海住 海住 海住 海住 嘉希 嘉希 嘉希 嘉希 (2017 1 )

Upload: others

Post on 11-Oct-2019

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

2016年度

卒業論文

深層学習による人物検出深層学習による人物検出深層学習による人物検出深層学習による人物検出

指導教員 白井英俊 教授

中京大学 工学部 電気電子工学科

学籍番号 T213021

氏名 海住海住海住海住 嘉希嘉希嘉希嘉希

(2017年 1月)

Page 2: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

要要要要 旨旨旨旨

題目 深層学習による人物検出

学籍番号 T213021 氏名 海住 嘉希 指導教員 白井 英俊

近年、深層学習による画像認識が高い精度で成果を挙げていることで注目されている。

本研究では、深層学習によって物体認識を行う三つの手法を用いて実装を行った。そし

て、三つの手法の実装結果から人物検出に焦点をあて、これらの検出精度と実行時間の

比較を行ったものである。人物検出に焦点をあてた理由は、安全面や防犯面でこのよう

な機器が使われ始めており、人を検出する技術がますます重要になっているためである。

本研究では、Faster R-CNN (Faster Region-with Convolution Neural Network), YOLO (You

Only Look Once), SSD (Single Shot MultiBox Object Detector)という、三つの深層学習による物体

検出手法 (いずれも 2016年 11月時点で最先端の技術)を実装し、同じデータに適用して

これらの手法の精度と実行時間を比較した。なおこれには人も含めた 20 種類の物体

(PASCAL VOC2007データ, PASCAL VOC2012データ)の検出をするよう学習されたモ

デルを用いたが、対象としたデータは人物だけを検出するものとした。また人物検出に

適し、深層学習以前に最先端とされていた HOG特徴量を比較材料に用いた。

Faster R-CNNは、畳み込み層(CNN)の上に 2 層の畳み込み層を追加して領域提案

ネットワーク(RPN)と呼ばれるネットワークを構築し、物体検出を行うシステムであ

る。YOLO は物体の領域とその物体の種類の予測を同時に行って物体検出を行うシステ

ムである。また SSDは YOLO と同様に領域の予測と物体の種類の予測を単一のネット

ワークで実現するシステムで、前処理として CNN を行って得られた特徴地図を利用し

ている。HOG特徴量は、画像の局所領域(セル)から、輝度の勾配方向と強度という特徴

量を得て物体検出を行うシステムである。初めにこれら 4 つの手法を同じプラットフォ

ームの上で実装した。

次に人物画像のデータベース INRIA Person Dataset から、100 枚の画像データをラン

ダムに取得し、評価に使用した。4 つの手法それぞれの画像 1枚あたりの平均実行時間

と、人物の検出精度(検出した人数の割合)とを比較した。その結果、平均実行時間は

HOG特徴量が 0.21s、SSDが 11.19s、YOLO が 12.34s、Faster R-CNNが 25.28sであった。

検出精度は YOLO が 92.24%、Faster R-CNNが 86.78%、SSDが 63.98%、HOG特徴量が

54.33%であった。

HOGは速いが検出精度が低いことが明らかになった。3 種の深層学習手法では、Faster

R-CNN は複数のネットワークを使用して物体検出するため、単一のネットワークで検

出する YOLO と SSDよりかなり遅いという結果が得られたのは妥当であろう。また検

出精度が低くなったのは、評価データとして多様な人の姿勢や向きのある画像データセ

ット INRIA Person Datasetを使用したためであると考える。特に SSDが 3種の深層学習

の中で低いのはそのせいであろう。

Page 3: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

展望として、検出物を人物と人物以外の 2 種に限定した学習モデルを作成すれば、

速度を維持しつつ検出精度を高めることができるのではないだろうか。特に YOLO を

ベースとして GPUを使用すれば、実時間で人物検出が加納なシステムが実現できると

考える。

Page 4: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

目目目目 次次次次

第 1章 はじめに. ................................................................................................................... 1

第 2章 本研究の構成 ............................................................................................................... 3

2.1. 深層学習について .............................................................................................................. 3

2.2. Faster R-CNN (Faster Region-with Convolution Neural Network) ..................................... 4

2.3. YOLO(You Only Look Once) .............................................................................................. 5

2.4. SSD(Single Shot MultiBox Detector) ............................................................................. 7

2.5. HOG(Histograms of Oriented Gradients)特徴量 ................................................................ 8

第 3章 研究計画 .................................................................................................................... 10

3.1. 開発環境 .......................................................................................................................... 10

3.2. 研究の計画 ...................................................................................................................... 10

第 4章 Faster R-CNN , YOLO , SSD , HOG特徴量システムの実装 ................................ 11

4.1. Faster R-CNNの実装 ....................................................................................................... 11

4.2. YOLOの実装 ................................................................................................................... 12

4.3. SSDの実装 ...................................................................................................................... 12

4.4. HOG特徴量による人物検出の実装 ............................................................................. 12

第 5章 検証 ............................................................................................................................ 13

第 6章 考察とまとめ ............................................................................................................ 17

参考文献 .................................................................................................................................. 18

謝辞 ............................................................................................................................................ 19

付録 . HOG特徴量のプログラム .......................................................................................... 20

Page 5: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

1

第第第第1111章章章章 はじめにはじめにはじめにはじめに

近年、深層学習による画像認識が高い精度で成果を挙げていることで注目されている。

本研究では、深層学習によって物体認識を行う三つの手法を用いて実装を行った。そして、

三つの手法の実装結果から人物検出に焦点をあて、これらの検出精度と実行時間の比較を

行ったものである。人物検出に焦点をあてた理由は、安全面や防犯面でこのような機器が

使われ始めており、人を検出する技術がますます重要になっているためである。

本研究では、Faster R-CNN(Faster Region-with Convolution Neural Network), YOLO(You Only

Look Once), SSD(Single Shot MultiBox Object Detector)という、三つの深層学習による物体検

出手法(いずれも 2016年 11月時点で最先端の技術)を実装し、同じデータを適用することに

より、精度と実行時間の比較をした。ここでは、人も含めた 20種類の物体(PASCAL VOC2007

データ, PASCAL VOC2012データ)の検出をするよう学習されたモデルを用いたが、対象と

したデータは人物だけを検出するものとした。また人物検出に適し、深層学習以前に最先

端とされていた HOG特徴量を比較材料に用いた。

Faster R-CNNは、畳み込み層(CNN)の上に 2層の畳み込み層を追加して領域提案ネット

ワーク(RPN)と呼ばれるネットワークを構築し、物体検出を行うシステムである。YOLO

は物体の領域とその物体の種類の予測を同時に行って物体検出を行うシステムである。ま

た SSDは YOLO と同様に領域の予測と物体の種類の予測を単一のネットワークで実現する

システムで、前処理として CNN を行って得られた特徴地図を利用している。HOG特徴量

は、画像の局所領域(セル)から、輝度の勾配方向と強度という特徴量を得て物体検出を行う

システムである。初めにこれら 4つの手法を同じプラットフォームの上で実装した。

次に人物画像のデータベース INRIA Person Dataset から、100 枚の画像データをランダムに

取得し、評価に使用した。4つの手法それぞれの画像 1枚あたりの平均実行時間と、人物の

検出精度(検出した人数の割合)とを比較した。その結果、平均実行時間は HOG特徴量が

0.21s、SSDが 11.19s、YOLO が 12.34s、Faster R-CNNが 25.28sであった。検出精度は YOLO

が 92.24%、Faster R-CNNが 86.78%、SSDが 63.98%、HOG特徴量が 54.33%であった。

HOG特徴量は速いが検出精度が低いことが明らかになった。3種の深層学習手法では、Faster

R-CNNは複数のネットワークを使用して物体検出するため、単一のネットワークで検出す

る YOLO と SSDよりかなり遅いという結果が得られたのは妥当であろう。また検出精度が

低くなったのは、評価にデータとして多様な人の姿勢や向きのある画像データセット INRIA

Person Datasetを使用したためであるとかんがえる。特に SSDが 3種の中で低いのはそのせ

いではないであろう。

展望として、検出物を人物と人物以外の 2 種に限定した学習モデルを作成すれば、速度を

維持しつつ検出精度を高めることができるのではないだろうか。特に YOLO をベースとし

て GPUを使用すれば、実時間で人物検出が可能なシステムが実現できると考える。

Page 6: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

2

本書の構成は以下の通りである。第 2 章では前提知識として、本研究に用いた深層学習、

そしてこれを用いた物体検出手法である Faster R-CNN、YOLO、SSDの紹介と、HOG特

徴量の説明を行う。第 3 章では本研究をするための開発環境と研究の計画について述べる。

第 4 章では、第 2 章で紹介した物体検出手法の実装方法について説明する。第 5 章では、

この実装を用いて、実行時間と検出精度の比較について述べる。第 6 章では、第 5 章で得

られた結果について考察し、本論文をまとめる。

Page 7: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

3

第第第第 2 章章章章 本研究の構成本研究の構成本研究の構成本研究の構成

本研究では、深層学習の三つの手法、Faster R-CNN、YOLO、SSDによる物体検出の

実装を行い、検出精度と実行時間の比較を行った。また、深層学習でない手法で、人物

検出をすることができる代表的な手法として HOG特徴量を用いた人物検出とも比較を

行った。人物に着目した理由としては、深層学習手法は、安全や防犯対策にも使われ始

めている中、人を検出する技術が必要とされていることから人物に着目した。

本章では、初めに深層学習と、その検出手法を学ぶために、深層学習は、浅川(2016)

と麻生ほか(2015)、Faster R-CNNは Ren et al (2015)と浅川(2016)、YOLO は Redmon, et al

(2016)と藤田・高原(2016)、SSDは Liu et al. (2015)、HOG特徴量は Dalal & Triggs (2005)

と藤吉(2009)を参考にして説明する。

2.1 深層学習について深層学習について深層学習について深層学習について

深層学習(Deep learning)は、人間や生物の脳神経系の強力な学習能力を持ったメカニ

ズムをヒントとした機械学習手法のひとつであり、高い性能が挙げられていることで注

目されている。深層学習は入力層、複数の中間層、出力層からなるニューラルネットワ

ークを用いて行われる。ニューラルネットワークのそれぞれの層は複数のユニットから

なり、このユニットは次の層のユニットと繋がるという構造をしている。ただしこのニ

ューラルネットワークは、ただ層の数が多い(層が深い、という)だけではなく、一つ

の層のユニット数が多い(層の幅も広い、という)ため、ユニットとユニット間の重み

と呼ばれるパラメータ数が多い。それにより、多数の特徴量を扱うことができるという

特徴を持つ。深層学習の学習は一般的に、入力からニューラルネットワークによって計

算された出力と教師データ(正解に相当する)との差(すなわち誤差)を用いた重みを

更新によって行われる(誤差逆伝播法)。このとき、損失関数と呼ばれる関数が使用さ

れ、この損失関数の値を小さくするように学習が行われる。

深層学習は 2010年代から産業界でも利用され、Googleや Microsoft, Facebookなどの

画像認識や音声認識、自然言語処理、創薬ゲノミクスなど多くの領域で研究開発が進め

られている。

画像認識では、深層学習のうち畳み込みニューラルネットワーク(Convolutional

Neural Network、以後 CNN と呼ぶ)が多く利用されている。CNN の特徴は、畳み込み

層とプーリング層と呼ばれる特殊な層を交互に積み重ねた構造を持つことである。

2.2 Faster R-CNN (Faster Region-with Convolution Neural Network)

Ren et al (2015)らによる Faster R-CNN(Faster Region-with Convolution Neural Network)

は、深層学習を用いた物体検出手法についての一連の研究 R-CNN、Fast R-CNN、Faster

Page 8: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

4

R-CNNのうちで、もっとも高速で高精度な成果を得ている研究である。

Faster R-CNNでは、畳み込み層(CNN)の上に 2層の畳み込み層を追加して領域提

案ネットワーク(以後、RPN と呼ぶ)と呼ばれるネットワークを構築する。RPN は、

任意の大きさの画像を入力とし、物体が存在する候補領域と、その領域に物体が存在す

る可能性を表す数値(物体らしさ)とを出力する。なお候補領域としては、物体検出手

法としては一般的であるが矩形領域だけを考えている。図 2.1は物体が存在する候補領

域を求めるべく、CNN の出力である特徴地図において、n×n の物体検出用のウィンド

ウ(図 2.1 では n=3)による走査(スライディングウィンドウと呼ぶ)を表したものである。

これにより物体の有無をそれぞれの領域ごとに判定し、物体があると判定された領域に

対して物体認識を行う。ここで縦横比が一定のウィンドウをずらしているだけでは、い

ろいろな形や大きさの領域候補を調べられない。そのため RPNではウィンドウごとに

アンカーと呼ばれる、大きさや縦横比の異なる複数個の領域を設定し、それぞれの物体

らしさを求める。図 2.1に即して言えば、ウィンドウごとに k個(Saito 2016)による実装

では k=9)のアンカーを設定し、それぞれについて 256次元のベクトルに変換した後に、

物体か背景かを分類する問題(2k 個のクラス分類)と、その領域の座標を求める問題(4k

個の回帰問題)とを(またもや)CNN を用いて解いているのである。

図 2.1. 畳み込み特徴地図(Ren 2015)

Faster R-CNNの学習は、次の 4段階の手順で学習を行う(図 2.2)。

1. 事前訓練が済んだ CNN を用いて、物体が存在する領域を提案するネットワークで

ある RPNの学習を行う。

2. 学習した RPNが出力した候補領域から、ファインチューニングした CNN を用いて

物体認識を学習する(Fast R-CNN流に)。

3. 上のステップで作成した物体検出ネットワークを用いて「物体認識ネットワークと

共有する」特徴地図を用いて RPNを再学習する。

Page 9: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

5

4. さらに「物体認識ネットワークと共有する」特徴地図を用いて物体認識レイヤーを

ファインチューニングする。

図 2.2.Faster R-CNNの構成(麻生ら 2015)

かくして、入力データから CNN によって得られる同じ特徴地図を用いて、物体領域提

案と物体認識とが学習され、それにより物体検出が行われる。

この方式は、物体領域提案と物体認識とを別々の CNN で行っているため、後で紹介

する二つの方式と比べ、計算コストが高くなっている。それでもこの方式が提案された

時点では最速であり、PASCAL VOC2007 (Everingham 2007)データに対して 1秒あたり 5

フレームの処理速度、73.2% mAP (mean Average Precision)と報告されている。

2.3 YOLO(You Only Look Once)

Redmon, et al (2016)による YOLO(You Only Look Once)は、C言語で作成されたフレー

ムワークの darknetの機能の一つとして提供されている。YOLO は、深層学習による物

体検出手法であり検出精度が高い。また、動画に対してリアルタイムに物体検出を行う

機能もあり、処理時間が速い手法である。物体の領域とその物体の種類の予測を同時に

行うという特徴がある。

図 2.3に YOLO の学習の概要図を示す。初めに CNN に 448×448にリサイズされた入

力画像を入力し、画像全体は S×Sの固定サイズの領域(グリッド)に分割される。本研究

は、20種類の物体が含まれている PASCAL VOCデータを学習データとして用いている。

この場合は、S=7であり、7×7のグリッド数に分割される。次に、図 2.3の YOLO の学

習概要図から、以下の項目を行って物体の予測をしている。

Page 10: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

6

図 2.3.YOLOの学習概要図(Redmon, J. 2016)

� 各グリッドの物体らしさの矩形とその信頼度を求める

CNN に入力し、7×7 グリッドに分割された画像から、物体らしさの矩形を求める。

方法は、物体らしい中心がグリッドセルに入ったとき、その物体を検出して矩形を求め

る。このとき、物体らしい矩形は 7×7×2個生成され、それぞれの矩形のデータは x座標、

y座標、w座標、h座標と信頼度の計 5種類を持っている。セル内に物体が存在しない

場合、信頼度は 0となる。物体の信頼度をPr�Object ∗ � ��

�と定義すると、物体の信頼

度は(2.1)式であり、候補領域 bに対して、セル gがどれだけ含まれているか割合を評価

する。

Pr�Object ∗ � ��

�� Pr�Object ∗

|b ∩ g|

|b ∪ g|・・・・・・・�2.1

また、それぞれの矩形領域から条件付きクラス確率 Cも推測する。

� � Pr�Class|Object・・・・・・・�2.2

� 各グリッドの信頼度が高い物体の種類を求める

CNNに入力し、7×7グリッドに分割された画像から、緑の領域は犬、ピンクの領域

は自転車、オレンジの領域は車、青の領域は背景というように、物体ごとの確率が

各グリッドセルに設定される。

YOLOは、24層の畳み込み層と 2層の全結合層からなる 26層のニューラルネットワ

ークで学習を行う。また、Faster R-CNNのように物体領域提案と物体認識とを別々で行

うのではなく、1回の推測から物体の領域予測と物体の種類の予測を同時に得ることが

できるため、高速な処理が可能である。しかし、一つのグリッドで検出できる物体が最

大 2つという制約があるため、グリッド内に大量の物体が映っている場合に検出が弱い。

各グリッドの物体らしさの

矩形とその信頼度を求める

各グリッドの信頼度が高い

物体の種類を求める

Page 11: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

7

2.4 SSD((((Single Shot MultiBox Detector))))

Liu, et al (2016)による SSD(Single Shot MultiBox Detector)は、2016年 11月時点で最新

の深層学習による物体検出法である。ある程度の検出精度を保ち、処理速度が速い。領

域の予測と物体の種類の予測を単一のネットワークで実現している。前処理として

CNN を行って得られた特徴地図を利用する。図 2.4のように、深さの異なる特徴地図を

用い、浅い層は小さい物体、深い層になるに連れ大きい物体の検出を可能としている。

図 2.4.SSDの構造(Liu et al. 2016)

領域の予測と物体の種類の予測はそれぞれの特徴地図で行われる。図 2.5にその様子

を示す。

図 2.5.特徴地図における領域予測と物体予測(Liu et al. 2016)

図 2.5は CNN を前処理として得られた特徴地図を 8×8と 4×4に分割した二つの領域

地図を示している。このように領域地図をいろいろなサイズに分割することで、色々な

サイズの物体を検出する(例えば図 2.5の犬は 8×8ではなく 4×4の領域で検出される)。

それぞれの領域には、3×3のフィルタをかけ、物体の種類の信頼度とその物体の位置の

座標(x,y,w,h)を得る。損失関数は、物体の位置のずれとなる loc (localization loss)と物

体のクラスである conf(confidence loss)を組み合わせたものである。また特徴地図の各領

域では、異なるアスペクト比の領域異種を生成し、いろいろな形状の物体を検出できる

工夫をしている。ここで、m個の特徴地図を使う場合、k 番目の特徴地図は式(2.3)のス

Page 12: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

8

ケールを持つ大きさの物体を検出する役割を持つこととなる。

�� = ���� +���� − ����

� − 1�� − 1�, � ∈ �1,��・・・・・・・・・・・・(2.3)

����は 0.9、����は 0.2というスケールである。

また、アスペクト比は

�� ∈ 1,2,3,1

2,1

3・・・・・・・・・・・・・(2.4)

として、式(2.5)と式(2.6)から領域異種のサイズが決まる。また、アスペクト比が 1 の場

合は、式(2.7)によりやや小さめの領域異種を生成している。

��� = �����・・・・・・・・・・・・・・・・・・・・・・(2.5)

ℎ�� =

��√��・・・・・・・・・・・・・・・・・・・・・・・(2.6)

��� = �����・・・・・・・・・・・・・・・・・・・・(2.7)

この方式は、以上に説明した YOLO と同様に物体領域予測とその物体の種類を単一

のネットワークで実現しているため、Faster R-CNNより速く検出することができる。

SSDの問題としては、大量なバウンディングボックスが生成されることが考えられるた

め、学習時に予測とは正しくないデータ(negative data)が発生する。このために、最後の

出力は conf(confidence loss)を降順に並べ、最も高い信頼度を拾い上げて検出結果として

いる。

2.5 HOG(Histograms of Oriented Gradients)特徴量特徴量特徴量特徴量

Dalal &Triggs (2005)による HOG(Histograms of Oriented Gradients)特徴量は、画像の局

所領域(セル)から、輝度の勾配方向と強度により得られる特徴量である。一般的には歩

行者や物体検出に使用されている。以下に方法を示す。

1. 画像をブロックに分割をし、そのブロック内で複数のセルに分割をする。

2. それぞれのブロック内のセルの中における輝度の勾配方向、強度から勾配ヒス

トグラムを計算する。ヒストグラムの作成は、0°から 180°までを 20°ずつ 9 方

向に分割する。輝度の勾配方向と強度は以下で求める。

勾配方向 θ�x, y� = tan��(�,�)

��(�,�)・・・・・・・・・・・・・・・・・・・(2.8)

勾配強度 m�x, y� = ���(�,�) + ��(�,�) ・・・・・・・・・・・・・(2.9)

����,�� = ��� + 1,�� − �(� − 1,�)

����, �� = ���,� + 1� − �(�,� − 1)・・・・・・・・・・・・・・・・(2.10)

3. ブロックごとに正規化して、ヒストグラムの形状を整える。

Page 13: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

9

正規化は以下で求める。

���� =����

��∑ ���� �×�×��� � + �

・・・・・・・・・・・・・・・・(2.11)

s×sはセル、� = 1、N は勾配方向数である。

4. 得られたヒストグラムを連結し、特徴量を得る。

以上より、輝度の勾配方向と強度の特徴量を得て検出することができる。

本章では、三つの深層学習手法と、HOG 特徴量を説明した。第 3 章では、上記の手

法を実装して比較研究を行うために研究計画について説明する。

Page 14: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

10

第第第第 3 章章章章 研究計画研究計画研究計画研究計画

深層学習は、画像認識の分野において高い性能を上げている。また、画像認識は安全

や防犯対策にも使われ始めている中、人を検出する技術が必要とされていることから人

物に着目した。以上より、実行時間がより高速で、検出精度が良い手法が優位であると

考えた。そして、本章では、三つの深層学習手法 Faster R-CNN、YOLO、SSDを実装し、

実行時間と検出精度を比較する概要について説明する。

3.1 開発環境開発環境開発環境開発環境

本研究をするために、開発環境について説明する。

使用機器はHP社Z640、OSは Linux4.2(Ubuntu15.04)、GPUはNVIDIA 社Quadro M5000

で CUDA7.5、使用言語は python2.7と python3.4、C言語を使用した。

3.2 研究の研究の研究の研究の計画計画計画計画

以下の計画で本研究を行った。

1. 三つの深層学習手法について実装を行う。

1.1 Faster R-CNNの実装を行う。本研究では chainer-faster-rcnn-master(Saito

2015)を用いた。これは PASCAL VOC 2007データで訓練した学習モデルを用い

ており、20種類の物体を検出できるものである。

1.2 YOLO の実装を行う。本研究では、darknet (Redmon 2016)で提供され

ているコードを用いた。これも PASCAL VOC 2007データで訓練した学習モデル

を用いており、20種類の物体を検出できるものである。

1.3 SSDの実装を行う。本研究では、mxnet-ssd (Zhang 2016)で提供されて

いるコードを用いた。これも PASCAL VOC 2007データで訓練した学習モデルを

用いており、20種類の物体を検出できるシステムである。

2. 以上の三つの深層学習手法と HOG 特徴量に対して人物検出問題のため、人を

題材とした画像データベースを用いて人物の検出精度と実行時間を求めて比較を

行う。

本章では、本研究を行うための開発環境と研究計画の概要について説明した。第 4章で

は、Faster R-CNN , YOLO , SSD , HOG特徴量による検出システムの実装について説明す

る。

Page 15: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

11

第第第第4444章章章章 Faster R-CNN , YOLO , SSD , HOG 特徴量特徴量特徴量特徴量システムシステムシステムシステムのののの実装実装実装実装

本研究では、深層学習による物体検出手法と検出精度と HOG 特徴量の実行時間の比

較を行うためにシステムを実装する必要がある。本章では、本研究に使用した深層学習

による物体検出手法の Faster R-CNN、YOLO、SSD の三手法と、OpenCV(桑井博之他.

2014)を用いた HOG特徴量による検出の実装方法について説明する。OpenCVについて

は本章で説明する。

4.1 Faster R-CNN の実の実の実の実装装装装

本節では Faster R-CNNを実装するための方法を説明する。以下の手順で Faster R-CNN

の実装を行った。

1. Github にある chainer-faster-rcnn (Saito 2016)を ZIP形式でダウンロードした後に展

開する。

2. chainer-faster-rcnnの lib のディレクトリに移動をし、extensionをビルドする。

以下にコマンドを示す。

cd chainer-faster-rcnn

cd lib

python setup.py build_ext –i

cd ..

3. トレーニング済モデルのダウンロードを行う。以下にコマンドを示す。

wget https://dl.dropboxusercontent.com/u/2498135/faster-rcnn/ VGG16_faster_rcnn_final.model

cd ..

4. 以上の手順が完了したら、プログラムの実行を行う。

python3 forward.py --img_fn [入力画像データ] --out_fn result.jpg

以上より Faster R-CNNの実装を行うことができる。プログラムの実行において

「--img_fn」は入力画像(物体検出させたい画像)の指定、「--out_fn」は出力画像

(物体検出結果)の指定である。それぞれ、ディレクトリを指定することもでき

る。また、「--gpu 0」を付け加えることで、GPUが使用できる。

4.2 YOLO の実装の実装の実装の実装

本節では YOLO を実装するための方法を説明する。

以下の手順で YOLO の実装を行った。

1. Github にある darknet (Redmond 2016)を ZIP形式でダウンロードした後、展開して

Page 16: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

12

makeする。

2. トレーニング済モデルのダウンロードを行う。以下にコマンドを示す。

wget http://pjreddie.com/media/files/yolo.weights

3. 以上の手順が完了したら、プログラムの実行を行う。以下のコマンドによりプログ

ラムの実行を行う。

./darknet detector test cfg/voc.data cfg/yolo.cfg yolo.weights [入力画像データ]

以上より YOLO の実装を行うことができる。

4.3 SSD の実装の実装の実装の実装

本節では SSDを実装するためのダウンロードから実装するための方法を説明する。

以下の手順で SSDの実装を行った。

1. Githubにある mxnet-ssd (Zhang 2016)を ZIP形式でダウンロードした後、展開する。

https://github.com/zhreshold/mxnet-ssd

2. プログラムを実行する。以下のコマンドにより実行できる。

python demo.py --cpu --images [入力画像データ]

4.4 HOG 特徴量特徴量特徴量特徴量によるによるによるによる人物人物人物人物検出の実装検出の実装検出の実装検出の実装 OpenCVを使用することにより、HOG特徴量を用いた人物検出の実装を行う。プロ

グラムは付録 1に示す。ここで OpenCVとは、画像や動画の処理を容易にすることがで

きる無償のオープンソースである。

本章では、Faster R-CNN , YOLO , SSD , HOG特徴量による検出システムの実装につい

て説明をした。第 5 章では、実装し検証を行った。

Page 17: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

13

第第第第 5 章章章章 検証検証検証検証

本章では、4章で説明した深層学習手法の 3つに対して INRIA Person datasetを評価デ

ータとすることで、実行時間と検出精度の比較を行う。INRIA Person datasetとは、多様

な人の姿勢,向き,視点や背景画像が含まれている、汎用性の高いデータセットである。

この INRIA Person datasetから、100枚の画像データをランダムに取得して評価に使用し

た。なお、閾値の値は 0.6 とした。0.6 が人物であると判断できる最低限の信頼度と考

えた。比較方法と結果は以下である。

� 実行時間実行時間実行時間実行時間

それぞれの検出手法により、100 枚の画像を検出し、1 枚あたりの画像の実行時間

(平均実行速度)を求めた(表 5.1)。

� 検出精度検出精度検出精度検出精度

それぞれの検出手法により、100枚の画像を検出し、画像中に現れている人数と検

出した人数から精度を算出した(表 5.2)。

表 5.1. 平均の実行速度

Faster R-CNN YOLO SSD HOG特徴量

平均実行速度(s) 25.28 12.34 11.19 0.21

表 5.2. 検出精度

Faster R-CNN YOLO SSD HOG特徴量

検出精度(%) 86.78 92.24 63.98 54.33

以上の結果より、平均実行速度は深層学習手法ではない HOG特徴量が最も速いこと、

また深層学習手法の中では SSDが最も速く Faster R-CNNが遅いことがわかった。

つまり以下の順である。

HOG特徴量 > SSD > YOLO > Faster R-CNN

検出精度は、深層学習手法ではない HOG特徴量が最も低いこと、また深層学習手法

の中では YOLO が最も高く、SSDが低いことがわかった。つまり以下の順である。

YOLO > Faster R-CNN > SSD > HOG特徴量

処理前の画像と実装後の画像の例を示す。なお図 5.1の画像には 6人いると判断した。

Page 18: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

14

図 5.1. 処理前の画像

処理後の画像を示す。なお検出された人は枠で示されている。

図 5.2. YOLO実装画像

Page 19: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

15

図 5.3. Faster R-CNN実装画像

図 5.4. SSD実装画像

以上の結果より、SSDの精度が低いことから閾値の変更を行ってみた。

Page 20: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

16

図 5.5の画像は、閾値が 0.6としたとき、図 5.6の画像は閾値を 0.1のときであり、低い

信頼度でようやく検出され、精度は高くないのではないかと考えられた。

図 5.5. 閾値 0.6で SSD実装

図 5.6. 閾値 0.1で SSD実装

Page 21: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

17

第第第第 6 章章章章 考察とまとめ考察とまとめ考察とまとめ考察とまとめ

HOG 特徴量は速いが検出精度が低いことが明らかになった。3 種の深層学習手法で

は、実行速度は SSDが最も速く Faster R-CNNが遅いことがわかった。考察としては、

Faster R-CNNは複数のネットワークを使用して物体検出するため、単一のネットワーク

で検出する YOLO と SSDよりかなり遅いという結果が得られたのは妥当であろう。

また検出精度は、YOLO が最も高く、SSDが低いことがわかった。検出精度が低くな

った考察は、評価にデータとして多様な人の姿勢や向きのある画像データセット INRIA

Person Datasetを使用したためであると考える。特に SSDが 3種の中で低いのはそのせ

いであろう。

展望として、検出物を人物と人物以外の 2 種に限定した学習モデルを作成すれば、

速度を維持しつつ検出精度を高めることができるのではないだろうか。また、本研究は

画像に対して人物検出を行ったが、最も検出精度が良かった YOLO に対して、GPUを

使用すれば、実時間で人物検出が可能なシステムが実現し、安全面や防犯面など生活の

場で活躍できるのではないか。

Page 22: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

18

参考文献参考文献参考文献参考文献

浅川伸一(2016).「Pythonで体験する深層学習」.コロナ社

麻生英樹他(2015).「深層学習」.近代科学社.

桑井博之他. (2014).「実践 OpenCV 2.4 for Python 映像処理&解析」. カットシステム

藤田一弥・高原歩 (2016)「実装ディープラーニング」.オーム社

藤吉弘亘 (2009). 局所特徴量の関連性に着目した Joint 特徴による物体検出. 情報処理学会

研究報告 CVIM 166

Dalal N. (2005). INRIA Person Dataset http://pascal.inrialpes.fr/data/human/ (2016年 9月参

照)

Dalal N. & Triggs, B. (2005).Histograms of Oriented Gradients for Human Detection. In

CVPR’05. pp.886-893.

Liu, W., Anguelov, D., Erhan, C. Szegedym, C. & Reed, S. E. (2016). SSD: Single Shot

MultiBox Detector. CoRR.abs/1512.02325.

M. Everingham, L. Van Gool, C. K. I. Williams, J. Winn,& A. Zisserman. (2007).

The PASCAL Visual Object Classes Challenge 2007

http://host.robots.ox.ac.uk/pascal/VOC/voc2007/index.html (2016年 10月参照)

Redmon, J. (2016). Convolutional Neural Networks

https://github.com/pjreddie/darknet (2016年 11月参照)

Redmon, J.(2016). YOLO: Real-Time Object Detection http://pjreddie.com/darknet/yolo/

(2016年 11月参照)

Redmon, J. Girshick, R., Divvala, S. & Farhadi, A. (2016). You Only Look Once:Unified,

Real-Time Object Detection. In CVPR.

Ren, S., He, K., Girshick, R. & Sun, J. (2015).Faster R-CNN: Towards Real-Time Object

Detection with Region Proposal Networks. arXiv:1506.02640.

Saito, S. (2016) Object Detection with Faster R-CNN in Chainer

https://github.com/mitmul/chainer-faster-rcnn (2016年 9月参照)

Zhang, J. Z. (2016). MXNet port of SSD: Single Shot MultiBox Object Detector.

Reimplementation of https://github.com/weiliu89/caffe/tree/ssd

https://github.com/zhreshold/mxnet-ssd (2016年 11月参照)

Page 23: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

19

謝辞

本研究においてご指導して頂いた白井英俊教授に心から感謝致します。また、様々な

意見を頂いた白井研究室の皆様に感謝致します。

Page 24: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

20

付録付録付録付録 1 . [HOG 特徴量のプログラム特徴量のプログラム特徴量のプログラム特徴量のプログラム]

「hog.py」

# Python 2/3 compatibility

from __future__ import print_function

import numpy as np

import cv2

def inside(r, q):

rx, ry, rw, rh = r

qx, qy, qw, qh = q

return rx > qx and ry > qy and rx + rw < qx + qw and ry + rh < qy + qh

def draw_detections(img, rects, thickness = 1):

for x, y, w, h in rects:

# the HOG detector returns slightly larger rectangles than the real objects.

# so we slightly shrink the rectangles to get a nicer output.

pad_w, pad_h = int(0.15*w), int(0.05*h)

cv2.rectangle(img, (x+pad_w, y+pad_h), (x+w-pad_w, y+h-pad_h), (0, 255, 0),

thickness)

if __name__ == '__main__':

import sys

from glob import glob

import itertools as it

print(__doc__)

hog = cv2.HOGDescriptor()

hog.setSVMDetector( cv2.HOGDescriptor_getDefaultPeopleDetector() )

for fn in it.chain(*map(glob, default + sys.argv[1:])):

Page 25: 深層学習による人物検出 - SIRAI's Weblang.sist.chukyo-u.ac.jp/Classes/seminar/Papers/2016/Kaiju-Final-paper.pdf · 題目 深層学習による人物検出 学籍番号

21

print(fn, ' - ',)

try:

img = cv2.imread(fn)

if img is None:

print('Failed to load image file:', fn)

continue

except:

print('loading error')

continue

found, w = hog.detectMultiScale(img, winStride=(8,8), padding=(32,32), scale=1.05)

found_filtered = []

for ri, r in enumerate(found):

for qi, q in enumerate(found):

if ri != qi and inside(r, q):

break

else:

found_filtered.append(r)

draw_detections(img, found)

draw_detections(img, found_filtered, 3)

print('%d (%d) found' % (len(found_filtered), len(found)))

cv2.imshow('img', img)

ch = 0xFF & cv2.waitKey()

if ch == 27:

break

cv2.destroyAllWindows()