Zongjun:
是 tf.nightly 的话,问题就不是出在版本上了。那应该是你模型的问题了,你这个模型长啥样,方便放上来吗,我可以看看为啥 square 不给融合。或者你可以把你的问题发到 GitHub issue 上去问问看。(如果你的 model 去掉了 square 还工作的话,那干脆把 square 去掉算了。)
mean 和 std 那里就等你的回复啦,多谢!
2018-12-18 01:50
九幽: 回复 Zongjun:
大神,这里三个人我都问过问题,回复了东西,但除了你都没人回我,他们也只跟你说话,看来,其他人都是只关注对自己有用的啊,我在别的地方问也是这种情况,,难道是我问问题的方式不对,内容不对?要么就是我太小白了,跟我说也没意义,,,大神,再次深刻地感受到你这种人太少了,,希望我以后也可以成为大神,变成你这样乐于助人的人~我把之前做的写了个博客发出去了,但是感觉写的好像还不够细致,应该是不够深刻吧,你要有时间可以看看我写的有没有啥错误,不过不知道为什么在百度查不到,只有链接能查到:Tensorflow量化步骤及生成量化的tflite(2)_tensorflow 量化训练代码-CSDN博客 ,看不看都行,我会继续努力的,谢啦~,,,,(不过 keras 的我还没写出来,,,)
2018-12-18 11:12
九幽: 回复 Zongjun:
对啦,看你们在说–std_value=127.5 --mean_value=127.5 这两个东西,我看 Quantization-aware training 的 git 上 toco 这部分的指令给出了那两个,但我之前转化的时候没用,这个是必须的嘛?我看百度上说是标准差和均值,这个是处理输入数据的吗?
2018-12-18 12:41
快到碗里来: 回复 九幽:
哈哈哈,之前有看你的提问,不是不想回复你,是觉得自己也不是很了解所以不敢误导你,所以等大神回复你,至于你说的–std_value=127.5 --mean_value=127.5,伪量化才不需要,如果完全量化的话,我都会报需要这两个参数的错误,所以不知道为什么你可以成功不使用这两个参数,还有,我发现你引用我的博客,哈哈哈,https://blog.csdn.net/qq_16564093/article/details/78996563.有缘有缘
2018-12-18 14:57
九幽: 回复 快到碗里来:
噗…我没想着你能回答我问题的事,毕竟这个东西可能知道也可能不知道…我之前就在跟你说博客的事,,写了一堆发现你的过程,,然后你回复了大神,没回我,然后我才又说没人理我的,,,然后我就把那条回复你的删了,,,
2018-12-18 17:48
九幽: 回复 快到碗里来:
我的 mnist 量化训练,然后再 freeze 之后生成 pb,把这个转化成 tflite 的指令是这样写的:
bazel-bin/tensorflow/contrib/lite/toco/toco -- input_file=/home/angela/tensorflow/tensorflow/Mnist_train/mnist_frozen_graph.pb --output_file=/home/angela/tensorflow/tensorflow/Mnist_train/mnist_frozen_graph.tflite --input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE --inference_type=QUANTIZED_UINT8 --input_shapes=1,28,28,1 --input_arrays=input --output_arrays=output --allow_custom_ops
然后什么报错都没有,用 netron 看图也都和 speech 那个例子跑出来的一样,,就像我博客里贴的图片那样,但是以前的 pb 和 tflite 图里面都有 input,就比如 speech.tflite 的倒数第二层 (除了 Reshape_1 和 labels_softmax 层其他的都有 input),是 softmax input,两个长方块连在一起的,但今天又弄了一下上面的指令,结果图里就没有 input 了,不知道这个是什么情况,,
2018-12-18 17:58
九幽: 回复 快到碗里来:
刚看了一下,speech 那个例子也是上面那个指令,但是运行出来前面有点不一样的东西,写的是: Converting unsupported operation: DecodeWav,Converting unsupported operation: AudioSpectrogram, Converting unsupported operation: Mfcc 后面都是正常的。
然后感觉应该是指令的问题吧,因为我试着加了另外的指令:–inference_input_type=QUANTIZED_UINT8 --input_type=QUANTIZED_UINT8
然后就会报 std 和 mean 的问题,不过如果你指令对的话,我就不知道什么问题了
2018-12-18 18:04
九幽: 回复 快到碗里来:
我还是再说一下博客的事吧,,白写那么多了,,,,,
我最开始弄量化,就看了你的博客,然后照着把指令弄对了,但结果只是 float 型的好用,然后没看懂里面你说的生成量化的 tflite 的步骤,因为照着弄不出来,,现在知道了,原来是里面坑太多,,,,
然后又找了很久,才确定原来你说的就是量化训练的方法,然后到处去找怎么实现,就发现了这里,然后才解决了我的问题
然后开始想写博客,又去看了你的,然后发现你更新了,最开始看你写的语气还以为你是 Zongjun 大神,不过点开你的头像发现原来你就是这里问问题的楼主。。。
所以就跑来跟你说这件事了,然后你也没理我。。。
最后的感觉就是全网量化训练这块也就你写的有用了,又通过你找到了 Zongjun 大神,也很谢谢你啊,写了启发我的博客,也让我找到可以问的人~
2018-12-18 18:10
Zongjun: 回复 九幽:
别客气哈,互帮互助应该的嘛。我有时间一定去看你的博客!mean 和 std 我也不是很清楚,你看我这个贴子的第二个回答,我的 mean 和 std 是手动试出来的。。这个应该和你具体的 input, data augmentation 有关。楼主也在问谷歌这个问题,希望他能得到答案回来分享一下哈。
2018-12-19 04:33
Zongjun: 回复 九幽:
对了,其实完整过程中,还有一步,我一直没说。。。就是生成了 freeze 的.pb 文件以后,你可以用 optimize_for_inference.py 这个文件处理一下你的.pb 文件,把新生成的这个 opt.pb 文件传给 toco。有的 toco 不认的操作就会被 opt 文件干掉。。
2018-12-19 04:42
Zongjun: 回复 快到碗里来:
你们俩是大作家啊,我就不能写这种系统的博客了,公司合同规定。。不过出来回答回答问题还是可以的。。。
2018-12-19 05:10
九幽: 回复 Zongjun:
这种不涉及公司内容,只有学习内容的都不能写啊?…好吧,我们这边没说过这个问题,我写的这点东西应该根本造不成威胁吧,,感觉也没啥技术含量,只是把工具用会,现在还只停留在简单的模型修改上面。
2018-12-19 10:37
九幽: 回复 Zongjun:
std 和 mean 我没用,不知道为什么也成功了,,,那我就先等着吧,反正重点还是在于 keras 这块,,,然后处理 pb 这里我没见过这种方法,我再查查看看~
2018-12-19 10:38
快到碗里来: 回复 九幽:
哈哈哈,抱歉抱歉,我不知道你回复了我,可能是周六周日我不看,也可能是消息太多我没注意到,至于我的博客,因为我也是不断在尝试,所以一直在更改,现在太少关于 tensorflowlite 有用的博客.所以我才建议大神有空可以去写个博客造福一下我们.
2018-12-19 13:49
wsxwd: 回复 Zongjun:
因为量化 tflite 需要输入也是 uint8, 但是实际上你训练时输入范围可能是 [-1, 1],这时候就需要使用 std、mean 进行 rescale。可以简单类比 std=1/scale,mean 就是 zero_point
2018-12-19 15:27
Zongjun: 回复 九幽:
没办法,美国这边公司就是这样滴。。
2018-12-20 02:00
Zongjun: 回复 wsxwd:
你好,如果我推理时的输入是一个 uint8 的图片,值就是 0-255。请问你说的 rescale 是推理时,对 tflite 输入的这个 uint8 图片进行 rescale 吗?std, mean 是训练开始前,对输入图片做 data augmentation 以后的 std 和 mean 吗?std = 1/scale,这里的 scale 指的又是啥啊?zero_point 是谁的 zero_point 呢?
2018-12-20 02:24
Zongjun: 回复 wsxwd:
我感觉我的疑问是,给 toco mean 和 std,这一步到底是对谁做了处理?mean 和 std 只是在转换过程中用到了,还是将来推理时也用于对输入的处理?如果是对推理时的输入做处理,那原来输入的 uint8 图片减去 mean 再除以 std 不就变成了 float32 的数据类型了?可是我们用的是完全量化的 tflite 模型,参数也都是 uint8 类型的,而处理完的输入确是 float32 类型的,这样不是出问题了吗?这应该是我最困惑的地方了。。感谢!
2018-12-20 03:25