类型表示

类型表示用于描述围绕输入和输出是什么的语义信息。它存储在 TypeProto 消息中。

动机

这种机制的动机可以通过一个简单的例子来说明。在 SqueezeNet 神经网络中,它接受一个 NCHW 图像输入 float[1,3,244,244] 并产生一个输出 float[1,1000,1,1]

input_in_NCHW -> data_0 -> SqueezeNet() -> output_softmaxout_1

为了运行这个模型,用户需要很多信息。在这种情况下,用户需要知道

  • 输入是图像

  • 图像的格式为 NCHW

  • 颜色通道的顺序为 bgr

  • 像素数据是 8 位

  • 像素数据被规范化为 0-255 的值

该提案包括三个关键组件来提供所有这些信息

类型表示定义

首先,我们定义一组语义类型,这些类型定义了模型通常作为输入消耗的内容以及作为输出生成的内容。

具体来说,在我们第一个提案中,我们定义了以下标准表示集

  1. TENSOR 描述了一个类型使用标准 TypeProto 消息保存通用张量。

  2. IMAGE 描述了一个类型保存一个图像。您可以使用维度表示来了解更多关于图像布局的信息,以及可选的模型 metadata_props。

  3. AUDIO 描述了一个类型保存一个音频剪辑。

  4. TEXT 描述了一个类型保存一段文本。

模型作者应该根据需要向模型的输入和输出添加类型表示。

一个具有输入 IMAGE 的例子

让我们使用上面相同的 SqueezeNet 示例,并展示所有内容以正确注释模型

  • 首先为 ValueInfoProto data_0 设置 TypeProto.denotation =IMAGE

  • 因为它是一个图像,模型使用者现在知道去查看模型上的图像元数据

  • 然后在 ModelProto.metadata_props 上包含 3 个元数据字符串

    • Image.BitmapPixelFormat = Bgr8

    • Image.ColorSpaceGamma = SRGB

    • Image.NominalPixelRange = NominalRange_0_255

  • 对于同一个 ValueInfoProto,确保也使用维度表示来表示 NCHW

    • TensorShapeProto.Dimension[0].denotation = DATA_BATCH

    • TensorShapeProto.Dimension[1].denotation = DATA_CHANNEL

    • TensorShapeProto.Dimension[2].denotation = DATA_FEATURE

    • TensorShapeProto.Dimension[3].denotation = DATA_FEATURE

现在模型中包含了足够的信息,可以知道如何将正确的图像传递给模型。