コンピュータビジョン

画像分類

MNISTによる数字分類

たたみ込みニューラルネットワークを使って,手書き数字のMNISTデータベースで数字認識子を訓練する.
まず,訓練データと検証データを取得する:
入力として28×28のグレースケール画像を取る,たたみ込みニューラルネットワークを定義する:
訓練ラウンドを3回行ってネットワークを訓練する.NetTrainはデコーダに提供されたのと同じクラスを使って,自動的にCrossEntropyLossLayerを加える:
検証集合からランダムに抽出した画像で,訓練されたネットワークを直接評価する:
トクテイの入力に対するすべてのクラスの確率推定を得る:
NetMeasurementsを使って,検証集合に対する,訓練されたネットの分類性能をテストする:

CIFAR-10のオブジェクト分類

ラベル付き画像のCIFAR-10データベースを使って,各オブジェクトのクラスを予測するたたみ込みネットを訓練する.まず,訓練データを取得する:
一意のクラスを抽出する:
画像が与えられたときにクラスを予測するたたみ込みネットを作成する:
訓練データでネットを訓練する:
画像の集合について,最も可能性の高いクラスを予測する:
特定の例では,最も可能性の高いラベルの割当ての確率が与えられる:
ランダムなサンプルから,ネットが最高および最低のエントロピー予測を行う画像を選ぶ.高エントロピー入力は,ネットが正しいクラスについて最も不確かとする入力として解釈される:
学習済みの埋込み
MNISTデータベースの数字の埋込みを学習する.
まずデータをインポートし,0から4までのラベルを持つ例だけを取る:
画像のペアを抽出し,それらのラベルが異なっていればTrue,同じならばFalseと関連付けることで,訓練集合を作成する:
埋込みネットワークとして使用するたたみ込みネットを定義する:
埋め込みネットを構築する:
ネットワークを訓練する:
数字のペアのリストにネットワークを適用し,埋め込みの下での距離を計算する.同じラベルを持つ数字同士の距離は小さい:
埋込みネットワークを抽出する:
数字の埋込みを計算する:
500個の数字を抽出し,ラベルでグループ分けする:
埋込みを計算し,プロットする.同じラベルを持つ数字は学習済みの埋め込みの下でクラスタ化される:
画風変換
ある画像の内容で,別の画像の画風を使って新しい画像を作成する.この実装はGatys,その他の人によって書かれた「A Neural Algorithm of Artistic Style」で説明されている方法に従っている.
内容と画風の画像の例:
この両方の画像を組み合せた画像を作成するためには,まず学習前の画像分類ネットワークを取得する:
画像の画風と内容の特徴抽出器として使われる層を取る:
3つの損失関数が使われる.最初の損失は,合成画像の内容が内容画像の内容と似ていることを示している:
2つ目の損失は,合成画像の画風が画風画像の画風と似ていることを示す.画風の類似性は,入力とターゲットのグラム行列の間の平均二乗差として定義される:
3つ目の損失は,合成画像の隣接画素の明度差の大きさが小さいことを確認する.これにより合成画像がより自然に見える:
任意の内容および画風の画像に対する,最終的な訓練集合を作成する関数を定義する.この関数はランダムな初期画像も作成する:
予測された画像を可視化するためのNetDecoderを定義する:
訓練データは,内容と画風の画像から抽出された特徴で構成される.特徴抽出関数を定義する:
内容および画風の特徴の単独の例からなる訓練集合を作成する:
入力次元が内容および画風の画像の次元に対応する訓練ネットを作成する:
訓練する場合,内容と画風の相対的重要性を設定するために,3つの損失関数には異なる重みが付けられる.これらの値は内容と画風の画像によって変更される必要がある場合がある.最終的な損失を,3つの損失の合計として定義する損失指定を作成する:
NetTrainを使って画像を最適化する.LearningRateMultipliersを使って,NetArrayLayer以外のネット内のすべてのパラメータを凍結する.CPU訓練でより結果を得るには最大1時間かかるので,訓練はGPUで行うのがよい.訓練は,評価 評価を放棄を使っていつでも中止することができる:
訓練されたネットのNetArrayLayerから最終画像を抽出する:
セマンティックセグメンテーション(画素分類)

Toyテキストデータセットのセマンティックセグメンテーション

単語の画像のすべての画素を,背景の一部あるいはaからzまでの1つの文字の一部として分類するネットを訓練する.
まず訓練データと検証データを生成する.これは単語の画像,および各画素にラベルを付ける対応する「マスク」整数行列からなる:
クラスの数を取得する:
それぞれのクラスインデックスに色を割り当てる:
訓練集合の入力画像からランダムなサンプルを取得する:
1つの例のマスク配列を可視化する.ここで,それぞれの色は特定のクラスを表している:
1つの画像を取り,画像の中のすべての画素に対する確率ベクトルを返すたたみ込みネットを定義する:
CPU訓練には最大1時間かかる可能性があるため,GPU訓練が推奨される.ネットを訓練する:
各画素において最も確率の高いクラスのインデックスを与える予測関数を作成する:
健勝集合の画像の画素クラスを予測する:
例の実際のターゲットマスクをプロットする:
指定された画素がある特定のクラスになるような確率のソートされたリストを取得する:
文字列をラスタ化してから,各画素の最も可能性の高いクラスに対応するインデックスの行列を与えるために訓練されたネットを適用する関数を定義する:
ある文字は別の文字と簡単に識別される. 
識別が難しいものもある:
検証集合で,訓練されたネットの画素レベルの確度を求める: