0%

之前已经有两篇分析了 MXNet 的 Bind 和 SimpleBind 的源码, 这篇, 主要是记录一下 CPP package 中是如何调用 Bind 和 SimpleBind 的. 搞清楚这两部分有两个好处, 一是为自己写代码调用 Bind 提供参考, 二是了解 MXNet 中 Symbol/Graph 和具体的 NDArray 是如何协同的.

ResNeXt 和 ResNet, GoogleNet 都是首先构建 building block, 然后把多个 building block 串联起来形成最终的网络结果.这种方法的好处是减少了 hyper-parameters, 而且, 这种方法得到的模型适应性更好, 也就是说不会再 A 数据集上效果很好, 换成 B 数据集效果就很差. ResNeXt 沿用了 ResNet 中 shortcut 的思想, 但是, ResNeXt 在 building block 上做了很大的改进. 针对每一个 building block 在宽度上进行了拓展, 输出的 feature map 的 channel 的数量减少, 进而, 减少了参数的数量.

ShuffleNet 主要是对 feature map 的 channel 做 shuffle 操作. 另外, 还借鉴了近期用的比较多的 depthwise separable convolution 的思想. 另外在 alexnet 中因为当时显存不足提出的 group convolution, 随后随着显存的不断增大逐步被弃用的 group convolution 在 ShuffleNet 中配合 shuffle layer 操作大量使用.

MobileNet 是 Google 提出的一种 efficient 的模型, 总结来讲, mobilenet 中没有全新的 layer, 因此, 完全可以在现有的框架例如 caffe, mxnet, TensorFlow 中非常方便地实现.

Xception 的主要特点是 Depthwise Separable Convolutions, Xception 在多个数据集上并没有比 Inception V3 好很多的结果, 但是, Xception 中 Depthwise Separable Convolutions 的做法在最近的一些高效模型中被广泛使用.

FCN 是一种有效的对图像语义分割的方法, 方法十分简单, 分割效果非常好. 本文记录使用 FCN 做语义分割的过程. 本文记录的方法和 FCN 原始论文并不完全相同, 但是, 基本思想是一致的.

Bind 是 MXNet 中最重要的一个函数, 它连接起来了各个模块. Bind 启动了整个 MXNet 的工作. 因此, 在分析 MXNet 的各个模块之前最好能先对 Bind 有个初步的了解, 理解 MXNet 的各个模块是怎么串起来的. SimpleBind 主要的工作是构建和整理参数, 最后还是要把参数传递给 Bind.