在单热像素标签中制作空 class 的优化
Optimization for making a null class in a one-hot pixel-wise label
我正在为图像分割模型准备数据。我每个像素有 5 classes,它们不能累积覆盖整个图像,所以我想创建一个 'null' class 作为第 6 个 class。现在我有一个单热编码的 ndarray 和一个解决方案,它可以进行一堆 Python 调用,我希望对其进行优化。
我现在的草图代码:
arrs.shape
(25, 25, 5)
null_class = np.zeros(arrs.shape[:-1])
for i in range(arrs.shape[0]):
for j in range(arrs.shape[1]):
if not np.any(arrs[i][j] == 1):
null_class[i][j] = 1
理想情况下,我找到了一种计算空示例的几行且性能更高的方法 - 我的实际训练数据来自 20K x 20K 图像,我想一次计算和存储所有数据。有什么建议吗?
我相信你可以通过 numpy.where
and numpy.all
的组合来做到这一点。使用 all
检查最后一个维度上的所有零将为您提供一个布尔数组 True
,其中 null_class
应该是 1
。为了显示,我将使用 (2,2,5)
数组。
arr = np.random.randint(0, 2, size=(2,2,5))
null_class = np.zeros(arr.shape[:-1])
arr[0, 0] = [0, 0, 0, 0, 0]
arr
array([[[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1]],
[[0, 0, 1, 0, 0],
[0, 1, 1, 1, 0]]])
np.all(arr[:, :] == 0, axis=2)
array([[ True, False],
[False, False]], dtype=bool)
np.where(np.all(arr[:, :] == 0, axis=2))
(array([0]), array([0]))
null_class[np.where(np.all(arr[:, :] == 0, axis=2)] = 1
null_class
array([[ 1., 0.],
[ 0., 0.]])
我正在为图像分割模型准备数据。我每个像素有 5 classes,它们不能累积覆盖整个图像,所以我想创建一个 'null' class 作为第 6 个 class。现在我有一个单热编码的 ndarray 和一个解决方案,它可以进行一堆 Python 调用,我希望对其进行优化。 我现在的草图代码:
arrs.shape
(25, 25, 5)
null_class = np.zeros(arrs.shape[:-1])
for i in range(arrs.shape[0]):
for j in range(arrs.shape[1]):
if not np.any(arrs[i][j] == 1):
null_class[i][j] = 1
理想情况下,我找到了一种计算空示例的几行且性能更高的方法 - 我的实际训练数据来自 20K x 20K 图像,我想一次计算和存储所有数据。有什么建议吗?
我相信你可以通过 numpy.where
and numpy.all
的组合来做到这一点。使用 all
检查最后一个维度上的所有零将为您提供一个布尔数组 True
,其中 null_class
应该是 1
。为了显示,我将使用 (2,2,5)
数组。
arr = np.random.randint(0, 2, size=(2,2,5))
null_class = np.zeros(arr.shape[:-1])
arr[0, 0] = [0, 0, 0, 0, 0]
arr
array([[[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1]],
[[0, 0, 1, 0, 0],
[0, 1, 1, 1, 0]]])
np.all(arr[:, :] == 0, axis=2)
array([[ True, False],
[False, False]], dtype=bool)
np.where(np.all(arr[:, :] == 0, axis=2))
(array([0]), array([0]))
null_class[np.where(np.all(arr[:, :] == 0, axis=2)] = 1
null_class
array([[ 1., 0.],
[ 0., 0.]])