首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用多处理功能有效地切片和读取图像

使用多处理功能有效地切片和读取图像
EN

Stack Overflow用户
提问于 2019-03-11 14:49:00
回答 1查看 387关注 0票数 2

我有一张很大的卫星图像,想要在上面运行一个目标检测模型推理。目前,我对大图像进行切片,保存瓦片,然后读取它们,以便让我的模型输出检测结果(方框和蒙版)。我知道这是一种低效的方式,因为一旦读取了图像切片/平铺,就不再需要它了,但我目前正在将其保存到磁盘上。

有没有更有效的方法来完成这个过程?也许是通过多进程或射线库?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-12 04:21:13

正如您所提到的,由于共享内存的使用以及在一台或多台机器上运行相同代码的能力,Ray将是一个很好的选择。

类似下面这样的结构可能会起作用。

代码语言:javascript
复制
import numpy as np
import ray

ray.init()

@ray.remote
def do_object_detection(image, index):
    image_slice = image[index]
    # Do object detection.
    return 1

# Store the object in shared memory.
image = np.ones((1000, 1000))
image_id = ray.put(image)

# Process the slices in parallel. You probably want to use 2D slices instead
# of 1D slices.
result_ids = [do_object_detection.remote(image_id, i) for i in range(1000)]
results = ray.get(result_ids)

请注意,执行do_object_detection任务的工作进程不会创建自己的映像副本。取而代之的是,他们将能够访问共享内存中的映像副本。

如果您已经将图像放在单独的文件中,另一种方法是执行类似下面的操作。

代码语言:javascript
复制
import numpy as np
import ray

ray.init()

@ray.remote
def do_object_detection(filename):
    # Load the file and process it.
    return 1

filenames = ['file1.png', 'file2.png', 'file3.png']

# Process all of the images.
result_ids = [do_object_detection.remote(filename) for filename in filenames]
results = ray.get(result_ids)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55096530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档