chainer.links.ConvolutionNDを使ってみる


Chainer には、`chainer.links.ConvolutionND`というクラスがあります。Convolution2Dと違い、任意の次元の畳み込みができるクラスです。

http://docs.chainer.org/en/stable/reference/generated/chainer.links.ConvolutionND.html

これは、Chainer独特の機能のようです。

あまり詳しくありませんが、、TensorFlowの場合[tf.layers.1D](https://www.tensorflow.org/api_docs/python/tf/layers/Conv1D)/[2D](https://www.tensorflow.org/api_docs/python/tf/layers/Conv2D)/[3D](https://www.tensorflow.org/api_docs/python/tf/layers/Conv3D)、PyTorchの場合[torch.nn.functional.conv1d/2d/3d](http://pytorch.org/docs/master/nn.html#convolution-layers)、Kerasの場合[keras.layers.convolutional.Conv1D](https://keras.io/ja/layers/convolutional/#conv1d/)/[2D](https://keras.io/ja/layers/convolutional/#conv2d)/[3D](https://keras.io/ja/layers/convolutional/#conv3d)があります。が、どれも、次元を固定していて、任意の次元の畳み込みができるものではありません。

というわけで、これを使って簡単に、任意の次元のConvolutionができる、と思うのですが、`ConvolutionND`を使ったサンプルはあまり見つかりません。

* [Chainerのテストコード](https://github.com/chainer/chainer/blob/master/tests/chainer_tests/links_tests/connection_tests/test_convolution_nd.py)
* Qiitaでの @dsanno さんの[コメント](https://qiita.com/masataka46/items/1a5d6cbd49279aeaf734#comment-ffade3df17277c6adab8)
* [VoxcelChain ３次元畳み込みニューラルネットワークを使ったディープラーニング (深層学習)｜Chainerによる３次元形状の認識](http://bril-tech.blogspot.jp/2017/02/VoxcelChain-3D-Convolutional-Neural-Networks.html) ※ 2017/12/17追記

このぐらいでしょうか。。

そもそも、2次元以外のConvolutionを何に使うのか？という話ですが、概ね、

* 自然言語処理に1次元CNN (参考：[Convolutional Neural Netwoks で自然言語処理をする
](https://www.slideshare.net/sheemap/convolutional-neural-netwoks))
* 動画の分類器には3次元CNN (参考：[3D CNNによる人物行動認識の動向](https://www.slideshare.net/kenshohara11/3d-cnn))
* 3D画像の分類器には、3次元CNN（参考：[VoxcelChain ３次元畳み込みニューラルネットワークを使ったディープラーニング (深層学習)｜Chainerによる３次元形状の認識](http://bril-tech.blogspot.jp/2017/02/VoxcelChain-3D-Convolutional-Neural-Networks.html)）

という感じのようです。

というわけで、任意の次元の畳み込みができでも、1/2/3次元以外は特に有力な使い道は無いようですが、、ともかくConvolutionNDを使って何か書いてみたいと思います。

ここでは、動画の分類器を作ってみます。

動画の3次元CNNは、FacebookのC3Dが有名です。

https://github.com/facebook/C3D

これをChainerで実装しようと思っていたのですが、Advent Calender の日まで時間が取れず、、代わりにChainerのサンプルにあるVGG16を適等に3D化してみることにしました。

2017/12/25追記：
C3Dを移植してみました。
https://qiita.com/ikeyasu/items/79f88afffaaa0da19ea9

以下に、修正したサンプルを置きました。

https://github.com/ikeyasu/chainer-convolutionnd-sample

ファイルをコピーしたので、修正点がわかりにくくて申し訳ないですが、、[models/VGG.py](https://github.com/ikeyasu/chainer-convolutionnd-sample/blob/master/models/VGG.py)に`VGG3D`を追加、動画ファイルを扱うために[datasets/UCF11.py](https://github.com/ikeyasu/chainer-convolutionnd-sample/blob/master/datasets/UCF11.py)を追加して、[train_cifar.py](https://github.com/ikeyasu/chainer-convolutionnd-sample/blob/master/train_cifar.py)を修正しただけです。

もともと以下のようなBlockが定義されているのを

```models/VGG.py

class Block(chainer.Chain):


    def __init__(self, out_channels, ksize, pad=1):
        super(Block, self).__init__()
        with self.init_scope():
            self.conv = L.Convolution2D(None, out_channels, ksize, pad=pad,
                                        nobias=True)
            self.bn = L.BatchNormalization(out_channels)

    def __call__(self, x):
        h = self.conv(x)
        h = self.bn(h)
        return F.relu(h)

```

以下の通り、ConvolutionNDを使うように変えました。第一引数の`ndim=3`で3次元のConvolutionを指定しています。

```models/VGG.py
class Block3D(chainer.Chain):


    def __init__(self, in_channels, out_channels, ksize, pad=1):
        super(Block3D, self).__init__()
        with self.init_scope():
            self.conv = L.ConvolutionND(ndim=3, in_channels=in_channels, out_channels=out_channels, ksize=ksize, pad=pad,
                                        nobias=True)
            self.bn = L.BatchNormalization(out_channels)

    def __call__(self, x):
        h = self.conv(x)
        h = self.bn(h)
        return F.relu(h)
```

この`Block3D`を使って、`VGG3D`を作ります。`__call__`メソッドに、max_poolingがありますが、こちらも`F.max_pooling_2d`を`F.max_pooling_nd`に変更しています。

```models/VGG.py
class VGG3D(chainer.Chain):

    def __init__(self, class_labels=11):
        super(VGG3D, self).__init__()
        with self.init_scope():
            self.block1_1 = Block3D(3, 64, 3)
            self.block1_2 = Block3D(64, 64, 3)
            self.block2_1 = Block3D(64, 128, 3)
            self.block2_2 = Block3D(128, 128, 3)
            self.block3_1 = Block3D(128, 256, 3)
            self.block3_2 = Block3D(256, 256, 3)
            self.block3_3 = Block3D(256, 256, 3)
            self.block4_1 = Block3D(256, 512, 3)
            self.block4_2 = Block3D(512, 512, 3)
            self.block4_3 = Block3D(512, 512, 3)
            self.block5_1 = Block3D(512, 512, 3)
            self.block5_2 = Block3D(512, 512, 3)
            self.block5_3 = Block3D(512, 512, 3)
            self.fc1 = L.Linear(None, 512, nobias=True)
            self.bn_fc1 = L.BatchNormalization(512)
            self.fc2 = L.Linear(None, class_labels, nobias=True)

    def __call__(self, x):
        # 64 channel blocks:
        h = self.block1_1(x)
        h = F.dropout(h, ratio=0.3)
        h = self.block1_2(h)
        h = F.max_pooling_nd(h, ksize=2, stride=2)

        # 128 channel blocks:
        h = self.block2_1(h)
        h = F.dropout(h, ratio=0.4)
        h = self.block2_2(h)
        h = F.max_pooling_nd(h, ksize=2, stride=2)

        # 256 channel blocks:
        h = self.block3_1(h)
        h = F.dropout(h, ratio=0.4)
        h = self.block3_2(h)
        h = F.dropout(h, ratio=0.4)
        h = self.block3_3(h)
        h = F.max_pooling_nd(h, ksize=2, stride=2)

        # 512 channel blocks:
        h = self.block4_1(h)
        h = F.dropout(h, ratio=0.4)
        h = self.block4_2(h)
        h = F.dropout(h, ratio=0.4)
        h = self.block4_3(h)
        h = F.max_pooling_nd(h, ksize=2, stride=2)

        # 512 channel blocks:
        h = self.block5_1(h)
        h = F.dropout(h, ratio=0.4)
        h = self.block5_2(h)
        h = F.dropout(h, ratio=0.4)
        h = self.block5_3(h)
        h = F.max_pooling_nd(h, ksize=2, stride=2)

        h = F.dropout(h, ratio=0.5)
        h = self.fc1(h)
        h = self.bn_fc1(h)
        h = F.relu(h)
        h = F.dropout(h, ratio=0.5)
        return self.fc2(h)
```

基本的にこれだけで動きました。

が、ここまでは簡単なのは当たり前でして、データをどうやって用意するか、扱うかが少々骨です。
ここでは、UCF11という小規模な動画データセットを使いました。

UCF11
http://crcv.ucf.edu/data/UCF_YouTube_Action.php

このページにある、 http://crcv.ucf.edu/data/UCF11_updated_mpg.rar をダウンロードして展開します。

```bash
$ wget http://crcv.ucf.edu/data/UCF11_updated_mpg.rar
$ mkdir videos
$ pushd videos
$   unar e UCF11_updated_mpg.rar
$ popd
```

この動画を画像に変換します。ここでは、ffmpegを使います。

```tools/video_to_image.sh
#!/bin/bash
FILE=$1
mkdir -p ${FILE%.*}
ffmpeg -i "$FILE" -vf fps=5 "${FILE%.*}"/%05d.jpg
```

上記のスクリプトを使って、以下のように変換します。以下では、並列に変換できるよう、[GNU Parallel](https://www.gnu.org/software/parallel/)を使っています。

```bash
$ ls videos/*.mpg | parallel --no-notice -j8 ./tools/video_to_images.sh  {}
```

次に、このままでは画像が大きいのでCropして、リサイズします。今回は試しに作るだけですので、cifar10と同じ、32x32の画像にしました。

```tools/resize.py
from PIL import Image
import numpy as np
import argparse


def main(path, out_path):
  img = Image.open(path, 'r')
  h, w = img.size
  cw = h // 2
  cx = int((w - cw) / 4)
  cy = int((h - cw) / 4)
  clp = img.crop((cx, cy, w - cx, h - cy))
  resized = clp.resize((32, 32))
  resized.save(out_path, 'JPEG', quality=100, optimize=True)

if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description='clipping and resize')
    parser.add_argument('--input', '-i', default='input.jpg',
                        help='input file')
    parser.add_argument('--output', '-o', default='output.jpg',
                        help='output file')
    args = parser.parse_args()
    main(args.input, args.output)
```

```bash
$ ls videos/*/*.jpg | parallel -j20 'python tools/resize.py -i {} -o `echo {} | sed s/videos/images/`'
```

上記で、以下のようにデータが用意されています。

```
.
├── images
│   ├── v_biking_01_01
│   │   ├── 00001.jpg
│   │   ├── 00002.jpg
│   │   ├── ...
│   │   └── 00026.jpg
│   ├── ....
│
└── videos
    ├── v_biking_01_01
    │   ├── 00001.jpg
    │   ├── 00002.jpg
    │   ├── ....
    │   └── 00026.jpg
    ├── ....
```

これを扱うために、Datasetのクラスを作ります。

```
import chainer
import os
import re
import numpy as np


def get_dir_list(path):
    return [os.path.join(path, i) for i in os.listdir(path) if os.path.isdir(os.path.join(path, i))]


LABEL_PATTERN = re.compile(r"v_([a-zA-Z_]+)_[0-9]")


def get_label(path):
    dir = os.path.split(path)[-1]
    matched = LABEL_PATTERN.match(dir)
    return matched.group(1)


class UCF11Dataset(chainer.dataset.DatasetMixin):
    """
    example:
    videos/v_biking_01_01/00001.jpg
    videos/v_biking_01_01/00002.jpg
    """

    def __init__(self, path):
        self.dir_list = get_dir_list(path)
        labels = [get_label(d) for d in self.dir_list]
        self.labels = list(set(labels))

    def __len__(self):
        return len(self.dir_list)

    def get_example(self, i):
        base = chainer.datasets.ImageDataset(os.listdir(self.dir_list[i]), root=self.dir_list[i])
        label = get_label(self.dir_list[i])

        frames = 6
        images = np.array([base[i] for i in range(frames)]).transpose(1, 0, 2, 3)

        # TODO: mean
        # image -= self.mean[:, top:bottom, left:right]
        images *= (1.0 / 255.0)  # Scale to [0, 1]
        return images, self.labels.index(label)
```

ここで注意すべきは、`get_example`で返している画像の行列です。Convolution2Dで使う場合、(channel, height, width)の形の行列を返すように書くと思います。（例：[chainer/examples/imagenet](https://github.com/chainer/chainer/blob/97315ffff04622a12d49b028c0fba21535e51532/examples/imagenet/train_imagenet.py#L28)）
今回、ConvlutionNDを使って3次元CNNをするので、行列の形は、(channel, frame, height, width)になります。

上記を使って実行するように、[train_cifar.py](https://github.com/ikeyasu/chainer-convolutionnd-sample/blob/master/train_cifar.py)を修正します。
一応、accuracyが向上していくのが確認できました。（特に工夫していないので、精度はあまり出ていません）

```
$ python train_cifar.py -g 0
GPU: 0
# Minibatch-size: 64
# epoch: 300

Using CIFAR100 dataset.
/home/ikeyasu/anaconda3/envs/chainer3/lib/python3.6/site-packages/chainer/utils/experimental.py:104: FutureWarning: chainer.functions.pooling.MaxPoolingND is experimental. The interface can change in the future.
  FutureWarning)
epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           2.87406     27.3399               0.099375       0.122659                  12.3509
2           2.99936     2.39463               0.1075         0.151621                  24.2535
3           2.65441     2.47364               0.165          0.18714                   36.1351
4           2.49547     2.44088               0.14625        0.19339                   48.0406
5           2.41286     2.32186               0.155          0.163962                  59.9657
...
```
<!--
$ python train_cifar.py -g 0
GPU: 0
# Minibatch-size: 64
# epoch: 300

Using CIFAR100 dataset.
/home/ikeyasu/anaconda3/envs/chainer3/lib/python3.6/site-packages/chainer/utils/experimental.py:104: FutureWarning: chainer.functions.pooling.MaxPoolingND is experimental. The interface can change in the future.
  FutureWarning)
epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           2.87406     27.3399               0.099375       0.122659                  12.3509
2           2.99936     2.39463               0.1075         0.151621                  24.2535
3           2.65441     2.47364               0.165          0.18714                   36.1351
4           2.49547     2.44088               0.14625        0.19339                   48.0406
5           2.41286     2.32186               0.155          0.163962                  59.9657
6           2.38222     2.2918                0.16           0.172087                  71.8894
7           2.32475     2.26913               0.178125       0.183443                  83.8327
8           2.35939     2.27198               0.15875        0.17339                   95.789
9           2.42117     2.29882               0.171875       0.158962                  107.768
10          2.40265     8.3024                0.161875       0.21214                   119.744
11          2.49691     2.33594               0.171875       0.157712                  131.749
12          2.31771     2.34665               0.1825         0.156462                  143.753
13          2.2709      2.28626               0.190104       0.167087                  155.342
14          2.24625     2.23189               0.189375       0.190265                  167.351
15          2.22253     2.21241               0.198125       0.195265                  179.382
16          2.22994     2.17759               0.203125       0.20589                   191.43
17          2.23019     2.16904               0.22125        0.227246                  203.485
18          2.17468     2.19181               0.200625       0.214121                  215.525
19          2.18866     2.12097               0.22375        0.242299                  227.578
20          2.16216     2.20374               0.216875       0.200318                  239.614
21          2.11453     2.14363               0.216875       0.216049                  251.644
22          2.10902     2.09617               0.24           0.241049                  263.674
23          2.06251     2.14644               0.25125        0.217352                  275.718
24          2.11868     2.16368               0.2475         0.21303                   287.766
25          2.09667     2.09555               0.25125        0.245424                  299.809
26          2.05281     2.08323               0.253255       0.24678                   311.434
27          2.06345     2.09368               0.273125       0.233602                  323.478
28          2.01401     2.08749               0.26875        0.240583                  335.517
29          2.02321     2.07618               0.266875       0.251674                  347.553
30          1.97014     2.08223               0.285625       0.234905                  359.603
31          1.95071     2.1071                0.284375       0.23928                   371.638
32          1.9942      2.08956               0.269375       0.215689                  383.684
33          1.93846     2.11258               0.298125       0.231727                  395.741
34          1.95685     2.18104               0.2775         0.183919                  407.78
35          1.91126     2.2831                0.30375        0.160117                  419.834
36          1.9291      2.09034               0.28875        0.242352                  431.891
37          1.89231     2.14                  0.299375       0.23965                   443.938
38          1.86956     2.02917               0.308125       0.231472                  455.995
39          1.8882      1.97847               0.296875       0.279386                  467.622
40          1.86045     2.12319               0.30875        0.207722                  479.669
41          1.88697     2.18951               0.3025         0.210169                  491.718
42          1.8491      2.12182               0.306875       0.244333                  503.764
43          1.84543     2.03954               0.318125       0.251578                  515.806
44          1.85102     2.09472               0.319375       0.244905                  527.857
45          1.83541     2.16621               0.326875       0.193549                  539.917
46          1.80769     1.94379               0.321875       0.295169                  551.965
47          1.82898     2.06966               0.33375        0.234544                  563.998
48          1.75996     2.01372               0.348125       0.276261                  576.047
49          1.80803     2.1891                0.329375       0.196049                  588.098
50          1.79697     2.1243                0.35           0.224227                  600.148
51          1.78211     2.10381               0.34125        0.216155                  612.196
52          1.71471     2.06879               0.384115       0.228083                  623.841
53          1.71683     2.15914               0.34625        0.225424                  635.893
54          1.727       1.98993               0.37625        0.265064                  647.917
55          1.70864     1.93828               0.36875        0.288708                  659.963
56          1.68365     1.80134               0.380625       0.339439                  672.013
57          1.70203     1.83205               0.39           0.310689                  684.065
58          1.68143     2.30108               0.378125       0.20678                   696.105
59          1.67728     2.13842               0.386875       0.254852                  708.165
60          1.66834     1.95239               0.39625        0.295583                  720.219
61          1.64764     1.95317               0.405          0.288189                  732.28
62          1.62403     1.97333               0.405          0.287458                  744.33
63          1.61077     2.32143               0.411875       0.231727                  756.376
64          1.5932      2.02498               0.420573       0.286155                  768.004
65          1.61225     2.05316               0.39125        0.28303                   780.053
66          1.6146      2.52069               0.420625       0.198655                  792.088
67          1.60401     2.21905               0.426875       0.261208                  804.136
68          1.64134     1.72755               0.415625       0.369025                  816.192
69          1.57969     1.80225               0.43625        0.353814                  828.231
70          1.62031     2.00294               0.401875       0.258655                  840.267
71          1.58564     1.84156               0.41875        0.334439                  852.324
72          1.57791     1.96716               0.4275         0.288867                  864.364
73          1.53479     1.81847               0.434375       0.313295                  876.418
74          1.51246     1.96714               0.446875       0.29553                   888.464
75          1.55667     1.81695               0.431875       0.344597                  900.518
76          1.4969      1.77951               0.453125       0.342722                  912.559
77          1.47812     2.06321               0.461589       0.29178                   924.201
78          1.44365     2.05729               0.469375       0.28803                   936.259
79          1.4598      2.11147               0.45875        0.297511                  948.303
80          1.50688     2.00539               0.4675         0.310011                  960.346
81          1.43524     1.71766               0.47125        0.392828                  972.383
82          1.40454     1.95412               0.48875        0.298347                  984.424
83          1.3696      2.20703               0.50375        0.303083                  996.475
84          1.38737     2.09779               0.49           0.28928                   1008.51
85          1.3585      1.88875               0.501875       0.353867                  1020.57
86          1.37229     2.06295               0.495625       0.287564                  1032.61
87          1.33592     1.80212               0.513125       0.354544                  1044.66
88          1.33665     2.16983               0.505625       0.330794                  1056.72
89          1.35142     2.05451               0.52           0.29215                   1068.78
90          1.26186     1.95751               0.52474        0.342617                  1080.42
91          1.29216     1.91101               0.54875        0.365794                  1092.46
92          1.28137     1.98398               0.539375       0.297775                  1104.5
93          1.34439     2.20666               0.5325         0.275222                  1116.56
94          1.26511     1.73601               0.555625       0.405434                  1128.6
95          1.23529     1.79552               0.549375       0.386843                  1140.66
96          1.25843     1.88205               0.5325         0.349078                  1152.71
97          1.22217     2.50795               0.56125        0.268761                  1164.75
98          1.20399     1.97202               0.57           0.336059                  1176.82
99          1.21986     1.61153               0.5525         0.423199                  1188.89
100         1.24776     1.38459               0.5575         0.459968                  1200.94
101         1.22795     1.55339               0.56           0.430021                  1212.98
102         1.14585     1.59215               0.595625       0.400805                  1225.04
103         1.0853      1.67593               0.614583       0.392521                  1236.69
104         1.07221     1.73434               0.62           0.354343                  1248.74
105         1.11773     1.67253               0.60125        0.419449                  1260.78
106         1.0506      1.38704               0.633125       0.474195                  1272.81
107         1.04649     1.84473               0.620625       0.386271                  1284.87
108         1.05159     1.55375               0.62875        0.450911                  1296.91
109         1.05542     1.37084               0.610625       0.496377                  1308.95
110         1.07776     1.6514                0.615          0.425858                  1320.99
111         1.05669     1.52981               0.618125       0.457055                  1333.04
112         1.06965     1.53285               0.6025         0.452055                  1345.09
113         1.04236     1.44486               0.63           0.466642                  1357.12
114         1.03354     1.4616                0.639375       0.470964                  1369.16
115         1.00741     1.80879               0.6425         0.379449                  1381.2
116         0.99979     1.59714               0.632161       0.463464                  1392.82
117         1.01586     1.29779               0.640625       0.523676                  1404.87
118         0.997943    1.57004               0.628125       0.441324                  1416.92
119         1.05593     1.7334                0.6025         0.413411                  1428.95
120         0.980648    1.24835               0.655          0.535445                  1440.99
121         0.977785    1.48854               0.645625       0.470752                  1453.04
122         1.0079      1.59564               0.644375       0.440858                  1465.09
123         0.96678     1.61841               0.641875       0.425127                  1477.22
124         0.95535     1.54198               0.651875       0.443358                  1489.26
125         0.978076    1.71678               0.635625       0.398252                  1501.28
126         0.954567    1.27655               0.656875       0.532267                  1513.3
127         0.884066    1.66995               0.686875       0.385699                  1525.33
128         0.914675    1.32455               0.675781       0.507161                  1536.94
129         0.875924    1.47484               0.67           0.482733                  1548.97
130         0.888874    1.58924               0.66625        0.464661                  1561.01
131         0.885096    1.35222               0.675          0.51143                   1573.04
132         0.8674      1.31958               0.67875        0.506589                  1585.07
133         0.834727    1.57293               0.6975         0.440805                  1597.09
134         0.860523    1.60579               0.694375       0.407002                  1609.11
135         0.876774    1.70956               0.67375        0.412574                  1621.13
136         0.85894     1.24885               0.675          0.557998                  1633.14
137         0.827491    1.43898               0.70125        0.510445                  1645.16
138         0.832449    1.4323                0.698125       0.464089                  1657.19
139         0.848923    1.57901               0.673125       0.498464                  1669.21
140         0.829833    1.41404               0.6925         0.512161                  1681.32
141         0.836481    1.50545               0.682943       0.474661                  1693.08
142         0.809095    1.41276               0.6925         0.515964                  1705.11
143         0.75356     1.27171               0.71375        0.518051                  1717.14
144         0.829833    1.51849               0.681875       0.484248                  1729.17
145         0.830339    1.72683               0.68125        0.407055                  1741.18
146         0.752083    1.42514               0.720625       0.499248                  1753.22
147         0.774829    1.25468               0.711875       0.548676                  1765.31
148         0.741143    1.13373               0.711875       0.574248                  1777.33
149         0.810366    1.14633               0.701875       0.598051                  1789.36
150         0.756572    1.41515               0.72125        0.497161                  1801.38
151         0.737794    1.59413               0.726875       0.436589                  1813.4
152         0.703199    1.40787               0.739375       0.50893                   1825.42
153         0.724844    1.50012               0.706875       0.462733                  1837.44
154         0.741086    1.52586               0.725911       0.462108                  1849.05
155         0.722752    1.43363               0.72625        0.500339                  1861.08
156         0.717784    1.25653               0.734375       0.53482                   1873.1
157         0.738949    1.40743               0.72375        0.492839                  1885.11
158         0.691026    1.43932               0.739375       0.515964                  1897.14
159         0.699312    1.29509               0.738125       0.534195                  1909.18
160         0.706575    1.50979               0.74           0.47732                   1921.21
161         0.709196    1.23246               0.723125       0.556748                  1933.31
162         0.720495    1.35162               0.72375        0.525339                  1945.42
163         0.703654    1.31467               0.73375        0.54982                   1957.54
164         0.725601    1.2464                0.710625       0.547214                  1969.57
165         0.726908    1.37912               0.733125       0.50232                   1981.59
166         0.72006     1.17525               0.73125        0.578623                  1993.61
167         0.666479    1.38182               0.735026       0.506123                  2005.22
168         0.65773     1.42263               0.74625        0.514767                  2017.23
169         0.686947    1.28197               0.74875        0.558051                  2029.27
170         0.683862    1.34007               0.738125       0.511695                  2041.28
171         0.720683    1.47004               0.720625       0.490964                  2053.3
172         0.66882     1.58811               0.753125       0.475911                  2065.31
173         0.64848     1.27775               0.756875       0.535964                  2077.33
174         0.681439    1.57914               0.73625        0.459714                  2089.35
175         0.650031    1.63318               0.739375       0.440964                  2101.37
176         0.648127    1.30826               0.7475         0.543623                  2113.38
177         0.679379    1.28179               0.731875       0.545498                  2125.41
178         0.6632      1.2762                0.746875       0.556123                  2137.44
179         0.676233    1.30872               0.735          0.529873                  2149.47
180         0.644844    1.16922               0.749349       0.578782                  2161.11
181         0.6633      1.29555               0.750625       0.558729                  2173.23
182         0.703722    1.43474               0.720625       0.510339                  2185.26
183         0.635435    1.23281               0.7625         0.573157                  2197.38
184         0.625544    1.31285               0.75375        0.537373                  2209.49
185         0.61231     1.26923               0.7775         0.547998                  2221.51
186         0.64667     1.28686               0.750625       0.547998                  2233.53
187         0.662636    1.16307               0.74375        0.585911                  2245.56
188         0.608583    1.40785               0.76375        0.512267                  2257.59
189         0.608524    1.55682               0.760625       0.487214                  2269.63
190         0.669762    1.19898               0.75625        0.576801                  2281.66
191         0.623165    1.29518               0.760625       0.54982                   2293.68
192         0.640524    1.27941               0.761068       0.544873                  2305.29
193         0.621377    1.25781               0.76625        0.559873                  2317.33
194         0.662681    1.27602               0.74375        0.549873                  2329.35
195         0.680618    1.33193               0.7425         0.542214                  2341.38
196         0.625809    1.28925               0.76           0.551123                  2353.41
197         0.642835    1.31463               0.7525         0.539714                  2365.44
198         0.626482    1.33279               0.755          0.539142                  2377.47
199         0.654537    1.28136               0.743125       0.555392                  2389.48
200         0.637353    1.35327               0.75625        0.522998                  2401.51
201         0.611505    1.49072               0.77375        0.498464                  2413.54
202         0.611957    1.27319               0.764375       0.542998                  2425.58
203         0.57757     1.35514               0.78375        0.528517                  2437.64
204         0.594192    1.30117               0.76375        0.543517                  2449.71
205         0.597166    1.37139               0.78125        0.529767                  2461.44
206         0.565995    1.52127               0.783125       0.488411                  2473.47
207         0.611131    1.31191               0.765625       0.54732                   2485.49
208         0.612283    1.25729               0.77375        0.562267                  2497.51
209         0.574482    1.32142               0.785625       0.542892                  2509.53
210         0.613588    1.40328               0.751875       0.524714                  2521.56
211         0.587248    1.26876               0.779375       0.55732                   2533.58
212         0.632102    1.34396               0.75375        0.543517                  2545.6
213         0.589212    1.22299               0.775          0.572998                  2557.63
214         0.57256     1.3486                0.774375       0.531589                  2569.63
215         0.601489    1.24384               0.77125        0.572373                  2581.65
216         0.59969     1.39986               0.765          0.529089                  2593.68
217         0.589896    1.45642               0.773125       0.519089                  2605.71
218         0.570116    1.23635               0.768229       0.576748                  2617.34
219         0.591459    1.28696               0.7675         0.561695                  2629.37
220         0.600373    1.26625               0.7625         0.562945                  2641.39
221         0.595185    1.23744               0.77           0.563676                  2653.42
222         0.565014    1.20717               0.77375        0.566229                  2665.44
223         0.622653    1.23442               0.7625         0.564301                  2677.48
224         0.60556     1.26834               0.768125       0.55357                   2689.5
225         0.595751    1.26905               0.77625        0.551642                  2701.52
226         0.579058    1.56054               0.768125       0.491589                  2713.55
227         0.607683    1.36369               0.77125        0.534195                  2725.57
228         0.579349    1.34544               0.78           0.529767                  2737.59
229         0.551046    1.33775               0.78875        0.540392                  2749.61
230         0.539857    1.40389               0.806875       0.512786                  2761.63
231         0.62751     1.34968               0.758464       0.544767                  2773.25
232         0.569866    1.3378                0.775          0.539195                  2785.28
233         0.582859    1.43626               0.77125        0.522945                  2797.3
234         0.571631    1.41636               0.77875        0.525445                  2809.32
235         0.605037    1.302                 0.75625        0.552998                  2821.35
236         0.586557    1.3081                0.77625        0.550445                  2833.37
237         0.593652    1.36838               0.779375       0.531123                  2845.39
238         0.589532    1.35542               0.78125        0.546695                  2857.42
239         0.604561    1.3376                0.761875       0.53982                   2869.45
240         0.588518    1.30649               0.7725         0.54357                   2881.47
241         0.579748    1.40257               0.785625       0.524873                  2893.51
242         0.595037    1.3026                0.780625       0.55357                   2905.52
243         0.582172    1.46993               0.765          0.513464                  2917.55
244         0.615204    1.32183               0.76237        0.557892                  2929.17
245         0.621579    1.51566               0.765          0.492839                  2941.28
246         0.57527     1.3484                0.779375       0.536123                  2953.4
247         0.575202    1.47878               0.78125        0.504767                  2965.48
248         0.572605    1.30472               0.788125       0.547998                  2977.49
249         0.566262    1.34716               0.785          0.534248                  2989.51
250         0.585277    1.56122               0.783125       0.490339                  3001.54
251         0.57421     1.289                 0.781875       0.558623                  3013.57
252         0.56076     1.43516               0.789375       0.519142                  3025.61
253         0.572947    1.42728               0.779375       0.52107                   3037.63
254         0.59881     1.32182               0.7625         0.534873                  3049.64
255         0.567602    1.2808                0.783125       0.552945                  3061.68
256         0.565132    1.42617               0.789062       0.525445                  3073.29
257         0.570418    1.30012               0.776875       0.556748                  3085.31
258         0.566326    1.23289               0.786875       0.574301                  3097.34
259         0.577936    1.32828               0.784375       0.537945                  3109.35
260         0.561488    1.26761               0.79375        0.559248                  3121.38
261         0.558911    1.28218               0.798125       0.549142                  3133.39
262         0.617054    1.37137               0.756875       0.522267                  3145.41
263         0.547227    1.38333               0.79375        0.520392                  3157.44
264         0.566807    1.35718               0.785          0.530445                  3169.49
265         0.562855    1.40793               0.78           0.517892                  3181.51
266         0.5733      1.36183               0.7825         0.546123                  3193.75
267         0.580122    1.46013               0.775          0.504767                  3205.95
268         0.560246    1.24247               0.79125        0.570445                  3217.97
269         0.553981    1.41174               0.789714       0.527214                  3229.58
270         0.626338    1.35974               0.7575         0.542267                  3241.62
271         0.620925    1.3066                0.778125       0.555445                  3253.64
272         0.56776     1.23678               0.790625       0.567998                  3265.66
273         0.558083    1.2696                0.78125        0.557892                  3277.68
274         0.538705    1.42488               0.7975         0.518517                  3289.71
275         0.569151    1.28464               0.778125       0.552945                  3301.72
276         0.55057     1.34003               0.796875       0.545445                  3313.76
277         0.58979     1.37151               0.7825         0.53357                   3325.78
278         0.567313    1.29963               0.786875       0.551695                  3337.81
279         0.560332    1.32508               0.785625       0.546017                  3349.84
280         0.614861    1.11674               0.74875        0.604354                  3361.85
281         0.541832    1.49268               0.794375       0.505339                  3373.88
282         0.557423    1.2697                0.790365       0.556695                  3385.5
283         0.551099    1.24576               0.808125       0.569873                  3397.54
284         0.580093    1.35908               0.765625       0.535964                  3409.56
285         0.556311    1.30306               0.773125       0.544767                  3421.58
286         0.547511    1.3533                0.785          0.540445                  3433.62
287         0.582827    1.47381               0.7725         0.511589                  3445.66
288         0.59364     1.43142               0.75875        0.516017                  3457.7
289         0.602826    1.28635               0.761875       0.55482                   3469.76
290         0.576399    1.22996               0.785625       0.572945                  3481.8
291         0.577903    1.39828               0.775          0.519767                  3493.83
292         0.623112    1.20614               0.764375       0.579248                  3505.87
293         0.583908    1.37765               0.784375       0.532892                  3517.9
294         0.58285     1.22865               0.77625        0.579248                  3529.93
295         0.572779    1.30232               0.770833       0.549767                  3541.54
296         0.556747    1.29313               0.7975         0.552892                  3553.56
297         0.568068    1.36761               0.779375       0.531017                  3565.8
298         0.536982    1.33365               0.8025         0.551642                  3577.87
299         0.598375    1.22581               0.771875       0.576748                  3589.98
300         0.563918    1.42125               0.788125       0.514767                  3602
-->

っとここまでかいて、、"chainer.functions.pooling.MaxPoolingND is experimental"と出ていることに気付きました。ConvolutionNDは結構前から入っていますが、max_pooling_ndの方は、Experimentalなんですね。。

というわけで、中途半端なサンプルですが、VGGのサンプルを修正するだけで、一応、3次元CNNらしき事はできました。

今後の展望としては、C3Dのネットワーク構造を実装したり、C3DのpretrainedモデルをFine-tuningしたいと思っています。