Toma0916 / GlobalWheatDetection

3 stars 0 forks source link

predict機能追加(正規化等) #146

Closed Toma0916 closed 4 years ago

Toma0916 commented 4 years ago
transform_list = {
            'original': [A.HorizontalFlip(p=0), ToTensorV2(p=1)],  # set `HorizontalFlip` p=0, this is only for avoid error.
            'hflip': [A.HorizontalFlip(p=1), ToTensorV2(p=1)],
            'vflip': [A.VerticalFlip(p=1), ToTensorV2(p=1)],
            'vhflip': [A.HorizontalFlip(p=1), A.VerticalFlip(p=1), ToTensorV2(p=1)]      
}

以下スコア(debug non normalize

original train metrics:  0.7475041322411979
original valid metrics:  0.7367606740908991

optimizing nms...
nms best params: threshold=0.636343, min_confidence=0.782416
nms train metrics: 0.890682
nms valid metrics: 0.835268

optimizing soft_nms...
soft_nms best params: sigma=1.000000, min_confidence=0.586613
soft_nms train metrics: 0.882815
soft_nms valid metrics: 0.835268

optimizing wbf...
wbf best params: threshold=0.603364, min_confidence=0.507871
wbf train metrics: 0.893020
wbf valid metrics: 0.846118

normalize (subtraction = 0.005)

original train metrics:  0.7475041322411979
original valid metrics:  0.7367606740908991

optimizing nms...
nms best params: threshold=0.342731, min_confidence=0.134576
nms train metrics: 0.892400
nms valid metrics: 0.838631

optimizing soft_nms...
soft_nms best params: sigma=0.219219, min_confidence=0.212091
soft_nms train metrics: 0.888529
soft_nms valid metrics: 0.860330

optimizing wbf...
wbf best params: threshold=0.521147, min_confidence=0.212554
wbf train metrics: 0.869710
wbf valid metrics: 0.871598

normalize (subtraction = 0.005, TTA with all option)

original train metrics:  0.19283439364489574
original valid metrics:  0.20246841953989647

optimizing nms...
nms best params: threshold=0.363802, min_confidence=0.164072
nms train metrics: 0.886721
nms valid metrics: 0.860330

optimizing soft_nms...
soft_nms best params: sigma=0.238660, min_confidence=0.115726
soft_nms train metrics: 0.887492
soft_nms valid metrics: 0.838631

optimizing wbf...
wbf best params: threshold=0.277322, min_confidence=1.000000
wbf train metrics: 0.712366
wbf valid metrics: 0.714703

TTAしてる時は適用の仕方変えないとだめかもだけど、no ttaの時すごくない?

Toma0916 commented 4 years ago

TTAのとき微妙に悪くなるのはttaしてるときにtta間で正規化してないからな気がしますわね

@kminoda お願いします

kminoda commented 4 years ago

ちょっと今夜か明日みます 3つ目の結果のwbf、min_confidence=1.0ってやばくね?

kminoda commented 4 years ago

正規化はttaを除いてもわりとありっすね

Toma0916 commented 4 years ago

ttaしてる時のうまい適用のさせかたがわかっていない丸ですね

kminoda commented 4 years ago

すまんその正規化がなんで作用するのかがわからんのとsrcとの対応がよくわからない 例えばある画像xに対してモデルAとBでそれぞれA: (a1, a2, ..., an), B: (b1, b2, ..., bm) (スコア降順)だけ予測bboxが出てきたとして、出力を (a1, a2, ..., an, b1, b2, ..., bm)とするのではなく、 (a1, b1, a2, ..., an, b2, ..., bm)とするってことか?

kminoda commented 4 years ago

あーー a1とb1の値が同じになるように平行移動すると言う認識で良い?

kminoda commented 4 years ago

あいやでもやっぱよくわからん

Toma0916 commented 4 years ago

モデルa, b, cがあってそれぞれのある画像に対する予測結果がスコア順に以下だとする。 アルファベットはモデル、数字は予測結果のindex(a1とb1が同じbbを予想しているわけではない)。

(a1: 0.98), (a2: 0.96), ... (b1: 0.94), (b2: 0.93), ... (c1: 0.99), (c2: 0.97), ...

上の状況を考えると、b1はscoreの分布が小さい側に寄っているから最終結果への寄与度は低い(それが正しいのかもしれないけど)

俺の正規化は、まず"◯1"のペアに対してソートして

c1, a1, b1を得る。(b1 = 0.94)

次に"◯2"のペアに対してソートして c2, a2, b2を得る。(c2 = 0.97)

ここで c2 > b1のようなケースのときは"◯2"について予測したスコアを

これをひたすら繰り返し。

そうすると結果的にスコア順でソートしたときに

c1, a1, b1, c2, a2, b2 ... のようになり、各モデルの予測結果が均等に使われるようになる。

スコアそのものが本質的に最終結果に寄与するのではなく、その並び順が重要って意味で上の処理を正規化と名付けました丸

kminoda commented 4 years ago

あー並び順による正規化をしたわけか、俺の想像していたのとは違うけど良さげな感じがする ちょっと昼にインターン面接があるのでそれ終わったらちゃんと確認します

kminoda commented 4 years ago

ちなみに正規化と聞いて俺が想像してたのは、

各モデルで一旦全データに対して予測を出して、その全予測の平均分散を求めておく → 複数モデルをアンサンブルするときは、各モデルのスコア出力の平均分散が同じになるように良い感じに調整する

みたいなのだったわ

Toma0916 commented 4 years ago

Pの意思を継ぐもの

みのだの想定している方も考えたんだけど一旦は同一画像内で調整するという方法を実装してみた。

俺の方、どれくらい効くかよくわからんしそっちもあってもいいかも

kminoda commented 4 years ago

これなんか処理後のスコアがマイナスになったりしてるけど、大丈夫?

Toma0916 commented 4 years ago

マイナスって少し減るってこと? リアルにマイナス??

少し減るのは俺も結構みた

kminoda commented 4 years ago

普通に-1.19とかのスコア出てきてる

kminoda commented 4 years ago
スクリーンショット 2020-06-08 15 33 07
Toma0916 commented 4 years ago

あーそーゆことか そこに関係あるのconfidence filterだけなはずで、次段でそれを最適化してるからそんな問題は無い気がする

subtractionを小さくすればたぶんマイナスにならない気がする

kminoda commented 4 years ago

なるほどね ちなみに上の結果はsubtraction 0.005ですね

kminoda commented 4 years ago

あ、マイナスになるのが意図しない挙動でなければマージしてよかです。