У меня есть HxW
"карта характеристик", F
. Предположим, что это карта HxWx1
. С помощью другой операции у меня есть набор пикселей, которые меня интересуют (скажем, N
пикселей). Каждый из этих пикселей связан с другим значением, поэтому мой набор имеет форму Nx3, где каждый пиксель имеет форму x
, y
и val
. Обратите внимание, что это val
отличается от значения карты функций в местоположении.
Вот мой вопрос. Можно ли векторизовать операцию соседства для каждой из этих точек? Для каждого пикселя n
из N
я использую sh, чтобы умножить соответствующий val
на его окрестность 3x3 на карте функций F
. Для окрестности 3x3 это дает новый набор элементов 3x3 new val
. Я хочу заменить x
y
пикселем с максимумом new val
(карта умноженных характеристик) в окне 3x3.
Это похоже на свертку (здесь небольшое злоупотребление терминологией) за которым следует операция максимального пула, но не совсем так, поскольку каждое местоположение пикселя имеет разное значение для умножения.
Пример ввода и вывода и пошаговое руководство для требуемого решения
Допустим, H
= 10
и W
= 10
Вот пример F
0.635955 0.922379 0.993406 0.007837 0.818661 0.983730 0.199866 0.757519 0.073152 0.015831
0.397718 0.097353 0.231351 0.177886 0.343099 0.419940 0.017342 0.087294 0.402266 0.366337
0.978686 0.476594 0.067836 0.148977 0.058994 0.810586 0.542894 0.797419 0.386559 0.225982
0.479860 0.033354 0.353366 0.431562 0.336208 0.674272 0.398151 0.713732 0.598623 0.829230
0.940838 0.869564 0.287100 0.669844 0.631836 0.748982 0.762292 0.597999 0.540236 0.758802
0.925995 0.141296 0.466772 0.672663 0.929746 0.544029 0.991860 0.197474 0.762866 0.798973
0.543519 0.128332 0.624323 0.876569 0.050709 0.223705 0.708381 0.380842 0.818092 0.163447
0.283125 0.329618 0.283481 0.672950 0.136922 0.897785 0.385479 0.764824 0.132671 0.091148
0.661984 0.369459 0.501181 0.352681 0.554113 0.133283 0.593048 0.108534 0.397813 0.836065
0.654929 0.928576 0.539204 0.931213 0.344114 0.591214 0.126809 0.456681 0.036531 0.725228
Моя структура пикселей, скажем N
= 3
Три значения в следующем порядке: row, col, val: (для простоты я предполагаю, что x - это строки, а y - cols, хотя это не обязательно так). Это полностью не зависит от карты функций на предыдущем шаге.
3,2,0.38
4,4,0.602
7,5,0.9647
Окрестности вокруг (3,2)
:
[[0.4765941 , 0.06783561, 0.14897662],
[0.03335438, 0.35336647, 0.4315618 ],
[0.86956374, 0.28709952, 0.66984412]]
Таким образом, val
* соседство урожаев. (здесь val
равно 0,38)
[[0.18110576, 0.02577753, 0.05661112],
[0.01267466, 0.13427926, 0.16399349],
[0.33043422, 0.10909782, 0.25454077]]
Местоположение максимального значения здесь (2,0)
т.е. (1,-1)
относительно центрального пикселя. Таким образом, мой обновленный (x,y)
должен быть (3,2) + (1,-1)
= (4,1)
. Аналогично для двух других обновленных пикселей: (5,4)
и (7,5)
Как я могу распараллелить все это? (Надеюсь, будет загружен на графический процессор с помощью Pytorch, но не обязательно, я еще не дошел до этого этапа.)
Примечание: я задавал этот вопрос несколько дней go, но это было плохо оформлено без надлежащей информации. Надеюсь, это решит проблему.
Изменить: для этого конкретного c экземпляра F может быть создан как случайный массив:
F = np.random.rand(10,10)