NPU 应用场景

QuecPi Alpha 单板电脑中,NPU 资源应用场景包括:图像分类、目标检测、联合分隔等。下面以图像分类中的 ResNeXt50 机器学习模型为例,可以对 Imagenet 数据集中的图像进行分类。它还可以作为构建更复杂模型的主干,用于特定用例。

下载量化模型

部署模型

1.将模型和标签文件部署到 QuecPi Alpha 中,通过 adb 或者 scp 把这两个部署到 /opt 目录下。
2.模型特性

  • 模型检查点:Imagenet
  • 输入分辨率:224x224
  • 参数数量:88.7M
  • 模型大小:87.3 MB

连接显示器

  • 准备显示器,并连接显示器到 QuecPi Alpha 上。

运行命令

  • 在设备终端运行以下命令以确保结果显示在连接的显示器上:
export XDG_RUNTIME_DIR=/dev/socket/weston && export WAYLAND_DISPLAY=wayland-1
  • 在设备中运行以下命令:
gst-launch-1.0 -e --gst-debug=2 filesrc location=/opt/video11.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=5 output-io-mode=5 ! queue ! tee name=split split. ! queue ! qtivcomposer name=mixer sink_1::position="<30, 30>" sink_1::dimensions="<640, 360>" ! queue ! waylandsink sync=true fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimltflite delegate=external external-delegate-path=libQnnTFLiteDelegate.so external-delegate-options="QNNExternalDelegate,backend_type=htp;" model=/opt/resnext50_quantized.tflite ! queue ! qtimlvclassification threshold=35.0 results=5 module=mobilenet labels=/opt/imagenet_labels.txt extra-operation=softmax constants="Resnetnet,q-offsets=<30.0>,q-scales=<0.06314703077077866>;" ! video/x-raw,format=BGRA,width=256,height=144 ! queue ! mixer.

命令说明:

  • gst-launch-1.0 这是 GStreamer 的命令行工具,用于启动一个 GStreamer 管道(pipeline)。-e 参数表示在管道结束时退出,而不是继续运行。
  • --gst-debug=2:设置调试级别为 2,显示调试信息
  • filesrc location=/opt/video.mp4:指定输入视频文件路径。
  • !:是一个连接符号,用于将前一个元素的输出连接到后一个元素的输入。
  • qtdemux:将输入视频文件解析为多个流。
  • queue:用于缓冲输入数据。
  • h264parse:将输入数据解析为 H.264 格式。
  • v4l2h264dec:将 H.264 格式的数据解码为 YUV 格式。
  • capture-io-mode=5: 指定解码器 输入端口(Capture Side) 的内存访问模式。
  • output-io-mode=5: 指定解码器 输出端口(Output Side) 的内存访问模式。
  • tee name=split:将输入数据分割为两个分支。
  • split.:第一个分支用于显示原始视频流。
  • qtivcomposer:用于组合多个视频流。
  • waylandsink:将组合后的视频流显示在屏幕上。
  • split.:第二个分支用于进行图像分类。
  • qtimlvconverter:用于将输入数据转换为模型输入格式。
  • qtimltflite:用于执行模型推理。
  • delegate=external:使用 外部加速库(即非 TFLite 默认的 CPU 后端)来运行模型推理,通常用于调用硬件加速器。
  • external-delegate-path=libQnnTFLiteDelegate.so:指定 TensorFlow Lite 的 外部加速库(Delegate) 的路径。
  • external-delegate-options="QNNExternalDelegate,backend_type=htp;":指定外部加速库的选项,这里指定了后端类型为 HTP(High-Throughput Processing)。
  • model=/opt/resnext50_quantized.tflite:指定模型路径。
  • qtimlvclassification:用于对模型输出进行分类。
  • video/x-raw,format=BGRA,width=256,height=144:指定输出视频格式和尺寸。
  • mixer:将两个分支的输出组合在一起。
  • threshold=35.0:设置置信度阈值,用于过滤低置信度的分类结果。
  • results=5:设置返回的分类结果数量。
  • module=mobilenet:指定使用的模型名称。
  • labels=/opt/imagenet_labels.txt:指定标签文件路径。
  • extra-operation=softmax:对模型输出进行Softmax操作,得到每个类别的概率。
  • constants="Resnetnet,q-offsets=<30.0>,q-scales=<0.06314703077077866>;":指定模型量化参数。
  • gst-launch-1.0 -e --gst-debug=2:设置调试级别为 2,显示调试信息。
  • video/x-raw,format=BGRA,width=256,height=144: 输出视频格式和尺寸
  • Resnetnet,q-offsets=<30.0>,q-scales=<0.06314703077077866>: 模型量化参数。

运行命令后,显示器会显示视频流和图像分类结果。