Toybrick

标题: 模型转换输出warning Network may not support batch>1 ! [打印本页]

作者: mrzs    时间: 2020-2-6 10:07
标题: 模型转换输出warning Network may not support batch>1 !
本帖最后由 mrzs 于 2020-2-9 09:07 编辑

--> Loading model
W Network may not support batch > 1 !
W Network may not support batch > 1 !
W Network may not support batch > 1 !
W Network may not support batch > 1 !
W Network may not support batch > 1 !
W Network may not support batch > 1 !
W Network may not support batch > 1 !
W Network may not support batch > 1 !
W Network may not support batch > 1 !
W Network may not support batch > 1 !
W Network may not support batch > 1 !
W Network may not support batch > 1 !
done
--> Building model
done
模型转换出现以上 warning ,虽然输出了rk模型,但是在板子上运行的时候出错 invalid model ,请问如何解决这个问题,谢谢!
@
jefferyzhang
大神请看一下

----------------------  更新问题-----------------------------------------
谢谢
jefferyzhang
的回复, 这个问题我把背景再交代一下,之前没有讲太清楚。  
我下载官方的 ssd_mobilenet_v1_coco_2017_11_17 ,用rknn把里面官方提供的pb模型转成rk模型,完全没有问题,没有任何warning,rk模型运行正常。 ssd-mobilenet_v2也是这样的。 出问题的地方是:我自己重新训练了ssd ,把checkpoiont转成pb模型,这一步我用tensorflow验证了自己训练的pb,推理正常,但是转rk模型出了问题 。开始我以为是我没有改 config文件,把batchNorn的train由true改成false,batchsize删掉等等,均无效。
后来我尝试过把官方的 ssd_mobilenet_v1_coco_2017_11_17文件夹下的自带的checkpoint直接转成pb,然后转rknn,发现也是同样的问题。 所以,我的窘境是,除了直接用官方提供的pb模型,我至今没有找到一个方法,完整的复现ssd-mobilenet->rk 的所有步骤,即从tensorflow模型训练到输出rk模型。我自己看了官方pb模型和自己pb模型的结构,大体上是一样的,一些结构层次和命名不太一样。我的理解应该是不同tf版本造成的差异。
我用的 tf版本是 1.12 ,tensorflow object detection api 分支是 r1.12.0 ,恳求rk官方能提供一个完整复现ssd-mobilenet的技术路线的建议,谢谢!






作者: jefferyzhang    时间: 2020-2-6 16:02
模型和转换脚本发出来给我们看下。。。
还有在1.3.0上试过不
作者: mrzs    时间: 2020-2-6 17:50
jefferyzhang 发表于 2020-2-6 16:02
模型和转换脚本发出来给我们看下。。。
还有在1.3.0上试过不

from rknn.api import RKNN

INPUT_SIZE = 300

if __name__ == '__main__':

    # Create RKNN object
    rknn = RKNN()

    # Config for Model Input PreProcess
    rknn.config(channel_mean_value='128 128 128 128', reorder_channel='0 1 2')

    # Load TensorFlow Model
    print('--> Loading model')
    rknn.load_tensorflow(tf_pb='./frozen_inference_graph.pb',
                         inputs=['FeatureExtractor/MobilenetV2/MobilenetV2/input'],
                         #inputs=['image_tensor'],
                         outputs=['concat', 'concat_1'],
                         input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3]])
    print('done')

    # Build Model
    print('--> Building model')
    rknn.build(do_quantization=True, dataset='./dataset.txt')
    print('done')

    # Export RKNN Model
    rknn.export_rknn('./ssd_mobilenet_v2_coco.rknn')

    # Release RKNN Context
    rknn.release()


我转的是ssd-mobilenetV2 的模型,模型输入输出用tensorborad 看过应该没啥问题

作者: jefferyzhang    时间: 2020-2-6 19:05
本帖最后由 jefferyzhang 于 2020-2-6 19:28 编辑

你要用Netron看。。。tensorboard看到的名字不是完整的。
这个转换成功却不能用?1.3.0可以试下,之前1.2.1有个bug就是转换成功无法load的,已经解决了的。
那个warning我怀疑你是没有freeze pb模型,造成有bn层没有freeze。

(补充:
   1. 相关同事跟我说那个warning无所谓,不碍事
   2. 你的问题相关同事认为是你DRI和API版本不匹配造成的,建议全部升级到1.3.0试   
   3. mobilenet-ssd NPU部门同事很早就试过,没问题的)






欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3