使用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的任何方法都持开放态度。

我终于使用了python的带池的多处理模块,它减少了进程数量的一倍所花费的时间(进程数量小于现有CPU内核数量(。DASK花了很长时间才弄清楚我的要求,而且缺乏知识。多重处理非常容易理解和使用。

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]

最新更新