【问题标题】:convert Float32 array to image in coreml在coreml中将Float32数组转换为图像
【发布时间】:2021-07-22 17:46:02
【问题描述】:

我将 deelplab v3 模型从 Pytorch 转换为 coreml,并将输出视为 MultiArray,因此我需要将输出转换为图像。我一直在使用许多不同的建议(例如来自 coreml 生存指南),但仍然没有成功。你们有人能帮我吗?非常感谢。

仅供参考,这是 Python 的模型规范:

    spec desc is 
     input {
      name: "input.1"
      type {
           imageType {
            width: 513
            height: 513
           colorSpace: RGB
           }
          }
    }
    output {
     name: "1436"
     type {
          multiArrayType {
          dataType: FLOAT32
          }
     }
    }

在Xcode中,我在Xcode中打印的输出是“Float32 1 × 14 × 513 × 513 array”,我假设1是通道数,14是标签数,513 x 514是Width x 高度。如何将此数组转换为 Int32 513 × 513 矩阵或图像?

感谢您的帮助!

已编辑:我在下面添加了我的模型输出结构与 Apple 的 DeeplabV3(通过 Netron 可视化)进行比较,供您参考。任何指导表示赞赏! 1/My model output's architecture

2/Apple's DeeplabV3

【问题讨论】:

    标签: pytorch type-conversion coreml


    【解决方案1】:

    图像只有 1、3 或 4 个通道(灰度、RGB 或 RGBA)。您有 14 个通道,因此您需要决定这 14 个通道如何映射到颜色。

    这里是一些演示代码,展示了一种可能的方法(也使用 DeepLab v3):https://github.com/hollance/SemanticSegmentationMetalDemo

    【讨论】:

    • 感谢您的建议。 14 是该模型中标签(类别)的数量,其目的是去除背景。我不确定频道的数量。我假设它是 1(“Float32 1 × 14 × 513 × 513 数组”中的第一个数字。在 Apple 的 DeeplabV3 中,当我在 Xcode 中打印出来时,它的输出已经是 Int32 513 × 513 矩阵,所以我可以应用 Hollemans 的 CoreML Helpers转换为图像。但是,在我的模型中,输出是“Float32 1 × 14 × 513 × 513 array”,我不知道如何将其转换为 Int32 513 × 513 矩阵(类似于 Apple 的 DeeplabV3)。你有什么建议吗?谢谢
    猜你喜欢
    • 2019-05-21
    • 2016-01-26
    • 2019-12-11
    • 1970-01-01
    • 2017-07-21
    • 2023-03-11
    • 1970-01-01
    • 2013-02-04
    • 2020-09-12
    相关资源
    最近更新 更多