Neural networkを普通にやっていると、途中でPoolingという名前で、StrideをしてDownsamplingしてるけど、案外その辺適当だよね? ってことで、ちょっと調べてみた。
そもそも、Downsamplingってのは、周波数解析の人は必ず最初に勉強する標本化定理的に、まず高周波領域捨ててから、やろうよって思うのだけれども、そんなことはしてないし、どうなんだよ、と。
で、実際、ResizingのLibraryは案外適当に実装されているから、小さい絵にしてから学習するなら気を付けなよって論文が出ていたりする。
On buggy resizing libraries and surprising subtleties in fid calculation
新しいバージョンでは、実際GANで問題が出る的なことも言っている。
特に何も考えないでDownsamplingをすると(strideをすると)折り返し雑音alisaingというものが起きる。
なので、取り敢えずaliasingが乗らない処理をDNNに入れてみたら、攻撃に強くなって、Robustになって、Generalizeするらしい。
Making convolutional networks shift-invariant again(Adobe 2019)
FrequencyLowCut Pooling--Plug & Play against Catastrophic Overfitting(2022)
Blending anti-aliasing into vision transformer(2021)
そもそも、学習でlow-pass filter見つけられているのかも? っていう実験をしている人もいる。
Impact of aliasing on generalization in deep convolutional networks(Google 2021)
How convolutional neural networks deal with aliasing(2021)
基本、low-pass filterあった方が見たことないデータに強くなるし、計算量的に邪魔になるもんでもなし、入れときゃ良さそう。
で、ここへ来て、そもそもDownsamplingをattentionとかみたいにcontext-awareにしたらよくなるってのも出てきた。
Delving deeper into anti-aliasing in ConvNets(UC Davis, NVIDIA, 2020)
UniNet: Unified architecture search with convolution, transformer, and MLP(CUHK, SenseTime, 2022)
UniNetは、Conv、Transformer、MLPを混ぜ混ぜした最強モデルの見つけ方とか言ってるわりに実験的にはConvのDownsamplingが精度のボトルネックとか言い出してて、どういうことよって感じ。
まあ、別に突然こんな話が出て来たわけではもちろんなく(そもそも、anti-aliasing処理のないdownamplingなんて周波数解析屋さんからしたら気持ち悪いわけで)poolingの処理に学習を入れようってのは前からいっぱいある
Detail-preserving pooling in deep networks(2018)
LIP: local importance-based pooling(2019)
Carafe++: Unified content-aware reassembly of features(2020)
そもそも、絵を大きくしたり小さくしたりっていう話なので、超解像屋さんたちはもっといろいろ語っているんじゃないかと。