86197


なぜCNNにおいて奇数サイズのカーネルが推奨されているかわかりません。

CNNにおいて、多くのページに「畳み込みのカーネルは3×3や7×7のような奇数サイズが好ましい」と書かれており、理由について「中心に画素が存在するため」などと書かれていますが、それ以上の説明がなく、納得できないままでいます。
入力画像サイズが(2n, 2n)の場合、奇数サイズのカーネルでストライドを2にして(n,
n)になるように畳み込むためには、パディングを左右非対称にしなければなりません。個人的にそれが気持ち悪いので、支障がないなら偶数カーネルを使いたいと考えているのですが、多くのサイトで上記のように書かれているので不安です。  
（「理由はわからないが奇数のほうが実際に良い結果が出ている」というのであれば、それはそれで納得できます）


CC BY-SA 4.0
2022-02-04T09:06:06.147
86144
2022-02-08T01:54:34.177
51262
question
python 機械学習 keras 深層学習
CNNにおいて奇数サイズのカーネルが推奨されるのはなぜですか


「中心に画素が存在するため」で納得できないのは当然のことと思います。  
そこで噛み砕いて説明すると、  
「中心となる基準のピクセルがカーネルに存在しない場合、フィルターが上手くかからないから」  
ということだと思います。

カーネルが`(2k, 2k)`となるようなものを使おうとすると、その中央は`(k+0.5, k+0.5)`の位置になります。  
例えば、サイズが`(4,4)`のカーネルの中心は`(2.5, 2.5)`となります。  
ところで、一般的なフィルタ、例えばガウシアンフィルタやエッジフィルタをかける際は中心ピクセルに大きな重み、もしくは0となるような条件を加えますね。  
しかし、カーネルサイズが偶数だと中心は定義できても、中心ピクセルは定義できないので、このような操作ができません。また、別の方法として中心周囲4ピクセルを同じ重みをかけたり、全て0にするといった行為は、（過度にぼやけてしまったり、エイリアシングが発生したり）本来意図したフィルタとはかけ離れた動きになってしまいます。

CNNにおいても、結局のところ畳み込みフィルタを作っているに過ぎないので、  
カーネルのサイズを偶数にすると、中心(0.5)の少数部分が丸められてしまって、意図した動きにならないから、という解釈で奇数サイズのカーネルを使うのが良いかと思います。


CC BY-SA 4.0
2022-02-08T01:54:34.177
86197
2022-02-08T01:54:34.177
51317
86144
answer