高效使用多個Numpy 切片進行隨機圖像裁剪
簡介:
在機器學習和計算機視覺中在應用程式中,影像裁切是模型訓練或推理之前預處理影像的關鍵任務。裁剪有助於提取相關的興趣區域並降低處理大圖像的計算複雜度。
高效裁剪方法:
基於循環的裁剪方法,如問題所示,可以是對於大型資料集計算效率低下。為了解決這個問題,我們可以利用 numpy 的高級索引和基於跨步的方法。
利用基於跨步的方法:
Numpy 的 np.lib.stride_tricks.as_strided 函數允許提取跨步不複製資料的陣列視圖。此技術可與 scikit-image 的 view_as_windows 函數結合使用,在輸入影像陣列上建立滑動視窗。
滑動視窗的說明:
view_as_windows 在輸入中建立視圖數組數組,其中每個視圖代表一個滑動視窗。 window_shape 參數指定滑動視窗的形狀。透過為我們不想滑動的軸傳遞 1,我們可以建立單一維度,稍後可以對其進行索引以獲得所需的裁剪視窗。
程式碼實作:
以下程式碼示範了使用滑動視窗的高效裁切方法:
<code class="python">from skimage.util.shape import view_as_windows # Get sliding windows w = view_as_windows(X, (1, 16, 16, 1))[..., 0, :, :, 0] # Index and retrieve specific windows out = w[np.arange(X.shape[0]), x, y] # Rearrange format out = out.transpose(0, 2, 3, 1)</code>
此程式碼有效地為每個影像產生隨機( x_offset, y_offset) 對,並將對應的16x16 裁切提取到形狀數組(4, 16, 16, 3),不會產生不必要的記憶體開銷。
以上是如何使用 NumPy 切片有效地裁剪隨機圖像塊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!