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

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

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

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

Q&A

解決済

1回答

1853閲覧

畳み込みニューラルネットワークと入力画像

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

1クリップ

投稿2018/06/08 13:35

編集2018/06/17 06:00

画像認識用の畳み込みニューラルネットワーク(CNN)を作ろうと思います。
CNNの知識は、「ゼロから作るDeepLearning」くらいの初心者です。実装は、MNISTのみやりました。

そこで、いくつか質問があります。

・インターネット上の文献やチューリアルは、どれも入力画像が正方形です。実際、入力画像は正方形出ないといけないのでしょうか?正方形の方が精度が高くなるのでしょうか?なぜ、正方形なのでしょうか?

・動画データなど、10枚の画像で1つのラベルをつけているとき、入力画像はどのように渡すべきでしょうか?
10枚渡して、その結果の平均値を出力として、処理すべきでしょうか?

回答よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

2つの質問にお答えさせていただきます

・インターネット上の文献やチューリアルは、どれも入力画像が正方形です。実際、入力画像は正方形出ないといけないのでしょうか?正方形の方が精度が高くなるのでしょうか?なぜ、正方形なのでしょうか?

結論から言いますと、正方形である必要性はありませんし正方形のほうが精度が高くなるということはありません。
一般的に正方形が使われている理由としましては、
CNNの作り方にもよるのですが、一般的に(Global Average Poolingなどのような手法を使っていなければ)CNNは同じサイズの画像しか処理することができません。(たとえば、224✕224の画像で学習された藻でrに300✕300を入れることができない)そのため正方形でモデルを作って、入力画像を中央をクロップしたり、無理やり正方形にリサイズして利用することが多くなります。

・動画データなど、10枚の画像で1つのラベルをつけているとき、入力画像はどのように渡すべきでしょうか?

10枚渡して、その結果の平均値を出力として、処理すべきでしょうか?

やり方はいろいろあります。
おっしゃられている方法もその一つだと思います。(その上でやりやすいのでかなり有力かと)

その他のやり方としては(いままで見たものをすべて書いているので筋悪のものもありますが)、

  • CNNで得られた特徴量をLSTMに入力する
  • 3D(3次元目は奥行方向ではなく時間方向とする) CNNなどを利用する
  • CNNで得られた特徴量を混ぜて入力するような識別器を作る。
  • channel 方向に画像をすべて入れてしまう
  • 画像を横にくっつける

投稿2018/06/17 06:20

higumachan

総合スコア19

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

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

puroko3

2018/06/17 06:33

Global Average Poolingってcnnの出力層を各チャンネルの平均値だけを取り出す奴ですよね? それを使っても、同じサイズしか学習出来ないように思うのですが
higumachan

2018/06/17 07:11

@puroko3 できない理由は何でしょうか? あんまり好まれなかったり、フレームワークによってはできなかったり、ミニバッチにするときに不都合があったりしますが、仕組み上はできるはずです。 論点は一般的にCNNで固定長の画像しか処理できない理由がどこにあるかという話だと思うのですが、 CNNの重み自身は画像の大きさに依存しない(畳み込みの窓のサイズのみなので)ため画像サイズが変わっても問題ありません。 問題になっている部分は全結合層(とその前の特徴量の長さ)にあります。 全結合層は一般的に重みが入力の大きさに依存します。 Global Average Poolingを利用しない場合、一般的にはフラット化(C, H, Wで並んでるarrayをC*H*Wのarrayに変える)を行いその後に全結合層にかけます。 そのときに画像のサイズが違ってしまうと全結合層の入力の大きさが変わってしまうため学習ができないということになってしまいます。 Global Average Poolingを行った場合は出力層の各チャネルで平均を取る、つまり(C, H, W)のようなshapeを(C,)のようなshapeにかえるため、たとえその後全結合層を利用したとしても全結合層の入力の大きさが画像サイズが変わっても、変わらないため学習できる。 と認識していますが、いかがでしょうか?
puroko3

2018/06/17 07:21

なるほど! 確かにその通りですね。 cnnの重みが画像の大きさに依存していると勝手に思い込んでいました。 失礼しました...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問