LLCメニューコンテンツへスキップHomeNewsWorksBlog深層学習による石造物の分類この記事は1年以上前に書かれました。内容が古くなっている可能性がありますのでご注意下さい。「雑草という名の草はない」という言葉がよく知られている一方で、道端に生えている草の多くは名前が知られていません。同じように、路傍に立つ古い石造物も、今となってはそれが何なのか知らない人が多くて残念です。民間信仰に基づいて造立された石造物の分類は、専門家でも一筋縄ではいかないものです。それは、民間信仰そのものの成り立ちが、複雑な歴史的背景を持つことによります。そこで、あまり深い所には立ち入らず、月待信仰に基づいて造立された月待塔について、画像から分類を試みます。月待塔は月待行事をおこなった「アタリ日」によって分類することができ、塔のどこかに「十九夜」や「二十三夜」のように刻まれているので、これらの文字によって容易に分類することができるのです。今回構築したシステムで実際に二十三夜塔を認識させた例は以下のようになります。「三夜」の上にある「サ」のような文字は「廿」です。刻まれるなど、さまざまなパターンがありますが、今回は「三夜」の部分だけを認識させることとしました。Once)があります。今回はYOLOを利用することにします。YOLOの実装には、Keras/TensorFlow上で動作するkeras-yolo3もありますが、PythonではなくC言語で実装されたDarknetが速くて良さそうなので利用します。以下のような環境を構築しました。2017開発環境が挙げられているということは、GitHubで公開されているソースコードからビルドする必要があるということです。ビルド方法はGitHubにも書かれていますが、Qiitaにあるこちらの記事が分かりやすいので、ここでは説明は省きます。10.2に変更する必要がありました。学習用データの準備さて、いよいよここからが本題です。石造物を対象とした学習済みモデルは世の中にまだありませんので、自分で作らなければなりません。そのためには大量の画像が必要です。月待塔に関しては、月待ビンゴプロジェクトで集められたデータがGitHubでオープンデータとして公開されています。その中に画像ファイル自体は含まれていませんが、CSVファイルには画像ファイルのURLが含まれているので、これを使用すれば大量の月待塔画像をダウンロードすることができます。画像が用意できたら、次はアノテーションを行います。アノテーションとは、画像の中で認識させたい領域を指定してラベルを付ける作業です。Tool)というツールを使用しました。上の例では、「三夜」と刻まれている領域を指定して「sanya」のラベルを付けています。同様に「九夜」に「kuya」、「六夜」に「rokuya」のラベルを付けました。今回の例では1画像あたり1つのラベルになりましたが、もちろん1つの画像に複数種類のラベルを付けることもできます。今回は計888枚の画像にラベルを付けました。内訳は以下のとおりです。39他と比べて六夜が少ないのが気になります。VoTTは非常に使いやすいツールですが、現バージョンはYOLO用のデータファイルを生成できないという問題があります。VOC形式でエクスポートしたデータファイルをこちらのスクリプトでYOLO用に変換しました。変換してできた.txtファイルは対応する.jpgファイルと一緒にC:\darknet\build\darknet\x64\data\の下に作成したフォルダにコピーします。設定ファイルの作成と学習の実行さらにいくつかの設定ファイルの作成が必要になります。GitHubのこちらで詳しく説明されています。max_batchesを指定しました。Memory」というエラーが出たため、batch=16subdivisions=16width=320height=320に変更しました。.namesファイルには、今回の分類に使用する3つのクラスsanyakuyarokuyaを記述しました。コマンドを起動すると、別ウィンドウに学習曲線が表示されます。今回は2時間半ほどで終了し、終了時の学習曲線は以下のようになりました。コマンドを起動すると、別ウィンドウに画像が表示され、その上に認識結果を示す矩形とラベルが表示されます。二十三夜塔での実験結果は冒頭に示したとおりです。十九夜塔でもkuyaが認識されています。十九夜塔には、中央に大きく如意輪観音が彫られ、舟形光背の部分に小さく文字が刻まれるタイプの刻像塔が多くみられます。そのような塔でもkuyaを認識することができました。学習データの少なかった「六夜」(実際には十六夜または二十六夜/廿六夜)でも、期待通りrokuyaが認識されました。月待塔には「二十二夜塔」もありますが、二と三では紛らわしいので今回は学習データから外しておきました。試しに二十二夜塔を認識させてみたところ、予想通りsanyaが認識されました。」になっている場合は、sanyaとkuyaが認識されました。画像を1390枚に増やし、「二夜」と顔にラベルを付けました。今回は、1つの画像に1つのラベルとは限りません。内訳は以下のとおりです。625前回、sanyaと認識されていた二十二夜塔は、正しくniyaと認識されました。十九夜の刻像塔では、kuyaのほかに如意輪観音の顔も認識されました。