質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

916閲覧

畳み込みオートエンコーダの学習データに回転させたデータを使えるか

Poyoyo

総合スコア6

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/10/15 13:04

編集2021/10/15 13:07

#実現したいこと
自前画像データで畳み込みオートエンコーダを行い、異常検知を行う。
それにあたり、自前の学習データの取得枚数に制限があるため、色々な角度に回転したデータなるように水増ししたデータを追加しても問題ないか、その可否を確認したい。

#試したこと
業務上使用できる学習データに限りがあり、せいぜい用意できる正解データ(学習用データ)は20枚程度。これに対し回転を回転処理したものを加えて50枚前後の学習用データを準備した。
学習データの画像は線分が格子状に入った単一パターン(背景は白)。
社内データのためコードは共有できないですが、CNNの結果はlossが60%程度でepoch10程度でもほぼ横ばい、かつ層を深くしてもloss変化なし。
学習精度が上がらない要因は、学習データの半分以上は回転画像を使用している可能性を疑っているが、具体的にオートエンコーダに回転画像の使用可否を記載したサイトは見つからなかったのでこちらで質問させていただきました。

業務柄、共有できるものがほとんどなく申し訳ありません。
回転画像の使用可否についてアドバイスありましたら宜しくお願い致します。

環境:
keras/tensorflow
google colab

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/10/16 06:54

解像度はどれくらいですか?
Poyoyo

2021/10/16 07:51

情報不足で申し訳ありません。1画像768x768ピクセルに統一しています。
Poyoyo

2021/10/16 07:54

768→250→150→100→50というようにエンコードしています。Conv2D→maxpooling→reluの繰り返しです。
guest

回答1

0

ベストアンサー

AEの入力画像が768px四方と理解しました。整理しきれていない書き方ですが気になるところを1つずつ書いていきます。

元のネットワークは自前の1から作ったネットワークなのか、既存の成功例のあるネットワークかでも変わってくると思います。後者であればポカの可能性がグーンと下がります。前者であれば、MNISTか何かで具合を見てから本番のデータに移った方がいいかもしれません。

画像の解像度については、一般に上がれば上がるほど学習する時のデータが多くないとうまく学習できない傾向があります(遅くなる、なかなか進まない、局所最適解に陥る)ので、

自前の学習データの取得枚数に制限があるため、色々な角度に回転したデータなるように水増しした

こういうアプローチは必要になってくると思います。もしかしたらもっと低解像度の方がうまく学習できるかもしれません。

CNNの結果はlossが60%程度でepoch10程度でもほぼ横ばい、かつ層を深くしてもloss変化なし。

画像枚数を何千、何万として勝負する世界ですので、(中には特殊な方法もあるのかもしれませんが)数十枚だと相当少ないように感じます。学習する時にリアルタイムにData Augmentationするやり方であれば元画像が数十枚でもいいかもしれません。

学習精度が上がらない要因は、学習データの半分以上は回転画像を使用している可能性を疑っている

何もないので推測ですが、画像が回転しても成立するもの(テクスチャや模様)が対象で、肖像画のような回転したら成立しないものが対象ではないですよね?
回転しても成立するものであれば、画像の多様性に対して学習データの多様性が足りない、が予想されます。データの偏り、とでもいうのでしょうか。
回転以外にもData Augmentationの方法はあるので、本物に近い偽物をいろいろ混ぜて作り出すのが良いと思います。

投稿2021/10/16 13:27

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Poyoyo

2021/10/16 15:07

何も情報が出せない中アドバイス頂きありがとうございました。 >元のネットワークは自前の1から作ったネットワークなのか、既存の成功例のあるネットワークかでも変わってくると思います。 →自前の1から作ったものです。MNISTで高い解像度に変換して実力を見てみます。また、自前データを低解像度に変換しても試してみます。 >画像が回転しても成立するもの(テクスチャや模様)が対象で、肖像画のような回転したら成立しないものが対象ではないですよね? →今回は格子状のテクスチャーのみの画像なのですが、テクスチャーに欠落がないものを正常画像、テクスチャーの一部に欠落があるもの(テクスチャーに途切れた部位があるもの)を異常データとしているのです。 「正常と異常データの多様性」という観点では、正常と異常の両者の差は劇的に大きくはないのですが、その欠損の有無をしっかり検知したいのです。個人的には、製造物のわずかな傷などを検知できる仕組みがCNNオートエンコーダですので、正常と異常データの両者の差は大きくなければならない理由はないのでは、と考えております。認識は間違っているのでしょうか。 >回転以外にもData Augmentationの方法はあるので、本物に近い偽物をいろいろ混ぜて作り出すのが良いと思います。 →Data Augmentationで回転以外のものを試してみます。反転とか明度調整ですね。「本物に近い偽物をいろいろ混ぜて作り出す」というのはどういった手法でしょうか。調べてみますので、そのやり方の一般名称があれば教えてください。勉強不足で申し訳ありません。 宜しくお願い致します。
退会済みユーザー

退会済みユーザー

2021/10/16 21:55

> 製造物のわずかな傷などを検知できる仕組みがCNNオートエンコーダですので、正常と異常データの両者の差は大きくなければならない理由はないのでは、と考えております。認識は間違っているのでしょうか。 細かい異常を検知しようとすると、どうしてもNNベースの方法だと難しいと思います。細かければ細かいほど(ピクセル単位で、場合によってはサブピクセル単位で処理する)画像処理を使ったやり方の方が有利になります。AEは途中で抽象化してしまうので、細かい情報が欠落します。 参考 末尾の結果を参照ください。: https://vigne-cla.com/4-4/ すりガラス越しに何か見分けようとすると、細かい違いしかないものは見分けられませんが、大きく違いがあるものであれば見分けられるのと同じことが起きるはずです。 > 「本物に近い偽物をいろいろ混ぜて作り出す」というのはどういった手法 特殊なことは何もなく、本当にData Augmentationをするしかないと思います。ただただ、パラメータを大きく変えすぎると現実離れしてしまうので、 - 少しだけ明度を変える、だとか - 格子状であれば90°単位であれば回転させても問題ないと思いますし、測定誤差で少しずれることがあるのであればその少しのずれを加味した89°にするだとか91°とか その程度の話です。恐らくここには時間をかけるべきではないので、人力で適当に「こんなものかな?」とそれっぽい値を使えばいいと思います。
Poyoyo

2021/10/16 23:17

ありがとうございました、理解できました。 >AEは途中で抽象化してしまうので、細かい情報が欠落します。 異常検知する際にAEを使うときはセマンティックセグメンテーションを使う理由はきつとここにあるのだろう、という認識に至りました。 私が実現したいことは、細かい箇所の見地なので、セマンティックセグメンテーションか、opencvのテンプレートマッチングなのでしょう。推測ですが。 アドバイス頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問