博客

  • 📊 ScreenAI:重塑用户界面与信息图的理解

    在当今数字时代,用户界面(UIs)和信息图(infographics)在促进人类交流和人机交互中扮演着至关重要的角色。它们不仅通过布局和视觉线索将复杂数据和思想简化为易于理解的图示,还在推动用户体验的丰富性与互动性方面发挥了重要作用。为了解决这些视觉语言和设计原则的复杂性,我们提出了ScreenAI——一种专门针对用户界面和信息图理解的视觉语言模型(VLM)。

    🌐 视觉语言模型的诞生

    ScreenAI的基础架构借鉴了PaLI架构,并结合了Pix2Struct的灵活拼接策略,旨在处理各种格式的图像。这种模型通过将视觉任务重新构建为(文本,图像)到文本的问题,从而实现了对复杂视觉内容的深刻理解。我们在多种数据集上进行了训练,特别是创新性的屏幕注释任务,要求模型识别用户界面元素的类型和位置。这种训练使得ScreenAI不仅能够生成大规模的问题回答(QA)和用户界面导航数据集,还能进行信息摘要。

    模型架构

    ScreenAI的整体架构如图1所示,模型包含一个图像编码器(ViT)和一个多模态编码器,后者处理嵌入的文本和图像特征。该架构的设计允许我们使用相同的模型来解决各种视觉和多模态任务。此外,我们的拼接策略允许处理不同形状和比例的图像,确保模型能够适应各种屏幕格式。

    📈 训练与创新

    数据生成与自我监督

    在训练过程中,我们面临着手动标注庞大数据集的挑战。为了实现高效的数据生成,我们采用了一种自动化的方法,利用小型模型生成和标注数据。这一方法不仅提高了效率,还确保了数据的多样性和复杂性。我们通过抓取各种设备的屏幕截图,并使用基于DETR的布局注释器进行详细标注,从而构建了一个全面的理解框架。

    注释过程

    我们收集了来自桌面、移动设备和平板的屏幕截图,并为每个用户界面元素提供了详细的标签,描述其空间关系及其他信息。图2展示了我们的任务生成流程,其中包括对图标的分类、文本的OCR识别和图像的描述。

    预训练与微调

    ScreenAI经过多个阶段的训练:预训练时,我们利用自我监督学习生成大规模数据集,而在微调阶段,则结合人类标注的数据,针对各种任务进行优化。为了增强模型的能力,我们特别关注问题回答任务,识别出在算数、计数和复杂信息图理解等方面的性能差距,并进行了针对性的训练。

    📊 实验与结果

    在对ScreenAI的性能进行评估时,我们将其与多种现有的最先进模型(SoTA)进行了比较。结果显示,ScreenAI在多个公共基准上均取得了优异表现,包括Multipage DocVQA、WebSRC和MoTIF等任务。特别是在信息图QA任务中,ScreenAI的表现超过了其他同类模型,展现出强大的竞争力。

    模型规模的影响

    我们发现,随着模型参数的增加,性能也随之提升。尤其在需要复杂视觉文本和算数推理的任务中,如InfoVQA和Complex ScreenQA,5B模型的表现明显优于较小的670M和2B模型,表明模型的规模对于处理复杂任务至关重要。

    🔍 未来的探索与挑战

    尽管ScreenAI在多个任务中表现优异,但我们仍然意识到在某些任务上与更大规模模型(如GPT-4、Gemini)之间存在性能差距。这提示我们需要继续深入研究,以进一步提升模型的能力。为此,我们将发布包含统一表示的新数据集,以及用于屏幕相关任务的其他基准数据集,以促进研究的深入。

    📝 结论

    ScreenAI的推出标志着数字内容理解领域的一次重大进步。通过整合用户界面和信息图的理解,我们为未来的研究提供了新的方向和工具。随着数字世界的不断发展,ScreenAI将作为理解复杂视觉信息的有力工具,推动人机交互的未来。

    参考文献

    1. Baechler, G., Sunkara, S., Wang, M., et al. (2024). ScreenAI: A Vision-Language Model for UI and Infographics Understanding. IJCAI.
    2. Chen, J., et al. (2023). PaLI: A Unified Vision-Language Model.
    3. Lee, Y., et al. (2023). Pix2Struct: Flexible Visual Input for Transformers.
    4. Mathew, G., et al. (2021). DocVQA: A Dataset for Document Visual Question Answering.
    5. Zang, H., et al. (2021). Detecting UI Elements in Screenshots.

  • Go 1.23 版本概述

    Go 1.23 是 Go 团队发布的最新版本,带来了许多语言、工具链及标准库方面的重要改进与新特性。本教程将详细介绍这些更新,并提供相关的示例代码和速记技巧,帮助你快速掌握这些新功能。


    1. 语言变化:for-range 循环支持迭代器函数

    在 Go 1.23 中,for-range 循环现在可以使用迭代器函数。例如,func(func(K) bool) 这样的迭代器函数可以用来遍历用户定义的任意序列。这一功能使得 Go 语言在处理复杂数据结构时更加灵活高效。

    速记句Go 1.23 中,for-range 循环支持使用迭代器函数。


    2. 新增标准库包:iter、structs 和 unique

    Go 1.23 引入了三个新的标准库包:iterstructsunique

    • iter 提供了与迭代器相关的功能。
    • structs 定义了用于修改结构体属性的标记类型。
    • unique 提供了值的规范化(interning)功能。

    这些新包扩展了标准库的能力,帮助开发者更加方便地编写和管理代码。

    速记句Go 1.23 引入了三个新包:iterstructsunique


    3. 工具链改进:Go Telemetry

    Go 1.23 引入了 Go Telemetry,这是一种可选的系统,用于收集工具链的使用和故障统计数据。通过选择参与,开发者可以帮助 Go 团队更好地理解 Go 的使用情况,并改进工具链的稳定性。

    速记句Go 1.23 引入 Go Telemetry,帮助改进工具链。


    4. go 命令的增强功能

    go 命令在 Go 1.23 中得到了增强。例如,go env -changed 可以查看与默认值不同的设置,而 go mod tidy -diff 则可以在不修改 go.modgo.sum 文件的情况下,查看所需的更改。

    速记句Go 1.23 的 go 命令更强大,支持查看环境和模块差异。


    5. go vet 的新功能

    go vet 子命令现在可以报告那些对于指定的 Go 版本来说过于新颖的符号。这有助于确保代码的兼容性,并避免在不兼容的 Go 版本中使用过时或不支持的特性。

    速记句Go 1.23 的 go vet 子命令可以检测版本不兼容的符号。


    6. 标准库的改进:time.Timer 和 time.Ticker

    Go 1.23 中改进了 time.Timertime.Ticker 的实现,这使得它们的性能和可靠性得到了进一步提升。这些改进有助于更精确地处理定时任务和周期性操作。

    速记句Go 1.23 优化了 time.Timertime.Ticker 的性能。


    7. GODEBUG 设置的改进

    Go 1.23 支持在 go.modgo.work 文件中使用新的 godebug 指令,以单独控制默认的 GODEBUG 设置和 go 指令。这一改进为开发者在调试和控制代码行为方面提供了更多的灵活性。

    速记句Go 1.23 支持在 go.mod 中使用新的 godebug 指令。


    8. 新增 OpenBSD/riscv64 支持及其他端口改进

    Go 1.23 添加了对 64 位 RISC-V 架构 OpenBSD 的实验性支持。此外,Go 1.23 还对 Linux、macOS、ARM64、RISC-V 和 WASI 等平台进行了多项小改动,进一步提高了跨平台的兼容性和性能。

    速记句Go 1.23 增加了对 OpenBSD/riscv64 的支持。


    9. 性能改进:PGO 的构建时间缩短

    Go 1.23 在使用配置文件引导的优化 (Profile-Guided Optimization, PGO) 时缩短了构建时间,并在 386 和 amd64 架构上提升了性能。这意味着在这些架构上,使用 PGO 进行编译的 Go 程序将更加高效。

    速记句Go 1.23 优化了 PGO,缩短了构建时间并提升了性能。


    10. 其他小改动

    除了上述改进,Go 1.23 还引入了许多标准库的小改动,并增强了对已有功能的支持。开发者可以通过阅读官方发布的完整发布说明来了解这些细节。

    速记句Go 1.23 包含了许多标准库的小改进。


    总结

    Go 1.23 是一个重要的版本,它不仅引入了新的语言特性,还在工具链、标准库和平台支持等方面进行了多项改进。这些更新不仅提高了 Go 语言的性能和易用性,还为开发者提供了更多的工具和功能来编写高效、可靠的代码。我们建议所有 Go 开发者尽快迁移到 Go 1.23,以充分利用这些新特性。

    参考文献:

    1. Go 1.23 发布公告
    2. Go 1.23 发布说明

    希望这个教程能够帮助你更好地理解和应用 Go 1.23 的新功能!

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网
Page Stats: PV: 1 | UV: 1
Last updated: 2025-05-13 22:09:10
沪ICP备2024052574号-1