今回は、大流行中のDeep Learningについてです。コンピュータビジョン分野では、Deep Convolutional Neural Network(以下、CNN)がよく用いられます。

Neural Networkとは?

Neural Network(ニューラルネットワーク)は、脳を模倣した機械学習です。ニューラルネットワークは長年のあいだ、入力層、中間層(隠れ層)、出力層のシンプルな構造が主でした(図1)。手書き数字の認識を例に説明すると、入力層(x1, x2, ……, xn)には各ピクセルの輝度値を入力します。縦10画素×横10画素の画像であれば、nは100となります。そして、出力層(y1, y2, ……, ym)は、手書き数字が、0から9のいずれなのかを出力することになるので、mは10です。

学習フェーズで、各ノード間の重みを求めておくと、未知の画像が入ってきたときに書かれている数字が0から9のいずれなのかを識別できるわけです。

図1 ニューラルネットワークの例

Deep Learningとは?

長年の間、ニューラルネットワークは図1のようなシンプルな構造でした。ニューラルネットワークのブームが去った後、ニューラルネットワークに代わる機械学習手法として、前回ご紹介したSVMやRandom Forestなどの研究が進められてきました。そしてここ数年で、中間層を何層も重ねたDeep Neural Networkにより、高い識別性能を得ることに成功し、ニューラルネットワークのブームが再びやってきたわけです。学習技術の進歩、大量の学習データ、PCの性能向上により、深い構造を持つニューラルネットワークを利用できるようになったのです。

コンピュータビジョン分野では、主にCNNが用いられます。2次元配列の構造を持つ画像と、二次元配列のフィルタによる畳み込み処理の相性が良いことが、CNNが用いられる理由だと思います。

CNNの概要

CNNの概要は、図2のとおりです。入力画像がRGBのカラー画像であれば、入力は3チャンネルとなります。その入力画像にフィルタをかけ、足し合わせることでひとつのマップを生成します。そしてPooling処理でマップのサイズを縮小し、最後はニューラルネットワークの入力層にマップの値を入力する構造です。Poolingは一般的にはMax PoolingかSum Poolingを用います。Max Poolingは、たとえば2×2の小領域の中から最大の値のみを取り出します。Sum Poolingは、小領域中の値の合計値を求めます。

学習フェーズでは、ニューラルネットワークのノード間の重みに加え、フィルタの係数を求めることになります。フィルタを複数種類用いて、複数のマップを作成することもできます。さらに、フィルタを用いた畳み込み処理、Pooling処理を何層にも重ねることもできます。

図2 CNNの概要

CNNでは、前回までに解説した顔検出、人検出技術のように、Haar-likeやHoGといった特徴量を設計する必要がありません。フィルタのパラメータを学習フェーズで求め、そのフィルタが特徴抽出器となります。つまり、特徴量の設計まで自動でやってくれる優れものです。

Caffe、Chainer、TensorFlowといったDeep Learningのフレームワークを用いることで比較的容易にコーディングできます。機械学習分野では避けて通れない技術ですので、興味のある方はぜひ挑戦してみてください!

著者プロフィール

樋口未来(ひぐち・みらい)
日立製作所 日立研究所に入社後、自動車向けステレオカメラ、監視カメラの研究開発に従事。2011年から1年間、米国カーネギーメロン大学にて客員研究員としてカメラキャリブレーション技術の研究に携わる。

現在は、日立製作所を退職し、東京大学大学院博士課程に在学中。一人称視点映像(First-person vision, Egocentric vision)の解析に関する研究を行っている。具体的には、頭部に装着したカメラで撮影した一人称視点映像を用いて、人と人のインタラクション時の非言語コミュニケーション(うなずき等)を観測し、機械学習の枠組みでカメラ装着者がどのような人物かを推定する技術の研究に取り組んでいる。また、大学院での研究の傍ら、フリーランスとしてコンピュータビジョン技術の研究開発に従事している。

専門:コンピュータビジョン、機械学習