我正在运行rknn 工具包来构建在 RK3566 上运行的 model.rknn。rknn.load_onnx()成功后,运行rknn.build(),出现如下错误信息:
--> Loading model: ./rknn_models/model_3566.onnx done
--> Building model E build: Global Average Pool input height/width > 128, which is not suppoted! E build: Catch exception when building RKNN model! E build: Traceback (most recent call last): E build: File "rknn/api/rknn_base.py", line 2621, in rknn.api.rknn_base.RKNNBase.build E build: File "rknn/api/graph_optimizer.py", line 3765, in rknn.api.graph_optimizer.GraphOptimizer.run E build: File "rknn/api/graph_optimizer.py", line 3518, in rknn.api.graph_optimizer.GraphOptimizer._fuse_ops E build: File "rknn/api/graph_optimizer.py", line 2210, in rknn.api.graph_optimizer._p_convert_global_avgpool_to_conv E build: File "rknn/api/rknn_log.py", line 104, in rknn.api.rknn_log.RKNNLog.e E build: ValueError: Global Average Pool input height/width > 128, which is not suppoted! Build pytorch failed!
我检查了我的源代码,我没有在任何地方使用全局平均池。实际上,我确实通过将它们分配为 Identity 来明确删除包含 global_pool 的最后两层 basenet(高效网络),如下所示:
basemodel_name = 'tf_efficientnet_b5_ap'
print('Loading base model ()...'.format(basemodel_name), end='')
basemodel = torch.hub.load('rwightman/gen-efficientnet-pytorch', basemodel_name, pretrained=True)
print('Done.')
# Remove last layer
print('Removing last two layers (global_pool & classifier).')
basemodel.global_pool = nn.Identity()
basemodel.classifier = nn.Identity()
所以我很困惑为什么 rknn.build() 会抱怨全球平均池。
谁能帮我指出潜在的原因和可能的解决方法?
非常感谢您提前提供的帮助。