使用python快速提取大量图像的存储段掩码

2024-05-16 21:07:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有很多高分辨率的图像(~15k),我在这些图像上运行了一个实例分割模型,并为每个图像提取了几个片段掩码(只存储了输出-像素分类值)

我想运行我的每个图像,现在将图像的每个特定部分存储在单独的文件中——我已经编写了相当矢量化的代码来使用numpy实现这一点。 我的问题是,我有很多图像,因为它们的分辨率非常高,即使我的代码是矢量化的,但每个掩码需要相当长的时间,并且存在很多掩码。 最好的加速方法是什么?我探索过的方法:

1.DASK-通读一段时间,但我对它了解不多,也不确定它在读取、处理和写入图像数据时会有多大帮助。
2.多线程/多处理-已经读到这里的最佳方法取决于应用程序是否是IO/CPU绑定的-不确定使用什么,因为IO操作和CPU处理似乎都是这里的问题

代码基本上是这样的-

import pandas as pd
data_folder = 'images/'
output_save_folder = 'saves'
def save_mask(row):
  #Some code here
  #save extracted mask at output_save_folder

mask_data = pd.DataFrame({'image_path':['foo.jpg','bar.jpg'],'masks':[[.1,.52,.31],[.73,.48,.92]],[[.12,.34,75]]})
#data looks like this ^

mask_data.apply(save_mask,axis=1)

我愿意使用任何可以使用Python的方法


Tags: 方法代码io图像outputdatasavemask
1条回答
网友
1楼 · 发布于 2024-05-16 21:07:24

最后,我使用了python的带池的多处理模块,它将占用的时间减少了进程数的一倍(进程数小于当前的CPU核数)。 达斯克花了很长时间才明白我的要求和知识的缺乏。多处理非常容易理解和使用

import pandas as pd
import multiprocessing as mp

data_folder = 'images/'
output_save_folder = 'saves'
def save_mask(row):
  #Some code here
  #save extracted mask at output_save_folder

mask_data = pd.DataFrame({'image_path':['foo.jpg','bar.jpg'],'masks':[[.1,.52,.31],[.73,.48,.92]],[[.12,.34,75]]})
n_processes = 10
with mp.Pool(processes=n_processes) as pool:
    results = [pool.apply_async(data_df.apply, args=(visualise_masks,1)) for data_df in np.array_split(mask_data, n_processes)]
    results = [p.get() for p in results]

相关问题 更多 >