diff --git a/tools/pnnx/src/ir.cpp b/tools/pnnx/src/ir.cpp index cfd15de04..e51cb543a 100644 --- a/tools/pnnx/src/ir.cpp +++ b/tools/pnnx/src/ir.cpp @@ -4022,11 +4022,24 @@ pnnx::ModelInfo Graph::flops_mem_count() else if (op->type == "nn.UpsamplingBilinear2d" || op->type == "F.upsample_bilinear" && op->inputs[0]->shape.size() == 4) { int in_n, in_c, in_h, in_w; + bool has_size = false; in_n = op->inputs[0]->shape[0]; in_c = op->inputs[0]->shape[1]; in_h = op->inputs[0]->shape[2]; in_w = op->inputs[0]->shape[3]; if (op->params.find("size") != op->params.end()) + { + std::string val = Parameter::encode_to_string(op->params.at("size")); + if (val == "None") + { + has_size = false; + } + else + { + has_size = true; + } + } + if (has_size) { int size_h = op->params.at("size").ai[0]; int size_w = op->params.at("size").ai[1]; @@ -4035,8 +4048,8 @@ pnnx::ModelInfo Graph::flops_mem_count() } else { - int scale_h = op->params.at("scale_factor").ai[0]; - int scale_w = op->params.at("scale_factor").ai[1]; + int scale_h = op->params.at("scale_factor").af[0]; + int scale_w = op->params.at("scale_factor").af[1]; int out_h = in_h * scale_h; int out_w = in_w * scale_w; m.flops += 4 * in_c * out_h * out_w;