我有一個分割圖像作爲獨特標籤1 ... k的2維矩陣。例如:高效地找到標記圖像區域的質心
img =
[1 1 2 2 2 2 2 3 3]
[1 1 1 2 2 2 2 3 3]
[1 1 2 2 2 2 3 3 3]
[1 4 4 4 2 2 2 2 3]
[4 4 4 5 5 5 2 3 3]
[4 4 4 5 5 6 6 6 6]
[4 4 5 5 5 5 6 6 6]
我想確定區域的質心。也就是說,根據標籤,質心的X,Y座標是什麼?例如,標籤1的質心是(1.25,0.625)。我只知道行數((0 + 0 + 1 + 1 + 1 + 2 + 2 + 3)/8 = 1.25
)和列數((0 + 0 + 0 + 0 + 1 + 1 + 1 + 2)/8 = 0.625
)
我知道如何做到這一點的唯一方法是使用for循環從1到k(或在我的例子中,1到6),找到每個標籤點的索引,並通過索引圖像的網格來平均它們的座標。
但是,我正在尋找以GPU計算優化的方式做到這一點。因此,使用for循環並不理想(在一個漂亮的GPU上,每個圖像需要花費大約1秒時間才能完成幾百個標籤)。我正在使用PyTorch,但真正的任何numpy解決方案都應該足夠了。
是否有GPU高效的解決方案來完成此任務?
是的這是我可以提出的最佳解決方案。數據已經在GPU上,因此我爲什麼要這麼做: - /。我會看看CPU如何去。這當然是高效的 - 每一個像素都會觸及一次,但我想知道是否有辦法在GPU上實現並行化... – marcman
有一件事你可以做,如果上述算法的天真GPU實現是太慢了,就是爲每個圖像列創建數組'n','sx'和'sy',然後將它們添加到一起。這可能會減少等待對數組值進行原子更新的內核數量。 –
我不確定,以原子方式更新全局數組中的單個值是否有效?你在GPU上獲得虛假分享問題嗎? –