Closed sdreamforchen closed 1 month ago
python -m paddle2onnx.optimize --input_model model.onnx \
--output_model new_model.onnx \
--input_shape_dict "{'x':[1,3,1024,1024]}"
- ppyoloe_r不是640的输入,不需要在导出模型时指定输入大小
- 参考文档ppyoloe_r文档导出模型并转换成onnx
- 参考paddle2onnx文档为onnx模型指定输入大小https://github.com/PaddlePaddle/Paddle2ONNX#%E5%85%B6%E4%BB%96%E4%BC%98%E5%8C%96%E5%B7%A5%E5%85%B7 具体命令为
python -m paddle2onnx.optimize --input_model model.onnx \ --output_model new_model.onnx \ --input_shape_dict "{'x':[1,3,1024,1024]}"
搞定。--input_shape_dict "{'image':[1,3,1024,1024]}"
def forward_eval(self, feats): cls_score_list, reg_box_list = [], [] anchorpoints, , _ = self._generate_anchors(feats) for i, (feat, stride) in enumerate(zip(feats, self.fpnstrides)): b, , h, w = paddle.shape(feat) l = h * w
avg_feat = F.adaptive_avg_pool2d(feat, (1, 1))
cls_logit = self.pred_cls[i](self.stem_cls[i](feat, avg_feat) +
feat)
# reg
reg_dist = self.pred_reg[i](self.stem_reg[i](feat, avg_feat))
reg_xy, reg_wh = paddle.split(reg_dist, 2, axis=1)
reg_xy = reg_xy * stride
reg_wh = (F.elu(reg_wh) + 1.) * stride
reg_angle = self.pred_angle[i](self.stem_angle[i](feat, avg_feat))
reg_angle = self.angle_proj_conv(F.softmax(reg_angle, axis=1))
reg_box = paddle.concat([reg_xy, reg_wh, reg_angle], axis=1)
# cls and reg
cls_score = F.sigmoid(cls_logit)
cls_score_list.append(cls_score.reshape([b, self.num_classes, l]))
reg_box_list.append(reg_box.reshape([b, 5, l]))
cls_score_list = paddle.concat(cls_score_list, axis=-1)
reg_box_list = paddle.concat(reg_box_list, axis=-1).transpose([0, 2, 1])
reg_xy, reg_wha = paddle.split(reg_box_list, [2, 3], axis=-1)
reg_xy = reg_xy + anchor_points
reg_box_list = paddle.concat([reg_xy, reg_wha], axis=-1)
return cls_score_list, reg_box_list
ppyoloe和ppyoloe-r这部分代码是差不多的,在转成onnx过程中,ppyoloe-r的b,w,h,和l(=w*h)会被转出来(其实输入确定,这个就是constant)。而ppyoloe是不会转出来的。请问这个如何操作可以排除这个问题呢?(已用onnxsim操作过)
pp-yoloe-r支持动态输入,所以anchor_generator的过程是展开的,ppyoloe是静态输入,所以anchor_generator可以先计算好,你自己对照着ppyoloe的代码改下吧
pp-yoloe-r支持动态输入,所以anchor_generator的过程是展开的,ppyoloe是静态输入,所以anchor_generator可以先计算好,你自己对照着ppyoloe的代码改下吧
关注ppyoloe-head里面的evalsize参数,将其对应部分改到ppyoloe-r即可。只有几行代码。感谢王老师。
- ppyoloe_r不是640的输入,不需要在导出模型时指定输入大小
- 参考文档ppyoloe_r文档导出模型并转换成onnx
- 参考paddle2onnx文档为onnx模型指定输入大小https://github.com/PaddlePaddle/Paddle2ONNX#%E5%85%B6%E4%BB%96%E4%BC%98%E5%8C%96%E5%B7%A5%E5%85%B7 具体命令为
python -m paddle2onnx.optimize --input_model model.onnx \ --output_model new_model.onnx \ --input_shape_dict "{'x':[1,3,1024,1024]}"
搞定。--input_shape_dict "{'image':[1,3,1024,1024]}"
为什么我这边尝试指定大小 却无效呢
Since this issue has not been updated for more than three months, it will be closed, if it is not solved or there is a follow-up one, please reopen it at any time and we will continue to follow up. It is recommended to pull and try the latest code first. 由于该问题超过三个月未更新,将会被关闭,若问题未解决或有后续问题,请随时重新打开(建议先拉取最新代码进行尝试),我们会继续跟进。
问题确认 Search before asking
Bug组件 Bug Component
No response
Bug描述 Describe the Bug
python tools/export_model.py -c configs/rotate/ppyoloe_r/ppyoloe_r_crn_s_3x_dota.yml -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_r_crn_s_3x_dota_ms.pdparams TestReader.inputs_def.image_shape=[1,3,640,640] 如此输出模型,+paddle2onnx。 得到的onnx模型,输入image是type: float32[p2o.DynamicDimension.0,3,640,640],下游任务无法识别这个
复现环境 Environment
-linux,detection develop分支,paddle2.4.1-post117
Bug描述确认 Bug description confirmation
是否愿意提交PR? Are you willing to submit a PR?