ディープラーニングは世界的な画像認識コンテストで精度の高さを証明する結果を残すことによって、世界を驚かせています。
今回はディープラーニングの研究分野である画像認識に関して学習していきます。
画像認識の応用事例を学びながら、ディープラーニングがどのような利用方法があるのか知りましょう。
このブログは底辺フリーランサーがG検定を取得して、人生を好転させようとする日記です。
目次
畳み込みニューラルネットワーク(CNN)による画像認識
画像の認識分野では、畳み込みニューラルネットワーク(CNN)が成果をあげました。
その後は、畳み込みニューラルネットワーク(CNN)の研究や応用が進んでいます。
まずは、画像認識分野で利用されている畳み込みニューラルネットワーク(CNN)の例を見ていきます。
具体的な画像認識の手法は以下の通りです。
LeNet
AlexNet
GoogLeNet
VGGNet
ResNet
MobileNets
これらの例を具体的な解説していきましょう。
LeNet
LeNetは1998年にヤン・リークンが発表しました。
畳み込み層とプーリング層を交互に重ねたネットワークで、現在使用されているアーキテクチャの原型になっています。
AlexNet
AlexNetは2012年にトロント大学のヒントン教授を含むチームが考案しました。
画像の位置特定(Objectlocalization)と物体検出(Object detection)の精度を競う有名な画像認識コンテストILSVRCで、これまでのサポートベクトルマシンに代わって、ディープラーニングに基づくモデルとしては初めての優勝を果たしました。
AlexNetは筆頭開発者だったAlex Krizhevskyの名前が由来です。
ReLUやドロップアウトを用いている点が特徴です。
2011年の優勝チームは認識誤り率は約26%でしたが、AlexNetは約16%、前回の優勝チームよりも一気に10%も精度を上げました。
GoogLeNet
GoogLeNetはGoogleのチームが開発し、2014年のILSVRCで優勝しました。
GoogLeNetは、インセプションという層の中にさらにネットワークをもつモジュール構造を採用しています。
AlexNetよりも深い22層の構造を実現して、パラメータ数を削減しています。
VGGNet
VGGNetは2014年にオックスフォード大学が開発しました。
2014年のILSVRCでは準優勝しています。
VGGNetはGoogLeNetと同様に、AlexNetよりもさらに深いネットワーク構造を採用しています。
16層のネットワークを持っているものを「VGG16」、19層のネットワークを持っているものを「VGG19」と名付けています。
ResNet
ResNet(Residual Network:レズネット)はMicrosoftのカイミング・ヘが開発し2015年のILSVRCで優勝しました。
それまでのネットワークでは、層を深くしすぎると性能が落ちるという問題がありました。
ResNet(Residual Network:レズネット)を用いれば、深い構造でも学習が可能になりました。
ILSVRCの認識誤り率は約3.6%であり精度をさらに向上させています。
MobileNets
MobileNetsは2017年にGoogleが発表しました。
CNNモデルの精度向上以外の観点のアプローチとして、高速化を実現させています。
リソースに制約のある組み込み機器などで速度を考慮して、効率的に精度を上げることを可能にしたモデルです。
「Depthwise separable convolution」という少ない計算量のアーキテクチャ、「Width Multiplier」と「Resolution Multipliter」という2つのハイパーパラメータを調整して高速化を図っています。
物体検出
画像認識と並びディープラーニングは「物体検出」の精度も上がっています。
物体検出とは、画像内の物体の位置とカテゴリー(クラス)の検出をします。
画像の中からバウンティングボックス(bounding box)と呼ばれる矩形(四角)領域で位置とカテゴリーを特定します。
これまでの物体の検出方法は、SVMなどのディープラーニング以外の方法で物体位置を検出した後で、カテゴリーを識別する方法がありました。
しかし、この方法だと処理が数段階になってしまうため、学習時間が長くなる問題がありました。
ディープラーニングを物体検出に利用することで、学習時間の短縮と検出精度の向上を実現させています。
実際の例では、自動運転によける車載カメラは、歩行者や対向車の位置を特定することに使われます。
「物体検出」の技術として有名なのは以下の4つです。
R-CNN
Faster R-CNN
YOLO
SSD
それぞれを詳しく解説していきましょう。
R-CNN
R-CNNは2014年頃に考案されました。
このR-CNNが物体検出アルゴリズムの先駆けです。
R-CNNはCNNのアルゴリズムを物体検出に応用したアルゴリズムであり、人間が行う物体認識のように領域(Region)ごとに特徴量を抽出します。
Faster R-CNN
Faster R-CNNは2015年頃に考案されたアルゴリズムです。
R-CNNは物体検出とは別に物体領域候補を計算する必要があるため、実行時間がかかるという問題がありました。
Faster R-CNNは、物体領域候補の抽出にDNNを用いることで、実行時間を高速化することにチャレンジしています。
Faster R-CNNの手法は、画像の入力から物体の検出までEnd-to-Endで学習可能な一気通貫学習(End-to-End Learning)ができるようになりました。
YOLO(You Only Look Once)
YOLO(You Only Look Once)は2016年に考案されたアルゴリズムです。
R-CNNの改良版として、画像全体をグリッド分割して、領域ごとにバウンティングボックス(bounding box)を求めます。
YOLO(You Only Look Once)は、CNNのアーキテクチャをシンプルにしたために、高速に物体検出をすることができるようになりました。
ちなみにYOLO(You Only Look Once)はFaster R-CNNよりも識別精度は多少劣っているようです。
SSD(Single Shot MultiBox Detector)
SSD(Single Shot MultiBox Detector)はも考案されています。
これは、YOLO(You Only Look Once)と同系列のアルゴリズムであり、様々な回想の出力層からマルチスケールな検出枠を出力できるように工夫されています。
物体セグメンテーション
ディープラーニングは「物体セグメンテーション」も可能にしています。
物体検出のような矩形のバウンティングボックス(bounding box)を使用せずに、対象物体と背景を境界まで詳細に切り分けて識別します。
物体セグメンテーションには、「セマンティック・セグメンテーション」と「インスタンス・セグメンテーション」があります。
セマンティック・セグメンテーション
セマンティック・セグメンテーションは領域分割を詳細に行って、入力画像のどの位置に物体が存在するのかを画像(ピクセル)単位で特定します。
セマンティック・セグメンテーションの代表的な手法として、FCN(Fully Convolutional Network)と呼ばれるCNNがあります。
FCN(Fully Convolutional Network)はすべての層を畳み込み層にしてネットワークを構成します。
そのため、入力する画像のサイズに制限がないというメリットがあります。
さらに、アップサンプリングによって画像の解像度を上げることで、CNNによる出力画像の画質低下を防ぎ出力画像の解像度を上げることができます。
インスタンス・セグメンテーション
インスタンス・セグメンテーションは、個々の物体ごとに認識し切り分ける物体セグメンテーションです。
セマンティック・セグメンテーションは同じカテゴリーに属する複数の物体が同一ラベルとして扱われてしまいます。
インスタンス・セグメンテーションなら、個々の人間も識別する事ができます。
画像キャプション生成
画像キャプション生成とは、画像処理と自然言語処理の融合的な研究であり、画像の入力によってその説明文(キャプション)を自動的に生成する技術です。
CNNとLSTMの技術を用いることで可能になります。
画像生成
画像生成の技術も研究が進んでいます。
特にGoogle Brainのイアン・J・グッドフェローが提案したGAN(Generative adversarial network:敵対的生成ネットワーク)が利用されています。
GAN(Generative adversarial network:敵対的生成ネットワーク)は、「画像生成器(generator)」と「画像識別器(discriminator)」から構成されていて、画像生成器(generator)は画像識別器(discriminator)を騙すような画像生成をします。
画像識別器(discriminator)は、画像生成器(generator)が生成した画像と実際の画像とを分類するように学習します。
2015年に、テュービンゲン大学のゲイティス(Gatys)らが、ある芸術作品の画風を他の芸術家の画風に変換するアルゴリズムを発表しました。
その後にGoogleがDeep Dreamと呼ばれる画像生成システムを開発し、画像生成をするツールを公開しています。
実装上の工夫
ディープラーニングを利用した画像認識の実装の工夫として、他の分野と同様に「活性化関数」や「ドロップアウト」を取り入れています。
特に、画像データの場合は、学習データを疑似的に増やすためにデータ拡張(Data Augmentation)を行うこともあります。
画像データを左右に反転させたり、輝度を変化させたりすることなどによって学習データを増やし、少ない学習データによる過学習を防ぐ効果もあります。
ディープラーニングのライブラリによってはデータ拡張を行うためのクラスも用意されており、データ拡張の実装が容易となってきています。
カプセルネットワーク
カプセルネットワークは2017年にジェフリー・ヒントンが提唱したモデルです。
カプセルネットワークは、レイヤから出力をベクトルとして渡すことでどのレイヤに情報を渡すのか決定することができます。
さらに、「squash関数」という関数を用いることで、ベクトル情報を維持したまま圧縮することが可能になります。
このため、カプセルネットワークは、CNNと比較して、画像認識のためのデータを少なくすることが可能になります。
ライブラリ
物体検出などの画像認識を行うために、画像認識ライブラリも普及しています。
「TensorFlow」「Karas」「Caffe」「Chainer」などのディープラーニング解析で有名なライブラリだけではなく、画像認識ライブラリの代表としてOpenCV(Open Source Computer Vision Library)があります。
OpenCV(Open Source Computer Vision Library)は2006年に1.0がリリースされて、2015年には3.0がリリースされているマルチプラットフォームに対応したライブラリです。
画像認識を行う上での物体検出や領域分割も行うことが可能になります。
最近では、GoogleのGCP(Google Cloud Platform)が提供しているGoogle Cloud Vision APIなどもあり、画像解析に機械学習モデルを使えるサービスが増えています。
OpenCV(Open Source Computer Vision Library)の前処理
OpenCV(Open Source Computer Vision Library)は画像データの前処理も可能であり、「グレースケール化」「平滑化」「ヒストグラム平坦化」も可能です。
それぞれの前処理に関しては以下の通りです。
グレースケール化:カラー画像を色見のないモノクロ画像に変換
平滑化:画像をぼかすことでノイズ除去を行う
ヒストグラム平坦化:画像の明るさやコントラストを調整する
次回からは自然言語処理
今回はディープラーニングにおける、画像認識にフォーカスして学習してきました。
画像キャプション生成の部分で自然言語について少し触れていますが、デイ―プラーニングは画像認識だけではなく自然言語処理にも活用されています。
この技術も研究が進んでいる領域なので、次回は「自然言語処理」について学習していきます。
以下はこれまでの学習の日記です。