CNNのハイパーパラメータ「dilation」とは何でしょうか?

CONV2Dのdilationとは【PyTorch】

畳み込みニューラルネットワーク(CNN)の勉強をしているときに、「dilation」というパラメータがでてきました。

直訳すると「拡張、膨張」ですが、どのような処理が行われるのでしょうか。

この記事では、「dilation」とは何か、どんな効果があるかをまとめていきます。

ズバリ

DilationとはCNNのカーネル(フィルタ)のセル間隔を指定するハイパーパラメータです。

Dilationの可視化

カーネルサイズ3x3のCNNの例を示します。

Dilation = 0

conv_dilation0

Dilation = 1

conv_dilation1

Dilationの効果

Dilated convolutionsを使うと「effective receptive field」をより早く拡大させることができます。

Effective receptive fieldとは

Effective receptive fieldとは、ニューロンに対して影響を与えているオリジナルセルの領域のことです。

3x3の例

上図の例における、DilationとEffective receptive fieldの関係を見ていきます。

Dilation=0のときは、3x3(図中緑枠)の出力先が持つEffective receptive fieldは5x5(図中緑枠)、Dilation=1のときは、3x3(図中緑枠)の出力先が持つEffective receptive fieldは7x7(図中緑枠)です。

このように、Dilated convolutionsを用いることで、より広範囲のセルの影響を持たせることができます。

PyTorchでは

公式ドキュメンテーション

dilation controls the spacing between the kernel points; also known as the à trous algorithm. It is harder to describe, but this link has a nice visualization of what dilation does.

PyTorch documentation: torch.nn.Conv2d

日本語訳

「dilation」はカーネルポイント間のスペースを調整します。これは「à trous algorithm」としても知られています。これを説明するのは難しいですが、このリンクで、「dilation」がどう機能するか分かりやすく可視化しています。

実装例

import torch
conv2d = nn.Conv2d(512, 1024, kernel_size=3, padding=6, dilation=6)

参考(英語)

さいごに

CNNの「dilation」は、フィルタのセル間隔を調整するハイパーパラメータでした。参考になれば幸いです。


以上です。

Ad.