0

我最近得到了一个英特尔神经计算棒 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 文件的情况下确定输入和输出缓冲区的精度?
4

0 回答 0