类型表示¶
类型表示用于描述有关输入和输出的语义信息。它存储在 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描述了一个类型保存图像。您可以使用维度表示来了解有关图像布局的更多信息,以及可选的模型 metadata_props。AUDIO描述了一个类型保存音频片段。TEXT描述了一个类型保存一个文本块。
模型作者应酌情为模型的输入和输出添加类型表示。
输入 IMAGE 的示例¶
让我们使用上面相同的 SqueezeNet 示例并展示所有内容以正确标注模型
首先将 ValueInfoProto
data_0的 TypeProto.denotation =IMAGE因为它是图像,模型消费者现在知道去模型上查找图像元数据
然后在 ModelProto.metadata_props 上包含 3 个元数据字符串
Image.BitmapPixelFormat=Bgr8Image.ColorSpaceGamma=SRGBImage.NominalPixelRange=NominalRange_0_255
对于相同的 ValueInfoProto,请确保也使用维度表示来表示 NCHW
TensorShapeProto.Dimension[0].denotation =
DATA_BATCHTensorShapeProto.Dimension[1].denotation =
DATA_CHANNELTensorShapeProto.Dimension[2].denotation =
DATA_FEATURETensorShapeProto.Dimension[3].denotation =
DATA_FEATURE
现在模型中有了足够的信息,可以了解如何将正确的图像传递到模型中。