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

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

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

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

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

Q&A

2回答

6051閲覧

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

oookabe

総合スコア126

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

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

2グッド

3クリップ

投稿2018/05/07 01:44

編集2022/01/12 10:55

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

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

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

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

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

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

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

leilei, IS.SEKI👍を押しています

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

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

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

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

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

m.ts10806

2018/05/07 01:46

冒頭は質問本文と関係のある内容なのでしょうか?言い回しが一般的ではなく、理解を得られるかというと微妙ではないかと。また、teratailタグは不適当かと。
oookabe

2018/05/07 02:42 編集

ありがとうございます。「関係のある内容なのでしょうか」まあ、判断は個人自由ですね。私は少々自己背景のintroductionのつもりで入れたのです。 それから「言い回しが一般的ではなく」 ➡ 「一般的な言い回し」は何でしょうか。  一般的にでないものこそ往々にして価値があると思いますが。 (少なくとも単に「こんにちは」よりある程度情報量が存在します。) 『貴方のこのようなコメントは一般的ではない』と申し上げたら、大丈夫でしょうか?(笑)
oookabe

2018/05/07 02:20

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

2018/05/07 02:24

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

回答2

0

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

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

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

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


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

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

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

投稿2018/05/07 10:54

mkgrei

総合スコア8560

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

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

oookabe

2018/05/07 23:26 編集

mkgreiさん 指針を聞かせてくださってありがとうございます。 人間の場合、ものを認識する時に、ものの大きさが第一ファクターになると思います。白いサッカーボールが卓球台に置かれても、卓球ボールではないと判断できますし、遠い写真の中のサッカーボールが小さく見えても、環境シーンから、人間は『相対的なサイズ』でサッカーボールの実際の大きさを割出し、サッカーボールであるのを判断できます。 ★現在のLDでも、objectの大きさは結構判定の根拠になるのでしょうか。 そうであれば、学習時の大きさと本番時の大きさの一致性が要求されますね。 (シーンを理解できる総合的なAI以外、DL一枚で『objectの相対サイズ』の割出をしないから) そして、DLにとって、maxpoolingによって抽出したobjectの局所的な特徴とobjectのサイズ、 どっちがもっと重要でしょうか? 後者であれば、DLは撮像のズームインとズームオートに結構影響を受ける事になりますね。
mkgrei

2018/05/08 14:14

オブジェクト検出が目的のモデルなのに、予め検出した周辺のオブジェクトとの相対的なサイズを参照できる前提とは、こはいかに。 卓球ボールを判定するより、「卓球台を認識することのほうが簡単であること」と「卓球台と卓球ボールの距離感を2次元画像から推定すること」のほうが先にできる、ということが必要です。 人間の立場からすると、先にわかりやすいものを判定してから、その情報を更に利用して別のわかりづらいものを判定するということですが、State-of-the-Artでもそのようなモデルは見かけたことはありません。 もしご存知なら教えていただきたく存じます。 もちろん深層学習は画像の拡大縮小の影響を受けます。 私は人間ですが、遠目ではわからないものでも、近づいたらわかるものの方が多いです。逆も然り。 「結構」というのは程度の問題ですから、一概にはなんとも言えません。 サイズのバリエーションを増やせば必ずしも精度が向上するものではありません。ここがわりとみそです。 計算コストも無視できません。 あとはパラメータの加減次第です。 必要ならば、前処理をかけます。 モデルを作って、真のAIによってなんでもできちゃう段階には程遠いです。 であれば、モデルを作るからには、それを利用したい特別な目的があるはずです。 その目的を果たすためであれば、汎用モデルの生成も重要ですが、データのとり方なども合わせて検討されるはずです。 ですので、学習時の大きさと本番時の大きさが大きく異ってうまくいかないのは、モデルのせいではなく、人間のせいだと言わざるを得ません。 おっしゃる通り、深層学習にもスケール普遍性がないという問題があります。 あまりスケールの異なるデータを与えてモデルが激おこぷんぷんしないように人間様がご機嫌を取ってやる必要があります。
oookabe

2018/05/09 04:41 編集

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

0

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

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

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

投稿2018/05/07 03:10

hayataka2049

総合スコア30933

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

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

oookabe

2018/05/07 05:48 編集

あっ、そう言われましたら、今気付いた事があります: (ついでに、自分が質問出す前に、ご案内されている記事(英)を拝読済みです) 確かにその実例からすれば、切り出した学習用のobjectのサイズはまちまちです。 そうしたら、もしかして通常TEST画像もまちまちである可能性はありますね。 ならば、『input dim = 416×416』は何何でしょうか。 (全然きまりがないでは?)
hayataka2049

2018/05/07 06:23

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

2018/05/07 07:34 編集

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

2018/05/07 08:19

CNNに突っ込む前にリサイズすると論文に書いてあるので、そうしているのでしょう(Figure 1) https://arxiv.org/pdf/1506.02640.pdf そして「訓練のためにオリジナルの画像からクリップした(矩形で指定した)object画像」というものはたぶんなくて、入力側がリサイズしたオリジナル画像、出力側がクリップした矩形になるようにエンドツーエンドで学習させる・・・ってことだと思います(微妙に私の理解も追いついていないので、間違っていたらごめんなさい)
tachikoma

2018/05/07 08:47

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

2018/05/07 10:22 編集

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

2018/05/07 10:35 編集

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

2018/05/07 14:05 編集

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

2018/05/07 22:28

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

2018/05/07 22:43 編集

leileiさん コメント有難う御座います。 >>出力層側には(複数の)矩形に対応する情報が来るのでそれを学習させてやる」とはどうやって実現されたのでしょうか。YOLOはそんなに複雑で『トッピ』なNN構造になっていないと思いますが。<< いやいや, hayataka2049さんが仰ったようなやり方の可能性は高いと思います。 訓練法に関して、もっともオリジナル論文には訓練loss関数しか書かれておりません。 その訓練loss関数から、hayataka2049さんが仰ったようなやり方の痕跡を伺えます。 それ以外の詳しいやり方を教えてくれませんでした。 ★なので、ご存じの方YOLOの学習原理をご教授いただければ、非常にありがたいですね。(恐らくYOLOの実装に詳しい方でしょう)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問