ニュース
ディープラーニングによる画像認識の基礎を学べる「NVIDIA Deep Learning Institute 2017」
NVIDIA「DIGITS」を用いた画像分類、物体検出の“最初の一歩”を試す
2017年1月19日 14:55
- 2017年1月17日 開催
半導体メーカーのNVIDIAが1月17日にベルサール高田馬場(東京都新宿区)で開催した、GPUとディープラーニングの最新事情を紹介するイベント「Deep Learning Institute」。新しい技術動向やディープラーニングにおけるGPUの採用事例が披露されただけでなく、自動運転などに用いられる画像処理の基礎、画像分類と物体検出の実現方法を学ぶハンズオントレーニングも行なわれた。基調講演などのようすは別記事で伝えているが、ここではそのハンズオントレーニングの内容をお届けする。
ディープラーニングを学ぶのに必要な9の前提知識
同日午後に4時間かけて実施されたハンズオントレーニングに先だって、ディープラーニングの基礎知識が得られる「これから始める人の為のディープラーニング基礎講座」も開かれた。この講座では、ディープラーニングの仕組みやニューラルネットワークの構造、ディープラーニングによる学習作業の流れ、畳み込みニューラルネットワークの概要など、機械学習についての基本的なポイントが解説された。どれも重要なポイント、キーワードばかりだが、そのなかからハンズオントレーニングを受講するに当たってさしあたり知っておくべき項目をピックアップすると以下のとおりとなる。
1.機械学習では、「分類(Classification)問題」(多数の分布値をAグループとBグループに2分する特定の関数を決定する問題)と、「回帰(Regression)問題」(直線的に表れる分布値を特定の関数で近似する問題)を多く取り扱う。
2.ディープラーニングにおける「多層ニューラルネットワーク」は、人間の脳神経やニューロンを模倣した複数の「人工ニューロン」が層状に連なったもの。大まかには「入力層」、複数の「隠れ(中間)層」、「出力層」から構成される。
3.データは入力層にインプットし、隠れ層を経由して出力層に結果出力される。層から層へは、あらかじめ決められた「重み」に従ってデータが伝達される(順伝播)。
4.ディープラーニングでは、学習結果の値をあらかじめ用意した教師(正解)データに近づける(誤差を最小化する)ために、順伝播とは逆の方向にデータの伝達を行ないながら「重み」を調整する(誤差逆伝播法)。
5.「重み」の値の幅をどれくらいの細かさで変えて試行するか、という「更新量」は、「学習率(Learning Rate)」で調整する。調整方法によっては「最適解(本当の最小誤差)」ではない「局所解」に到達してしまうことがある点に注意。
6.ディープラーニングによる学習の前には、学習用データをできる限り大量に集め、それを「訓練データ(Training data)」と「検証データ(Validation data)」に分ける。
7.「訓練データ」で学習、重み調整を行ない(この一連の学習単位は「エポック」と呼ばれる)、「検証データ」で現在の学習状況を検証する、という処理手順を繰り返し、正しく学習できているかをチェックしながら進める。
8.「畳み込みニューラルネットワーク(CNN)」は、画像認識の分野で用いられることが多い。
9.CNNには「AlexNet」「GoogLeNet」「ResNet」といった種類があり、それぞれでニューラルネットワークの構成が決まっている。例えばAlexNetは5層の畳み込み層と3層の全結合層からなる8層で構成される。GoogLeNetは22層からなる。
以上の基礎知識を前提として、同イベントの基調講演やセミナーとは別の会場で、「DIGITSで始めるディープラーニング画像分類」と「DIGITSによる物体検出入門」という2つのハンズオントレーニングが開催された。参加者が持ち込んだノートPC上でNVIDIAのディープラーニングシステム「DIGITS」をクラウド経由で利用し、画像認識処理の初歩を学ぶ内容だ。
トレーニングは、ハンズオンのためのクラウドサービス「QwikLabs」から、AWSなどと連携できる「Jupyter Notebook」にアクセスし、そこに記載されている解説や手順を参考にしながら、講師の説明のもとDIGITSを試す、という流れ。DIGITS自体は、NVIDIAのGPUが搭載されたPCにインストールし、ローカルでディープラーニングの処理を行なえる無償ソフトウェアでもあるが、今回のハンズオントレーニングではAWS(Amazon Web Services)上のGPU搭載サーバーで動作するクラウドサービスとして実行する形となっていた。
したがって、参加者のノートPCに、ディープラーニングを加速するNVIDIAのGPUが搭載されている必要はない。最低限のPCスペックとPCスキルさえあれば誰でも参加でき(要事前予約)、ディープラーニングとDIGITSについて確実に理解を深められる。ただし、難解な理論やアルゴリズムの知識は不要とはいえ、あらかじめ先述の機械学習に関する基礎知識を身に付けていないと、作業の手順や意味を把握できず、目的も見失いかねないので注意が必要だ。
データ量とネットワーク構成を変更しながら、画像分類と精度向上の手法を学ぶ
ハンズオントレーニングの前半「DIGITSで始めるディープラーニング画像分類」では、手書き文字を認識するディープニューラルネットワークを作り上げ、徐々に認識精度の改善を図っていくことが目標として掲げられた。複雑な機械学習アルゴリズムを容易に扱えるようにするディープラーニングフレームワークには、オープンソースの「Caffe」を、ディープニューラルネットワークには比較的初期の「LeNet」を、学習用データは多数の手書き文字画像を無償提供している「MNIST」をそれぞれ使用した。
具体的には、さまざまな筆跡で描かれた「0」から「9」までのモノクロ手書き数字画像を学習用データとして入力し、別途用意したいくつかのテスト用画像で認識精度を確認する。テスト用画像はカラーだったりイラストによる装飾が含まれていたりと、一見して認識が難しそうなものになっている。
学習方法は4パターンが提示された。「最小限のデータで学習」「その6倍量のデータで学習」「反転画像を追加し、2倍量のデータで学習」「ニューラルネットワークの構成を変更して学習」で、データ量や学習の手法によって認識精度にどのような影響を与えるのかを確認できる。
DIGITSでは大まかに以下の手順で学習を実行する。このハンズオントレーニングでは画像分類を行なうため、データセットとモデルの作成時には「分類(Classification)」を選択することになる。
1.学習データセットを作成する
2.学習モデルを作成し、学習を開始する(訓練と検証)
3.学習済みモデルをテスト(推論:inference)する
DIGITSでの学習中(モデル作成時)は、訓練データを入力して得られた結果と教師データとを突き合わせた時の間違い率(Loss)、検証データを入力した結果の間違い率と正解率(Accuracy)の3つの値がグラフ表示され、学習状況をリアルタイムに把握できるのが特徴だ。エポックが進むにつれ間違い率が0へと近づき、正解率が100%に近づくグラフが描かれれば学習はほぼ成功となる。4パターンすべてを試した際のテスト画像の認識結果例は以下のとおりとなる。
2パターン目の「6倍量の学習用データで学習」以降は、最初に作成したデータセットとモデルをコピー(Clone)して作業するため、パラメータ変更などいくつかの手順を省略してすばやく次の学習パターンに移ることができる。上記の結果を見ると、新たなパターンの学習用データが増えると認識率も向上・変化することがお分かりいただけるはずだ。
4パターン目の「ニューラルネットワークの構成を変更して学習」では、Caffeのニューラルネットワークの定義ファイルを直接編集し、活性化関数(その層からの出力値を決める関数)を加え、畳み込み層のフィルター(画像分割数など)をいくつか変更している。この変更ももちろんDIGITS上ででき、変更前後のネットワーク構成を視覚化して確認することも可能だ。
4パターン目の学習の結果、最初はほとんど誤って認識していた数字も正しく認識された。依然として「7」は誤認識しているようだが、全てを正しく認識できるようにするには、さらなるネットワークの構成変更やパラメータの調整、エポック数の変更、学習データの量や質を変えるといった最適化が必要になると考えられる。
今回は、あくまでもディープラーニングによる画像認識の初歩を学ぶものであるため、個々の隠れ層でどのようにデータを扱うか、重み付けの調整をどのようにするか、といった細かなアルゴリズムにはほとんど言及されなかった。すでに述べたように学習用データの手書き数字画像もMNISTを利用しており、参加者は事前準備に手を煩わせることなく、ディープラーニングを試すためのDIGITSの使い方と、大まかな学習の流れを理解することに集中できる。
クジラの写真を用いた4パターンの物体検出方法を学ぶ
ハンズオントレーニングの後半「DIGITSによる物体検出入門」では、衛星から撮影した洋上の写真から、クジラと思われる部分のみを検出するディープニューラルネットワークを作り上げるという目標が設定された。ディープラーニングフレームワークには前半と同じく「Caffe」を、ニューラルネットワークには全8層のCNN「AlexNet」を、学習用データには「Right Whale Recognition」が提供している写真を使用した。また、物体検出の方法として以下の4つの手法が提示された。
1.画像全体のスキャン+CNN
2.候補領域の検出+CNN
3.「FCN(Full Convolutional Network)」を使用
4.NVIDIA独自の「DetectNet」を使用
1つ目の「画像全体のスキャン+CNN」は、1枚の全体写真をいったん等間隔のグリッド状に分割し、分割画像(パッチ)を全てCNN(AlexNet)に入力してクジラと思われる箇所を検出する「スライディング・ウィンドウ」と呼ばれる方法。2つ目の「候補領域の検出+CNN」は、最初に写真全体から候補領域を探索し、クジラと思われる箇所についてのみCNNに入力する方法だ。ただし、今回は時間の関係から2つ目の演習は行なっていない。
3つ目の方法では、畳み込み層×5と全結合層×3という構成のAlexNetのニューラルネットワークをカスタマイズし、全ての層を畳み込み層にして学習する。つまり全結合層はなくなり、最初から最後まで畳み込みニューラルネットワーク(全畳み込みネットワーク=Full Convolutional Network)とするものだ。
そして最後の4つ目は、NVIDIA独自に作成したニューラルネットワーク「DetectNet」を用いた方法。GoogLeNetをベースにカスタマイズされたもので、誤差が算出される部分が2カ所ある「マルチタスクロス」構成。1つはクジラと思われる箇所の座標(回帰問題)、もう1つはそれがクジラかそうでないか(分類問題)に関する誤差で、その2つをマージして誤差が最小になるよう最適化されるネットワークなのだという。
以上4パターンの検出方法のうち、最も高速なものでも1~2秒ということで、例えばクジラを人物やクルマなどに置き換え、自動運転に用いるリアルタイム物体検出のアルゴリズムとして使うのは難しい。しかし、ニューラルネットワークの種類・構成によって認識のされ方やスピード、メリット・デメリットがさまざまに異なることに気付けるだろう。
これからDIGITSやディープラーニングを学びたい人に
今回開催されたハンズオントレーニングは、DIGITSの使い方を学ぶという目的も含まれたディープラーニング入門者向けのセミナーであり、これからDIGITSやGPUディープラーニングを使った画像認識を学びたい、あるいはディープラーニングの基礎的な仕組みを知りたいという人に適している。
逆に言うと、ここで学んだことが即、新しいAIソリューションや自動運転車の開発に繋がるわけではない。実用性の高いディープラーニングによるアルゴリズム開発には、より高度で実践的なセミナーに参加してノウハウを得たり、NVIDIAのパートナー企業らが提供するソリューションを利用したりすることが不可欠だろう。
こうしたハンズオントレーニングを含むイベントはたびたび開催されている。昨今は人気が高く、予約を取るのさえ難しい場合もあるようだが、無料か比較的安価な受講料に設定されているため、個人の趣味あるいは会社業務の一環として気軽に参加できるのではないだろうか。GPUを用いた高速で強力なディープラーニングの実力を体感しつつ、人工知能への取り組みを加速させたいなら、ぜひNVIDIAのWebサイトでイベントスケジュールをチェックしてほしい。