类型标注¶
类型标注用于描述输入和输出的语义信息。它存储在 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 的值 
这个提案包含三个关键组件来提供所有这些信息:
类型标注定义¶
首先,我们定义一组语义类型,用于描述模型通常消耗的输入和产生的输出。
具体来说,在我们的第一个提案中,我们定义了以下一组标准标注:
- TENSOR描述一个类型使用标准的 TypeProto 消息保存一个通用张量。
- IMAGE描述一个类型保存一个图像。您可以使用维度标注来了解更多关于图像布局的信息,也可以使用可选的模型元数据 props。
- AUDIO描述一个类型保存一段音频片段。
- 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,请确保也使用 Dimension Denotations 来标注 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
 
现在模型中就有足够的信息来了解如何将正确的图像输入到模型中。