AIで森林作業道を検出する方法

# AIで森林作業道をみつける -連載第1回-

## 概要

AI（深層学習モデル）を使って、山間部の地形データから[森林作業道](https://www.rinya.maff.go.jp/j/seibi/sagyoudo/romousuisin.html)を検出する方法を説明します。

今回は全体の流れを説明する回で、次回以降で詳細な手順を説明していきたいと考えています。

## 動機・目的

私の所属するパナソニック アドバンストテクノロジーは、保有するロボティクス技術を活用し下図のような[林業機械の自動化に向けた取り組み](https://www.rinya.maff.go.jp/j/kaihatu/morihub/attach/pdf/morihub-105.pdf)に携わっています。我々AIチームの有志達も林業に役立つ次なるテーマの開拓と技術研鑽のため、画像処理AIの林業分野への適用方法の探索をすすめた結果、今回ご紹介する「地形データから森林作業道の検出」をタスクとして設定しました。

![pic1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076816/3eeb722a-f74f-ebfb-4f7d-ef13081bc0fb.png "林業機械 フォワーダ自動運転の様子")

地形データとは言え、ピクセル単位で値を持つデータを入力としなんらかの物体や形状を検出するという処理は、一般的なRGB画像を取り扱う画像処理AIと大差はないと言えますが、データの表現形式（何をどのように表現しているか）の違いや、処理結果の利用を容易にするためにどのような配慮が必要かといった面で、実利用を含めたAI適用について知見を得ることを目指しました。

## タスクの説明

森林作業道はフォワーダ等の[林業機械](https://www.rinya.maff.go.jp/j/kaihatu/kikai/kikai.html)の走行が想定された道路です。その名の通り森林作業のために設置されるもので、国土地理院が発行する一般的な地図にすべてが収録されているわけではありません。林業等の森林作業にあたり、あらかじめどこにどういった[路網](https://www.rinya.maff.go.jp/j/seibi/sagyoudo/romousuisin.html)があるかを把握することは、作業の効率化や安全確保のために重要な作業となっています。

森林作業道を把握する既存の手法として、DEMデータに対して地形特徴をもとにわかりやすく色づけすることで、人手による路網他の地形判読が容易化されています。（例：[CS立体図](https://wscart.geospatial.jp/gp_front/csmap), [赤色立体図](https://ja.wikipedia.org/wiki/%E8%B5%A4%E8%89%B2%E7%AB%8B%E4%BD%93%E5%9C%B0%E5%9B%B3)）

AI屋としては「人手でなにかを探している」と聞けばなんとか自動化したくなり、森林作業道をDEMデータから検出するというタスクに取り組むことにしました。

## データの説明

今回は森林作業道を検出するというタスクのため、森林作業道が存在しそうな山間部の地形データを使用します。

### 地形データとは

地表を一定サイズのメッシュに区切りその標高値により起伏を表現する[DEM（数値標高モデル）](https://www.gsi.go.jp/KIDS/KIDS16.html)というデータがあります。多くは[航空レーザ測量](https://www.gsi.go.jp/kankyochiri/Laser_index.html)により収集されるもので、例えば[国土地理院からは5mメッシュや10mメッシュのDEMデータが公開](https://fgd.gsi.go.jp/download/ref_dem.html)されています。

森林作業道の道幅は数メートル程度であるため、5mメッシュDEMでは解像度不足により検出することは困難です。近年では1mメッシュや0.5mメッシュのDEMデータを自治体が収集していることが多く、中でも兵庫県は、[県内全域の1mメッシュDEMデータの公開](https://web.pref.hyogo.lg.jp/kk26/documents/press.pdf)や、2023年に入って[0.5mメッシュDEMデータの公開](https://web.pref.hyogo.lg.jp/kk26/hyogo-geo.html)といったデータ公開の取り組みが行われており、我々データ欲しい欲しい星人はこれに飛びつきました。

下図は兵庫県1mメッシュDEMデータを[QGIS](https://www.qgis.org/ja/site/)で[陰影図](https://www.gsi.go.jp/bousaichiri/hillshademap.html)として表示したものです。

![pic2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076816/3ff55bbc-6525-e4b4-2197-b6c68a2cab0a.png "兵庫県1mメッシュDEMデータの一部")

データのダウンロード手順については、後半に付録として記載しておきますのでご参考にしていただければと思います。

### 学習画像と教師ラベル

多くのセマンティックセグメンテーションタスクがそうであるように、学習データとして画像とそのペアとなる教師ラベルが必要です。通常使用されるRGBやグレイスケールの画像の代わりに学習画像としてDEMデータやDEMデータから生成された地形特徴データを使用しました。地形特徴データ[SAGA](https://saga-gis.sourceforge.io/)等のツールにより抽出し、標高値とは別チャネルとして同一のGeoTiffに格納することにしました。

教師ラベルは（残念ながら）人力で作成することとし、ラベル付与をシンプルにするため、発見したい道路かどうかをピクセル単位で塗り分けた教師画像を用意しました。（教師ラベルの作成には対象ドメインの知識が必要です。例えば斜面崩壊が起こりやすい危険地形を検出しようとする場合、危険地形を判読するスキルを有していないと教師ラベルを作成できません。タスクとして森林作業道検出を選んだのは、一般的な「道路」に関する知識の転用が容易であると判断したためです。）

## モデルの説明

様々なセマンティックセグメンテーションモデルのPyTorchによる実装[Segmentation Models](https://github.com/qubvel/segmentation_models.pytorch)が公開されており、今回はこちらを使わせていただきました。

![Segmentation Models Logo](https://camo.githubusercontent.com/88abf70c26a0eda1d22062e84053f8c72883623cb38b523c1e447a6a6930b4c5/68747470733a2f2f692e6962622e636f2f646331586468542f5365676d656e746174696f6e2d4d6f64656c732d56322d536964652d312d312e706e67 "Segmentation Models")

実装されている様々なアーキテクチャやエンコーダの組み合わせの試行や、各種組み合わせ毎の得手不得手を勘案した程よいアンサンブル具合の探索といったいろいろな実験ができると思います。

## データ処理

### 学習用の画像データ

[付録](#付録)を参考に、あらかじめG空間情報センターから兵庫県の1mメッシュDEMをダウンロードし、QGISで[GeoTiff形式](https://ja.wikipedia.org/wiki/GeoTIFF)に変換してあるものとします。
一般的なPythonプログラムでは画像読み書きにOpenCVやPILを用いますが、位置情報付与されたGeoTiff画像の読み書きには[GDAL](https://ja.wikipedia.org/wiki/GDAL)を使用します。DEMの標高値のみを使用するのであれば1チャネルの画像となりますし、その他の加工を加えた別チャネルも使用するのであれば複数チャネルの画像となります。セマンティックセグメンテーションモデル生成時、入力チャネル数指定で調整します。

### 学習用の教師ラベルデータ

別途、人手により作成された教師ラベル画像です。こちらもQGISで地図に重畳表示したりするためGeoTiff形式にしておきます。内容的には道路クラスと道路以外クラスを表す2値の画像です。

### 推論時の画像データ

学習時と同様にGeoTiffから読み出した画像データを入力します。

### 推論結果画像

各ピクセルについて道路クラスである確率値が出力されます。適度な閾値により2値化し道路と非道路に分離します。下図は説明のためDEM陰影図に推論結果画像を黄色で重ねあわせています。このままでは、地形に対して道路部分を塗っただけの画像ですのでさらに加工します。

![pic3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076816/a6e8038f-a068-e435-189d-8ea8c7afb5b7.png "推論結果画像")

### 推論結果画像から道路線形を抽出

道路形状で塗られた画像から中心線を抽出します。中心線はベクトル化しQGIS等で扱えるシェープファイル形式に変換し出力します。このとき中心線の両側のピクセル数をカウントし、道路の幅情報を取得します。幅情報はシェープファイルに属性情報として出力します。入力時にGeoTiffから取得した地理情報は、様々な出力ファイルに地理情報付与するために使用されます。

下図は生成した道路線形シェープファイルをQGISで表示したものです。

![pic5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076816/45c8b3ea-f824-de78-459e-74fd2a95c2ce.png "QGISでの道路線形シェープファイルの表示")

## 結果

前述の道路線形シェープファイルの生成に加えて、AIによる推論結果画像から各種の道路幾何構造情報を抽出しました。

![pic4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076816/4ac021c5-5210-97db-a0a8-2d1b56186c57.png "推論結果画像から各種道路情報を抽出")

## まとめと今後

地形データを用いて地形判読のひとつである森林作業道の判読を、深層学習によるセマンティックセグメンテーションモデルにより実現することについて、その概要を述べました。一般的な画像を用いるNNモデルを用いつつ、RGBの明度ではなく標高値や標高値を元にした地形特徴量を入力としても期待する推論結果が得られることがわかりました。

地形データは森林作業道のような道路や人工物の判読だけでなく、地すべりや断層などの危険地形を読み取ることも可能です。判読に必要なスキルをAIが肩代わりすることで、収集されたデータのさらなる活用が可能になると考えています。

次回からは、各工程の手順をコード例とともに説明していきたいと考えています。

## 付録

### G空間情報センターから「兵庫県_全域DEM（2010年度～2018年度）」をダウンロードしQGISでGeoTiff形式に変換する手順

1. [G空間情報センター](https://front.geospatial.jp/)を開く
1. キーワード「兵庫県 DEM」で検索 → [結果](https://www.geospatial.jp/ckan/dataset?q=%E5%85%B5%E5%BA%AB%E7%9C%8C+DEM)
1. [兵庫県_全域DEM（2010年度～2018年度）](https://www.geospatial.jp/ckan/dataset/2010-2018-hyogo-geo-dem)をクリック
1. [DEM　ダウンロードページ](https://www.geospatial.jp/ckan/dataset/2010-2018-hyogo-geo-dem/resource/110921db-f019-4913-bdd9-666863f110e6)をクリック
1. ダウンロードしたい場所を選択し地図左のダウンロードアイコンをクリック → 指定した地域名に対応するZIP（例：05NE74なら05ne.zip）がダウンロードできる
1. ZIPの中身は05NE74が田の字型に4分割されたDEM_05NE714_1g.txt, DEM_05NE714_2g.txt, DEM_05NE714_3g.txt, DEM_05NE714_4g.txtの4つのテキストファイルになっているので、QGISで開きCRSに「参照座標系：JGD2000 / Japan Plane Rectangular CSV 参照系ID：EPS:2447」を設定する
1. 後の処理で使いやすいGeoTiff形式でエクスポートする

## 参考

* [森林資源情報のデジタル化／スマート林業の推進](https://www.rinya.maff.go.jp/j/keikaku/smartforest/smart_forestry.html)