类型表示法

类型表示法用于描述输入和输出的语义信息。它存储在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 描述了一种类型,该类型持有图像。您可以使用维度表示法来了解更多关于图像布局的信息,以及可选的模型元数据属性。

  3. AUDIO 描述了一种类型,该类型包含一个音频剪辑。

  4. TEXT 描述了一种类型,该类型包含一段文本。

模型作者应适当地为模型的输入和输出添加类型标注。

一个带有输入图像的示例

让我们使用上面的相同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

现在模型中有足够的信息来了解如何将正确的图像传递到模型中。