yolox 转换 openvino

yolox 转换 openvino

yolox 0.1.0

原始图片预处理

mean = (0.485, 0.456, 0.406)
std = (0.229, 0.224, 0.225)
image, ratio = preprocess(origin_img, (h, w), mean, std)
def preprocess(image, input_size, mean, std, swap=(2, 0, 1)):
    ...
    ...
    image = image[:, :, ::-1]
    image /= 255.0
    if mean is not None:
        image -= mean
    if std is not None:
        image /= std
    image = image.transpose(swap)
    image = np.ascontiguousarray(image, dtype=np.float32)
    return image, r

原始流程

Created with Raphaël 2.3.0 image padding&resize BGR->RBG image /= 255 image -= (0.485, 0.456, 0.406) image /= (0.229, 0.224, 0.225) image

Openvino 流程

Created with Raphaël 2.3.0 image Reverse input channels image -= (0.485, 0.456, 0.406)*255 image /= (0.229, 0.224, 0.225)*255 image

When to Specify Mean and Scale Values

通常神经网络模型是用归一化的输入数据训练的。这意味着输入数据值被转换为特定范围内,例如,[0, 1] 或 [-1, 1]。有时,作为预处理的一部分,从输入数据值中减去平均值(平均图像)。输入数据预处理的实现方式有两种。

  • 输入预处理操作是拓扑的一部分。在这种情况下,使用框架推断拓扑的应用程序不会预处理输入。

  • 输入预处理操作不是拓扑的一部分,预处理是在为模型提供输入数据的应用程序中执行的。

在第一种情况下,模型优化器生成具有所需预处理层的 IR,推理引擎样本可用于推断模型。

在第二种情况下,应向模型优化器提供有关均值/尺度值的信息,以将其嵌入到生成的 IR 中。

模型优化器提供了许多命令行参数来指定它们:--scale--scale_values--mean_values、--mean_file

如果同时指定了均值和比例值,则先减去均值,然后应用比例。输入值除以比例值。

没有确定特定模型的均值/尺度值的通用方法。 以下步骤可以帮助确定它们:

  • 阅读模型文档。 如果需要预处理,文档通常会描述均值/比例值。

  • 打开执行模型的示例脚本/应用程序并跟踪如何读取输入数据并将其传递给框架。

  • 在可视化工具中打开模型并检查对输入数据执行减法或乘法(如 Sub、Mul、ScaleShift、Eltwise 等)的层。 如果存在这样的层,预处理可能是模型的一部分。


When to Specify Input Shapes

在某些情况下,模型的输入数据形状不固定,例如全卷积神经网络。

在这种情况下,TensorFlow* 模型在占位符操作的形状属性中包含 -1 值。 推理引擎不支持未定义大小的输入层,因此如果模型中未定义输入形状,模型优化器将无法转换模型。

解决方案是使用 --input--input_shape 命令行参数为模型的所有输入提供输入形状,或者如果模型仅包含一个,则使用 -b 命令行参数提供批量大小 仅具有未定义批次大小的输入。 在后一种情况下,TensorFlow* 模型的占位符形状如下所示 [-1, 224, 224, 3]


When to Reverse Input Channels

应用程序的输入数据可以是 RGBBRG 颜色输入顺序。

例如,openvinoBGR 通道顺序加载输入图像。 但是,模型可能会在以相反顺序加载的图像上进行训练(例如,大多数 TensorFlow* 模型都使用 RGB 顺序的图像进行训练)。 在这种情况下,使用推理引擎示例的推理结果可能不正确。 解决方案是提供 --reverse_input_channels 命令行参数。 使用此参数,模型优化器执行第一次卷积或其他依赖于通道的操作权重修改,使这些操作的输出和图像传递的 RGB 通道顺序一样。


When to Specify --static_shape Command Line Parameter

如果指定了 --static_shape 命令行参数,模型优化器将评估模型中所有操作的形状(形状传播),以获得固定的输入形状。在形状传播过程中,模型优化器评估操作的形状并将它们从计算图中移除。有了这种方法,可以将不同形状的输入的初始模型转换为只用一个固定形状的输入的 IR文件。例如,考虑当一些blob4D的形状[N, C, H, W]被重塑为形状[N, C, H * W]的情况。在模型转换过程中,模型优化将输出形状计算为具有[N, C, H * W]值的恒定1D blob。因此,如果输入形状改变为其他值[ n,c,H1,W1](这对一个完全卷积模型来说是可能的情况),那么重塑层将变得无效。由此产生的中间表征在推理引擎的帮助下将无法调整大小。

转换

mo.py --input_model yolox_nano_320x320-sim.onnx --data_type FP16 --reverse_input_channels --scale_values "[58.395, 57.12 , 57.375]" --mean_values "[123.675, 116.28 , 103.53]" 
$MYRIAD_COMPILE -m yolox_nano_320x320-sim.xml -ip U8 -VPU_NUMBER_OF_SHAVES 6 -VPU_NUMBER_OF_CMX_SLICES 6 -o yolox_nano_320x320-sim_openvino_2021.4_6shave.blob

yolox 0.1.1pre & 0.2.0

转换

mo.py --input_model yolox_nano_320x320-sim.onnx --data_type FP16 --reverse_input_channels
$MYRIAD_COMPILE -m yolox_nano_320x320-sim.xml -ip U8 -VPU_NUMBER_OF_SHAVES 6 -VPU_NUMBER_OF_CMX_SLICES 6 -o yolox_nano_320x320-sim_openvino_2021.4_6shave.blob

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DMLong_x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值