Количество операций tf.contrib.layers.separable_conv2d - PullRequest
1 голос
/ 17 апреля 2019

Я читаю газету Обнаружение мобильных видеообъектов с помощью карт с функцией временного распознавания из CVPR2018, а также выпущенный код: 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 состоит из глубинного конва и точечного конв, а глубинный конв не имеет никакого отношения к выходным каналам.

Я что-то пропустил? Или это неправильно написано в газете?

Для вычисления отделимой свертки я следую Бумага MobileNet Уравнение (5).

Выбранные коды для вычисления bottleneck-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]
...