ディープラーニングでヒビ割れ検出してみた

こんにちは、のっくんです。

今日はディープラーニングを使って、壁のヒビ割れ検出にチャレンジしてみようと思います。

ヒビ割れの検出って調べてみると論文になっていたりして研究分野としても人気があるみたい。

ヒビ割れはCrackと言います。

kerasを使って数行のコードで実装できました。

スポンサーリンク

データセット

データセットは以下のサイトにありました。

https://dataturks.com/projects/miaozh17/Crack%20Classification

1428枚のヒビ割れ画像のデータセットです。ラベルはヒビ割れかそうでないかの2値です。

JSONファイルをダウンロードし、Google Colabで読み取ります。

contentが画像のURLです。このURLから画像をダウンロードします。

requestsを使って、画像ファイルをダウンロードします。

224のサイズに変換して、numpyの配列として扱います。

左から2番目がCrackで、それ以外はno Crackです。

ネットワークモデル

ディープラーニングに使うモデルは、VGG16をファインチューニングすることにします。

include_topをFalseにし、全結合層を含まないようにします。

VGG16では全部で5つの畳み込みブロックがありますが、下2つの畳み込みブロックは解凍して学習可能にします。

こうすることでより、今回の画像分類に特化したモデルを作成することができます。

上記コードの出力結果は以下の通り。

最初の畳み込み層3ブロックが訓練不可能になっており、下の方の畳み込み層2ブロックが訓練可能になっています。

最後に、グローバルアベレージプーリングと全結合層を1層追加してネットワークは完成です。

グローバルアベレージプーリングは、各特徴マップの平均を取ることでレイヤーの数を減らす効果があります。

さらに、過学習を防いでくれます。

学習

学習時にジェネレータを使ってデータ拡張を行います。

テスト画像を使って分類結果を表示してみます。

結果は以下の通り。

Crackと判別して実際にCrackだった割合が84%、no Crackと判別して実際にno Crackだった割合は95%でした。

つまり、ヒビ割れしていないと予想した時の方が信頼性が高いと言うことですね。

テスト画像での精度は、89.5% ((84+95) / 2) でした。

なかなか良いのではないでしょうか?

参考

https://towardsdatascience.com/anomaly-detection-in-images-777534980aeb

ABOUTこの記事をかいた人

のっくん

理系院卒で大企業の研究所に就職。 趣味はプログラミング、レアジョブ英会話、筋トレ、旅行。 Twitter:@yamagablog