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

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

ただいまの
回答率

90.61%

  • 機械学習

    647questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

  • TensorFlow

    639questions

  • 深層学習

    139questions

CNNにおける学習画像と推論(TEST)時の画像とのサイズ不一致問題

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 527

oookabe

score 46

皆さん お世話になっております。

DLの聖殿の回りを彷徨ってまいりました。
最近入口を見つけて一歩中へ踏み出しようとしたが、
すぐさま扉にぶつかって、頭がまた痛くなりました。

例えば YOLOというやつ。
訓練時の学習画像とTESTの画像のサイズ同じだと感じております。
こりゃ不思議だなと。
学習画像はobjectのサイズに沿って四角にクリップした画像で、これを416×416の入力画像としたら、TEST画像も416×416。

ところが、TEST画像は風景画像で、その中に現れるobjectは当然風景画像のサイズより遙かに小さいはずです。

即ち、学習されたobjectのサイズは416×416で、推定しようとする実際の対象のサイズは416×416より数倍か、10数倍小さいという事になります。

自分の知る限り、CNNがそれほどscale不変性機能を持っていないですけれども、
このCNNにおける学習画像と推論(TEST)時の画像とのサイズ不一致問題はどのようなメカニズムで解決されたのでしょうか。

どうぞ宜しくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • tachikoma

    2018/05/07 11:14

    こちらを読んでみては。 https://arxiv.org/abs/1506.02640

    キャンセル

  • oookabe

    2018/05/07 11:20

    返答有難うございます。嘗て読んだことはあります。利用例を見たら、上記理解できないことが現れました。

    キャンセル

  • oookabe

    2018/05/07 11:24

    技術的な議論は何でも歓迎致します。それ以外の個人感覚や価値観を他人に押し付けるのは歓迎しません。まず質問内容を理解してから、人に「罪」を被せるべきです。さもたければ、一方的な傲慢さと技術交流の阻害しか感じられませんね。

    キャンセル

回答 2

+4

YOLOは学習画像も風景画像で、「どのへんに認識対象のオブジェクトが存在するか」をNNのoutputにする奴じゃなかったでしたっけ? 大雑把に言えば同じスケールのはずですが。

もちろん「風景画像の中にどれくらいのサイズで写っているか」という要素はありますが、そこは多様な学習データを入れればなんとかなるのでしょう。データを水増し(拡大・縮小・トリミング)すれば済む話だと思うので・・・。

参考:
機械学習 - 【物体検出】YOLOについて詳しく知りたい(85627)|teratail
YOLOv2を使って自前のデータを学習させて認識させるまで。 - 可変ブログ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/07 14:47 編集

    あっ、そう言われましたら、今気付いた事があります:
    (ついでに、自分が質問出す前に、ご案内されている記事(英)を拝読済みです)
    確かにその実例からすれば、切り出した学習用のobjectのサイズはまちまちです。

    そうしたら、もしかして通常TEST画像もまちまちである可能性はありますね。
    ならば、『input dim = 416×416』は何何でしょうか。

    (全然きまりがないでは?)

    キャンセル

  • 2018/05/07 15:23

    train, testともにすべて同じ画像サイズです。なにか根本的に勘違いしているのでは?

    キャンセル

  • 2018/05/07 16:32 編集

    お返答有難うございます。
    「train, testともにすべて同じ画像サイズ」とは、どの時点で同じになったのでしょうか。
    例えば、『YOLOv2を使って自前のデータを学習させて認識させるまで。』の原版(英語)記事において、オリジナル画像は皆違うサイズです。
    さらに訓練のためにオリジナルの画像からクリップした(矩形で指定した)object画像のサイズもまちまちです。
    そしてTEST画像はオリジナルの学習画像から分離したもので、当然サイズはまちまちです。
    いつかみんなが416×416に変換されたのでしょうか。

    キャンセル

  • 2018/05/07 17:19

    CNNに突っ込む前にリサイズすると論文に書いてあるので、そうしているのでしょう(Figure 1)
    https://arxiv.org/pdf/1506.02640.pdf

    そして「訓練のためにオリジナルの画像からクリップした(矩形で指定した)object画像」というものはたぶんなくて、入力側がリサイズしたオリジナル画像、出力側がクリップした矩形になるようにエンドツーエンドで学習させる・・・ってことだと思います(微妙に私の理解も追いついていないので、間違っていたらごめんなさい)

    キャンセル

  • 2018/05/07 17:47

    学習データは画像中の物体を囲む矩形座標(pixel単位)で、画像が416x416ではなかったらリサイズしてますね。このとき正解座標もリサイズに合わせて変化します。
    YOLOの面白いところは、物体検出を検出矩形+確信度へのregressionとして定式化してるところじゃないですかね。Fig2の各グリッドは縦長と横長の二つのAnchor boxを用意してます。S × S × (B ∗ 5 + C)を読み解けてるといいのですが。

    キャンセル

  • 2018/05/07 19:13 編集

    tachikomaさんが書かれました:
    //画像が416x416ではなかったらリサイズしてますね。
    私もそう想像しています。なので、トピ主が前掲された質問になります:
    ==================
    学習されたobjectのサイズは416×416で、TEST時に推定しようとする実際の対象(object)のサイズは416×416より数倍か、10数倍小さいという事になります。
    自分の知る限り、CNNがそれほどscale不変性機能を持っていないですけれども、
    このCNNにおける学習object画像(認識対象画像)と推論(TEST)時の画像(内のobject)とのサイズ不一致問題はどのようなメカニズムで解決されたのでしょうか。
    ==================

    キャンセル

  • 2018/05/07 19:34 編集

    >学習されたobjectのサイズは416×416で
    というのが間違いなのでは? oookabeさんは元の画像からオブジェクトを矩形で抽出した際の、矩形で囲まれた範囲の画像がNNの入力層側に来るという認識で考えているのだと思いますが、そうではなく元の画像をリサイズしたものがそのまま入力層に来るはずです。それで、出力層側には矩形に対応する情報が来るのでそれを学習させてやる、ということではないでしょうか

    キャンセル

  • 2018/05/07 22:58 編集

    YOLO流の学習方法からしますと、学習用の元の画像に対して、複数のobjectを人間で矩形して、classを定義します。このような学習用の元の画像をそのまま(丸ごと)inputにして、「出力層側には(複数の)矩形に対応する情報が来るのでそれを学習させてやる」とはどうやって実現されたのでしょうか。YOLOはそんなに複雑で『トッピ』なNN構造になっていないと思いますが。TESTの時複数のbounding boxでやっているのですが、この「bounding box」と訓練するために人間が指定した「bounding box」とは混同されていません?

    キャンセル

  • 2018/05/08 07:28

    出力層にbounding boxの座標パラメータを入れてるだけですね>どうやって実現されたのでしょうか
    画像と人間が指定したbounding box(とカテゴリ)の対応が教師データで、予測時には画像だけ入れてbounding boxとカテゴリを出すという話です

    キャンセル

  • 2018/05/08 07:41 編集

    leileiさん コメント有難う御座います。
    >>出力層側には(複数の)矩形に対応する情報が来るのでそれを学習させてやる」とはどうやって実現されたのでしょうか。YOLOはそんなに複雑で『トッピ』なNN構造になっていないと思いますが。<<

    いやいや, hayataka2049さんが仰ったようなやり方の可能性は高いと思います。
    訓練法に関して、もっともオリジナル論文には訓練loss関数しか書かれておりません。
    その訓練loss関数から、hayataka2049さんが仰ったようなやり方の痕跡を伺えます。
    それ以外の詳しいやり方を教えてくれませんでした。
    ★なので、ご存じの方YOLOの学習原理をご教授いただければ、非常にありがたいですね。(恐らくYOLOの実装に詳しい方でしょう)

    キャンセル

+4

従来の「数理モデル」が、現実に即しているか即していないか(物事の「本質」を捉えているのか)というのが問題だったのに対して、深層学習のような「汎用モデル」は、「ある指標」からはかりみて許せるかどうかという問題にシフトしています。

このような汎用モデルを考える際には、モデルだけでなく、教師データの性質、テストデータの性質、本番データの性質、学習の方法なども考慮せねばなりません。

この度の質問は、テストデータの性質が教師データの性質と大きく異なる場合、性能が出ないように思われる、ということですが、全くもっておっしゃる通りです。

問題の設定にすでに問題があるというところでして、データを準備し直すことを考えるべきです。


技術的な側面から考えると、YOLOv2については本質問のような懸念はあり得ません。
検出矩形の形を決めるのに、検出されるべきオブジェクトのサイズを決め打ちせねばならないからです。
逆にいうと、定点観察のようなものであれば精度が出るように工夫されています。

これに対して、検出サイズの大きな変動を危惧することは、リンゴとバナナの画像を集めてモデルを作ろうとしているのに、ぶどうが検出できないことを懸念するようなもので、それならば最初から作りたいモデルを考え直す必要性があります。

もちろん、全て織り込み済みで、他にやる方法がないからとりあえずやってみるしかないという状況かもしれません。これはもう原理的な問題で一般解はあり得ず、とりあえずモデルを作って評価しないことには何も始まりません。
その後に、既知の精度を犠牲にするか、汎化性を犠牲にするのかというもっと具体的なハイパーパラメータ等のチューニングの問題になります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/08 08:02 編集

    mkgreiさん 指針を聞かせてくださってありがとうございます。
    人間の場合、ものを認識する時に、ものの大きさが第一ファクターになると思います。白いサッカーボールが卓球台に置かれても、卓球ボールではないと判断できますし、遠い写真の中のサッカーボールが小さく見えても、環境シーンから、人間は『相対的なサイズ』でサッカーボールの実際の大きさを割出し、サッカーボールであるのを判断できます。

    ★現在のLDでも、objectの大きさは結構判定の根拠になるのでしょうか。
    そうであれば、学習時の大きさと本番時の大きさの一致性が要求されますね。
    (シーンを理解できる総合的なAI以外、DL一枚で『objectの相対サイズ』の割出をしないから)
    そして、DLにとって、maxpoolingによって抽出したobjectの局所的な特徴とobjectのサイズ、 どっちがもっと重要でしょうか?
    後者であれば、DLは撮像のズームインとズームオートに結構影響を受ける事になりますね。

    キャンセル

  • 2018/05/08 23:14

    オブジェクト検出が目的のモデルなのに、予め検出した周辺のオブジェクトとの相対的なサイズを参照できる前提とは、こはいかに。
    卓球ボールを判定するより、「卓球台を認識することのほうが簡単であること」と「卓球台と卓球ボールの距離感を2次元画像から推定すること」のほうが先にできる、ということが必要です。
    人間の立場からすると、先にわかりやすいものを判定してから、その情報を更に利用して別のわかりづらいものを判定するということですが、State-of-the-Artでもそのようなモデルは見かけたことはありません。
    もしご存知なら教えていただきたく存じます。

    もちろん深層学習は画像の拡大縮小の影響を受けます。
    私は人間ですが、遠目ではわからないものでも、近づいたらわかるものの方が多いです。逆も然り。
    「結構」というのは程度の問題ですから、一概にはなんとも言えません。

    サイズのバリエーションを増やせば必ずしも精度が向上するものではありません。ここがわりとみそです。
    計算コストも無視できません。
    あとはパラメータの加減次第です。
    必要ならば、前処理をかけます。
    モデルを作って、真のAIによってなんでもできちゃう段階には程遠いです。
    であれば、モデルを作るからには、それを利用したい特別な目的があるはずです。
    その目的を果たすためであれば、汎用モデルの生成も重要ですが、データのとり方なども合わせて検討されるはずです。
    ですので、学習時の大きさと本番時の大きさが大きく異ってうまくいかないのは、モデルのせいではなく、人間のせいだと言わざるを得ません。

    おっしゃる通り、深層学習にもスケール普遍性がないという問題があります。
    あまりスケールの異なるデータを与えてモデルが激おこぷんぷんしないように人間様がご機嫌を取ってやる必要があります。

    キャンセル

  • 2018/05/09 13:40 編集

    三つのキーを覚えたいですね:
    1.サイズのバリエーションを増やせば必ずしも精度が向上するものではない
    2.訓練用データのとり方なども合わせて検討
    3.必要ならば、前処理を!(本番の画像を伸縮、回転させるのも一つの手)

    ーーーーーーーーーーーーーー
    どうも有難うございました。

    キャンセル

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    kerasを用いたCNNでの犬猫判別

    Mac OS Sierra 10.12.1 現在kerasを用いたCNNで犬猫判別をしています。 犬猫の画像を128*128(3チャンネル)にリサイズして ミニバッチを採用して

  • 受付中

    DeepLearning CNN 画像のサイズについて

    CNNで画像分類をやろうと考えています。 現在、画像を収集している段階なのですが、画像のサイズが様々あり、リサイズする必要があります。 そこでなのですが、学習に都合の良い画

  • 解決済

    TensoeFlowの画像分類(CNN)の処理が分からない.

    以下のコードがどういった処理を行っているのかわかりません. TensorFlowを用いた画像分類のCNN法のコードなのですが,どういう方法でニューラルネットワークを構築しているのか

  • 受付中

    TensorFlowを用いた画像認識(CNN法)で用いる画像のサイズが分からない.

    以下のコードでCNNを用いたニューラルネットワークを構築する際,データセットの画像サイズを統一しなければならないか知りたいです. どなたか詳しい方教えて頂けませんでしょうか.

  • 解決済

    【CNN】画像サイズ変更時のプログラム変更箇所について

    下記のコードを参考にして画像サイズを変更させたものを実行させたいと思っています。 #!/usr/bin/env python # -*- coding: utf-8 -*-

  • 受付中

    CNNに関する2つの質問

    初めまして 深層学習関連の質問掲示板があるのは以前知りませんでした。 自分は画像処理の経験少々あって、CNNは初めてです。 これまで画像objectを特定するために、人工的特徴

  • 解決済

    D-CNNの画像特徴抽出に対する誤解?

     背景 最近この掲示板で皆さんにお伺いしながら、D-CNNの原理を初歩的に勉強した結果として、 次のような感覚を持ちました。 【1】  D-CNNでは 米、車、海藻、虎 、、、

  • 受付中

    CNNの各層のneuron数(ノード数)と層数と訓練画像の関係

    今晩は DNNをある程度知りたいため、最近時間がある時に懸命に勉強しましたが、 やはり、設計の基本はまだ分かっていない感じです。 まず現在自分の認識が正しいかどうか確認した

同じタグがついた質問を見る

  • 機械学習

    647questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

  • TensorFlow

    639questions

  • 深層学習

    139questions