Toybrick

rknn转换的tflite量化训练好的模型输出结果不匹配

protossw512

中级会员

积分
252
楼主
发表于 2019-7-26 02:02:36    查看: 15810|回复: 1 | [复制链接]    打印 | 只看该作者
本帖最后由 protossw512 于 2019-7-25 07:35 编辑

rknn-toolkit version: 1.0.0

我们使用官方的deeplab进行quantize-aware training后,转换成了tflite(具体操作请见:https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/quantize.md)然后使用rknn直接把tflite模型转成了rknn模型,发现输出结果和tflite的非常不一致,精确度下降了不少,不知道开发部门有没办法排除一下这个bug?上面的链接里面有提供quantized模型下载,可用于测试。tflite本身的转换工具也是有一些更新的近期。或者可以考虑在硬件上原生支持tflite的op,也是很好的选择,考虑到tflite在大厂的工程中应用非常广泛。
现在这个是我们项目非常大的一个block。

另外真心希望rknn的lib能够开源,哪怕部分开源,比如可以让我们手动port层的设定和模型,以及量化参数,这样哪怕模型转换工具出现了错误,也可能够进行手动修正(比如输入长宽比不一同的图片,在deeplab的网络上还是有错误无法转换,因为concat那层的shape读取长和宽的顺序不同),目前模型转换工具一旦出错,就彻底没办法用了。
硬件虽然很好但是只是存在于纸面,软件bug太多在上面开发的应用没法落地,将会是产品推广最大的阻碍。
回复

使用道具 举报

protossw512

中级会员

积分
252
沙发
 楼主| 发表于 2019-7-27 02:30:14 | 只看该作者
hisping 发表于 2019-7-26 08:52
你转成rknn模型是开启了量化才导致精度下降吗?不开启量化精度怎么样?另外rknn-toolkit支持混合量化,你也 ...

我们是先进行quantization-aware training之后(加了一些Fake quantize的节点),转成quantized tflite模型,再转成rknn的模型(转换的时候quantize=false,直接用的tflite里面的量化信息)。转成tflite的量化模型精度下降很少,但是转成了rknn就下降非常多。
我刚才测试了下,把float的模型(没有那些Fake quantize的节点)转成tflite再转rknn会报错,应该是某些op不支持。所以我直接把转tflite之前的pb模型转成了rknn,转换的时候也没有开启量化选项,进行了测试,精度从73%掉到了66%,非常奇怪,因为理论上应该没有精度损失。我们的模型训练的时候input就是0-255,所以转rknn我选的input normalization是0 0 0 1。
可能是因为tensorflow新版本对batch norm的fold不太一样或者tflite转换的模块上有一些变化。建议能在针对google官方的deeplab进行一下对比。

混合量化的功能很好,但是比较鸡肋,因为没办法调整量化好的tflite模型。有没有办法在选择混合量化的时候不输入dataset,让rknn自己读取tflite的量化信息,然后让我们手动进行一下修改? 包括每层的量化信息,和每层的weights参数和运算符。这也是一个非常方便开发者debug模型的一个途径,否则现在出了问题都没办法debug,有些bug可能就是自动转换程序的问题,手动转完就可以用了。

下面是一些参考链接:
deeplab的量化:https://github.com/tensorflow/mo ... b/g3doc/quantize.md
tensorflow量化:https://github.com/tensorflow/te ... ow/contrib/quantize (这个已经有点过时了)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表