使用 joblib 时就地更新批量图像数组

2024-02-07

这是我对以下问题的解决方案的后续问题:

如何将函数并行应用于 numpy 数组中的多个图像? https://stackoverflow.com/a/48374491/2956066

我建议的解决方案 https://stackoverflow.com/questions/48373944/how-to-apply-a-function-in-parallel-to-multiple-images-in-a-numpy-array/48374491#48374491如果函数工作正常process_image()必须返回结果,然后我们可以将其缓存到某个列表中以供以后处理。

因为我想对超过 100K 图像(具有数组形状(100000, 32, 32, 3)),我希望我的解决方案非常高效。但是,我的基于列表的方法将占用大量内存,因此它的效率也很低(对于进一步处理)。所以,我想更新数组in-place在 - 的里面process_image()函数,当使用此函数多次调用时joblib https://pythonhosted.org/joblib/.

但是,我在更新原始批处理图像数组时遇到问题in-place。我尝试过suggestion by Eric https://stackoverflow.com/questions/48373944/how-to-apply-a-function-in-parallel-to-multiple-images-in-a-numpy-array/48374491#comment83738800_48374491但它无法更新原始数组in-place。我通过打印以下内容来验证数组内存是否确实在工作进程之间共享flags数组内的process_image功能。这是我这样做的代码:

import numpy as np
from skimage import exposure
from joblib import Parallel, delayed

# number of processes
nprocs = 10

# batched image array
img_arr = np.random.randint(0, 255, (1000, 32, 32, 3)).astype(np.float32)

# for verification
img_arr_copy = img_arr.copy()

# function to be applied on all images (in parallel)
# note: this function fails to update the original array in-place
# but, I want in-place updation of original array with the result of `equalize_hist`
def process_image(img, idx):
     """
     update original array in-place since all worker processes share
     original memory! i.e. they don't make copy while processing it.
     """
     print("\n processing image: ", idx)
     img[...] = exposure.equalize_hist(img)
     print("array metadata: \n", img.flags)
     print("======================= \n")

# run `process_image()` in parallel
Parallel(n_jobs=nprocs)(delayed(process_image)(img_arr[idx], idx) for idx in range(img_arr.shape[0]))

我什至尝试使用初始化一个空数组np.empty()与原始批处理图像数组形状相同并尝试更新它,但也失败了。我不知道哪里出了问题。

为了检查数组是否发生更新,我使用了:

np.all(result_arr == img_arr)

where result_arr被初始化为:

result_arr = np.empty(img_arr.shape, dtype=np.float32)

我哪里出错了,我的代码中有什么错误?所有建议都受到高度赞赏!


从上面的代码打印统计信息以检查内存是否共享:

processing image:  914 
 array metadata:  
 C_CONTIGUOUS : True 
 F_CONTIGUOUS : False 
 OWNDATA : False     #<=========== so memory is shared
 WRITEABLE : True 
 ALIGNED : True 
 UPDATEIFCOPY : False 
======================= 

 processing image:  614
 array metadata: 
 C_CONTIGUOUS : True
 F_CONTIGUOUS : False
 OWNDATA : False     #<=========== so memory is shared
 WRITEABLE : True
 ALIGNED : True
 UPDATEIFCOPY : False
======================= 


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 joblib 时就地更新批量图像数组 的相关文章

  • 如何在Python中每次运行脚本时增加变量?

    我有一个 Python 脚本 我想在每次运行时增加一个全局变量 这可能吗 使用外部文件很容易做到这一点 您可以创建一个函数来为您执行此操作 这样您就可以根据需要将多个文件用于多个变量 尽管在这种情况下您可能想要研究某种序列化并将所有内容存储
  • SQLAlchemy 闭包表关系定义

    我最近开始使用 SQL Alchemy 开展一个涉及攀岩区域和路线的项目 区域是分层的 因为单个区域可以包含多个区域 而多个区域又可以包含其他区域 路线直接与单个区域关联 但也与该区域的父区域关联 等等 为了实现这一点 我选择使用Bill
  • 如何使用Python3将ruamel.yaml转换为dict?

    我想要一个dict or OrderedDict from ruamel yaml 我正在使用 Python 3 8 如果有帮助的话 很乐意切换到 3 9 from ruamel yaml import YAML from collecti
  • 无法从同一项目的 bin 目录导入模块

    我正在构建一个库 该库将通过 pip 包含在其他项目中 我有以下目录 venv 是 virtualenv project bin run py myproj init py logger py venv 我激活虚拟环境 在 bin run
  • Bokeh 相当于 matplotlib 子图

    我正在寻找一种方法来创建包含多个子图的绘图 例如 fig ax0 ax1 plt subplots nrows 2 sharex True 可以在 matplotlib 中完成 然后可以通过以下方式解决ax0 and ax1 有没有办法在
  • Pythonic方式逐行读取文件?

    以下两种方法中逐行读取文件的 Pythonic 方法是什么 with open file r as f for line in f print line or with open file r as f for line in f read
  • Keras AttributeError:“顺序”对象没有属性“predict_classes”

    我试图按照本指南找到模型性能指标 F1 分数 准确性 召回率 https machinelearningmastery com how to calculate precision recall f1 and more for deep l
  • chrome_options.binary_location() TypeError: 'str' 对象不可调用

    我希望每个人都好 我是 python 新手 我尝试运行这段代码 但我不明白问题是什么以及如何解决这个问题 我的代码是 from selenium import webdriver from time import sleep url raw
  • 抓取多个帐户,即多次登录

    我可以成功抓取单个帐户的数据 我想在一个网站上抓取多个帐户 这意味着多次登录 如何管理登录 注销 您可以在每个帐户会话中使用多个 cookiejar 并行抓取多个帐户 请参阅 cookiejar 请求元密钥http doc scrapy o
  • 在 matplotlib 中查看然后自动关闭图形?

    我必须检查我的参数设置是否正确 因此我需要绘制许多图 为了绘制这些图 我选择使用 matplotlib 每次检查后 我需要单击左上角的关闭按钮 这很微不足道 那么有没有什么方法可以让剧情在3 5秒左右显示并且无需点击就自动关闭呢 我知道关于
  • Python 2to3 Windows CMD

    我已经安装了 python 32 包到 C python32 我还设置了路径 Python 路径 C Python32 Lib C Python32 DLLs C Python32 Lib lib tk 路径 C Python32 我想使用
  • 如何以编程方式关闭wx.DirDialog?

    我有 wxpython 应用程序 可以在单击按钮时打开 wx DirDialog dlg wx DirDialog self Choose a directory style wx DD DEFAULT STYLE if dlg ShowM
  • Python:从字符串访问变量[重复]

    这个问题在这里已经有答案了 这可能是非常基本和简单的事情 我可能只是在谷歌上搜索错误的术语 但希望这里有人可以帮助我 我仍然是编程的初学者 这从这个问题中可能是显而易见的 我正在寻找一种从字符串访问变量的方法 像这样 A1 B1 C1 my
  • 返回 OSError 异常类的子类实例的逻辑在哪里?

    我一直在寻找一些对某些人来说可能相对愚蠢的东西 但对我来说非常有趣 输入和输出错误已合并为OSError在 Python 3 3 中 异常类层次结构发生了变化 关于内置类的一个有趣的特性OSError是这样 它在传递时返回它的子类errno
  • 当前异常上下文掩盖了先前的错误

    以下是我在 Doug Hellman 网站上名为 masking exceptions catch py 的文件中找到的示例 我暂时无法找到链接 throws 中引发的异常将被丢弃 而 cleanup 中引发的异常将被报告 道格在他的文章中
  • 是否可以使用 Google BERT 来计算两个文本文档之间的相似度?

    是否可以使用 Google BERT 来计算两个文本文档之间的相似度 据我了解 BERT 的输入应该是有限大小的句子 一些作品使用 BERT 来计算句子的相似度 例如 https github com AndriyMulyar semant
  • 如何从已安装的云端硬盘文件夹中永久删除?

    我编写了一个脚本 在每次迭代后将我的模型和训练示例上传到 Google Drive 以防发生崩溃或任何阻止笔记本运行的情况 如下所示 drive path drive My Drive Colab Notebooks models if p
  • 在 python 中使用 org.mpris.mediaplayer2.player PlaybackStatus 属性

    The 规格页 http specifications freedesktop org mpris spec latest Player Interface html summary对于这个特定的接口说 PlaybackStatus s P
  • 将 sudo 与 Python 脚本结合使用

    我正在尝试编写一个小脚本来在每次执行脚本时安装 VirtualBox 共享文件夹 我想用Python 来做这件事 因为我正在尝试学习它来编写脚本 问题是我需要特权才能启动挂载命令 我可以将脚本作为 sudo 运行 但我更喜欢它自己创建 su
  • 无法比较类型“ndarray(dtype=int64)”和“str”

    Example of data that I want to replace 数据具有以下属性 购买 V 高 高 中 低 维持 V 高 高 中 低 门 2 3 4 5 更多 2 4人以上 lug boot 小 中 大 安全性低 中高 这就是

随机推荐

  • 如何以编程方式将项目添加到 arrayList 中的字符串数组?

    这是我的数组 xml文件在分辨率 值 folder
  • Jquery Draggable 具有多个句柄

    是否有可能有一个draggable具有多个句柄的元素 我初始化它两次 每次都使用不同的句柄参数 但它不起作用 只有第一个起作用 您应该只传递 handle 参数一次 它可以是选择器或元素 因此 要使其与多个句柄一起使用 elem dragg
  • 编写字体查看器 - 获取字体属性,动态加载 ttf

    我正在尝试使用 VB6 VB5 代码 在 Windows 下 为 TrueType OpenType 字体编写一个字体查看器 这是令人惊讶的困难 1 在VB winAPI中 我没有找到如何提取字体的名称或一般的字体属性 2 我可以安装字体
  • preg_match_all 和引号内的换行符

    另一个菜鸟正则表达式问题 问题 我可能做了一些愚蠢的事情 所以我想我应该利用 SO 常客的聪明才智 尝试匹配换行符 但前提是它们出现在双引号或单引号内 我还想捕获引号之间但不包含换行符的字符串 好的 这就是我得到的 有输出 下面是我想要得到
  • 在 Eclipse Maven 项目中找不到 persistence.xml

    我无法修复persistence xml file not foundeclipse问题 这是一个简单的测试项目 Maven Nature 用于非常基本的EJB测试 该文件确实在src main resources META INF 这是p
  • 应用程序开发人员犯的数据库开发错误[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么Java 8中没有BooleanConsumer?

    恐怕这是一个有点愚蠢的问题 有没有人可以告诉我为什么没有BooleanConsumer与相反BooleanSupplier https docs oracle com javase 8 docs api java util function
  • 获取泛型参数的类型

    我编写了一个小函数来更好地处理类型 function evaluate variable any type string any switch type case string return String variable case num
  • 如何在Java中创建临时目录/文件夹?

    是否有一种标准且可靠的方法在 Java 应用程序中创建临时目录 有Java 问题数据库中的一个条目 http bugs java com bugdatabase view bug do bug id 4735419 其中的注释中有一些代码
  • 如何将 pandas 数据添加到现有 csv 文件?

    我想知道是否可以使用 pandasto csv 函数将数据框添加到现有 csv 文件 csv 文件与加载的数据具有相同的结构 您可以在 pandas 中指定 python 写入模式to csv http pandas pydata org
  • Scala 何时需要分号

    我在工作中被锁定的电脑困住了 但我正在尝试练习我的 Scala 我正在使用 Ideone com 因为我什至无法安装scalac 无论如何 这不能编译 class DPt var name String var x Double var y
  • 如何在Lucene文档中定义主键字段以获得最佳的查找性能?

    在我的 Lucene 索引 v7 2 中创建文档时 我添加了uid包含唯一 id key 字符串 的字段 doc add new StringField uid uid Field Store YES 为了稍后检索该文档 我为给定的唯一 I
  • 模板中的 django 请求

    我已经启用了 Django 请求处理器 TEMPLATE PROCESSORS django core context processors auth django core context processors debug django
  • 一些 Alt 键会更改我的 RichTextBox 字体

    我正在 Windows 窗体中创建一些印地语打字应用程序 我用过KrutiDev010字体 某些字符有一些 Alt 键控制代码 但如果我输入其他一些 Alt 键控制代码 例如Alt 0261 Alt 025896然后它打印一个章程 攨分别并
  • XSL 文档的仅 IE7 样式表

    如何将仅限 IE7 及更低版本的样式表添加到 XSL 页面 我尝试将其添加到标题信息模板中 如下所示
  • Meteor、Ember.js 和 Backbone.js 之间的主要区别是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Android应用程序中的模块间(库项目)通信

    在下图中 我有 3 个模块 作为 android 库 它们扩展了基本的 通用组件模块 并且所有这 3 个模块都将添加到单个 android 应用程序中 所有3个模块都是独立的模块 但是当它作为一个应用程序时 它需要共享一些数据 启动其他模块
  • 为什么 gets(stdin) 返回一个整数?以及其他错误[重复]

    这个问题在这里已经有答案了 我是 C 编程新手 尽管我有 Java 经验 阅读了一些教程后 我决定开始解决编码挑战编码字节 https www coderbyte com 我尝试的第一个挑战是this one https www coder
  • 使用 Internet Explorer 11 和 Selenium(任何版本)和 IEWebDriver(任何版本)找不到任何元素

    我已经到处寻找答案 但找不到任何解决我的问题的方法 我正在尝试在 IE11 中运行我的 Selenium 测试 所有其他浏览器都可以正常工作 包括 Edge 如下简单测试就会导致问题 System setProperty webdriver
  • 使用 joblib 时就地更新批量图像数组

    这是我对以下问题的解决方案的后续问题 如何将函数并行应用于 numpy 数组中的多个图像 https stackoverflow com a 48374491 2956066 我建议的解决方案 https stackoverflow com