类型标注¶
类型标注用于描述输入和输出的语义信息。它存储在 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
描述类型保存文本块。
模型作者 SHOULD 根据需要为模型的输入和输出添加类型标注。
输入 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
现在模型中有了足够的信息,可以了解如何将正确的图像传递给模型。