テクノロジー

今、話題になっている「GoogLeNet」。その実装までのステップとは

今、話題になっている「GoogLeNet」。その実装までのステップとは

画像認識や画像生成などの画像処理を行う機械学習アルゴリズムを使った製品やサービスが近年数多くリリースされていますよね。画像認識は顔認証を使ったドアの施錠管理、道路を録画して交通量調査に活用、さらには道路のひび割れ検知を行うなど、多くの分野で使われています。

そんな中、画像認識のプログラムを自分で組んでみたいと考えている方も増えているんだとか。ただ、画像処理を行う機械学習について調べてみると、様々なアルゴリズムがあり、アルゴリズムがどのように違うのか、またどのように使い分ければいいのか分からないという方もいるかもしれません。

そんな時にお勧めのアルゴリズムの1つがGoogLeNetです。GoogLeNetは数ある画像認識アルゴリズムの中でも精度がよく、さらに簡単に使うことができるとのこと。ぜひ、この記事で使い方をマスターしましょう。

そこでこの記事では、ディープラーニングを用いた画像認識アルゴリズムのGoogLeNetについて特徴や使い方をご紹介します。

GoogLeNetとは

GoogLeNetのイメージ

まず、GoogLeNetとは何なのかを解説しましょう。

GoogLeNetとは、ILSVRC-2014(ImageNet Large Scale Visual Recognition Challenge 2014)という2014年に行われた画像認識の大会にて優勝した画像認識のアルゴリズムです。

2012年にAlexNetというディープラーニングを用いた画像認識モデルが前年までの精度を大きく上回って以降、ILSVRCではディープラーニングを用いた画像認識モデルが優勝しています。GoogLeNetは2014年のILSVRCにて誤回答率が7%という驚異的な数字を叩き出して優勝。革新的だったAlexNetの誤回答率が26%だったのに対して、GoogLeNetはかなり画像認識の精度が高いモデルといえるでしょう。

またGoogLeNetの大きな特徴として、Inceptionモジュールと呼ばれる小さなネットワークを作成し、モジュールの中に通常の畳み込み層の重ねることで1つのCNNモデルを構成しているという点が挙げられます。このInceptionモジュールを用いることで層を深くでき、高精度を実現できました。AlexNetの深さは8層に対してGoogLeNetは22層なことから、より多層であることがわかります。

※わかりやすい説明はこちら

GoogLeNet以外に一般的なCNNモデル

CNNのイメージ

これまではGoogLeNetについて説明しましたが、次に一般的なCNN(Convolutional neural network、畳み込みニューラルネットワーク)モデルについて説明しましょう。

CNNはその名の通り、ニューラルネットワークを使ったアルゴリズムの1つで、画像認識によく使われており、畳み込み層、プーリング層、全結合層の3つの層を組み合わせて構成されます。

基本となるアルゴリズムなので、それぞれの層でどのような役割があるのかしっかり抑えましょう。ここからは、それぞれの層について詳細を解説します。

まず畳み込み層は、1つの画像に点在している様々な特徴を畳み込みフィルターというフィルターを使って抽出する層のことです。フィルターには数値が割り振られており、画像の特徴を抽出したい箇所の数値との内積計算することで特徴量を抽出します。フィルターを数ピクセル毎ずらしながら内積計算を繰り返すことで画像全体の特徴量を計算します。

次に解説するのがプーリング層。プーリング層は畳み込み層で抽出した特徴量を区画ごとにまとめることで、近い視点での特徴を把握するのではなく、少し離れた目線で特徴を把握できるようにしています。こうすることで、画像内に存在するノイズに対応することができるようになります。

特徴量のまとめかたは区画の最大値をとる方法と平均値をとる方法がありますが、最大値をとるマックスプーリングを使うことが多い点は抑えておくと良いでしょう。また、プーリング層によって特徴量を削減することができ、計算コストが減るというメリットもあるのだとか。

最後に全結合層について説明します。全結合層ではプーリング層で作成した特徴量の全てのノードを1つのノードに結合します。結合する際にプーリング層のどの特徴量を重視するのかを表した値(重みと言います)を用いたり活性化関数という関数を使って値を算出します。

通常、全結合層は最終的な判定結果を出力する出力層として使われます。そのため、全結合層で算出した値が分類結果の最終的な確率を表していることになるのです。

以上がCNNの基本的な構成でした。

CNNの基本的な構成を理解しておくと、複雑そうなアルゴリズムも比較的簡単に理解できます。たとえばAlexNetは8層のニューラルネットで構成されていますが、1〜5層までは畳み込み層、残りの3層に全結合層が使われています。また、1層・2層・5層の出力部分でマックスプーリングを用いて、ノイズへの対策がなされています。

GoogLeNetが使えることのメリット

メリットのイメージ

さて、ここからはGoogLeNetを使うとどのようなメリットがあるのかを解説しましょう。

GoogLeNetは事前学習済モデルという既に画像を学習させているモデルのため、こちらでゼロから学習をさせる必要がありません。そのため、大量の画像を自分で用意しラベル付けをして学習させる手間が減るでしょう。もちろん、学習済みのGoogLeNetは学習させたデータや分類するクラスの種類によって認識できるモノや精度は変わることは留意する必要はあります。とはいえ、自分でデータを収集してAI(人工知能)に学習させるにはに多くの時間がかかることを考えると、大きなメリットと感じるに違いありません。

また、事前学習モデルは転移学習を行うことができます。転移学習とは、事前学習モデルには学習されていない分類クラスやデータを追加学習させることです。

転移学習させることで更なる画像認識の精度向上を望めるほか、事前学習済みモデルでは分類できなかった新しいクラスへの分類ができるようになるため自分のやりたいことに応じてカスタマイズできます。また、転移学習はゼロからモデルを学習させるよりも学習にかかる時間がかかりません。つまり自分でモデルを作成するよりも、高精度なものをすぐに作ることができます。こちらも大きなメリットと言えるでしょう。

このように多くのメリットがあるGoogLeNet、使ってみたくなりますよね。ではここからはGoogLeNetの使い方を説明します。

GoogleNetの実装方法

実装のイメージ

GoogLeNetを使うための方法は数多く存在しますが、今回はPytorchというライブラリを使う方法を説明します。

Pytorchはディープラーニングを行うためのライブラリで、近年AI(人工知能)系の論文などでも多様されている人気のライブラリです。pytorchを用いて画像系のアルゴリズムを使いたい場合はtorchvisionというライブラリを使いますが、学習済みのGoogLeNetを簡単に動かせるようモジュールが用意され、GoogLeNetを使うためのコードを簡単に実装ができます。

Pytorchで実装したGoogLeNetを動かすためのサンプルコードは、以下のgoogle colaboratoryに載っています。ランタイムダブ内の全てのセルを実行を選択するとソースコードを実行できます。

GoogLeNet
import torch model = torch.hub.load('pytorch/vision:v0.10.0', 'googlenet', pretrained=True) model.eval()

このコードは元々ネット上に用意された犬の画像を判定しています。自分の画像を判定させたい場合は、

url, filename = (“https://github.com/pytorch/hub/raw/master/images/dog.jpg”, “dog.jpg”)

の”https://〜/dogs.jpg”部分を判定したい画像のパスに変更し、コンマ以降に記載されている”dog.jpg”を判定したい画像名に変更すると判定できるようになります。

また、実際にGoogLeNetを実装したソースコードを確認したい場合、以下のサイトから確認可能です。

vision/torchvision/models/googlenet.py at main · pytorch/vision
Datasets, Transforms and Models specific to Computer Vision - pytorch/vision

GoogLeNetを実装する時の注意点

注意のイメージ

今回説明した方法で気をつけなければならないのが、PythonとPytorchのバージョンを正しく設定しないとプログラム実行時にエラーが発生する点です。Pytorchを使うためにはtorchというライブラリと、画像系のアルゴリズムを使いたい場合はtorchvisionというライブラリをインストールする必要があります。

以下サイトの表にはtorch、torchvision、Pythonの正しく動作する組み合わせが書いています。

GitHub - pytorch/vision: Datasets, Transforms and Models specific to Computer Vision
Datasets, Transforms and Models specific to Computer Vision - pytorch/vision

例えばPythonのバージョンが3.5だった場合、表の5行目までに書いてあるtorch、torchvisionのバージョンをインストールしてGoogLeNetを動かそうとすると実行エラーになってしまいます。Pythonのバージョンが3.5の場合はtorchはバージョン1.5.1より古いものを、torchvisionは0.6.1より古いものをインストールする必要があります。

また、インストールしたtorchvisionのバージョンをGoogle Colabratoryのソースコードに反映しなければなりません。サンプルコードの

model = torch.hub.load(‘pytorch/vision:v0.6.0’, ‘googlenet’, pretrained=True)

”v0.6.0”の部分をインストールしたバージョンに変更しましょう。

インストールしているtorchvisionのバージョンよりも新しいバージョンがソースコードに書かれている場合は実行、バージョンが違っていたらエラーになります。その場合はtorchvisionのバージョンを変える必要があります。

まとめ
さて、今回はGoogLeNetの特徴、そして使い方の解説を行いました。

GoogLeNetはILSVRC-2014で優勝した画像認識のアルゴリズムで、Inceptionモジュールと呼ばれる小さなネットワークを作成し、モジュールの中に通常の畳み込み層の重ねることで1つのCNNモデルを構成しているという特徴を持っていました。

基本的なCNNモデルはニューラルネットワークを用いた機械学習アルゴリズムで画像処理を行うアルゴリズムでよく使われます。畳み込み層、プーリング層、全結合層の3つの層で構成されており、AlexNetは1〜5層までは畳み込み層、6〜8層は全結合層で構成されており、第1、2、5層の出力部分でマックスプーリングを用いてノイズへの対策をしています。GoogLeNetもまた同様にこれらの3つの層をうまく組み合わせて構成されています。

GoogLeNetは事前学習済みモデルのため自身でゼロから学習させる必要はなくpytorchで実装されたモデルを使うことが可能です。また、転移学習をさせることで自分のやりたいことに応じてカスタマイズすることも可能です。なお、このモデルを使う際はPythonとtorch、torchvisionのバージョンを正しく設定しないとプログラム実行時にエラーになるため気をつけましょう。

画像系のアルゴリズムは基本的な構成は似ているため、GoogLeNetの仕組みを理解できると、他の画像系のアルゴリズムも理解しやすくなります。GoogLeNetを足掛かりにして、他のアルゴリズムについても理解を深めていきましょう!

【お知らせ】

当メディア(AIZINE)を運営しているAI(人工知能)/DX(デジタルトランスフォーメーション)開発会社お多福ラボでは「福をふりまく」をミッションに、スピード、提案内容、価格、全てにおいて期待を上回り、徹底的な顧客志向で小規模から大規模ソリューションまで幅広く対応しています。

御社の悩みを強みに変える仕組みづくりのお手伝いを致しますので、ぜひご相談ください。

お多福ラボコーポレートサイトへのバナー

トップへ戻る
タイトルとURLをコピーしました