首页 后端开发 Python教程 性能陷阱:通用库和辅助对象

性能陷阱:通用库和辅助对象

Oct 10, 2024 am 08:12 AM

便利性和性能通常成反比。如果代码很容易使用,那么它的优化程度就较低。如果优化的话就不太方便了。高效的代码需要更接近实际运行的内容、运行方式的细节。

我在我们正在进行的为癌症研究运行和优化 DeepCell 细胞分割的工作中遇到了一个例子。 DeepCell AI 模型可以预测哪些像素最有可能位于细胞中。从那里,我们从最可能的像素“洪水填充”,直到到达单元格边界(低于某个阈值)。

这个过程的一部分涉及平滑预测细胞内的小间隙,这种情况可能因多种原因而发生,但在生物学上是不可能的。 (想想甜甜圈的孔,而不是细胞的多孔膜。)

空洞填充算法如下:

  • 识别对象(具有相同数字 ID 的给定单元格标签的连续像素)。
  • 计算这些单元的“欧拉数”,即形状表面积的度量。
  • 如果欧拉数小于 1(即表面有间隙),请平滑孔洞。

这是维基百科文章中的欧拉数示例;圆(仅直线部分)的欧拉特征为零,而圆盘(“填充”圆)的值为 1。

Performance trap: general libraries & helper objects

不过,我们不是来讨论定义或计算欧拉数的。我们将讨论该库计算欧拉数的简单路径为何效率相当低。

首先要做的事情。我们通过使用 Speedscope 查看此配置文件注意到了问题:

Performance trap: general libraries & helper objects

它显示在 Regionprops 上花费了约 32 毫秒(约 15%)。这个视图是左重视图,如果我们进入时间轴视图并放大,我们会得到这个:

Performance trap: general libraries & helper objects

(请注意,我们执行此操作两次,因此此处约为 16 毫秒,其他地方约为 16 毫秒,未显示。)

这立即令人怀疑:使用 find_objects 查找对象的“有趣”部分是第一个条子,0.5 毫秒。它返回一个元组列表,而不是生成器,所以当它完成时就完成了。那么其他的东西又怎么样呢?我们正在构造 RegionProperties 对象。让我们放大其中一张。

Performance trap: general libraries & helper objects

微小的碎片(我们不会放大)是自定义的 __setattr__ 调用:RegionProperties 对象支持别名,例如,如果您设置属性 ConvexArea,它会重定向到标准属性 area_convex。即使我们没有使用它,我们仍然会使用属性转换器。

此外:我们甚至没有使用区域属性中计算的大部分属性。我们只关心欧拉数:

props = regionprops(np.squeeze(label_img.astype('int')), cache=False)
for prop in props:
    if prop.euler_number < 1:
登录后复制

反过来,它仅使用区域属性的最基本方面:find_objects 检测到的图像区域(原始图像的切片)。

因此,我们将代码更改为 fill_holes 代码,以简单地绕过 Regionprops 通用函数。相反,我们调用 find_objects 并将生成的图像子区域传递给 euler_number 函数(而不是 RegionProperties 对象上的方法)。

这是拉取请求:deepcell-imaging#358 跳过 Regionprops 构建

通过跳过中间对象,我们的 fill_holes 操作获得了不错的性能提升:

Image size Before After Speedup
260k pixels 48ms 40ms 8ms (17%)
140M pixels 15.6s 11.7s 3.9s (25%)

对于较大的图像,4s 约占整体运行时间的 3%——不是大部分,但也不算太差。

以上是性能陷阱:通用库和辅助对象的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1671
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1276
29
C# 教程
1256
24
Python与C:学习曲线和易用性 Python与C:学习曲线和易用性 Apr 19, 2025 am 12:20 AM

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

Python和时间:充分利用您的学习时间 Python和时间:充分利用您的学习时间 Apr 14, 2025 am 12:02 AM

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python vs.C:探索性能和效率 Python vs.C:探索性能和效率 Apr 18, 2025 am 12:20 AM

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

学习Python:2小时的每日学习是否足够? 学习Python:2小时的每日学习是否足够? Apr 18, 2025 am 12:22 AM

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Python vs. C:了解关键差异 Python vs. C:了解关键差异 Apr 21, 2025 am 12:18 AM

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

Python标准库的哪一部分是:列表或数组? Python标准库的哪一部分是:列表或数组? Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python:自动化,脚本和任务管理 Python:自动化,脚本和任务管理 Apr 16, 2025 am 12:14 AM

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

科学计算的Python:详细的外观 科学计算的Python:详细的外观 Apr 19, 2025 am 12:15 AM

Python在科学计算中的应用包括数据分析、机器学习、数值模拟和可视化。1.Numpy提供高效的多维数组和数学函数。2.SciPy扩展Numpy功能,提供优化和线性代数工具。3.Pandas用于数据处理和分析。4.Matplotlib用于生成各种图表和可视化结果。

See all articles