Qiitaに記事を投稿しました。詳しくはこちら
10万件の飲食店クチコミからRNNで文章を生成
https://qiita.com/sudamasahiko/items/cf7e4b0f372aa41d5402
Qiitaに記事を投稿しました。詳しくはこちら
10万件の飲食店クチコミからRNNで文章を生成
https://qiita.com/sudamasahiko/items/cf7e4b0f372aa41d5402
深層学習において、一般的な画像認識のための分類器としてVGG[1]やGoogLeNet[2]、ResNet[3]など、認識精度の高いネットワーク構造がここ数年で発明されてきました。PyTorchやTensorFlowなどの深層学習ライブラリでは、これらを既存のネットワークとして簡単に再利用することができます。
ところで、画像認識を2次元CADへ応用させる技術は今のところあまりなされていないため、試しに実験を行ってみました。CAD図面は通常、直線、曲線や文字など、写真に比べるとノイズが少ないのが特徴と言えます(図1)。ここで言うノイズとは、ピクセル単位のノイズや、また、図形の意味的なノイズでもあります。例えば高木は円と記号で表されるように、抽象化された図形によって表現されます。ピクセルデータの側面では、情報的にかなりスパースと言うことができるかもしれません。
図1. 一般的な造園土木のCAD図面
まず考えられるアプローチとして、既存のCNN構造をそのまま使うことは可能かどうかということです。また、その場合、教師データのサンプル数、各種チューニングパラメータと分類精度の関係はどうなっているのでしょうか。
ここで、教師データは縦横224pxの画像ファイルを2000枚ほど手作業で準備しました。それぞれ約650枚ずつの高木画像、生垣画像、低木画像とし、サンプルの90%を訓練データ、残りをテストデータとして使用します。以下にそれぞれの例を示します。
これらはCADソフトウェアのスクリーンショットから切り出し、PNG画像として保存しました。
PyTorhで簡単に試せるネットワークがいくつかあり、ここではVGG16とResNet18を利用し、比較を行いました。VGGは比較的シンプルな構造ですが、全結合層が大きく、メモリを多く必要とするというデメリットがあります。後発のResNetはその点において改善がなされており、しかしながら、構造が複雑です。以下、2つの比較です。
学習時間は、ResNetが10分、VGGが3時間でした。なお、パフォーマンス、学習時間、学習の安定性の3つの観点で、ResNetが優れていました。これは学習時のバックプロパゲーションにおいて、勾配消失や勾配爆発を防ぎ、勾配を深い層まで伝搬させるネットワーク構造が重要であると言えます。
モダンなCNNの学習にローカルPCを使用すると、遅いのに加え、他の仕事ができなくなるので、その2つの理由によりあまり良い選択ではありません。そこで、GPUを使えるクラウドを利用することでこの問題を解決しています。この実験では、Amazon Web Services(AWS)のP2インスタンスをスポットリクエストで利用することで、優れた計算資源を安く利用させていただいています。
この実験では、CNNを利用したCAD画像の分類問題において、各クラス1000サンプルほどの比較的少ない教師データで98%の精度を出すことができました。実際のタスクにどう応用できるかは、今後の課題となります。
[1] Very Deep Convolutional Networks for Large-Scale Image Recognition
https://arxiv.org/pdf/1409.1556
[2] Going Deeper with Convolutions
https://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf
[3] Deep Residual Learning for Image Recognition
https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf
Qiitaに記事を投稿しました。詳しくはこちら
多層ニューラルネットワークの立体表示
https://qiita.com/sudamasahiko/items/d7ea616fa2a16565ca3b
Qiitaに記事を投稿しました。詳しくはこちら
PyTorchでシンプルな畳み込みニューラルネットワークを作ろう
https://qiita.com/sudamasahiko/items/fd6a52f958f3f9013f0f
Qiitaに記事を投稿しました。詳しくはこちら
PyTorchでシンプルな多層ニューラルネットワークを作ろう
https://qiita.com/sudamasahiko/items/b54fed1ffe8bb6d48818