类型表示法¶
类型表示法用于描述输入和输出的语义信息。它存储在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描述了一种类型,该类型持有图像。您可以使用维度表示法来了解更多关于图像布局的信息,以及可选的模型元数据属性。AUDIO描述了一种类型,该类型包含一个音频剪辑。TEXT描述了一种类型,该类型包含一段文本。
模型作者应适当地为模型的输入和输出添加类型标注。
一个带有输入图像的示例¶
让我们使用上面的相同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
现在模型中有足够的信息来了解如何将正确的图像传递到模型中。