クリックして画像を選んでね
※判定に使用した画像はAIの学習に使用されることがあります。
※推奨ウェブブラウザは下記となっておりますが、それ以外のウェブブラウザでも動作する可能性はあります。
・Mozilla Firefox 最新版
・Google Chrome 最新版
 

解析結果

技術概要


1. ML Framework(TensorFlow, Keras)

機械学習のフレームワークとして、実績あるGoogle製フレームワーク TensorFlow 及び、それをバックエンドとする Keras を利用しています。
これらのフレームワークを用いる事により、迅速な反復開発が可能となりました。
開発言語は機械学習の世界では標準的となっている、Python3を用いています。

2. Fine Tuning(転移学習)

ImageNetと呼ばれる極めて大規模な画像分類データセットで学習したVGG16(オックスフォード大学のVGG研究チームが開発した全16層のニューラルネットワーク)をベースに、転移学習を行いました。
転移学習とは、汎用的なタスク向けに訓練したモデルを、他のタスクに転用する手法の事を言います。
今回の場合はVGG16の全結合層を取り除き、新たに壁面仕上げ(11種類)の分類タスクに適した全結合層をつなげたモデルを構築しました。

3. Drop Out

ニューラルネットワークにおける各ニューロンを、訓練時に一定確率で無効化することで、汎化性能を高める手法をDropOutと呼びます。
DropOutによって、各ニューロンは訓練データセットの一部だけを使って訓練されている状態になるため、一種のアンサンブル学習(ランダムに復元抽出したデータセットで学習した複数の学習モデルを用いて、多数決でもって推論する手法)を行っている事になります。

4. Batch Normalization(バッチ正則化)

機械学習における学習は、一般的に一つ一つのデータに対して逐一行う(オンライン学習)わけではなく、データを小さなバッチと呼ばれる単位に纏めて学習します。
このバッチに対して標準化(平均値と標準偏差が一定の値になるように変数変換する事)を行うのが、バッチ正則化と呼ばれる手法です。
標準化における平均値と標準偏差は、学習可能パラメータです。
この手法を用いる事で、訓練収束の高速化と、正則化効果(過学習の防止と汎化性能の向上)が見込まれます。

5. Data Augmentation(データ拡張)

今回学習に用いたデータは5256枚で、一クラス当たり500枚程度と決して多い数ではありません。
画像の質もばらばらで、建物の全景写真もあれば、壁を近接撮影した写真もあります。
更に、壁の種類によっては50枚にも満たないものもあります。
このように、データ数自体が十分ではない場合によく使われる手法がデータ拡張です。
これは写真に対してランダムに機械的な加工を施すことで、疑似的にデータを増やす手法です。
今回の場合は以下のデータ拡張を行いました。

  • 回転
  • 平行移動
  • 拡大
  • シアー変換(平行四辺形に歪める処理)
  • 左右反転

6. Weighted Labels(ラベルの重み付け)

今回の学習に用いたデータは、クラスによっては少ないと50枚、多いと1000枚以上あるという、非常にバランスの悪いものです。
そのようなデータで普通に機械学習を行うと、単純にデータ量の多いクラスに推論が偏ってしまう、という問題が生じます。
そこで、各クラスにその枚数に反比例する重みづけを行うことで、そのような偏りを極力減らしました。

7. 前処理

データの質を均質化することで、予測精度を向上させる処理のことです。
今回はベースモデルにVGG16を使っているため、VGG16と全く同じ前処理を用いました。基本的な前処理の手法としては、以下の様なものがあります。

  • サンプル単位の標準化
  • データセット単位の標準化
  • 正規化(0~1の間に画素値を押し込める)
  • 白色化