gpt4 book ai didi

python - 图像检测的嵌套循环需要永远运行 1 亿次

转载 作者:太空宇宙 更新时间:2023-11-03 22:07:33 26 4
gpt4 key购买 nike

我正在为一篇论文做一些工作,必须在各种图像上尝试一些过滤器,看看是否检测到对象。一切正常,但我的目的是将 4 个过滤器(对比度、模糊和其他)中的每一个过滤器的 100 个不同程度逐渐应用到帧上,并查看它停止正确检测的位置。

我会将它们结合起来,例如,首先将一些图像导入到帧中,然后我尝试通过添加“0%”对比度、“0%”模糊、“0%”调整大小、“0%”噪声来进行检测,下一轮 1% 对比度,其他所有 0%,然后 2% 对比度,其他 0%,依此类推,直到 100% 对比度。下一个循环应该做同样的事情,但模糊度为 1%,调整大小为 0%,噪声为 0%。然后是 2% 模糊、0%、0% 等等 - 各种组合。

但这意味着它需要进行 100^4 次迭代(如果我想要 100 度和 4 个过滤器,则需要 1 亿次)。而我目前使用 OpenCV 实现的 YOLOv3-320 以大约 0.5 秒的速度执行检测。这意味着完成对一张照片的测试大约需要 580 天。

def tester(depth, correct_answer):
container_a = []

for a in range(depth):
print((a*(100/depth)))
frame1 = apply_sepia(frame, int((a*(100/depth))))
container_b = []

for b in range(depth):
frame2 = apply_blur(frame1, int((b*(100/depth))))
container_c = []

for c in range(depth):
frame3 = sp_noise(frame2, int((c*(100/depth))))
container_d = []

for d in range(depth):
frame4 = image_resize(frame3, int((d*(100/depth))))

try:
net.setInput(cv.dnn.blobFromImage(frame4, 1/255, (vers, vers), [0,0,0], 1, crop=False))
result = postprocess(net.forward(getOutputsNames(net)))

if result == correct_answer:
container_d.append(1)
else:
container_d.append(0)

except Exception as e:
container_d.append(0)

container_c.append(container_d)

container_b.append(container_c)

container_a.append(container_b)

return container_a

我怎样才能加快速度?

最佳答案

我将把它作为一个答案,以便有更多的空间来说明我的观点。

我使用术语“高参数分辨率”来描述小步迭代您的参数。

假设您的算法在 18% 的噪声下失败,而噪声是您唯一要改变的东西。

然后,执行 1% 的增量将导致您的对象检测在运行的第 19 次迭代中失败。

当您测试 20% 的噪声时,以更大的步长(例如 10%)进行筛选将导致您的算法在第三次迭代中失败。然后,您知道您的算法在 10% 到 20% 的噪声下失败。您现在可以使用类似 bisection 的东西并询问算法是否在高于或低于 15% 时失败,然后是高于或低于 17.5%。

因此,在这种方法中,您总共运行算法五次,并得到与蛮力方法相同的答案。

关于python - 图像检测的嵌套循环需要永远运行 1 亿次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55994120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com