如何在Python中加快慢速(.6s)掩码分配?

时间:2019-07-16 14:53:47

标签: python performance numpy computer-vision

我正在尝试通过在图像上覆盖被遮罩的像素来可视化python中图像的二进制遮罩。图像尺寸为360 x 640像素。我的可视化运行非常慢(每个蒙版.6秒),我对代码计时并固定瓶颈以将二进制蒙版转换为可以添加到图像的彩色蒙版。我尝试了几种方法。

首先,我尝试了列表理解:

color_mask = [[[50,50,50] if val == 1 else [0,0,0] for val in mask_row] for mask_row in mask]

它运行约0.6秒钟

然后我尝试在numpy数组上使用掩码分配,它运行了大约1.2秒(出奇的慢)

color_mask = np.zeros(shape=(image.shape))
color_mask[output_dict["detection_masks"][0]] = [50,50,50]

生成颜色遮罩后,我将其添加到原始图像中以使图像上的遮罩可视化。我希望能够实时运行多达20个遮罩的可视化。

为什么掩码分配和列表理解如此之慢?我该如何加快其中之一的速度?

您可以像这样构建用于测试的遮罩:

mask = np.zeros(shape=(563,750,1))
mask[50:200,50:200,:] = 1

1 个答案:

答案 0 :(得分:3)

我发现使用numpy可以做到这一点

没有看到您正在使用的数据,我生成了一个随机的二进制图像

import numpy as np
mask = np.random.randint(0, 2, size=(360, 640, 1))
color_mask = np.array([50,50,50]) * mask + np.array([0,0,0]) * (1 - mask) # you do not need the second half of this statement if you're setting to all zeros

使用列表理解时间平均为0.280秒

使用numpy,平均时间为0.015秒

删除语句的后半部分将产生大约0.004秒的时间