我正在阅读CVPR2018的论文Mobile Video Object Detection with Temporally-Aware Feature Maps,以及已发布的代码https://github.com/tensorflow/models/tree/master/research/lstm_object_detection。
现在,我在本文中遇到等式(4)的问题:瓶颈lstm的成本为DK ^ 2 *(M + N)* DF ^ 2 +(M + N)* N * DF ^ 2 + 4(DK ^ 2 * N * DN ^ 2 + N ^ 2 * DF ^ 2)。
当我阅读源代码lstm/lstm_cells.py(118) 时,我发现使用两个连续的tf.contrib.layers.seperable_conv2d来构成本文所述的bottlenek-lstm。
我对前两个术语没有疑问,但是对于第三术语,我认为应该是(DK ^ 2 * N * D2 + 4 * N ^ 2 * DF ^ 2)。也就是说,系数4仅应在第三项中应用于后者,因为tf.contrib.layers.separable_conv2d由深度conv和点向conv组成,而深度conv与输出通道无关。 / strong>
我想念什么吗?还是写在纸上不正确?
对于可分离卷积的计算,我遵循MobileNet paper公式(5)。
用于瓶颈lstm计算的选定代码:
bottleneck = tf.contrib.layers.separable_conv2d(
tf.concat([inputs, h], 3),
self._num_units,
self._filter_size,
depth_multiplier=1,
activation_fn=self._activation,
normalizer_fn=None,
scope='bottleneck')
if self._viz_gates:
slim.summaries.add_histogram_summary(bottleneck, 'bottleneck')
concat = tf.contrib.layers.separable_conv2d(
bottleneck,
4 * self._num_units,
self._filter_size,
depth_multiplier=1,
activation_fn=None,
normalizer_fn=None,
scope='gates')
为了保持一致性,让
self._filter_size=[Dk,Dk]
self._num_units = N
inputs shape is [batch, DF, DF, M]
h shape is [batch, DF, DF, N]