畳み込みニューラルネットワークチュートリアル
人工知能は長い道のりを経て、人間と機械の可能性の間のギャップをシームレスに埋めてきました。 そして、世界中のデータ愛好家が、AIの多くの側面に取り組み、ビジョンを現実のものにしています。そのような素晴らしい領域の1つが、コンピュータビジョンの領域です。 この分野は、機械が人間と同じように世界を見ることができるようにし、その知識をいくつかのタスクやプロセス(画像認識、画像解析、分類など)に利用することを目的としています。 そして、ディープラーニングによるコンピュータービジョンの進歩は、特に畳み込みニューラルネットワークアルゴリズムでかなりの成功を収めています。
このチュートリアルでは、以下について学習します:
- CNN入門
- 畳み込みニューラルネットワークとは何か?
- CNNはどのように画像を認識するのか
- CNNの層
- CNNを使ったユースケース実装
CNNの紹介
FacebookのAIリサーチグループのディレクター、Yann LeCunは、畳み込みニューラルネットワークのパイオニアである。 彼は1988年にLeNetと呼ばれる最初の畳み込みニューラルネットワークを構築した。 LeNetは、郵便番号や数字の読み取りなどの文字認識タスクに使用されました。
ソーシャルメディアにおける顔認識、自動運転車の構築における物体検出、ヘルスケアにおける視覚イメージによる病気検出がどのように行われているか、疑問に思ったことはありませんか。 それはすべて、畳み込みニューラルネットワーク(CNN)のおかげなのです。
鳥の画像があり、それが本当に鳥なのか、それとも他の物体なのかを識別する場合を想像してください。 まず、画像のピクセルを配列の形でニューラルネットの入力層に送ります(物事の分類に使用される多層ネットワーク)。 隠れ層は、さまざまな計算や操作を行うことで特徴抽出を行う。 畳み込み層、ReLU層、プーリング層など、複数の隠れ層があり、画像から特徴抽出を行う。 最後に、画像中のオブジェクトを識別する完全連結層がある。
図:鳥の画像。 鳥の画像を識別するConvolutional Neural Network
ディープラーニングコース(TensorFlow搭載&Keras搭載)
Deep Learningの概念とモデルをマスターするコース
Convolutional Neural Networkとは何でしょう?
コンボリューショナル・ニューラル・ネットワークとは、フィードフォワード型のニューラルネットワークで、一般的には格子状のトポロジーを持つデータを処理して視覚画像の解析に利用されています。 ConvNetとも呼ばれます。 畳み込みニューラルネットワークは、画像内のオブジェクトを検出し、分類するために使用されます。
以下は、2種類の花を識別するニューラルネットです。
CNN では、すべての画像はピクセル値の配列の形で表されます。
畳み込み演算は、あらゆる畳み込みニューラルネットワークの基礎を形成します。
a =
b =
畳み込み演算では、配列は要素ごとに乗算され、積は合計されて新しい配列になり、これは a*b を表します。 積を合計して結果を得ます。
行列aの次の3つの要素と行列bの要素を掛け合わせ、積を合計します。
この処理は畳み込み操作が完了するまで続けられます。
CNNはどのように画像を認識するのか?
次の画像を考えてみましょう:
色のついたボックスはピクセル値1を表し、色がなければ0を表します。
バックスラッシュを押すと、下の画像のような処理が行われます(☝ ՞ਊ ՞)。
フォワードスラッシュ(/)を押すと、下の画像が処理されます:
ここでCNNが画像を認識する方法を示す別の例を示します:
上の図でわかるように、値が1であるものだけが点灯しています。
Layers in a Convolutional Neural Network
畳み込みニューラルネットワークは、画像から情報を抽出するのに役立つ複数の隠れ層を持っています。 CNN の重要な 4 つの層は次のとおりです:
- Convolution layer
- ReLU layer
- Pooling layer
- Fully connected layer
Convolution Layer
これは画像から貴重な機能を抽出するプロセスの最初のステップとなるものです。 コンボリューションレイヤーはコンボリューション操作を行ういくつかのフィルターを持っています。 すべての画像はピクセル値の行列とみなされます。
ピクセル値が0か1である次の5×5画像を考えてみましょう。 3×3の次元を持つフィルタ行列もあります。 フィルター行列を画像にスライドさせ、ドット積を計算して、畳み込んだ特徴行列を得ます。
ReLU layer
ReLUはrectified linear unitの略で、直交化した線形単位のことです。 特徴マップを抽出したら、次はそれをReLUレイヤーに移動する。
ReLUは要素ごとの演算を行い、負のピクセルを全て0にすることで、ネットワークに非線形性を導入し、生成される出力は整流された特徴マップとなる。
元の画像は、特徴を見つけるために複数の畳み込みとReLU層でスキャンされる。
プーリング層
プーリングは特徴マップの次元を小さくするダウンサンプリングの操作である。 プーリング層では、さまざまなフィルターを使用して、エッジ、コーナー、ボディ、羽、目、くちばしなど、画像のさまざまな部分を識別します。
ここまでの畳み込みニューラルネットワークの構造を以下に示します。
プロセスの次のステップは、フラット化と呼ばれるものです。 平坦化は、プールされた特徴マップから得られたすべての 2 次元配列を、単一の長い連続した線形ベクトルに変換するために使用されます。
平坦化された行列は、画像を分類するための完全接続層への入力として与えられます。
ここで、CNNが鳥を認識する方法を具体的に説明します。
- 画像のピクセルは、畳み込み演算を行う畳み込み層に送られる
- その結果、畳み込みマップが得られる
- その畳み込みマップにReLU関数を適用して、平行化した特徴マップを生成
- 複数の畳み込みとReLU層で画像が処理される
- 画像の特定の部分を識別するために、さまざまなフィルタを持つ異なるプーリング層を使用する
- プールされた特徴マップは平らにされ、最終出力を得るために完全連結層に送られる
無料機械学習コース
学べるイン・イン・イン・ジャパン需要機械学習のスキルとツール学習を始める
Use case implementation using CNN
Canadian Institute For Advanced Research の CIFAR-10 datasetを使って、CNNを使って10カテゴリに画像を分類してみます。
1. データセットをダウンロードする:
2. CIFARデータセットをインポートする:
3. ラベル名を読む:
4. matplotlibを使って画像を表示する:
5. ヘルパー関数を使ってデータを扱う:
6. モデルを作る:
7. ヘルパー関数をかける:
8. 畳み込みとプーリング用のレイヤーを作成する:
9. プーリングレイヤーをリシェイプして平坦化レイヤーを作成する:
10.プーリングレイヤーをリシェイプして、平坦化レイヤーを作成する。 完全連結層を作成する:
11. 出力を変数y_predに設定する:
12. 損失関数を適用する:
13. オプティマイザーを作成する:
14. すべてのグローバル変数を初期化するための変数を作成します:
15. グラフセッションを作成してモデルを実行する:
TensorFlowで深層学習モデルを構築し、深層学習コースでTensorFlowオープンソースフレームを学ぶ(Keras &TensorFlow付き)(英語) 今すぐ登録!
CNNとディープラーニングについてもっと知る
複数の隠れ層を持つCNNを構築し、その画素値を使って鳥を識別する方法をご紹介しています。 また、CIFARデータセットを使用して、10カテゴリに渡って画像を分類するデモも完了しました。
また、パデュー大学とIBMの協力によるAIと機械学習の大学院プログラムに入学し、機械学習と深層ニューラルネットワークの研究を行うために設計されたオープンソースのソフトウェアライブラリであるTensorFlowを使って深層学習技術の専門家に変身することも可能です。 AIと機械学習のこのプログラムは、Python、機械学習、自然言語処理、音声認識、高度なディープラーニング、コンピュータビジョン、および強化学習をカバーしています。 それは、世界で最もエキサイティングな技術のフロンティアの1つのためにあなたを準備します
。