Я работаю над подходом глубокого обучения для моего проекта. И мне нужно вычислить матрицу расстояний на 4D Tensor, которая будет иметь размер N x 128 x 64 x 64 (размер партии x каналы x высота x ширина) . Матрица расстояний для этого типа тензора будет иметь размер N x 128 x 4096 x 4096 , и этот тип тензора будет невозможно разместить в графическом процессоре, даже для процессора это потребует большого количества памяти. Итак, я хотел бы рассчитать матрицу расстояний только в некоторых соседних пикселях (скажем, в радиусе 5) и рассмотреть эту прямоугольную матрицу для дальнейшей обработки в нейронной сети. При таком подходе моя матрица расстояний будет иметь размер N x 128 x 4096 x 61 . Это займет меньше памяти по сравнению с матрицей полного расстояния.
Точно, я пытаюсь реализовать сети случайного блуждания Convolution для семантической сегментации . Эта сеть должна рассчитать парное расстояние L1 для объектов.
Архитектура
Просто для добавления этого типа матрицы расстояний обычно рассчитывается для сегментации изображения с помощью спектральной кластеризации.
Например
X = [[a,b],[c,d]]
L1_dist = [ [0, |a-b|, |a-c|, 0],
[|a-b|, 0, 0, |b-d|],
[|a-c|, 0, 0, |c-d| ],
[0, |b-d|, |c-d|, 0 ]
]
Final_L1_dist = [ [0, |a-b|, |a-c|], // "a" is near to b and c. Including self element i.e. a
[|a-b|, 0, |b-d|], // "b" is near to a and d.
[|a-c|, 0, |c-d| ], // "c" is near to a and d.
[|b-d|, |c-d|, 0 ] // "d" is near to b and c.
]
Буду признателен, если кто-нибудь поможет мне найти эффективный способ вычисления такой матрицы.
Спасибо