骁龙神经处理引擎SDK参考指南(13)

281 篇文章 26 订阅

5 输入数据和预处理

5.1 输入图像格式

输入图像

除了转换模型之外,SNPE 还要求输入图像采用可能与源框架不同的特定格式。

在 Caffe 中,图像呈现为形状的张量(batch x channel x height x width),其中宽度是变化最快的维度,其次是高度,然后是颜色通道。这意味着第一个颜色通道的所有像素值在内存中都是连续的,然后是下一个颜色通道的所有像素值,依此类推。convert_imagesetCaffe在训练过程中在工具中准备这种格式的图像。

在 SNPE 中,图像必须表示为形状为 的张量(batch x height x width x channel),其中通道是变化最快的维度。这意味着单个像素的所有颜色通道的值在内存中是连续的,然后是下一个像素的所有颜色值,依此类推。

如果批次维度大于 1,则必须为每个批次手动将单个图像连接在一起成为一个文件。

请参见下图,了解两种输入图像内存布局的可视化表示。

笔记:

推理期间使用的通道顺序必须与训练期间使用的通道顺序相同。例如,在 Caffe 中训练的 Imagenet 模型需要 BGR 的通道顺序。

Imagenet 模型的输入图像

Caffe中的Imagenet模型(如bvlc_alexnet、bvlc_googlenet等)是用BGR图像(蓝色像素先于绿色像素先于红色像素)训练的。推理引擎必须以相同的通道顺序提供像素值。

下图显示了 Caffe 和 SNPE 对 bvlc_alexnet 模型所需的两种不同的输入图像内存布局。输入图像大小为 227x227。

请添加图片描述
MNIST 模型的输入图像

Caffe 中的 MNIST 模型(例如 lenet)需要大小为 28x28 的单通道灰度图像。请注意,虽然只有一个通道,但在 Caffe(1x1x28x28)和 SNPE中仍然需要一个 4 维的输入张量(1x28x28x1)。

输出

该示例的输出在 Caffe 和 SNPE 之间保持相同:一个一维张量,其中包含批次中每个图像的每个类别的概率。

对于 Imagenet 模型(例如 bvlc_alexnet),这是 1000 个 Imagenet 类的大小为 1000 的张量。

如果模型的批量维度大于 1,则各个输出张量将沿着批量维度连接在一起。

6 教程和示例

6.1 教程设置

教程资源
这些教程需要额外的资源,这些资源不包含在默认的 SNPE SDK 包中。在运行教程之前需要下载这些资产。

获取 AlexNet
在本教程中,为 Caffe 教程准备了 AlexNet Caffe 模型文件(prototxt 和 caffemodel)和示例图像文件。该脚本需要 AlexNet 资产的目录路径。该脚本还可以选择下载 AlexNet 资产。请注意,该脚本将批处理数更改为 1,并将修改后的模型保存为 $SNPE_ROOT/models/alexnet/caffe 中的 deploy_batch_1.prototxt。

deploy.prototxt - https://raw.githubusercontent.com/BVLC/caffe/master/models/bvlc_alexnet/deploy.prototxt 
bvlc_alexnet.caffemodel - http://dl.caffe.berkeleyvision.org/bvlc_alexnet.caffemodel 
caffe_ilsvrc12.tar。 gz - http://dl.caffe.berkeleyvision.org/caffe_ilsvrc12.tar.gz

请注意,资产很大,下载可能需要一些时间。

运行“python3 $SNPE_ROOT/models/alexnet/scripts/setup_alexnet.py -h”将显示使用说明。

用法:$SNPE_ROOT/models/alexnet/scripts/setup_alexnet.py [-h] -a ASSETS_DIR [-d]

为教程示例准备 AlexNet 资产。

必需参数:
  -a ASSETS_DIR, --assets_dir
                        包含 AlexNet 资产的 ASSETS_DIR 目录

可选参数:
  -d, --download 下载 AlexNet 资产到 AlexNet 资产目录

下载模型并准备资产资产
目录包含网络模型资产。如果先前已下载资产,请将 ASSETS_DIR 设置为此目录,否则选择一个目标目录来存储下载的资产。如果资产已经下载到目录(例如 ~/tmpdir),则发出以下命令。

  • python3 $SNPE_ROOT/models/alexnet/scripts/setup_alexnet.py -a ~/tmpdir

发出此命令首先下载资产。下载的文件将写入指定的资产目录(例如 ~/tmpdir)

  • python3 $SNPE_ROOT/models/alexnet/scripts/setup_alexnet.py -a ~/tmpdir -d

脚本完成后,准​​备好的 AlexNet 资产将连同示例原始图像和转换后的 SNPE DLC 文件一起复制到$SNPE_ROOT/models/alexnet 目录。

获取 Inception v3
在本教程中,为 TensorFlow 分类教程准备了 Inception v3 TensorFlow 模型文件和示例图像文件。该脚本需要 Inception v3 资产(zip 文件)的目录路径。该脚本还可以选择下载 Inception v3 存档。

下面列出了 Inception v3 资产:

inception_v3_2016_08_28_frozen.pb.tar.gz - https://storage.googleapis.com/download.tensorflow.org/models/inception_v3_2016_08_28_frozen.pb.tar.gz

请注意,资产很大,下载可能需要一些时间。

运行“python3 $SNPE_ROOT/models/inception_v3/scripts/setup_inceptionv3.py -h”将显示使用说明。

用法:$SNPE_ROOT/models/inception_v3/scripts/setup_inceptionv3.py [-h] -a ASSETS_DIR [-d] [-r RUNTIME] [-u] [-l [HTP_SOC]] 为教程示例准备 inception_v3 资产

。

必需参数:
  -a ASSETS_DIR,--assets_dir
                        包含 inception_v3 资产的 ASSETS_DIR 目录

可选参数:
  -d,--download 下载 inception_v3 资产到 inception_v3 示例
                        目录
  -r RUNTIME,--runtime RUNTIME
                        选择一个运行时来设置教程。选择:cpu、
                        gpu、dsp、aip、全部。'all' 选项仅受
                        --udo 标志支持
  -u, --udo 生成并编译用户定义的操作包
                        以与 inception_v3 一起使用。Softmax 被模拟
                        为该脚本的 UDO。
  -l [HTP_SOC], --htp_soc [HTP_SOC]
                        指定用于生成 HTP 离线缓存的 SOC 目标。
                        例如:"--htp_soc sm8450" for waipio, default 
                        value is sm8550

下载模型并准备
资产资产目录旨在包含网络模型资产。如果先前已下载资产,请将 ASSETS_DIR 设置为此目录,否则选择一个目标目录来存储下载的资产,以及选项 [–download] 以实际下载模型文件。

目标运行时的选择
根据所选的运行时,脚本可能会执行特定于硬件目标的额外优化步骤。用户可以选择生成最终的 DLC,以在运行时在 CPU、GPU、DSP 或 HTA 目标之一上运行。
参数 ‘runtime’ 是可选的,在未明确指定时默认为 ‘cpu’。
以下是在不同情况下使用的一些示例命令:
让我们使用 ~/tmpdir 作为这些示例的资产目录。

  1. 运行脚本下载模型并设置为在 CPU 上运行:
  • python $SNPE_ROOT/models/inception_v3/scripts/setup_inceptionv3.py -a ~/tmpdir -d
  1. 运行脚本下载模型并设置为在 DSP 上运行:
  • python $SNPE_ROOT/models/inception_v3/scripts/setup_inceptionv3.py -a ~/tmpdir -d -r dsp
  1. 在已下载到 ~/tmpdir 的模型上运行脚本以设置为在 HTA 上运行:
  • python $SNPE_ROOT/models/inception_v3/scripts/setup_inceptionv3.py -a ~/tmpdir -r aip

SoC 目标的选择
基于 SoC 目标,当目标运行时为“dsp”或“all”时,脚本将向 snpe-dlc-quantize 添加 enable_htp 和 htp_socs 参数。
参数 ‘htp_soc’ 是可选的,如果没有给出值,则 ‘sm8550’ 被视为 htp_soc 参数的默认值。
以下是运行 setup_inceptionv3.py 的一些示例命令:

运行脚本以下载模型并设置为在 dsp 上运行

  1. SoC 目标为 sm8550:
  • python $SNPE_ROOT/models/inception_v3/scripts/setup_inceptionv3.py -a ~/tmpdir -d -r dsp -l
  1. SoC目标为sm8450:
  • python $SNPE_ROOT/models/inception_v3/scripts/setup_inceptionv3.py -a ~/tmpdir -d -r dsp -l sm8450

脚本完成后,准​​备好的 Inception v3 资产被复制到 $SNPE_ROOT/models/inception_v3 目录,连同示例原始图像和转换后的 SNPE DLC 文件(如果适用)进行额外优化。

注意:有关使用 UDO 运行 Inception v3 和使用 --udo 的信息,请访问UDO 教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值