(57)【要約】【課題】たたみこみニューラルネットワークを使用した特定の物体の検出を高速化する。【解決手段】入力された画像から特定の物体を検出する物体検出装置であって、入力された画像上の画素について畳みこみ計算を行う複数のニューロンと、複数のニューロンの出力から１個の値を計算するプーリングニューロンとを含むニューラルネットワークを、１層以上積層して特徴マップを出力する特徴抽出部と、特徴抽出部から出力される特徴マップを入力してスライディングウィンドウ処理を実行して複数の特徴マップウィンドウを出力するスライディングウィンドウ部と、特徴マップウィンドウを入力して特徴マップウィンドウ内に特定の物体が含まれるか否かを判定する識別部と、を含む第１の検出モジュールと、前記第１の検出モジュールの出力を入力とする特徴抽出部と識別部を含む第２の検出モジュールをカスケード接続する。【選択図】図１
2018005520.tif 000002
【特許請求の範囲】
【請求項１】
入力された画像から特定の物体を検出する物体検出装置であって、
画素が配列された画像を入力し、前記画像上の画素について畳みこみ計算を行う複数のニューロンと、前記複数のニューロンの出力から１個の値を計算するプーリングニューロンとを含むニューラルネットワークを、１層または複数層積層して特徴マップを出力する特徴抽出部と、
前記特徴抽出部から出力される特徴マップを入力してスライディングウィンドウ処理を実行して複数の特徴マップウィンドウを出力するスライディングウィンドウ部と、
前記特徴マップウィンドウを入力して前記特徴マップウィンドウ内に特定の物体が含まれるか否かを判定する識別部と、を含む第１の検出モジュールと、
前記第１の検出モジュールの出力を入力とする第２の検出モジュールをカスケード接続し、
前記第２の検出モジュールは、
前記画像を入力し、前記画像上の画素について畳みこみ計算を行う複数のニューロンと、前記複数のニューロンの出力から１個の値を計算するプーリングニューロンとを含むニューラルネットワークを、１層または複数層積層して特徴マップを出力する特徴抽出部と、
前記特徴マップを入力して前記特徴マップ内に特定の物体が含まれるか否かを判定する識別部と、を含むことを特徴とする物体検出装置。
【請求項２】
請求項１に記載の物体検出装置であって、
前記第１の検出モジュールに、１以上の前記第２の検出モジュールをカスケード接続した第１のスケールと、
前記第１の検出モジュールに、１以上の前記第２の検出モジュールをカスケード接続した第２のスケールと、
前記第１のスケールと前記第２のスケールに入力画像を入力する入力部と、
前記第１のスケールの出力と、前記第２のスケールの出力を入力して集約する集約部と、
を有することを特徴とする物体検出装置。
【請求項３】
請求項２に記載の物体検出装置であって、
前記入力部は、
前記第１のスケールと前記第２のスケールでサイズの異なる入力画像を与えるリスケール部を含むことを特徴とする物体検出装置。
【請求項４】
入力された画像から特定の物体を検出する物体検出方法であって、
画素が配列された画像を第１の検出モジュールへ入力し、前記第１の検出モジュールの出力をカスケード接続された第２の検出モジュールへ入力し、
前記第１の検出モジュールは、
前記画像上の画素について畳みこみ計算を行う複数のニューロンと、前記複数のニューロンの出力から１個の値を計算するプーリングニューロンとを含むニューラルネットワークを、１層または複数層積層した特徴抽出部で特徴マップを出力し、
前記特徴抽出部から出力される特徴マップを入力してスライディングウィンドウ処理を実行するスライディングウィンドウ部が、複数の特徴マップウィンドウを出力し、
前記特徴マップウィンドウを入力する識別部が、前記特徴マップウィンドウ内に特定の物体が含まれるか否かを判定し、
前記第２の検出モジュールは、
前記第１の検出モジュールから出力された画像を入力し、前記画像上の画素について畳みこみ計算を行う複数のニューロンと、前記複数のニューロンの出力から１個の値を計算するプーリングニューロンとを含むニューラルネットワークを、１層または複数層積層した特徴抽出部が特徴マップを出力し、
前記特徴マップを入力する識別部が、前記特徴マップ内に特定の物体が含まれるか否かを判定することを特徴とする物体検出方法。
【請求項５】
請求項４に記載の物体検出方法であって、
前記第１の検出モジュールに、１以上の前記第２の検出モジュールをカスケード接続した第１のスケールに前記画像を入力し、
前記第１の検出モジュールに、１以上の前記第２の検出モジュールをカスケード接続した第２のスケールに前記画像を入力し、
前記第１のスケールの出力と、前記第２のスケールの出力を入力とする集約部が、前記出力を集約することを特徴とする物体検出方法。
【請求項６】
請求項５に記載の物体検出方法であって、
前記第１のスケールと第２のスケールでサイズの異なる入力画像を与えることを特徴とする物体検出方法。
【請求項７】
請求項４に記載の物体検出方法であって、
前記特定の物体を含む画像のフレームサイズよりも小さいウィンドウサイズの画像に分割し、複数の第１の画像を教師データとして前記ニューラルネットワークに入力して機械学習させ、
前記機械学習のステップごとに前記フレームサイズの複数の第２の画像をテストデータとして 前記スライディングウィンドウ部または前記ニューラルネットワークに入力して得られた出力により前記機械学習の結果に関する第１の評価を行い、
前記機械学習のステップごとに前記ウィンドウサイズの複数の第３の画像をテストデータとして前記ニューラルネットワークに入力して前記機械学習の結果に関する第２の評価を行い、
前記第１の評価と前記第２の評価を総合した最適化によって最適な学習結果を選択し、
前記選択された学習結果によって前記ニューラルネットワークのウェイトを決定することを特徴とする物体検出方法。
【請求項８】
請求項７に記載の物体検出方法であって、
前記第１の評価としてfalse positivesに関する評価を行うことを特徴とする物体検出方法。
【請求項９】
請求項７に記載の物体検出方法であって、
前記第１の評価としてfalse negativesに関する評価を行うことを特徴とする物体検出方法。
【請求項１０】
請求項７に記載の物体検出方法であって、
前記第１の画像として同一の特定の物体の画像を複数種にリサイズした画像を使用し、前記第１の評価と前記第２の評価との乖離を減少させることを特徴とする物体検出方法。
【請求項１１】
請求項５に記載の物体検出方法であって、
前記集約部は、前記第１のスケールと前記第２のスケールが出力する検知結果から重複する結果を削除して出力することを特徴とする物体検出方法。
【請求項１２】
請求項７に記載の物体検出方法であって、
前記第１の検出モジュールまたは第２の検出モジュールのうち少なくともひとつをboostingによって生成し、
前記第２の検出モジュールの学習時に前記特定の物体を含まない同一の画像を複数通りにリサイズした画像を使用する ことを特徴とする物体検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、たたみこみニューラルネットワーク（ＣＮＮ：Convolutional Neural Network）を使用した歩行者の検出とそのための機械学習に関する。
【背景技術】
【０００２】
近年、多層ニューラルネットワークによる音声、画像などの認識に関する研究、いわゆる深層学習の研究が活性化している。この活性化は、第１に従来は学習させることが困難だった４層以上の多層（深層）ニューラルネットワークを、auto-encoderという機構を使用して学習させる方法が開発されたことと、第２に、たたみこみニューラルネット（ＣＮＮ）による音声や画像の認識率が大きく向上したことなどによっている。
【０００３】
静止画あるいはビデオのフレームから歩行者を検出するためには、まずフレームから候補を切り出す必要がある。そのために使用されるのがスライディング・ウィンドウ生成器である。スライディング・ウィンドウ生成器はフレーム上でさまざまなサイズのウィンドウをスライドさせて、少しずつずれた位置から小画像を切り出し、多数の小画像を生成する。画像認識にＣＮＮを使用するときは、サイズが揃えられた小画像を入力して認識処理をおこなう。識別部において検出された複数の歩行者の候補はnon-maximum suppression（ＮＭＳ）処理によってまとめられる。
【０００４】
非特許文献１および２には複数のＣＮＮをカスケードにして使用する歩行者等の検出法が記述されている。また、特許文献１、２、３には複数のＣＮＮを使用した顔認識の方法が記述されている。さらに、非特許文献３、５には上記のようなスライディング・ウィンドウ生成器を使用せず、フレーム全体をＣＮＮに入力して処理する方法が記述されている。特に、非特許文献５にはＣＮＮの特徴マップにスライディング・ウィンドウ処理を行って生成した画像からオブジェクトを検出し、non-maximum suppression 処理によってまとめる方法が記述されている。
【０００５】
また非特許文献４においては、フレームから物体を検出するときに、１オクターブ、すなわち歩行者のサイズが ２倍になるごとに、異なる特徴検出器を使用する検出器を用いる技術が開示されている。ここでは、特徴検出器を学習によって獲得する深層学習によるのではなく、人間がプログラムした (手作りの) 特徴検出器を使用している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許第８３４５９２１号明細書
【特許文献２】米国特許第８７６１４４６号明細書
【特許文献３】米国特許第９１０４９１４号明細書
【非特許文献】
【０００７】
【非特許文献１】Anelia Angelova、Alex Krizhevsky、and Vincent Vanhoucke、“Pedestrian Detection with a Large-field-of-View Deep Network”、IEEE International Conference on Robotics and Automation (ICRA 2015)、May 2015、
【非特許文献２】Anelia Angelova、Alex Krizhevsky、Vincent Vanhoucke、Abhijit Ogale、Dave Ferguson、“Real-time Pedestrian Detection with Deep Network Cascades”、research.google.com
【非特許文献３】Pierre Sermanet, David Eigen, Xiang Zhang, Michael Mathieu, Rob Fergus, Yann LeCun、“OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks”、arXiv preprint arXiv:1312。6229、2013
【非特許文献４】Piotr Dollar、Serge Belongie、Pietro Perona、“The Fastest Pedestrian Detector in the West”、2010
【非特許文献５】Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun、“Faster R-CNN: Towards Real-time Object Detection with Region Proposal Network”、arXiv:1506. 01497v3、2016
【発明の概要】
【発明が解決しようとする課題】
【０００８】
深層学習に基づいて歩行者等の物体 (以下「歩行者」とだけ記述する) を検出するために解決しなければならない主要な４つの課題について以下に述べる。
【０００９】
第１の課題は、歩行者の検出におけるたたみこみニューラルネットワークの高速化および実時間化である。性能向上を妨げる要因としてつぎの２点がある。第１に、多層のニューラルネットワークは膨大な計算時間がかかるという問題がある。深層学習においては、より大規模なネットワークを使用することによって、より容易に高い認識性能を得ることができる。
【００１０】
そのため、画像分類などにおいてもＣＮＮに関しても多段かつ多数のフィルタを持つネットワークが使用されている。しかし、ニューラルネットワークの規模を拡大すると計算時間が膨大になり、歩行者の検出においてはGraphical Processing Unit（ＧＰＵ）などで高い並列度の計算を行っても実時間では検出できない。したがって、特に車載用の処理システムでは実用にするのが難しいという問題がある。
【００１１】
第２に、スライディング・ウィンドウ処理がもたらす計算時間の爆発の問題を解決しなければならない。ＣＮＮ に限らず、ビデオ画像などからの歩行者や物体を検出する処理においては、１枚のフレームからスライディング・ウィンドウ処理によって重なりがある多数のウィンドウが生成され、ウィンドウ単位で学習や検出が行われる。ＣＮＮは１回の処理にも時間がかかるが、これによってたたみこみ計算が冗長になって、検出にさらに膨大な時間がかかり、実用化は妨げられる。
【００１２】
第２の課題はウィンドウ単位の学習とフレーム単位の検出の乖離を無くすことである。ビデオ画像などからの歩行者や物体の検出においてはスライディング・ウィンドウ処理によって生成されるウィンドウごとに学習を行うが、この学習において好成績が得られても、フレーム単位での検出においてはよい成績がえられないことが多い。
【００１３】
歩行者の検出に限らず、また、またニューラルネットワークに限らず、ビデオ画像などからの物体検出においてはウィンドウ単位の学習結果とフレーム単位での検出結果とに大きな乖離がある。歩行者の検出においてよい成績を得るには、この問題を解決する必要がある。
【００１４】
ウィンドウ単位の成績とフレーム単位の成績が異なるひとつの原因は、１個のフレームから数１００個〜１万個程度のウィンドウが生成され、それらにおいてfalse positives が検出されると、それが加算されることにある。たとえば、これらのウィンドウのうち0．1％においてfalse positive が検出されると、1000個のウィンドウがあればフレームあたり平均１個のfalse positiveが検出されることになり、実用化するのは難しい、という問題があった。そのため、ウィンドウ単位でのfalse positivesは10−４ 以下にする必要があるといわれている。従来使用されてきている手作りの特徴抽出器の中でこの条件をみたすのはＨＯＧ（histogram of oriented gradient）特徴を使用するものだけである。
【００１５】
ウィンドウ単位の成績とフレーム単位の成績が異なるもうひとつの原因は、訓練時に正例として与える歩行者の画像やその出現頻度と、検出時に現れる歩行者の画像やその出現頻度との極端な違い（３桁以上の違い）にあると考えられる。このようにデータのクラスごとに頻度に極端な違いがある問題はclass imbalance problemと呼ばれる。
【００１６】
訓練時にはサイズ、位置、背景画像が管理された歩行者の画像が与えられるのに対して、検出時にはどのような画像が出現するか分からない。歩行者は画像の端に切断されて現れるかもしれないし、他のさまざまな物体とともに出現するかもしれない。また、訓練時には、正例と負例は１対１またはそれに近い比率で出現するが、検出時には０．１％以下の頻度でしか出現しない事例が多い。
【００１７】
このようなウィンドウ単位の画像とフレーム単位の画像との違いのため、歩行者の検出のウィンドウごとの成績とフレームごとの成績との関係はほとんど無関係に見える場合すらある。この乖離を埋める方法を開発することが必要である。
【００１８】
第３の課題はネットワークとデータの複雑さによる学習の困難さである。大規模なニューラルネットワークのふるまいは複雑であり、それによって学習させて検出しようとしているデータも多様で複雑である。これらの複雑さはニューラルネットワークの学習を困難なものにしている。
【００１９】
まずネットワークの複雑さに関していえば、最近の研究においてよく使用される大規模なＣＮＮは、たとえ反復構造が使われて構造的には比較的単純であっても、その処理内容は複雑であり、学習させるのは容易でない。訓練のためのさまざまな指針が提案されているが、その内容は必ずしも科学的ではなく、大規模なＣＮＮの学習は工学的には非常な困難がある。また、データの多様さや、複雑さについて、特に歩行者の検出に関していえば、歩行者を検出するべき画像には、さまざまなサイズ、形状、色彩の歩行者が含まれていることが多い。
【００２０】
また、歩行者を検出する画像には背景としてもさまざまな画像が含まれている。しかも、前章においてのべたように歩行者が出現しない画像のほうが数桁、多い。このような多様で複雑なデータを１個のＣＮＮによって扱うには、それが大規模であるにせよ小規模であるにせよ、困難があると考えられる。
【００２１】
第４の課題は低解像度の歩行者を検出する際の認識率向上である。従来の歩行者検出法において認識率が低かったのは、低解像度の画像での歩行者の検出に関しては高解像度のときに有効な方法が必ずしも有効ではなく、またそれを補う方法も開発されていないためである。
【００２２】
高解像度の画像ではhistogram of oriented gradient（ＨＯＧ）とよばれる特徴量が歩行者または物体の検出にもっとも有効である。しかし、ＨＯＧ特徴においてはヒストグラムという統計的な方法を使用するため、分析の際に解像度が低下する。そのため、低解像度の歩行者の検出においてはＨＯＧはあまり有効でなく、他にも有力な方法は知られていない。
【００２３】
そこで本発明は、上記問題点に鑑みてなされたもので、たたみこみニューラルネットワークを使用した特定の物体（歩行者）の検出を高速化することを目的とする。
【課題を解決するための手段】
【００２４】
本発明は、入力された画像から特定の物体を検出する物体検出装置であって、画素が配列された画像を入力し、前記画像上の画素について畳みこみ計算を行う複数のニューロンと、前記複数のニューロンの出力から１個の値を計算するプーリングニューロンとを含むニューラルネットワークを、１層または複数層積層して特徴マップを出力する特徴抽出部と、前記特徴抽出部から出力される特徴マップを入力してスライディングウィンドウ処理を実行して複数の特徴マップウィンドウを出力するスライディングウィンドウ部と、前記特徴マップウィンドウを入力して前記特徴マップウィンドウ内に特定の物体が含まれるか否かを判定する識別部と、を含む第１の検出モジュールと、前記第１の検出モジュールの出力を入力とする第２の検出モジュールをカスケード接続し、前記第２の検出モジュールは、前記画像を入力し、前記画像上の画素について畳みこみ計算を行う複数のニューロンと、前記複数のニューロンの出力から１個の値を計算するプーリングニューロンとを含むニューラルネットワークを、１層または複数層積層して特徴マップを出力する特徴抽出部と、前記特徴マップを入力して前記特徴マップ内に特定の物体が含まれるか否かを判定する識別部と、を含む。
【発明の効果】
【００２５】
本発明によれば、歩行者の検出において次の４つの効果がえられる。すなわち、第１にたたみこみニューラルネットワークを使用した特定の物体（歩行者）の検出が高速化され実時間で処理できるようになり、車両搭載システムへの実装も可能になる。第２にウィンドウ単位の学習とフレーム単位の検出との乖離が減少するため、歩行者の検出における認識率が向上する。第３にニューラルネットワークの構造が単純化され、アンサンブルを構成する個々のニューラルネットの処理対象も限定されるため、学習が容易になる。第４に低解像度の画像から歩行者を検出する際の認識率が向上する。
【図面の簡単な説明】
【００２６】
【図１】本発明の実施例を示し、ＣＮＮアンサンブル検出器の構成の一例を示すブロック図である。
【図２Ａ】本発明の実施例を示し、ウィンドウＣＮＮの構成の一例を示すブロック図である。
【図２Ｂ】本発明の実施例を示し、全画面ＣＮＮの構成の一例を示すブロック図である。
【図３Ａ】本発明の実施例を示し、全画面ＣＮＮのカスケードの各段の出力の扱いを示す図である。
【図３Ｂ】本発明の実施例を示し、全画面ＣＮＮからウィンドウＣＮＮのカスケードの各段の出力の扱いを示す図である。
【図４】本発明の実施例を示し、スケール内での歩行者サイズと位置の認識のための分類を示す図である。
【図５】本発明の実施例を示し、魚眼カメラの画像の処理を示す図である。
【図６】本発明の実施例を示し、画像フレームからのＣＮＮ訓練用の正例および負例の生成方法を示す図である。
【図７】本発明の実施例を示し、歩行者検出システムの一例を示すブロック図である。
【図８】本発明の実施例を示し、歩行者画像のサイズの分類を示す図である。
【図９】本発明の実施例を示し、歩行者検出システムのハードウェアの構成の一例を示すブロック図である。
【図１０Ａ】本発明の実施例を示し、ＣＮＮの精度指標と再現率指標を示すグラフである。
【図１０Ｂ】本発明の実施例を示し、ＣＮＮの精度指標と再現率指標を示すグラフである。
【発明を実施するための形態】
【００２７】
以下、本発明の実施形態を添付図面に基づいて説明する。
【００２８】
本実施例においては、図７に示す歩行者検出システム７００の主要部分である歩行者検出部７０２を「ＣＮＮアンサンブル検出器」と呼ぶ。以下、まず歩行者検出システムの全体を説明し、つづいてＣＮＮアンサンブル検出器の構成と検出の処理を記述し、さらに学習の方法を記述する。
【００２９】
＜歩行者検出システムの構成＞
図７に車両７０１に搭載された歩行者検出システム７００の構成を記述する。このシステムにおいては、ビデオカメラ７１１、７１２、７１３、７１４によって車両７０１（歩行者検出システム７００には含まれない）の前方および側方または後方を撮影し、その画像に含まれる歩行者がコンピュータのハードウェアとソフトウェアとによって構成される歩行者検出部７０２によって検出されると、表示及び警報部７０３が稼働する。すなわち、歩行者の存在をディスプレイ等によって表示するか、音声により警報を発する。
【００３０】
なお、後述するように、ビデオカメラ７１１、７１２、７１３、７１４は魚眼レンズを有し、車両７０１の周囲を撮影する。
【００３１】
図９は、歩行者検出システム７００のハードウェアの構成の一例を示すブロック図である。歩行者検出システム７００のハードウェアは、演算処理を行うＣＰＵ１１と、主に浮動小数点の演算を行うＧＰＵ１２と、プログラムやデータを保持するメモリ１３と、プログラムやデータを格納するストレージ１４と、ＣＰＵ１１とデバイスを接続するインタフェース１５と、インタフェース１５を介して接続された入出力装置１６と、インタフェース１５を介して接続されたビデオカメラ７１１〜７１４と、を含む。
【００３２】
メモリ１３には、歩行者検出プログラム７０２１がロードされてＣＰＵ１１及びＧＰＵ１２によって実行される。ＣＰＵ１１及びＧＰＵ１２は、後述のＣＮＮアンサンブル検出器として機能する。入出力装置１６は、例えば、ディスプレイとタッチパネル等で構成される。
【００３３】
＜ＣＮＮアンサンブル検出器による検出の方法＞
以下、ＣＮＮアンサンブル検出器の構成と検出の処理について説明する。
【００３４】
（ＣＮＮアンサンブル検出器の構成）
この実施例においては図１のようにＣＮＮ（１１１〜１１３、１２１〜１２３、１３１〜１３３）をアンサンブルで使用してＣＮＮアンサンブル検出器１００を構成する。この節においてはまずその全体構成を記述し、その後、スケール（１〜３）１０１〜１０３ごとの処理構成およびスケール内の構成について記述する。
【００３５】
（（全体構成））
図１を使用してこの実施例の全体構成すなわちＣＮＮアンサンブル検出器１００の構成を説明する。ＣＮＮアンサンブル検出器１００は１オクターブ単位に分割された３つのスケールすなわちスケール１（１０１）、スケール２（１０２）、スケール３（１０３）から構成され、各スケールは１段以上（ここでは３段、すなわちスケール１（１０１）においては１１１、１１２、１１３、スケール２（１０２）においては１２１、１２２、１２３、スケール３（１０３）においては１３１、１３２、１３３）のＣＮＮのカスケードによって構成される。
【００３６】
スケール数及びカスケード数はより多いほうが性能向上を図れる可能性がある。スケールごとの処理を行った後、画像から検出された歩行者の情報をｎｏｎ−ｍａｘｉｍｕｍ  ｓｕｐｐｒｅｓｓｉｏｎ（ＮＭＳ）１４０（集約部）という処理部によってまとめる。すなわち、スケールごとの検知モジュールの出力から重複する検知結果を１個にまとめる。従来の深層学習の大半においては１個の大規模なニューラルネットワークを使用していたが、これは脳神経系のような億単位の要素からなる超並列アーキテクチャに適した（より高速化できる）方法であり、ＧＰＵのような千・万単位の演算要素からなる並列アーキテクチャにおいては従来型の制御構造を取り入れたＣＮＮアンサンブル検出器１００のような構成のほうが適していると考えられる。
【００３７】
（（スケールごとの処理構成））
画像はスケール（１〜３）１０１〜１０３ごとに、すなわち検出するべき歩行者の画像をサイズ範囲ごとに処理するが、いずれのスケールにおいてもリスケールによって同一サイズにして扱うことができる。
【００３８】
入力画像１４１はまずリスケールされ、スケール２（１０２）においては縦横の画素数がそれぞれ半分の画像１４２と、スケール３（１０３）においては縦横の画素数がそれぞれ１／４の画像１４３を扱う。また、入力画像１４１は、そのままスケール１（１０１）へ入力される。図示の例では、入力画像１４１の画素数は１２８０×４４８の例を示す。
【００３９】
各ＣＮＮは学習時には幅３２ピクセル、高さ６４ピクセルというウィンドウ・サイズの画像を扱う、すなわち学習画像は３２×６４である。しかし、歩行者の画像の検出時にはフレーム全体を入力し、各スケールの少なくとも初段においてはＣＮＮ内でウィンドウに分割する。
【００４０】
すなわち、スケール１（１０１）においては原寸の入力画像１４１を、スケール２（１０２）においては原寸の半分のサイズ、スケール３（１０３）においては原寸の１／４のサイズのフレーム全体を入力する。また、ひとつのスケールは１オクターブ（２倍）の範囲の画像を扱う。すなわち、各スケールにおいて、リスケール後のサイズで高さがほぼ３３〜６４ピクセルの範囲の歩行者の画像を扱う（実際は歩行者の高さではなく学習画像に含まれるbounding boxのサイズが３３〜６４ピクセルなので、歩行者の画像の高さにはばらつきが生じる）。なお、図示はしないが、各スケール１〜３（１０１〜１０３）の前段には、入力画像１４１を各スケール１〜３に分配する入力部を有し、入力部は各スケール１〜３毎に入力画像１４１のサイズをそれぞれ変更するリスケール部を含む。
【００４１】
リスケール前でいえば、スケール１ （最小スケール）１０１においては３３〜６４ピクセル、スケール２（１０２）においては６５〜１２８ピクセル、スケール３（最大スケール）１０３においては１２９ピクセル以上の歩行者の画像を扱う。ただし、学習画像として使用するbounding boxのサイズをずらしたほうがよい場合もある。たとえば、スケール１（１０１）において使用するサイズを４９〜８０ピクセルとするほうがよい場合もある。
【００４２】
本実施例では、高さ５０ピクセル以上の歩行者の画像の認識率を９０％以上にすることを目標にしているため、高さ３２ピクセル以下の歩行者の画像は検出しなくてもよいことにして、学習対象から外している。また、高さ２５７ピクセル以上の歩行者の画像はその全体を検出することができない（スケール３のウィンドウ１２８×２５６に収まらない）が、テクスチャなどによって検出することを目指している。
【００４３】
ただし、入力画像１４１をリスケールせずにスケールごとに異なるサイズの画像を扱うことも可能であり、またリスケール後のサイズがスケールごとに異なるように決めることもできる。大きなスケールの画像の方が微細な特徴が存在すると考えられるので、スケール２（１０２）以上ではスケール１（１０１）より大きな画像をＣＮＮに入力したほうが利点がある可能性がある。さらに，上記の実施例においてはスケール数を一定にしているのに対して，検知の途中でスケール数を変更することもできる。すなわち、図１のＣＮＮカスケード検出器からＮＭＳを除いた部分をカスケードさせることもできる。このとき、カスケードの２段め以降は後述する全画面ＣＮＮとし、入力された全画面を変更させたスケール数にあわせてあらたにリスケールしてから処理する。
【００４４】
上記の方法においては、学習時にbounding boxのサイズだけで画像を３つのスケールに分類したが、学習用の画像を解像度によって分類することもできる。画像認識においては画像のサイズが同一でも解像度が異なるものがある。すなわち、レンズの焦点距離などの違いにより、画像のサイズは大きいが解像度が低い場合がある。リサイズを伴う画像認識においてはサイズの違いより解像度の違いのほうがより重要だと考えられる。解像度による分類のためには画像を解析する必要があり、計算時間が増加するためトレードオフがある。しかし、解像度を揃えることのほうがより重要であれば、空間周波数範囲などによって画像を分類すればよい。
【００４５】
一方、歩行者の検出時にはＣＮＮアンサンブル検出器１００の各スケール１〜３（１０１〜１０３）において、つぎのようなリサイズによってサンプル数を増加させた（oversamplingした）入力画像１４１〜１４３を扱う。
【００４６】
まず、アンサンブル検出器１００は、入力画像１４１（左端）を３つのスケールにリサイズする。スケール１（１０１）では元のサイズで扱い、スケール２（１０２）では縦横の画素数をそれぞれ１／２とし、スケール３（１０３）では縦横の画素数をそれぞれ１/４にリサイズする。
【００４７】
さらに、ＣＮＮアンサンブル検出器１００は、実時間処理を目指しているため、それぞれのスケールにおいて歩行者が存在しないと考えられる領域は検出範囲から外す。例えば図１においては入力画像１４１のフレーム・サイズを１２８０×４４８としているが、このときスケール３（１０３）においてはその全体を使用するため、リスケール後の画像サイズは３２０×１１２となる。また、スケール２（１０２）においては検出範囲を図中上部の１２８０×２５６の範囲に限定するため、リスケール後の画像サイズは６４０×１２８となる。さらに、スケール１（１０１）においては検出範囲を図中上部の１２８０×１９２の範囲に限定するため、画像サイズは１２８０×１９２となる。
【００４８】
（（スケール内のカスケード構成））
カスケードの各要素であるＣＮＮは、図２Ｂに示す全画面ＣＮＮ２１０または図２Ａに示すウィンドウＣＮＮ２００であり、いずれも歩行者の画像の候補であるウィンドウのフィルタとして作用する。図１の構成では、全画面ＣＮＮ１１１、１２１、１３１が図２Ｂに示す全画面ＣＮＮ２１０で構成され、ＣＮＮ１１２、１１３、１２２、１２３、１３２、１３３が図２Ａに示すウィンドウＣＮＮ２００で構成される。
【００４９】
初段（全画面ＣＮＮ１１１、１２１、１３１）においては処理するべきフレームのすべてのウィンドウが候補だが、後段においては前段で候補からはずれたウィンドウは処理しなくてよい。初段においては入力画像１４１、１４２、１４３フレームのすべての部分を処理する必要があるため、たたみこみ計算に重複のない全画面ＣＮＮ２１０を採用することで計算量を抑制し、処理が高速化される。しかし、後段に全画面ＣＮＮを使用するとフレームのすべての部分を処理することになるので、無駄な計算が生じる。
【００５０】
そのため、初段において十分に候補を絞り込めるときは、後段にはウィンドウＣＮＮ２００を採用する処理が高速化される。図１の例では、２段目の直前においてフレームをウィンドウに分割する処理をおこない、以下のすべての段でそれらのウィンドウの中から必要なものを選択して使用すればよい。この処理はスライディング・ウィンドウ処理に近いが、初段で候補から落とされた部分はウィンドウの切り出しを行う必要がない。
【００５１】
ただし、初段で検出される候補数は入力画像１４１、１４２、１４３に依存するため、後段をウィンドウＣＮＮ２００によって構成するとウィンドウ数が一定せず計算時間が安定しないという欠点が生じるのに対して、全段を全画面ＣＮＮ２１０によって構成すると計算時間が一定になるという利点がある。
【００５２】
ＣＮＮはスケール１〜３（１０１〜１０３）ごとに独立して最適化し、歩行者の画像の検出性能の向上と処理時間の短縮を図る。すなわち、スケール１〜３（１０１〜１０３）ごとにフィルタ数や全結合ニューロン数を変化させ、スケール１〜３（１０１〜１０３）ごとに異なる学習を行って異なるウェイトを使用することにより、より最適化された結果を得ることができる。
【００５３】
たとえば、スケール１（１０１）においてはフィルタ数を８、１１、１１（ＣＮＮの初段のたたみこみ層で８個、２段目および３段目のたたみこみ層において１１個）とし、スケール２（１０２）、３（１０３）においてはフィルタ数を１６、２２、２２とすることができる。
【００５４】
スケール１（１０１）のフィルタ数をスケール２（１０２）、３（１０３）より少なくする理由は、第１にスケール１（１０１）のほうが検出するべき特徴の数が少ないと考えられること。また、第２に経験的にフィルタ数がことなるＣＮＮをカスケードするほうが検出性能を向上させることができること、さらに第３にスケール１のＣＮＮの規模をおさえて高速化することが全体の高速化により寄与することである。カスケードするＣＮＮの順序を変更しても検知結果に変化はないが、処理時間は変化するため、順序を変更して最適化することができる。フィルタ数がすくないＣＮＮを先頭におくことでＣＮＮの処理時間は減少するが、一方で順序変更によって通常はフィルタ性能が低下するすなわち絞りこみがゆるくなるため、比較して選択すればよい。
【００５５】
さらに、カスケードされた複数のＣＮＮは段ごとに最適化することができる。現在は全段で同一のフィルタ数を使用しているが、同一である必要はない。初段で十分に絞り込める場合は、初段のＣＮＮの規模を抑えたほうが処理の高速化につながる。逆に、２段目以降は全体の処理時間に占める割合が低いので、規模を拡大して認識性能を向上させることが可能である。
【００５６】
（（全スケールの統合））
図１に記述したように、最後に各スケール１〜３の検出結果をＮＭＳ１４０によってまとめる。ＮＭＳ１４０にはさまざまな方法があるが、スケール１〜３ごとの処理において十分に（１０−４まで）false positivesを減少させることができるときは単純でgreedyな方法（例えば、greedy algorithm）によって、各スケール１〜３で検出した歩行者の画像をまとめ（重複する検知結果を１個に集約し）、判定結果として出力することができる。本実施例はこのような公知または周知の方法によって処理できることを前提としている。
【００５７】
（各ＣＮＮの構成）
ＣＮＮアンサンブル検出器１００において使用するＣＮＮとして、以下に説明する全画面ＣＮＮ２１０（第１の検出モジュール）とウィンドウＣＮＮ２００（第２の検出モジュール）のどちらを使用しても機能的には変わらない。少なくとも各スケール１〜３の初段は全画面ＣＮＮ２１０を使用することによって処理速度が向上するが、条件によってはウィンドウＣＮＮ２００を使用した方が処理速度が向上することもある。このように条件によって使用するＣＮＮを切り替えることができるのが、この全画面ＣＮＮ２１０を使用する方法の特徴である。以下、これらのＣＮＮの構成について説明する。
【００５８】
（（ウィンドウＣＮＮの構成））
ＣＮＮ（以下ウィンドウＣＮＮと呼ぶ）２００は、図２Ａに示すように特徴抽出部（たたみこみ部）２０１と、識別部（全結合部）２０３から構成される。特徴抽出部２０１はたたみこみ（convolution）計算を行うニューロンと、とプーリング（pooling）を行うニューロンとを結合した１層または多層（図２Ａにおいては計６層）のニューラルネットワークによって構成され、特徴マップ（Feature map）を出力する。
【００５９】
また、識別部２０３は全結合ニューロンによる層とlogistic regressionなどによる出力層とからなるニューラルネットワークによって構成される。特徴抽出部２０１および全結合層のニューロンは、しきい関数（活性化関数）として折線関数ＲｅＬＵ（rectified linear unit）を使用している。
【００６０】
出力層にlogistic regressionを使用すると出力は０〜１の実数になるので、しきい値を決めて０（歩行者非検出）か１（歩行者検出）に量子化すればよい。しきい値は、例えば、０．５に設定することができるが、異なる値を使用することにより感度調整することが可能である。
【００６１】
（（全画面ＣＮＮの構成））
前記第１の課題におけるたたみこみ計算の重複をなくすには、ＣＮＮに入力する前にスライディング・ウィンドウ処理を行うのをやめてフレーム全体をＣＮＮに入力すればよい。すなわち、公知または周知のＣＮＮ（ウィンドウＣＮＮ２００）は図２Ａに示すように特徴抽出部（たたみこみ部）２０１と識別部２０３とで構成され、いずれもウィンドウ単位の処理を行うが、本実施例においてはて全画面一括処理用のＣＮＮ（全画面ＣＮＮ２１０）を使用する。
【００６２】
全画面ＣＮＮは、図２Ｂに示すように、特徴抽出部（たたみこみ部）２１１と、スライディング・ウィンドウ部２１２と、識別部（全結合部）２１３から構成される。すなわち、特徴抽出部２１１は、入力された画像上の画素について畳みこみ計算を行う複数のニューロンと、複数のニューロンの出力から１個の値を集約演算するプーリングニューロンとを含むニューラルネットワークを、１層または複数層積層して複数の特徴マップ（Feature maps）を出力する。
【００６３】
スライディングウィンドウ部２１２は、特徴抽出部２１１から出力される特徴マップを入力してスライディングウィンドウ処理を実行して複数の特徴マップウィンドウを生成して出力する。識別部２１３は、スライディングウィンドウ部２１２から特徴マップウィンドウを入力して特徴マップウィンドウ内に歩行者（または特定の物体）の画像が含まれるか否かを判定する。
【００６４】
まず、特徴抽出部２１１に入力画像１４１のフレーム全体を入力し、特徴抽出部２１１から出力された特徴マップ上をスライディング・ウィンドウ部２１２に入力して多数のウィンドウを生成し、各ウィンドウを識別部２１３に入力する。
【００６５】
これによって、元のフレームをスライディング・ウィンドウ処理によって新たなウィンドウ（特徴マップウィンドウ）を生成してから、上記公知または周知のＣＮＮに入力したときと同じ結果を識別部２１３から出力することができる。
【００６６】
全画面ＣＮＮ２１０またはウィンドウＣＮＮ２００は図２Ｂに示すようにフレーム全体（ここでは６４０×４８０のサイズ）を入力する。この実施形態において使用する全画面ＣＮＮの特徴抽出部２１１は、次の各層から構成され、フィルタ数（カーネル数）とウェイトだけが異なる（層の数やフィルタ・サイズ、プーリングの方法やそれを行うかどうかなどの点は変更することが可能である）。
・たたみこみ層１：フィルタ・サイズは５×５
・プーリング層１：縦横それぞれ１／２の最大プーリング（ｍａｘ  ｐｏｏｌｉｎｇ）による縮小を行う。
・たたみこみ層２:フィルタ・サイズは３×３
・プーリング層２:縦横それぞれ１／２の最大プーリング（ｍａｘ  ｐｏｏｌｉｎｇ）による縮小を行う。
・たたみこみ層３：フィルタ・サイズは３×３
・プーリング層３：縦横それぞれ１／２の最大プーリング（ｍａｘ  ｐｏｏｌｉｎｇ）による縮小を行う。
【００６７】
スライディング・ウィンドウ部２１２はプーリング層から出力される全画面特徴マップ（図中Ｆｅａｔｕｒｅ  Ｍａｐｓ）を入力し、（対応するウィンドウＣＮＮのウィンドウ・サイズが３２×６４のときは）２×６のサイズのウィンドウを縦横に１ピクセルずつスライドしながら２×６のサイズの複数の画像（ウィンドウ特徴マップ）を出力する。このウィンドウのサイズは、上記と同一のパラメタ（層数、フィルタサイズ、プーリング）を持つウィンドウＣＮＮの全結合層が入力する特徴マップのサイズに等しい（図１参照）。
【００６８】
また、各全画面ＣＮＮ２１０の識別部２１３はつぎの２層から構成される。第１の層は全結合層であり、５０個または３０個のニューロンから構成される。各ニューロンはウィンドウ特徴マップの全体から入力する。ウィンドウ・サイズが３２×６４、特徴抽出部２１１の構成が上記のとおりであるときは、図２Ｂに示したように全結合層に入力する特徴マップのサイズは２×６となる。
【００６９】
第２の層は出力層であり、１個または２個のlogistic regressionを計算するニューロンから構成される。いずれのニューロンも全結合層のすべてのニューロンと結合される。出力層からの出力は１個の０〜１の実数値（または和がちょうど１になる２個の実数値）となる。
【００７０】
縦横１／８に縮小された全画面特徴マップ上で２×６のウィンドウを１ピクセルずつスライドさせることは、原画像（入力画像１４１）において３２×６４のウィンドウを８ピクセルずつスライドさせることに相当する。したがって、各特徴マップ・ウィンドウからの入力を処理した識別部の出力は、対応する原画像上の８ピクセルずつずれたウィンドウを公知または周知のＣＮＮによって処理した結果を配列したものと一致する。
【００７１】
（（全画面ＣＮＮの利点））
上記のように、公知または周知のＣＮＮを全画面ＣＮＮ２１０に置き換えることによって機能には変化がないが、次のような２つの利点が生じる。第１に、従来の方法（ウィンドウＣＮＮ２００）においては重なりのある複数のウィンドウからの計算において冗長なたたみこみ計算が行われるが、この方法によって冗長な計算を削減できる。また第２に、従来の方法（公知または周知のスライディング・ウィンドウ）と較べてこの方法においては縦横それぞれ１／８の画像上でスライディング・ウィンドウの計算を行うため、その計算量をはるかに減少させることができる。
【００７２】
また、プーリングによって画像をさらに縮小させればスライディング・ウィンドウの計算量をさらに減少させることができる。しかし、それによって原画像上でのスライド量が増加し、特徴マップの情報量が減少するため、必ずしも適切ではない。原画像がより大きければさらに縮小させたほうがよいが、原画像がより小さいときはプーリングの回数を減らして縮小率を抑える方がよいと考えられる。
【００７３】
（ＣＮＮアンサンブル検出器の設計におけるＣＮＮの選択）
ＣＮＮアンサンブル検出器１００を設計する際には、全画面ＣＮＮ２１０とウィンドウＣＮＮ２００のうちから、使用するＣＮＮを次のように決める必要がある。上記のようにＣＮＮアンサンブル検出器１００の各スケールの初段においては全画面ＣＮＮ２１０を使用することによって計算量の削減と処理の高速化が可能になるが、２段目以降においては必要に応じてウィンドウＣＮＮ２００または全画面ＣＮＮ２１０を選択する。
【００７４】
すなわち、初段の全画面ＣＮＮ２１０において十分に候補を絞ることができるときは、ウィンドウＣＮＮ２００を使用したほうが処理量が減少し、高速化することができる。
【００７５】
全画面ＣＮＮ２１０を使用するときは、各段の検出結果をビットマップで表現し、（logistic regressionの出力を０または１に量子化し）、それらの論理積（and）をとればよい（図３Ａ参照）。したがって、検出結果はカスケードにする代わりにすべての全画面ＣＮＮを並列に実行させて論理積をとるようにすることができる。
【００７６】
図３Ａにおいては図１におけるスケール１（１０１）、スケール２（１０２）またはスケール３（１０３）のカスケードを３個の全画面ＣＮＮ３１１、３１２、３１３を使用して実行する方法を記述している。
【００７７】
すなわち、全画面ＣＮＮ１（３１１）はフレーム３２１を入力して出力画像すなわち特徴マップ３２２を出力し、全画面ＣＮＮ１（３１２）はフレーム３２１を入力して出力画像すなわち特徴マップ３２３を出力し、全画面ＣＮＮ３（３１３）はフレーム３２１を入力して出力画像すなわち特徴マップ３２３を出力する。
【００７８】
特徴マップは０〜１の実数値の２次元配列として表現されるが、論理積処理３１４においてはこれをしきい値（本実施例では０．５）未満か否かで０、１の整数値に変換し、その積を算出する。その結果（０、１の値からなる２次元配列）が検出結果３５１である。
【００７９】
ただし、ＮＭＳ１４０においては複数の検出結果をその値の大小によってソートするため、論理積処理３１４において入力するそれぞれの実数値に関して単調増加（正確には単調非減少）の関数を使用することが望ましい。そのため、整数値の積の代わりに実数値の積や最小値関数や他の多入力の単調増加関数によって結果（関数値）を算出することができる。
【００８０】
上記の方法は並列度の高いハードウェアにおいては有効だが、従来ではカスケードにするほうが計算時間を削減できる。すなわち、初段において候補を十分に絞り込むことができれば、２段目以降はウィンドウＣＮＮ２００を使用することによって、絞り込まれた候補だけを処理すればよくなるので計算量を削減できる。
【００８１】
このときは、初段の実行後に候補をウィンドウとして切り出し、その配列を２段目以降に渡せばよい（図３Ｂ参照）。切り出すウィンドウの位置はスライディング・ウィンドウ部２１２が出力する位置と等しい。図３Ｂにおいては図１におけるスケール１（１０１）、スケール２（１０２）またはスケール３（１０３）のカスケードを１個の全画面ＣＮＮ３１１と２個のウィンドウＣＮＮ３３３、３３４を使用して実行する方法を記述している。
【００８２】
すなわち、全画面ＣＮＮ１（３１１）はフレーム３２１を入力して出力画像すなわち特徴マップ３２２を出力するが、ウィンドウ生成３３１においてフレーム３２１と特徴マップ３２２から、歩行者の画像が検出された部分のウィンドウ（しきい値をこえたウィンドウ）だけからなるウィンドウ配列３４１を生成する。
【００８３】
このウィンドウ配列３４１は特徴マップ（２次元配列）とは異なり１次元の配列である。ウィンドウＣＮＮ２（のくりかえし処理）３３３はこのウィンドウ配列３４１を入力して、歩行者の画像を検出したウィンドウ（しきい値を超えたウィンドウ）だけからなるウィンドウ配列３４２を出力する。
【００８４】
このウィンドウ配列３４２の構造はウィンドウ配列３４１と同じだが、ウィンドウＣＮＮ２３３３がフィルタリングを行うため、要素数は減少する。ウィンドウＣＮＮ３（のくりかえし処理）３３４はこの配列を入力して、歩行者の検出結果３５１を出力する。ウィンドウＣＮＮ３はウィンドウＣＮＮ２（３３３）と同様に結果を配列として出力することもできるが、図３Ｂにおいては特徴マップに対応した検出結果（０〜１の値の２次元配列）を出力することにより、図３Ａと同一の結果を得ている。
【００８５】
ウィンドウ生成３３１、ウィンドウＣＮＮ２（３３３）、ウィンドウＣＮＮ３（３３４）においてウィンドウ配列の要素として検出画像とともにlogistic regressionによる出力値をあわせて保存し、各出力値の積もしくは団長増加関数による計算結果をウィンドウＣＮＮ３（３３４）における処理の最後に算出することによって、ウィンドウＣＮＮ２（３３３）およびウィンドウＣＮＮ３（３３４）の両方でしきい値をこえた部分に関しては出力値として図３Ａと同一の実数値の検出結果３５１をえることができる。なお、スケール数がことなる複数のＣＮＮカスケード検出器（からＮＭＳを除いた部分）をカスケードさせる場合には、前段の特徴マップを後段の特徴マップのサイズにあうようにリサイズする。これにより、複数のＣＮＮカスケード検出器にまたがって上記の配列計算（論理積処理３１４）をおこなうことができる。
【００８６】
（（ＣＮＮアンサンブル検出器の処理））
ここまではＣＮＮアンサンブル検出器１００の構造を中心に説明してきたが、ここではＣＮＮアンサンブル検出器１００で行われる処理を中心として説明する。ＣＮＮアンサンブル検出器１００においては、スケール１〜３ごとに処理を分割し、各スケール１〜３でＣＮＮをカスケードで使用することにより、比較的単純で高速なＣＮＮによって、高い検出率が実現される。以下、全スケールの処理の概観、各スケール内の処理、各スケールを統合する処理について、順に述べる。
【００８７】
第１に全スケールの処理を概観する。スケール１（１０１）においては計算量をできるだけ抑えるが、それでもスケール１の計算の比率が高いため、さらに最適化する必要がある。すなわち、スケール１（１０１）は画像サイズにおいてもウィンドウ数においても最大であり、スケール２（１０２）は画像の面積およびウィンドウ数が約１／４、スケール３（１０３）はそれらが約１／１６である。ウィンドウ数が画像の面積に比例して減少するのは、スライディング・ウィンドウ処理において縮小した入力画像上で８ピクセルずつスライドさせているからである。
【００８８】
第２に各スケール内の処理について説明する。カスケードの各段でfalse positivesをフィルタすることにより、false positivesを減少させる（目標値１０−４以下）が、その際にtrue positivesはできるだけ落とさないようにする。各段の再現率（true positivesをひろう確率）をｒ１、ｒ２、…ｒｎとすると、カスケード全体の再現率ｒは、
ｒ＝ｒ１ｒ２…ｒｎ
となる。
【００８９】
したがって、全体で必要な再現率（０．９以上）を得るためには、各ＣＮＮには高い再現率が算出される。ＣＮＮの出力における目標とする（ウィンドウ単位の）false positivesの割合は、初段において０．２％程度で、２段目までで０．０５％程度、全段で０．０１％（１０−４）以下である。
【００９０】
少なくとも初段のＣＮＮはフレーム全体を入力し、縦横それぞれ１／８に縮小された特徴マップを計算してからウィンドウに分割（sliding window）する。これにより、すでに述べたように、たたみこみ計算の重複がなくなり、スライディング・ウィンドウの計算量が減少する。２段目以降のＣＮＮは、上記の目安のように初段において十分に歩行者の画像の候補を絞ることができていれば、全画面ＣＮＮ２１０よりウィンドウＣＮＮ２００を使用するほうが無駄な計算が減少するので高速化される。
【００９１】
第３に全スケールの統合処理について説明する。スケール内の複数の検出結果および複数のスケールの検出結果はnon-maximum suppression（ＮＭＳ）処理（１４０）によって統合する。統合処理が必要になる理由は、１人の歩行者が複数のウィンドウに現れ、複数回、検出されることがあるからである。
【００９２】
重なりのあるウィンドウのそれぞれで歩行者の画像が検出されているとき、適切な仮定に基づいて検出した歩行者の画像が１人なのか否かを判定し、１人のときはいずれかのウィンドウを選択する。本実施例では最大尤度のウィンドウ（ＣＮＮにおいては１にもっとも近い出力値を持つウィンドウ）を選択するため、この処理はnon-maximum suppressionと呼ばれる。
【００９３】
複数のウィンドウに現れる歩行者の画像が１人なのか複数なのかを判定するには、例えば、ウィンドウが重なっている部分の面積が、ウィンドウの面積の半分以上であるか否かで判定する。重なりが半分未満であれば複数の歩行者が存在すると判定する。
【００９４】
上記のような単純なＮＭＳ１４０においては、尤度が大きいウィンドウを優先するため、ウィンドウを尤度順にソートしておけばgreedyに処理することができる。ただし、ＮＭＳ１４０が円滑に行われるためには各スケール１〜３の処理においてfalse positivesが十分に少ない必要がある。そうでなければ、検出した歩行者の画像がfalse positivesと統合されてしまう。したがって、ＮＭＳ１４０の前にfalse positivesを十分に減少させることができなければ、処理方法や文脈（歩行者周辺の情報など）に依存する、より複雑なＮＭＳ１４０を行う必要が生じる。文脈処理としては、歩行者の画像より検出するのが容易な車両の検出を同時に行い、歩行者の画像の検出結果から車両の検出結果を差し引いてから上記のＮＭＳ１４０を行うことができる。
【００９５】
（（魚眼カメラ画像の入力））
本実施例において検出時に魚眼カメラ画像を入力する際の処理法について記述する。図７で示したように、本実施例の歩行者検出システム７００では、車両の周囲の状況を４つの魚眼レンズを有するビデオカメラ（以下、魚眼カメラとする）７１１〜７１４で撮影する例を示している。
【００９６】
魚眼カメラによって水平方向を撮影するとき、図５に示す画像の例においては左右はおもに下方に歪み、サイズの小さな歩行者の画像は中央部では上部だけに現れる（ａ）。また、画像の下方には車両前部が映る。ＣＮＮアンサンブル検出器１００においてはスケール１〜３ごとに異なる処理を行うため、この画像をできるだけ拡大または縮小せずに歪みだけ補正したい。また、画像の中で無駄な部分は省きたい。そのため、本実施例のＣＮＮアンサンブル検出器１００では、公知または周知の魚眼補正を行う代わりに、次のような処理を行う。
【００９７】
上記のような魚眼カメラで撮影した画像に対して、ＣＮＮアンサンブル検出器１００は、図５の（ａ）〜（ｃ）に示すような画像のカット、縦方向のスライドと“遠近変換”（拡大・縮小）を組み合わせた変換を実施する。
【００９８】
すなわち、ＣＮＮアンサンブル検出器１００は、まず魚眼カメラの画像（図５（ａ））から高さ４４８（５６×８）の扇形に近い帯状の画像を切り出して、切り出した画像の左右を上に持ち上げて長方形に修正する。なお、画像の高さを４４８（ピクセル）としたのは、これによって画像の中央部は少し削られるが、それ以外はほぼ維持されるからである。
【００９９】
この変換だけで中央の歩行者はほぼ正しい形になるが、図５（ｂ）に示すように左右の歩行者が傾く。そこで、ＣＮＮアンサンブル検出器１００は、図５（ｂ）に示すようにＯｐｅｎＣＶ（Open Source Computer Vision Library）の遠近変換などによって画像上部の左右を縮め、下部の左右を伸ばす変換を実施する。なお、本実施例では高さ６４（ピクセル）程度の歩行者が現れる領域において、ほぼ拡大・縮小が無いようにした。この変換の後も画像中の左右の歩行者の画像はやや幅が狭くなるが、このままＣＮＮアンサンブル検出器１００に入力することにより歩行者の画像を検出することができる。
【０１００】
［ＣＮＮアンサンブル検出器の学習法］
以下、ＣＮＮアンサンブル検出器１００を学習させ、特徴抽出部２０１、２１１等を自動構成するための方法を記述する。
【０１０１】
（フレーム単位評価を伴うウィンドウ単位の訓練）
歩行者の画像の検出の際にＣＮＮアンサンブル検出器１００へ入力するフレーム（入力画像１４１）には複数の歩行者の画像が含まれ得る。しかし、１人の歩行者の画像を検出するだけでも複雑な処理が必要であるから、これをできるだけ１人ずつに分離して検出することによって認識率を向上させることができると考えられる。
【０１０２】
そのため、公知または周知の歩行者検出法においてはフレームをウィンドウとよばれる小さな画像に分割して学習または検出を行う。この実施例における検出法は画像をフレーム単位でＣＮＮ２１０、２００に入力するが、学習はウィンドウ単位で行う。このような学習または検出が可能なのは、検出に使用する全画面ＣＮＮ２１０が機能的には、スライディング・ウィンドウとウィンドウ単位のＣＮＮ２００による検出の組み合わせと等しいからである。
【０１０３】
ＣＮＮアンサンブル検出器１００は複数のＣＮＮ２１０、２００によって構成されるが、各ＣＮＮ２１０、２００は独立して訓練する。この訓練においてはウィンドウ・サイズの画像を使用する。この訓練において使用するウィンドウ・サイズは３２×６４（横３２ピクセル、縦６４ピクセル）である。
【０１０４】
画像データセットは同数の正例（画像）と負例（画像）とで構成する（正例と負例の比率を１対１からずらすことは可能だが、基本は１対１である）。フレームへの出現は負例のほうがはるかに多いが、訓練時にはこのように出現頻度がアンバランスだと学習によって得られる検出器の再現率が低下する（すなわち、歩行者の画像が検出されにくくなる）ため、同数を基本とする。正例、負例の生成の方法は後述するが、たとえばそれぞれ２０万個ずつ用意する。
【０１０５】
ニューラルネットワークの学習の際に、本実施例では、訓練用データ（教師データ）セットと、検証用（validation）データセットの２種類のデータセットを用意する（これに加えてテスト用データセットが使用されることもある）。そして、訓練用データセットの画像を１回使用して訓練するごとに（１ ｅｐｏｃｈごとに）評価を行う。なお、１ ｅｐｏｃｈを機械学習の学習ステップとしてもよい。
【０１０６】
そして最良の評価が得られたＣＮＮのウェイトとバイアスを保存する。しかし、歩行者の画像の検出においてはウィンドウ・サイズの検証用データセットによる評価を行ってよい成績をえても、その結果得られたＣＮＮ（ウェイト、バイアス）をフレームに適用してもよい成績が得られるとは限らない。むしろ、学習が進んでよりよい検証結果が得られても、フレームに適用した場合の成績は悪化することが多い。
【０１０７】
実験の結果、検証用データセットにおいては、誤差が１％以下になっても、フレームに適用するとそこから切り出されたウィンドウのうち半数以上から存在しない歩行者の画像が検出される場合があることが分かっている（後述）。
【０１０８】
この問題を解決するため、１ ｅｐｏｃｈの訓練を行うごとに、フレームに適用して結果を評価する。前記検証用データセット（第１の検証用データセット）の元になった画像を含むフレームを収集して第２の検証用データセットを作成し、検証時には第２の検証用データセットを全画面ＣＮＮ２１０に入力してその結果を評価する。
【０１０９】
すなわち、この方法においても従来のＣＮＮにおけるのと同様に学習はウィンドウごとに行うが、１回（ｅｐｏｃｈ）の学習が終了するたびにフレーム単位での検証（validation）を行うことによって、ウィンドウ単位とフレーム単位との乖離を減少させることができる。
【０１１０】
全画面ＣＮＮ２１０はＣＮＮ２００と同様にウィンドウ単位で、すなわちウィンドウ・サイズの画像を入力する訓練用ＣＮＮを使用して学習させる。すなわち、ウィンドウ・サイズの正例と負例を混合した訓練用データセットを生成して、反復学習を行う。しかし、反復するごとにＣＮＮ２００の学習におけるウィンドウ単位の検証（ウィンドウ・サイズのテスト・データセットを使用した検証）と併せて全画面を入力する検出用ＣＮＮを使用してフレーム単位の検証を行い、それらの結果による多目的最適化の手法を適用して全画面ＣＮＮ２１０のパラメタを評価する。
【０１１１】
フレーム単位の評価結果を得る際には、訓練しているスケールに関する評価結果だけを取得すればよい。すなわち、１個のカスケードだけを使用すればよい（訓練中のＣＮＮだけでなく、そのカスケードの全段のＣＮＮを使用する）。このカスケードから得られるfalse positivesの割合（ＦＰＰＩ）をＥｐとする。
【０１１２】
学習用ＣＮＮと検出用ＣＮＮは入力される画像サイズは異なるが、使用するウェイトとバイアスのセットは同一である。すなわち、学習するべき特徴抽出部２１１、２０１のパラメタはフィルタであり、入力画像サイズにはよらない。また、どちらのニューラルネットワークにおいても同一の識別部２１３を使用するため、そのパラメタは同一である。
【０１１３】
第２の検証用データセットから切り出されるウィンドウと、前記第１の検証用データセットに含まれる画像との主な違いは、後述するように、後者においては歩行者の画像を含む画像、すなわち正例がbounding boxから生成されている上、正例の数と負例の数との比が１対１であるに対して、前者においては歩行者の画像を含む画像もウィンドウから生成され、歩行者の画像を含まない画像のほうがはるかに多いことである。
【０１１４】
この違いのため、第１の検証用データセットと第２の検証用データセットの評価結果は乖離する。この解決策においては後者を使用することによってこの乖離を減少させ、検出時のfalse positivesを減少させる。
【０１１５】
ただし、フレームに適用して得られたfalse positivesに関する結果Ｅｐだけで評価するとfalse negativesが増加するので、ウィンドウへの適用結果Ｅｗも併せた評価が必要である。すなわち、結果Ｅｐだけで評価すると、極端な場合にはウィンドウ内に歩行者の画像が存在してもすべて不在と答えるニューラルネットワークが選択される。
【０１１６】
これは、歩行者の画像が存在するウィンドウは１％以下の低い確率となる場合が多いので、このようなニューラルネットワークのほうが高い評価を受けるからである。この問題を解決するには、フレームへの適用結果Ｅｐだけでなく、ウィンドウへの適用結果Ｅｗも併せて多目的最適化を行えばよい。
【０１１７】
もっとも簡単な方法は両者の評価値を加算した値＝Ｅｐ＋Ｅｗによって評価することである。また、加算する際にウェイトｗを付加する。すなわち、ｗ×Ｅｐ＋（１−ｗ）Ｅｗとすることもできるが、ウェイトの最適値はまだ分かっていないため、現在は単純な和（すなわち０．５のウェイト）を使用している。なお、ウェイトが０．５でも常に歩行者が不在と答えるニューラルネットワークが選択されることもあるので、このような選択を避ける必要がある。
【０１１８】
また、フレームに関する評価に関しても、false positivesに関する評価結果だけでなく、false negativesに関する評価結果Ｅｎを併せたほうがよい場合もある。すなわち、評価結果Ｅｗはフレームにおけるfalse negativesを直接に評価した値ではないため、Ｅｗだけ評価に加えてもfalse negativesに関する最適化が成功するとは限らない。評価結果Ｅｎを加えることによって、この最適化がよりよく実現できる場合がある。この評価結果Ｅｎは次のように算出すればよい。
【０１１９】
フレームを評価する際にはフレームを分割して得られた各ウィンドウ関するＣＮＮアンサンブル検出器１００の各スケール１〜３の結果が得られる。これらの結果はＮＭＳ１４０によってまとめられるが、ＮＭＳ１４０においては、スケール内とスケール間の両方の結果がまとめられる。ここでは１個のスケールだけを評価すればよいが、それはＮＭＳ１４０において１個のスケールの結果だけを入力することによって実現される。
【０１２０】
このＮＭＳ１４０の処理を行った後に、検出された歩行者の画像を含むウィンドウと、元のフレーム上のbounding boxとを比較して評価し、その評価結果をＥｎとすればよい。たとえば、検出された歩行者の画像を含むウィンドウの面積と元のフレーム上のbounding boxの面積の両者を併せた（和集合の）面積が両者の重なりの（積集合の）面積の３倍以下であるとき、歩行者の画像が検出されたとする。全bounding boxについてこの値を算出して検出率を算出し、それを評価結果Ｅｎとすればよい。
【０１２１】
この検出の際に使用するパラメタとして上記では「３倍」という値を使用したが、このような場合に使用されることが多い「２倍」でなく「３倍」としているのは、オクターブという荒い単位での検出を行っているため、「２倍」では的確に評価できないからである。
【０１２２】
ただし、ＣＮＮアンサンブル検出器１００の検証は、逆伝搬学習の処理を決めるわけではなく、学習によって得られた最善のＣＮＮ（パラメタ・セット）を算出して保存するだけである。したがって、学習によって検証結果が悪化していくとき（過剰適応（overfitting）しているときなど）にそれを適切な方向にする。
【０１２３】
あるいは悪化をとめることはできない。すなわち、上記のようにフレーム単位の評価を行うようにしても、逆伝搬学習においてはフレームの評価は反映されないため、学習が進むにつれてフレーム単位の評価が低下しやすく、その対策が必要である。検証以外の方法によって少なくとも確率的に学習がよい方向にむかうようにする必要がある。そのための方法として有力なのが後述のoversamplingである。また、上記の対策として正例および負例をそれぞれ多様化させて増加させることが有効な場合があるので、その例を後述する。
【０１２４】
また、１個のＣＮＮについてフレーム単位とウィンドウ単位の評価の乖離を減少させることができないとき、遺伝的アルゴリズム（ＧＡ）を使用することが対策となり得る。
【０１２５】
なお、フレームに関する評価すなわちＥｐおよびＥｎは、上記のように評価関数に入れることはせず、ウィンドウ単位の評価の際にその値を出力し、実験者がその値を参考にすることができる。すなわち、実験者はこの値を参照して、フレーム単位の評価とウィンドウ単位の評価との乖離が減少するようにＣＮＮのパラメタを調整することができる。
【０１２６】
上記乖離が減少すれば、評価結果Ｅｐ、Ｅｎのいずれか、あるいは両方を評価関数に入れなくても、これらの値を改善させることができる。調整可能なパラメタとしてはＣＮＮの構造を決めているパラメタや後述する正例・負例の生成におけるパラメタがある。ＣＮＮの構造パラメタの中には、たたみこみ層の層数や、プーリングの回数や、フィルタ数などがあり、正例・負例の生成のパラメタの中にはリサイズ数やリサイズ時の周囲の空白の埋め方（同一のグレースケールを使用する際の明るさや画像の周囲を延長することなど）がある。
【０１２７】
（訓練のためのデータセット生成）
ＣＮＮアンサンブル検出器１００を構成する各ＣＮＮ（２１０、２００）を訓練するには、それぞれに適した画像データセットを生成して訓練する必要がある。それぞれの訓練において、画像データセットとして訓練用データセットと検証用データセットとを用意する。なお、訓練用データセットと検証用データセットは、図９に示したストレージ１４に格納しておき、学習処理は図示しない学習制御プログラムをメモリ１３にロードしてＣＰＵ１１及びＧＰＵ１２によって実行することができる。
【０１２８】
訓練用データセットは同数の正例と負例とで構成されるが、この実施例においては基本的にそれぞれ２０万個用意する。いずれもカラー画像をグレイスケール画像に変換して使用している。この節においてはこれらの正例、負例の生成法について述べる。
【０１２９】
（（正例の生成））
正例は歩行者の画像の位置が注釈データとして記録されたビデオや静止画を含む画像のデータセットを使用して生成する。このようなデータセットの例として、たとえば、Caltech歩行者データセット（Caltech Pedestrian Dataset）が知られている。Caltech歩行者データセットにおいては、ビデオの画像に現れる歩行者を囲むbounding boxのデータが注釈ファイルに格納されている。以下、第１に基本的な正例の生成法について述べ、第２に歩行者の画像のスケーリングの方法とその応用としてのスケール内での歩行者の画像のサイズと位置の認識法、そして第３にocclusionの扱いについて述べる。
【０１３０】
第１に、基本的な正例の生成法は以下のとおりである。訓練用データセットの元となるビデオや静止画から、図６のようにbounding boxの部分（図中縦２、横１の割合のサイズとする）を切り出し、統一されたサイズ（３２×６４）にリサイズする。なお、訓練用データの生成は、図示しない計算機で行うことができる。
【０１３１】
訓練用データの注釈ファイルには歩行者が他の物体に隠れて（occluded）いるかどうかが記述されているときは、隠れた歩行者も正例に入れるほうが成績がよいと考えられるため、当該画像データを正例として使用する。Caltech歩行者データセットに含まれるビデオを学習用とテスト用に分け、学習用のビデオから訓練用および検証用の正例を生成する。
【０１３２】
第２に、歩行者の画像のスケーリングについて述べる。各ＣＮＮ（２１０、２００）の訓練に使用する歩行者サイズは、すでに述べたように、スケール１〜３毎に異なる範囲にしている。スケール１（１０１）においてはbounding boxの高さが３２から６３（ピクセル）までの歩行者の画像を使用し、スケール２（１０２）においてはbounding boxの高さが６４から１２７（ピクセル）までのものを使用する。
【０１３３】
ただし、すでに述べたように学習用の画像として使用するbounding boxのサイズをずらしたほうがよい場合もある。たとえば、スケール１（１０１）において使用するサイズを４９〜８０（ピクセル）とするほうがよい場合もある。Caltech歩行者データセットのように高さが１２８（ピクセル）以上の歩行者の画像はわずかしか出現しないときは、スケール３（１０３）において、高さが１２８（ピクセル）未満のもの（たとえば高さ９６（ピクセル）以上のもの）も含めて訓練に必要なデータ数を確保する。
【０１３４】
このように訓練用データで歩行者の画像のサイズ範囲を限定するのは、第３の課題である学習の困難を減少させてよりよい認識率を得るとともに、第４の課題である低解像度の画像で歩行者が認識できるようにするためである。歩行者の画像サイズによって認識に使用するべき特徴に違いがあるため、この限定によって認識率を高めることができると考えられる。
【０１３５】
すなわち、画像のサイズが小さい歩行者に関しては形状以外に特徴がないと考えられるし、顔の構成要素、すなわち目鼻だちなどは利用できない。しかし、画像のサイズが大きければテクスチャを利用することができ、顔の構成要素を利用することができると考えられる。サイズの異なる画像をまぜて学習させると、このようなサイズ固有の特徴が薄まるため、認識率が低下すると考えられる。
【０１３６】
歩行者の画像の検出に関する従来方法の中にはサイズを分けて検出しているものはあったが、従来方法においてはサイズを分けずに特徴抽出器の学習を行っていた。また、このようにサイズを分けた深層学習によって特徴抽出部２１１、２０１を生成してはいなかった。すなわち、従来の深層学習にもとづく歩行者の画像の検出においては、すべてのスケールの歩行者の画像を同時にひとつのニューラルネットに学習させていた。
【０１３７】
この実施例においては、隣接するスケール１〜３の比を２（１オクターブ）とし、スケールを３種類（１倍、２倍、４倍）にしている。従来の歩行者の画像の検出法の多くにおいてスケール数はこれより多い。たとえばスケール比として１．１、１．２５などの値が使用されてきた。スケール数を増加させると認識率は向上するが、計算時間は増加する。
【０１３８】
ＣＮＮカスケード検出器においてもスケール数を増加させることができるが、計算時間短縮のためにはスケール比を２にするのが良い。このようにスケール比を大きくすると、ひとつのスケールにおいて扱うべき歩行者の画像のサイズ範囲が広がるため、特徴抽出部２１１、２０１に工夫が必要になる。ＣＮＮに関する従来の研究の多くにおいては、多数のスケールを使用し、その代わりに学習させる歩行者の画像のサイズとしてウィンドウ・サイズに近いものだけを使用している（あるいはウィンドウ・サイズ近くにリサイズしている）。
【０１３９】
これに対してこの実施例においては同一の歩行者の画像を数種類にリサイズして、そのすべてを使用する。深層学習を使用する方法において、このように歩行者の画像を「単一サイズ」にすると、スケールがオクターブ単位のときは正確な学習または検出が困難になり、対策が必要になると考えられるからである。
【０１４０】
教師データとして単一サイズの画像を採用すると、フレーム単位とウィンドウ単位の乖離が拡大して学習が困難になることがある。本実施例では、その解決策として歩行者の画像のサイズを複数にしている。すなわち、歩行者の画像のデータセットから取得した歩行者の画像に左右反転（flip）させた画像を加えた上、それぞれさらに４種類のサイズにリサイズして正例として学習させる。
【０１４１】
すなわち、bounding box内の画像がちょうど３２×６４のウィンドウに収まるようにリサイズした最大サイズを正例として使用する。そして、図８に図示したように、歩行者の画像の最大サイズ８０１を基準として、その２０．７５倍（８０２）、２０．５倍（８０３）、２０．２５倍（８０４）のサイズの画像を併せて（すなわち、ウィンドウ・サイズの半分までの４種類のサイズの縮小画像を）正例として使用している。
【０１４２】
画像を縮小すると周囲に空白ができるが、画像の最外周の値を単純に延長して埋めることができる。また、灰色で埋めることもできる。また、４種類の代わりに２種類、あるいは他の選択をすることも可能である。また、サイズは固定にする代わりに乱数によって選択することも可能である。
【０１４３】
このように正例を増加（oversample）させることによって、単一サイズの歩行者の画像を使用したときには学習によってウィンドウ単位の認識率が向上してもフレーム単位の性能はむしろ悪化する（負の相関がある）ことがあるのが、フレーム単位の性能も向上するようになる（相関が正になる）。
【０１４４】
具体的には、正例の増加によりつぎの２つの効果がある。
【０１４５】
１）１オクターブを４以上に分割することにより、継続的な訓練によってよりよい精度をもつ (false positives が少ない）ネットワークを比較的たかい確率で獲得することができる。この傾向は分割数によって比較的ゆるやかに変化する。すなわち、分割数を６、８などとしても、同様の効果を得ることができる。
【０１４６】
２）１オクターブを６分割すると、継続的な訓練によってよりよい再現率をもつ（false negatives が少ない）ネットワークを比較的たかい確率で獲得することができる。分割数を４あるいは８とするとこのようなネットワークが獲得できる頻度はあきらかに低下した。すなわち、（５ 分割や７分割はまだ実験していないが）６ 分割が最適である。これらの結果から、分割数は６が最適だと考えられる。 
【０１４７】
このように正例を増加させるとフレーム単位とウィンドウ単位の乖離が減少する理由は２つあると考えられる。第１に、ＣＮＮアンサンブル検出器１００での検出時にはさまざまなサイズの歩行者の画像が現れるため、歩行者の画像サイズが統一されていると、様々なサイズに対応できないと考えられるが、リサイズした歩行者の画像を加えることにより、画像の範囲内で多様なサイズの歩行者を学習させることができる。
【０１４８】
第２に、正例の数が比較的限られているのを、特にスケール１〜３ごとの学習を行う場合にはそれが限られるのを補うためでもある。
【０１４９】
最後に、歩行者の画像のスケーリングの応用としての歩行者のサイズおよび位置の認識法について述べる。本実施例において歩行者の画像のスケーリングを行った主な理由は、フレーム単位とウィンドウ単位の乖離をなくすことであるが、この実施例においては少数のスケールを使用しているため、歩行者の画像を検出した領域を各スケールのウィンドウ全体とすると、遠方の歩行者の画像がウィンドウの中のどの部分に現れたかがわからず、また歩行者の画像までの距離も荒いスケール単位でしか分からない。
【０１５０】
しかし、正例を生成する時点で歩行者の画像のサイズはより正確に分かっている（すなわち、２Ｓ倍に縮小した歩行者の画像の高さは６４×２Ｓとすることができる）し、縮小した歩行者を画像の中のどの位置に置くかによって、検出する歩行者の画像のおよその位置を判定することができる。
【０１５１】
第１の代替実施例として、図４のように８個のクラス（図中Ｃｌａｓｓ０〜Ｃｌａｓｓ７）を設けて分類することができる。この分類においては、歩行者が存在しないクラスをクラス０（４００）とし、１倍サイズの歩行者のクラスをクラス１（４０１）としている。２０．５倍のサイズの歩行者の画像に関しては、その位置に従って６個のクラスを定義する。
【０１５２】
すなわち、横方向に２分類、縦方向に３分類する（クラス２、３、４、５、６、７）。このような分類を可能にするため，学習時に図４のような８種類（原画像１枚につき８枚ずつ）の画像をその分類（クラス）を教師情報として学習させる。ここでは画像サイズとの関係により、学習させる歩行者の画像に９ピクセルのスライディングをほどこしている。スライディング・ウィンドウにおけるスライド量は８ピクセルなので、スライド量はほぼそれに近い。
【０１５３】
歩行者の画像の検出の際には単純な検出の（すなわち出力値として０か１かだけをえる）代わりにこれら８クラスへの分類を行うことによって、歩行者の画像のサイズと位置を出力として得ることができる。２０．７５倍および２０．２５倍のサイズの歩行者の画像についても同様にクラス分けすることができるが、特に、２０．２５倍の歩行者の画像については、細かく分類するとクラス数が膨大になり、歩行者の画像の検出を困難にすると考えられる。
【０１５４】
したがって、クラス数は７クラス程度に抑え、２０．７５倍の歩行者の画像は１倍の歩行者の画像と同一クラスに分類し、２０．２５倍のサイズの歩行者の画像は２０．５倍の歩行者の画像の６クラスに分類することにより、クラス数を８に抑えるのがひとつの有力な方法である。分類の方法を変更することにより、クラス数を８よりやや増加させたほうがよい可能性もある。
【０１５５】
第２の代替実施例として、学習時にはリサイズせず、検出時にリサイズする方法を記述する。すなわち、学習時に画像をリサイズして図４のような８種類を学習させるかわりに、学習時にはリサイズをおこなわずに１種類の画像だけを学習させ、検知時にウィンドウごとに図４の 400 Class 0 以外の各画像から黒塗りの部分を削除した画像を生成してそれを原画像とおなじウィンドウ・サイズに拡大し、それぞれの画像についてウィンドウＣＮＮを動作させて検知をおこなう。ＮＭＳの際にこれらの画像のうちのいずれから最大の出力をえたかによって歩行者の位置を特定する。この方法は学習時に歩行者に無関係な背景の量をおさえることができるため、false negativesをおさえることができるという利点がある。
【０１５６】
第３に、正例におけるocclusionの扱いについて述べる。Caltech歩行者データセットにはbounding boxごとに隠れた（occluded）歩行者であるかどうかも注釈がついているが、本実施例においては、正例の生成の際に隠れた歩行者の画像も除外しない。これは、隠れた歩行者を入れたほうがよい結果が得られると考えられるためである。隠れた歩行者を学習させたことによる効果については後述する。
【０１５７】
((負例の生成))
負例も正例と同様に、スケールごとに歩行者データセットのビデオを使用して生成する。以下、基本的な負例生成法、初期負例の生成法、すなわち後述するbaggingを使用するとき、および後述するboostingを使用するときのカスケードの１段目の負例生成法、boostingを使用するときのカスケードの２段目以降の負例生成法について、順に説明する。
【０１５８】
第１に、基本的な負例生成法について説明する。１個またはカスケードにした全画面ＣＮＮ２１０を使用して負例を生成することができる。図６に示すように、bounding boxと全画面ＣＮＮ２１０の出力から使用するウィンドウの位置を決め、それに従って元のフレームから負例を切り出し、統一サイズ（３２×６４）にする。
【０１５９】
すなわち、bounding boxにかからない位置であって、ＣＮＮが歩行者の画像を検出した位置（すなわちfalse positiveが検出された位置）から負例を切り出す。ただし、boostingを行わないときはＣＮＮの出力を参照せず、bounding boxのない任意の位置から切り出せばよい。ＣＮＮの出力を参照しないとき、あるいはfalse positivesが多数存在するときは、負例を切り出す位置は上記の条件を満たす範囲でランダムに決めればよい。
【０１６０】
選択した負例をそのまま学習に使用すると過剰適応（overfitting）が生じやすくなるため、元のサイズで使用する代わりに±５％の範囲でランダムにリサイズする。すなわち、リサイズせずに学習または検証を行うと検証時に誤差が０になりやすいため、前記拡大が不要なときも負例をわずかにリサイズして使用する。
【０１６１】
学習データと検証データの重複（完全な重複および部分的な重複）を慎重に避ければこのような現象を避けることができると考えられるが、リサイズするほうが問題を容易に解決することができる。
【０１６２】
次に、負例が不足するときと、ウィンドウ単位の性能とフレーム単位の性能とが乖離するときの対策について述べる。False positivesが十分に少ない場合は、False positivesと判定されたデータをすべて収集しても負例が不足する可能性がある。２〜３フレームおきにフレームを使用したうえ、必要に応じて負例を増加（oversample）させる。負例を増加させる方法としてはリサイズ（主に拡大）および左右反転（flip）を使用することができる。
【０１６３】
このように負例を増加させることによって、学習によってウィンドウ単位の認識率が向上してもフレーム単位の性能はむしろ悪化していた（負の相関があった）ものが、フレーム単位の性能も向上するようになる（相関が正になる）。
【０１６４】
第２に、初期負例の生成法について述べる。ＣＮＮアンサンブル検出器１００の各スケール１〜３の初段で使用する負例、すなわち初期負例は、ＣＮＮの出力を使用せずに、すなわちbounding boxにかからない範囲から生成する。このデータセットのすべてのフレームを使用すると膨大な負例が生成されるため、初期負例の生成においては３０フレームおきにフレームを使用し、さらに乱数によって負例を選択している。Bounding boxのないフレームだけから負例を生成する方法と、Bounding boxがあってもそれにかからない範囲からも生成する方法とがある。
【０１６５】
第３に、boostingを使用するときのカスケードの２段目以降の負例の生成法について述べる。ＣＮＮアンサンブル検出器１００の各スケール１〜３の２段目以降のＣＮＮにおいて後述するboostingを行うときは、そのＣＮＮの訓練に使用する負例を生成する際に、前段の出力を参照する。
【０１６６】
すなわち、負例の生成に使用するＣＮＮ（前段までのＣＮＮカスケードに対応）が歩行者と判定したウィンドウのうちBounding boxと重ならないものすなわちfalse positiveだけを（困難な）負例として生成する。
【０１６７】
（スケールごとの学習）
ＣＮＮアンサンブル検出器１００においては学習、検出の両方をスケール１〜３ごとに分けて行う。学習においてはすでに記述したようにBounding boxのサイズによって正例を複数のスケールに分類し、同一スケールの負例と併せてスケールごとの訓練用データを生成する。
【０１６８】
正例と負例は同数とするのが基本であり、基本的に両者を２０万画像ずつ併せて教師つきデータを作成する。この実施例において使用する画像サイズはすべてのスケール１〜３において３２×６４であるが、スケール１〜３ごとに異なる画像サイズを使用することができる。また、カスケードの段ごとに異なる画像サイズを使用することも可能である。カスケードの後段の学習データの生成法に関しては次節において述べる。
【０１６９】
歩行者の検出に全画面ＣＮＮ２１０を使用するときも、学習においてはウィンドウＣＮＮ２００を使用し、逆伝搬学習法によって学習させる。確率的勾配降下法（stochastic gradient descent method、SGD）などの学習法によって学習させることができる。
【０１７０】
すでに記述したように、全画像を１回学習させるごとに、すなわち１ ｅｐｏｃｈごとに検証用データによる評価とフレーム単位の評価の両方を行って、その和（損失関数）が最小のものを保存する。
【０１７１】
ただし、検出用のＣＮＮを構成する際には、必ずしも最後に算出した最小値に対応するウェイトとバイアスのセットを使用するとは限らない。特に、次節において述べるカスケードを構成する際には最後のセットが最善とは限らないので、途中で得られたセットも試して、カスケードとして使用するのに最適な組み合わせを算出する。その詳細は次節において述べる。
【０１７２】
（カスケードの構成法）
ＣＮＮアンサンブル検出器１００においては、次のような目的あるいは理由によってＣＮＮのカスケードを使用する。すなわち、特徴抽出部２１１、２０１のカスケードを使用するのは単独で使用する場合より認識率を向上させることである。しかし、さらにその使用はデータセットのアンバランスさ（歩行者の出現頻度が極端に低い）への対策だということができる。
【０１７３】
以下、基本となる２種類のカスケードの構成方法およびＣＮＮアンサンブル検出器１００におけるその組み合わせ方と結果について、順に述べる。
【０１７４】
（（２つの基本構成法  baggingとboosting））
複数の特徴抽出部２１１、２０１のアンサンブルによってＣＮＮアンサンブル検出器１００を構成するための代表的な方法として次の２つがあるが、これらを組み合わせてカスケードを構成する。
【０１７５】
第１の方法はbagging（bootstrap aggregating）である。Baggingにおいては、ひとつの訓練用データセット（初期データセット）を使用して複数のフィルタ（以下、検出器）を選択または生成する。手作りの特徴検出器を使用するときは、複数の検出器の中から最適な組み合わせを選択したり、最適なパラメタの組を算出する。
【０１７６】
ただし、本来のbaggingにおいては、ひとつの初期データセットからサンプリングによって異なる訓練用データセットをフィルタ毎に生成するが、この実施例で使用した方法においては確率的な方法を使用しているため、同一の訓練用データセットから複数の異なるフィルタを生成することができるため、同一のデータセットを使用している。この実施例においてはＣＮＮのアンサンブルを使用するので、遺伝的アルゴリズム（ＧＡ）を使用して異なるウェイトやバイアスを持つ複数のＣＮＮを生成する。
【０１７７】
第２の方法はboostingである。Boostingにおいては、１段ごとに異なる訓練用データセットを生成して学習する。初段はランダムに選択した負例を使用して訓練するが、後段は前段までが正しく処理できなかったデータのウェイトを重くして訓練する。すなわち、前段で正しく処理できるものは訓練用データセットから削除するか、学習時の評価におけるウェイトを低く設定する。いずれの段においても使用する正例の母集団は基本的に同じである。このように困難な負例を収集及び使用する方法はhard negative miningあるいはbootstrappingと呼ばれているが、さまざまな方法が提案されている。Boostingにもさまざまな方法がある。
【０１７８】
これらの方法のうちbaggingはすべての検出器がすべてのウィンドウを処理できる能力を有するため、よりロバストであるが、boostingによる検出器より広範な入力クラスに対応しなければならないため性能上は不利だと考えられる。Boostingにおいては前段までの検出器で振るい落とされるウィンドウを検出する必要がないため、性能上は有利になると考えられるが、前段までで振るい落とされることが期待されるウィンドウが落とされないときには弱点が現れ、ロバスト性が欠けると考えられる。
【０１７９】
学習の際、baggingにおいては複数の検出器を独立して学習させることができるため、並列に生成することができる。ＣＮＮアンサンブル検出器１００を構成するときも複数のＣＮＮを並列に生成することができる。しかし、boostingにおいては前段までの検出器を使用して学習を行うため、逐次処理が必要であり、baggingより学習に手間がかかる。
【０１８０】
歩行者の画像の検出の際は、bagging、boostingのいずれにおいても、学習によって獲得された検出器をカスケードで使用することもできるが、並列に使用することも可能である。検出器をカスケードで使用するときは前段までで振るい落とされたウィンドウは処理する必要がないが、検出器を並列で使用するときはすべての検出器がすべての入力を処理するので無駄な計算が生じる。しかし、すべての出力をまとめる（andをとる）ことによって同一の結果を得ることができる。並列度の高いハードウェアを使用することができるときは並列処理を行った方が高速になるが、ハードウェアの並列度が低いときはかえって低速になる。
【０１８１】
（（ＣＮＮアンサンブル検出器における精度向上のためのカスケード構成法））
ＣＮＮアンサンブル検出器１００においてＣＮＮ（２１０、２００）のカスケードを使用する主な目的は、歩行者の画像の検出精度を向上させること、すなわちfalse positivesを減少させることである。
【０１８２】
ＣＮＮアンサンブル検出器１００の構成例として、本実施例においては、最初の２段をbaggingによって構成し（すなわち初期データセットによる訓練から２個のＣＮＮを生成し）、それらのウェイトとバイアスを使用してboostingを行って３段目を構成する。遺伝的アルゴリズム（ＧＡ）を使用したアンサンブル学習法またはＧＡと逆伝搬学習を組み合わせたアンサンブル学習法によって１回または同一の訓練用データセットを使用した複数回学習を行い、その結果として得られる複数個のＣＮＮによりアンサンブルを生成することができる。
【０１８３】
ＧＡを使用する場合、ひとつの最適化関数に基づく最適な解だけを選択することができるが、本実施例ではひとつの最適化関数に基づく複数の解、または複数の最適化関数に基づく複数の解を選択する。複数の最適化関数によってＧＡを実施するとき、１回の試行では１個だけの最適化関数を使用することもでき、複数の最適化関数を併せて使用することもできる。また、複数の最適化関数を同時に使用する場合は、そのいずれに関しても劣位にあるＣＮＮを廃棄し、いずれかに関して最適なＣＮＮを増殖または変異させる。
【０１８４】
上記のように２段のＣＮＮのカスケードあるいは並列処理によって目標の認識率を得ることができないときは、３段以上の構成をとることによって目標に近づくことができる。本実施例においては、ＣＮＮはbaggingとboostingの組み合わせによって生成する。その方法は以下の２通り（またはその組み合わせ）である。
【０１８５】
第１に、baggingによってカスケードを生成するときは、同一の訓練用データセットの全体またはそこから選択したデータを使用した複数回の学習によって得られた最善またはそれに準じる数個のＣＮＮ（ウェイトおよびバイアスのセット）の中から何通りかを選択してカスケードを構成し、全データセットを評価した結果がよいカスケード（組み合わせ）を選択する。
【０１８６】
あるいは、上記のようにＧＡを使用したアンサンブル学習法またはＧＡと逆伝搬学習を組み合わせたアンサンブル学習法によってアンサンブルを生成することができる。
【０１８７】
第２に、１個のＣＮＮまたはbaggingによって生成したＣＮＮのカスケード（Ｃ１とする）の後にさらにboostingによって生成したＣＮＮをカスケードする（Ｃ２とする）ときは、次のようにする。
【０１８８】
まず前者のカスケードＣ１をデータセットに適用して、カスケードＣ１が歩行者として誤検出する画像を収集して負例とする（baggingによるＣＮＮ生成の方法は前記とおりである）。その負例（だけ）に同数の正例を併せて訓練用データセットを生成し、この訓練用データセットを使用して後者（Ｃ２）を学習させる。このときはboostingの結果として生成するＣＮＮ（Ｃ２）は、１個だけでよいので、従来のＣＮＮの学習法をそのまま使用すればよい。
【０１８９】
ただし、カスケードを構成する際に精度向上だけを考慮すると再現率は低下する。とくに、カスケード段数を増加させると再現率が低下するため、カスケード段数は必要な精度がえられる最小の段数とするべきである。また、カスケードに使用する CNN としては精度だけでなく再現率のよいものを選択し、組み合わせの際にも再現率低下が最小限になる組み合わせを選択するべきである。
【０１９０】
（（ＣＮＮアンサンブル検出器における再現率向上のためのカスケード構成法））
歩行者検知において boosting を使用するおもな目的は歩行者検知の精度を向上させることだが、単純に精度向上だけをめざしてカスケード段数を増加させると再現率が低下する。すなわち、検知されない歩行者が増加する。それをできるだけ防止するため、すなわち再現率を向上させるカスケード構成を生成するためにつぎの２つの方法のうちのいずれかをとることができる。
【０１９１】
再現率を向上させるための第１の方法はつぎのとおりである。カスケード構成のために boosting を使用するか bagging を使用するかはあらかじめきめなければならない（その結果が良好でなければやりなおす必要がある）し、それによって学習に使用するデータセットは変化するが、いずれを使用する場合も学習の方法はかわらない。そのデータセットを使用して学習させ、生成されたカスケードを１ epoch ごとに検証する（評価する）。精度および（推定）再現率がよいＣＮＮを候補として蓄積し、得られた候補のなかから学習後にカスケードに使用するものを選択する。精度の指標としては false positives の割り合い（歩行者を検出したウィンドウのうち歩行者が存在しないものの割り合い）を使用し、再現率の指標としては検出するべき範囲の歩行者が存在するウィンドウのうち歩行者を検出しなかったものの割合を使用する。ただし、前者はスケールに依存しないが、後者は他のスケールにおいて検出される可能性もあることに注意が必要である。 
【０１９２】
この選択においてはこれらのＣＮＮの精度指標と再現率指標を図１０Ａ、図１０Ｂのようにプロットし、下方にある１個または数個を選択する。図１０Ａはカスケード１段目の学習結果をプロットした例であり、図１０Ｂはカスケード２段目の学習結果をプロットした例である。すなわち、図１０Ｂ は生成された２段のカスケードによる評価結果である。最適と推定されるＣＮＮを○で囲んでいるが、実際に最適であるかどうかはカスケードを網羅的に構成して比較しなければわからないため、最適に近いと推定される他のＣＮＮについてもカスケードを完成させて比較するのがよいと考えられる。図１０Ｂにおいては最適と推定したＣＮＮより精度は低いがmiss rateの低いＣＮＮも存在するが、再現率を向上させることを目的としているのでこのようなＣＮＮは選択していない。
【０１９３】
図１０Ａ、図１０Ｂのグラフには初期値が異なる複数の訓練結果をあわせてプロットすればよい。多数の試行（訓練）を行えばそれだけよいＣＮＮが得られる確率が高まる。カスケードの段ごとにこのような試行を繰り返し、必要な性能が得られたところで停止する。精度と再現率の目標をともに満たすことができなければ、前段または初段までもどって、よりよいＣＮＮを算出する。
【０１９４】
再現率を向上させるための第２の方法は次のとおりである。Boostingは原理的には精度だけでなく再現率もあわせて向上させることができるため、現在は行っていないが、以下、その方法についてのべる。すなわち、boostingによってfalse positivesを減少させるだけでなく、false negativesをboostingによって減少させることができる。ここではこのようにboostingによってfalse negativesを減少させる方法を記述する。ただし、この方法によって再現率と精度の両方を任意に向上させられるわけはなく、現実的には精度向上を優先すると再現率の向上は困難だと考えられる。
【０１９５】
上記実施例においては、boostingの際、すなわちカスケードの後段のＣＮＮの学習の際に負例だけを交換し、正例としてはboostingを使用しないときと同一のものを使用していた。しかし、この変形例においては正例を交換する。負例はboostingを使用しないときと同一のものを使用することができる。
【０１９６】
この新しい正例の生成においては、初段の全画面ＣＮＮ２１０に正例を含む画像をフレーム単位で与え、検出できなかった正例（false negativeとなった正例）を「困難な正例」として取得する。
【０１９７】
False negativesを算出する方法は、上記実施例におけるフレーム単位の評価と同じである。このようにして得られた困難な正例を必要に応じてリサイズや左右反転などの方法で増量し、また必要に応じて元の正例と混合し、さらに同数の負例と混合することによって訓練用データセットを生成する。
【０１９８】
この訓練用データセットによって訓練して得られたＣＮＮ（Ｎ２とする）をカスケードにおいて使用する。ただし、カスケードを構成する際にはfalse positivesを減少するためのカスケードとは違って、次のようにカスケードを構成する。
【０１９９】
上記のboostingによって得られたＣＮＮには前段のＣＮＮ（Ｎ１とする）が歩行者が存在しないと判定したウィンドウを入力する。ＣＮＮ（Ｎ２）として全画面ＣＮＮ２１０を使用する際には、ＣＮＮ（Ｎ２）の出力の中でＣＮＮ（Ｎ１）が歩行者が有ると判定した部分はそのまま出力する（“or”をとる）。
【０２００】
前段が不在と判断したウィンドウの中から、ＣＮＮ（Ｎ１）が誤って歩行者が不在と判断したウィンドウをＣＮＮ（Ｎ２）によって拾い出し、歩行者を含むウィンドウに加える。ＣＮＮ（Ｎ２）として全画面ＣＮＮ２１０を使用する際には、上記のように基本的にはＣＮＮ（Ｎ１）の出力と“or”をとるが、このようにＣＮＮ（Ｎ１）とＣＮＮ（Ｎ２）に同じウェイトをあたえるとfalse positivesが増加する恐れがある。
【０２０１】
このため、ＣＮＮ（Ｎ１）のウェイト（ｗ１）よりＣＮＮ（Ｎ２）のウェイト（１−ｗ１）を下げる（ｗ１＞０．５とする）のがよいと考えられる。すなわち、ある特定のウィンドウ（特徴マップ）に関するＣＮＮ（Ｎ１）、ＣＮＮ（Ｎ２）の出力結果をｏ１、ｏ２とするとき、
ｗ１×ｏ１＋（１−ｗ１）×ｏ２
をカスケードの出力とすればよい。
【０２０２】
なお、上記のboostingはカスケードを複雑化させるため、boostingを行う代わりに、上記の方法によって取得した「困難な正例」を元の正例と併せて、さらに同数の負例を併せて生成した訓練用データセットによって訓練したＣＮＮをＣＮＮ（Ｎ１）に置き換えて使用する（初段を交換する）方法も考えられる。この方法はbootstrappingの一種である。この方法には、カスケードの構造を複雑化することなく、元のまま使用することができるという利点がある。
【０２０３】
＜まとめ＞
上記の４つの課題を解決するため、以下の３つの方法を組み合わせて使用する。
【０２０４】
第１の方法は、ＣＮＮ（２１０、２００）をアンサンブルで使用することである。本実施例では複数のＣＮＮ（２１０、２００）のアンサンブル（組み合わせ）によって歩行者検出システム７００を構成する。複数のＣＮＮ（２１０、２００）をカスケードで使用し、またスケール（歩行者サイズ）１〜３ごとに異なるＣＮＮを使用する。ＣＮＮ（２１０、２００）を使用して歩行者の画像の検出を行った従来例の大半は１個だけニューラルネットを使用していたために、計算時間が膨大になり、学習させるのが容易でない大規模ネットワークが必要になり、多様で複雑なデータを扱いきれず、また低解像度の歩行者を認識するのが困難だったと考えられる。
【０２０５】
前記第１の方法を適用することにより、前記第１の課題のうちの最初の問題すなわちニューラルネットワークの計算時間の膨大さの問題は次のように解決することができる。すなわち、巨大な１個のネットワークを使用する代わりに、小規模なネットワークを複数個アンサンブルで使用するようにすればよい。
【０２０６】
タスクを複数のネットワークに分散させる（後述するように歩行者の画像の検出においては歩行者の画像サイズによる分散が可能である）ことにより個々のネットワークを最適化してその計算時間を短縮させる。
【０２０７】
また、特定のネットワークを稼働させることが不要だと分かれば、その稼働を停止させる（または実行回数を減少させる）ことにより計算時間を短縮することができる。特に、小規模なネットワークをカスケードで使用することにより、カスケードの２段目以降において扱う歩行者の画像の候補数が絞られるため計算量が減少し、巨大なネットワークの全体を稼働させるより高速化される。
【０２０８】
前記第１の方法を適用することにより、特にＣＮＮ（２１０、２００）をカスケードで使用することにより、前記第２の課題すなわちウィンドウ単位の学習とフレーム単位の検出の乖離とくにfalse positivesの積算の問題は、次のように解決することができる。１個の検出器（ＣＮＮ）によってfalse positivesを１０−４以下にまで減少させるのは困難であり、その目標を達成するには複数の検出器をカスケードで使用し、false positivesを徐々にフィルタして１０−４以下に近づけていくのが現実的な方法である。正例・負例の出現頻度の乖離の問題も、カスケードの後段においてはその出現頻度が１対１に近づくため、解決できる。
【０２０９】
前記第３の課題の一部である大規模ネットワークの複雑さの問題も、小規模なネットワークをアンサンブルで使用することによって解決することができる。すなわち、複数のネットワークを組み合わせるようにすれば、部品を組み合わせて複雑なシステムを構成する工学的な方法を使用することができるため、上記課題を解決できる。これに対して大規模ネットワークはその内部が構造化されていても、それらは従来の工学的な意味での部品とはならず、従って工学的な組み合わせ方法を適用することができなかった。
【０２１０】
前記第１の方法を適用することにより、前記第３の課題の一部であるデータの多様さ・複雑さの問題は次のように解決することができる。
【０２１１】
すなわち、１個のネットワークにおいてはデータが持つ多数の特徴のうちの一部だけを扱うように分業し、そのようなネットワークを複数個使用して（分割統治法（divide-and-conquer）によって）システムを構成すればよい。
【０２１２】
歩行者の画像の検出においては上記のようにさまざまなサイズの歩行者の画像を扱う必要があるから、歩行者の画像のスケールごとに異なるネットワークを用意して、それぞれ特定範囲のサイズの歩行者の画像だけを学習させ、分業させればよい。上記のように歩行者の画像には色彩など他の属性もあるから、それらによる分業も考えられるが、歩行者の検出においてはサイズがもっとも重要と考えられるため、まずサイズによる分業をおこなうことにより、扱うデータの多様さ及び複雑さを減少させることができ、問題は解決される。
【０２１３】
前記第１の方法を適用することにより、前記第４の課題である低解像度歩行者の認識の困難さは次のように解決することができる。すなわち、歩行者の画像のサイズを低解像度に限定して学習及び検出することにより、学習及び検出を比較的容易にすることができる。
【０２１４】
組み合わせるべき第２の方法は、たたみこみニューラルネットワークへのフレーム全体を入力する方法である。これにより、前記第１の課題のうちの２番目の問題はつぎのように解決される。歩行者の検出においてスライディング・ウィンドウ処理によって生成されたウィンドウをＣＮＮによって処理するとき、計算時間がかかるたたみこみ計算が多数回重複して実行される。この冗長さをなくすことによって処理時間短縮と実時間処理が可能になる。
【０２１５】
組み合わせるべき第３の方法はフレーム性能とウィンドウ性能をあわせた学習時の検証法である。これにより、前記第２の課題は次のように解消または軽減される。この方法においても従来のＣＮＮにおけるのと同様に学習はウィンドウごとにおこなう。しかし、１回（epoch）の学習が終了するたびにフレーム単位での検証（validation）を行うことによって、ウィンドウ単位とフレーム単位との乖離を減少させることができる。
【０２１６】
また、前記第２の課題はつぎのように解決される。第１に、すでに述べたように重複したたたみこみ計算を行わないため、計算が高速化される。第２に、特徴抽出部においてプーリング処理が行われていれば特徴マップは元のフレームよりちいさいためスライディング・ウィンドウ処理にかかる時間が短縮され、高速化される。
【０２１７】
また、上記実施例では、ニューラルネットワークをソフトウェアで実装する例を示したが、ニューラルネットワークをハードウェアで実装してもよく、例えば、ＦＰＧＡ（Field Programmable Gate Array）等のハードウェアでニューラルネットワークを構成しても良い。
【０２１８】
また、上記実施例では、歩行者を検出する例を示したが、これに限定されるものではなく、車両や建造物などの特定の種類の物体を認識するものであれば本発明を適用することができる。
【０２１９】
また、上記実施例では、車両７０１に搭載される歩行者検出システム７００に本発明を適用する例を示したが、これに限定されるものではなく、入力された画像から特定の種類の物体を検出する物体検出装置に本発明を適用することができる。
【０２２０】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
【０２２１】
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０２２２】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０２２３】
１００  ＣＮＮアンサンブル検出器
１０１〜１０３  スケール１〜３
１４０  ＮＭＳ
２００  ウィンドウＣＮＮ
２０１  特徴抽出部
２０３  識別部
２１０  全画面ＣＮＮ
２１１  特徴抽出部
２１２  スライディング・ウィンドウ部
２１３  識別部
７００  歩行者検知システム
７０２  歩行者検知部
７０３  表示及び警報部
７１１〜４１４  ビデオカメラ
【図１】
2018005520.tif 000003
【図２Ａ】
2018005520.tif 000004
【図２Ｂ】
2018005520.tif 000005
【図３Ａ】
2018005520.tif 000006
【図３Ｂ】
2018005520.tif 000007
【図４】
2018005520.tif 000008
【図５】
2018005520.tif 000009
【図６】
2018005520.tif 000010
【図７】
2018005520.tif 000011
【図８】
2018005520.tif 000012
【図９】
2018005520.tif 000013
【図１０Ａ】
2018005520.tif 000014
【図１０Ｂ】
2018005520.tif 000015