将(融合的)BatchNorm转换为卷积/添加,以便在TensorflowLite上运行MobileNet
我刚刚完成了TensorFlow for Poeters 2:TFLite教程()。在教程结束时,我能够在手机上运行教程中提供的MobileNet 现在,我试图用一个MobileNet替换教程中的MobileNet,我使用Tensorflow存储库中的MobileNet从头开始训练。然而,当尝试使用TOCO时,我遇到了一个分段错误。如果我使用将(融合的)BatchNorm转换为卷积/添加,以便在TensorflowLite上运行MobileNet,tensorflow,tensorflow-lite,Tensorflow,Tensorflow Lite,我刚刚完成了TensorFlow for Poeters 2:TFLite教程()。在教程结束时,我能够在手机上运行教程中提供的MobileNet 现在,我试图用一个MobileNet替换教程中的MobileNet,我使用Tensorflow存储库中的MobileNet从头开始训练。然而,当尝试使用TOCO时,我遇到了一个分段错误。如果我使用optimize\u进行推理,我会收到如下警告 警告:tensorflow:节点MobilenetV1/Conv2d_0/BatchNorm/FusedBa
optimize\u进行推理
,我会收到如下警告
警告:tensorflow:节点MobilenetV1/Conv2d_0/BatchNorm/FusedBatchNorm的平均值形状不正确,找到(0,),预期为(32,)
警告:tensorflow:未找到“MobilenetV1/Conv2D_1_深度/BatchNorm/FusedBatchNorm”的预期Conv2D输入
我比较了教程中的pb文件图和存储库中的pb文件图,发现批处理规范的表示方式有所不同。基本上,教程中提供的模型的批处理规范只有一个卷积,然后是一个加法,而存储库中的模型有一个FusedBatchNorm操作符。我还尝试设置fused=False
,但随后出现以下错误:
/opt/conda/lib/python3.6/site packages/h5py/\uuuuu init\uuuuu
.py:36:FutureWarning:将issubdtype的第二个参数从float
转换为np。不推荐使用floating
。将来,它将被视为np.float64==np.dtype(float.type
from.\u conv导入寄存器\u转换器作为\u寄存器\u转换器
2018-05-09 11:51:38.419786:W tensorflow/contrib/lite/toco/toco_cmdline_flags.cc:178]--不推荐使用输入类型。这是一个模棱两可的标志,它同时设置了--input_data_类型和--inference_input_类型。如果您试图用有关输入数组类型的信息来补充输入文件,请使用--input\u data\u type。如果您试图控制输出文件中实数输入数组的量化/反量化,请使用--inference\u input\u type
2018-05-09 11:51:38.781372:I tensorflow/contrib/lite/toco/import_tensorflow.cc:1057]转换不支持的操作:平方差
2018-05-09 11:51:38.781693:I tensorflow/contrib/lite/toco/import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.781864:I tensorflow/contrib/lite/toco/import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.782019:I tensorflow/contrib/lite/toco/import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.782181:I tensorflow/contrib/lite/toco/import_tensorflow.cc:1057]转换不支持的操作:平方差
2018-05-09 11:51:38.782329:I tensorflow/contrib/lite/toco/import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.782508:I tensorflow/contrib/lite/toco/import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.782663:I tensorflow/contrib/lite/toco/import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.782851:I tensorflow/contrib/lite/toco/import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.783009:I tensorflow/contrib/lite/toco/import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.783211:I tensorflow/contrib/lite/toco/import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.783352:I tensorflow/contrib/lite/toco/import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.783561:I tensorflow/contrib/lite/toco/import_tensorflow.cc:1057]转换不支持的操作:SquaredDifference
2018-05-09 11:51:38.832089:I tensorflow/contrib/lite/toco/graph_transformations/graph_transformations.cc:39]在一般图形转换之前:656个运算符,874个数组(0个量化)
2018-05-09 11:51:39.037810:I tensorflow/contrib/lite/toco/graph_transformations/graph_transformations.cc:39]在常规图形转换之后,通过1:222个运算符,435个数组(0量化)
2018-05-09 11:51:39.041366:I tensorflow/contrib/lite/toco/graph_transformations/graph_transformations.cc:39]去量化图形变换前:222个运算符,435个数组(0个量化)
2018-05-09 11:51:39.044092:I tensorflow/contrib/lite/toco/allocate掼u transient掼u arrays.cc:313]临时数组分配的总大小:4333824字节,理论最佳值:4333696字节
2018-05-09 11:51:39.045179:F tensorflow/contrib/lite/toco/tflite/export.cc:303]标准tensorflow lite运行时不支持模型中的某些运算符。如果您有一个自定义实现,您可以使用--allow_custom_ops禁用此错误。下面是需要自定义实现的运算符列表:Mean、RSQRT、SquaredDifference和squared
中止(堆芯转储)
我假设可以使用TOCO或其他脚本将FusedBatchNorm
运算符转换为卷积/加法组合。这是真的吗?如果是,我在哪里可以找到转换脚本
教程中MobileNet的批处理规范表示:
存储库中MobileNet的批处理规范表示:
TOCO应自动折叠批次标准,无论其是否熔合。这是整个流程: