我最近得到了一个英特尔神经计算棒 2 (NCS2),我正在开发一个简单的应用程序,它能够检测输入图像中的一个特定对象。
浏览了一段时间后,我在ncappzoo上找到了一个示例,该示例演示了如何检测人脸、性别和年龄(来源此处)。对于我的应用程序,我专注于人脸检测部分,我的目标是修改此示例以检测另一个对象,为此我已经对网络进行了训练和测试。由于我不能分享我的代码,我将专注于 gender_age 示例。
细节:
我对如何计算gender_age示例中使用的网络的输入缓冲区和输出缓冲区的精度有点困惑。
gender_age 示例使用U8作为输入缓冲区的精度:
auto faceInputData = faceInput->buffer().as<PrecisionTrait<Precision::U8>::value_type*>();
但是,如果您打开人脸检测网络的 *.xml 文件 (face-detection-retail-0004.xml):
<net name="cnn_fd_004_sq_light_ssd" version="10">
<layers>
<layer id="0" name="data" type="Parameter" version="opset1">
<data element_type="f16" shape="1, 3, 300, 300"/>
<output>
<port id="0" names="data" precision="FP16">
<dim>1</dim>
<dim>3</dim>
<dim>300</dim>
<dim>300</dim>
</port>
</output>
</layer>
<layer id="1" name="127" type="Const" version="opset1">
<data element_type="f16" offset="0" shape="1, 3, 1, 1" size="6"/>
...
...
您可以看到输入层的精度设置为FP16。这里我假设第一层是输入层。这是正确的吗?
类似的考虑适用于输出缓冲区。示例代码将精度设置为 FP32(此处):
faceOutputInfo->setPrecision(Precision::FP32);
但 *.xml 定义输出层如下:
...
...
<output>
<port id="3" names="detection_out" precision="FP16">
<dim>1</dim>
<dim>1</dim>
<dim>200</dim>
<dim>7</dim>
</port>
</output>
...
...
其中精度设置为FP16。
我的问题是:
- 我是否正在寻找正确的位置来确定输入和输出缓冲区的精度?
- 如果是,为什么 *.xml 文件中的参数与 gender_age 示例中的参数不匹配?
- 有没有其他方法可以在不深入 *.xml 文件的情况下确定输入和输出缓冲区的精度?