壁面画像のひび割れ抽出
この記事では、ディープラーニングを用いて、UAVで撮影した岸壁の画像からひび割れを自動抽出した方法を紹介します。
UAVの需要が最も高い分野の一つとして土木が挙げられます。特に人がなかなか行くことができない場所での点検に非常に有効です。UAVが大分安価になり導入コストが下がる一方、収集されるデータ容量が指数関数的に増大しています。人の目視による画像判断は時間的に限界があるため、ディープラーニングによる画像の自動判読が非常に有用です。
手法の流れ
今回の手法の流れは以下です。
ディープラーニングによるセグメンテーション
「セグメンテーション」は画像認識分野の一つです。他にも「物体検出」があります。物体検出は、画像内に写っている物体を矩形で囲い分類もしくは検出します。セグメンテーションは画像内の物体をピクセル単位で分類する手法です。今回は、壁面上のヒビ割れ部分のピクセルをディープラーニングを使って選択します。
セグメンテーションの手法は、医療分野で盛んに研究されており、細胞画像を同定などに用いられています。有名な手法はU-Netが挙げられます。
ここでは、この手法をそのまま利用しました。この手法はU-Net_resnet101というモデルを利用しています。この記事ではU-NetとResNetの説明はしません。U-Netの論文はコチラ。ResNetの論文はコチラになります。
使用した画像
UAVで撮影した岸壁の画像が以下のようになります。壁面上にいくつかのヒビが確認できます。このヒビの部分をディープラーニングによって抽出し、塗りつぶします。
訓練データの作成
訓練データは今回利用したGitHubリポジトリで用意されていたデータセットに対し、こちらでも訓練データを用意しました。上記のような岸壁の写真を用意し、手動で画像内のヒビ部分をアノテーションします。利用したツールはGIMPです。流れは以下です。
- GIMPに対象の画像を取り込む
- 新たにレイヤーを画像の上に追加する
- 画像上のヒビ部分と同位置の上層レイヤーに白色で塗りつぶす
- 上層レイヤーだけ画像を出力保存する
- 出力した画像を縦横448ピクセルのサイズで切り抜く
以下が用意した画像の例です。
環境構築の仕方
今回の環境は以下の通りです。
OS | Windows 10 Pro |
CPU | AMD Ryzen 7 1700X Eight-Core Processor |
RAM size | 64GB |
GPU | NVIDIA GeForce GTX 1080 Ti |
プログラミング言語 | Python 3.6(Anaconda ) |
実行結果
今回は異なる箇所の岸壁の画像を6枚使用しました。この6枚を448×448の画像に分割し、8割を訓練とし残り2割を評価用のテストとしました。残り1枚をテスト用に使用しました。これらの画像はおよそ4000平方メートルの面積の壁面をカバーしております。撮像された画像内にはおよそXX箇所のヒビが確認されました。実行結果は以下の通りです。
以下は、ヒビ割れ箇所を推定した箇所です。左がオリジナル画像。真ん中がヒビ割れ箇所を推定した画像になり、緑の箇所が推定した箇所になります。ディープラーニングのモデルはヒビ割れの確率を各画素ごとに出力します。そして、閾値を設けて、ヒビ割れかそうでないかを最終的に分類します。右の画像はオリジナル画像に推定結果の画像をオーバーレイした画像になります。
推定精度はJaccard係数とDice係数で評価しました。この2つは集合の類似度を表すもので、計算方法が異なります。この場合の集合とは、ヒビ割れの評価画像(真値)とヒビ割れの推定画像(推定値)になります。それぞれの画像群がお互いにどれくらい類似しているかを数値化することで、モデルの推定精度を評価しております。この2つの係数の値は0から1の間にあり、1に近づくほど類似度が高い(精度が高い)事を示しております。結果は以下になります。推定結果はおよそ0.8から0.9となっており、まずまずかと思います。
Jaccard係数 | 0.829 |
Dice係数 | 0900 |
このようにヒビ割れ箇所を推定した画像は、448×448なので、分割した画像を結合し、元の岸壁の一枚画像に戻します。さらに推定された各ヒビ割れに対して、通し番号となる数字を画素値と置換します。この画像にオリジナルの岸壁の画像にオーバレイすることで、画像内のどの位置にヒビ割れがあるか容易に確認することが可能です。
今後の展望
今後は、ヒビ割れ推定モデルをよりロバストにするため、「ディープラーニングモデルの改良」と「データセットの拡充」に取り組むことを考えています。
今回はGitHubに公開されたモデルをそのまま利用しました。このモデルはそもそもUAVで撮像した岸壁のヒビ割れ検出のために構築されたものではありません。UAVの画像でより高い検出精度を求めるのであれば、その画像の特徴に合ったモデルを開発する必要があります。例えば、今回用意した岸壁の画像は、
- 壁からある程度離れたUAVが撮影したた
- 撮影した画像は岸壁に対して垂直になるようにオルソ補正した
などの特徴があります。少なくともこの2点によって、元々用意されていたヒビ割れ画像とは異なる特性をもっていることが考えられます。壁からある程度離れて撮影した場合、分解能に影響を及ぼすため、ヒビ割れ周辺の解像度が十分でないかもしれません。また、GitHubで公開されていた元々のヒビ割れ画像のデータセットはあらゆる角度から撮影した画像が含まれています。オルソ画像からより効率的にヒビ割れを検出するモデルがあるかもしれません。
データセットの拡充では、様々なヒビ割れの状態を検出するためです。そのためにはより多くの画像データを追加することが有効です。
One Response
My Site
Such great website
Amazing blog thanks for sharing today on this blog