PaddleX icon indicating copy to clipboard operation
PaddleX copied to clipboard

paddel X里面cpp部署clas报错

Open xinsuinizhuan opened this issue 3 years ago • 9 comments
trafficstars

图片 cpp推理clas 使用paddelx-gui训练的模型,导出的 cpu推理 paddle版本: GIT COMMIT ID: 1e62c239d323354eccfc974d4e2e6496f93d848e WITH_MKL: ON WITH_MKLDNN: ON WITH_GPU: OFF WITH_ROCM: OFF CXX compiler version: 19.16.27045.0

xinsuinizhuan avatar Feb 02 '22 13:02 xinsuinizhuan

clas当然是验证过的。 gpu推理可以正常运行吗?看你用的paddle inference是自己编译的? 另外贴下具体的model.yml,看下具体的预处理和模型信息。和运行命令

FlyingQianMM avatar Feb 07 '22 02:02 FlyingQianMM

paddle inference是直接官网下载的: model.yml文件: Model: MobileNetV2 Transforms:

  • ResizeByShort: interp: LINEAR max_size: -1 short_size: 256
  • CenterCrop: crop_size: 224
  • Normalize: is_scale: true max_val:
    • 255.0
    • 255.0
    • 255.0 mean:
    • 0.485
    • 0.456
    • 0.406 min_val:
    • 0
    • 0
    • 0 std:
    • 0.229
    • 0.224
    • 0.225 _Attributes: eval_metrics: acc1: 0.6171875 fixed_input_shape:
    • -1
    • 3
    • -1
    • -1 labels:
    • bocai
    • changqiezi
    • hongxiancai
    • huluobo
    • xihongshi
    • xilanhua model_type: classifier num_classes: 6 _init_params: num_classes: 6 completed_epochs: 0 status: Infer version: 2.1.0

其中的labels,是二级目标,而最后推理时, 图片 这lables读取失败 我直接自己写了个yml文件,只有lables的: 图片 然后,就对了。

xinsuinizhuan avatar Feb 07 '22 06:02 xinsuinizhuan

同样的目标检查导出的model.yml文件: Model: PicoDet Transforms:

  • Resize: interp: CUBIC keep_ratio: false target_size: !!python/tuple
    • 640
    • 640
  • Normalize: is_scale: true max_val:
    • 255.0
    • 255.0
    • 255.0 mean:
    • 0.485
    • 0.456
    • 0.406 min_val:
    • 0
    • 0
    • 0 std:
    • 0.229
    • 0.224
    • 0.225 _Attributes: eval_metrics: bbox_map: 80.42651757313699 fixed_input_shape:
    • -1
    • 3
    • 640
    • 640 labels:
    • leconte
    • boerner
    • armandi
    • linnaeus
    • coleoptera
    • acuminatus model_type: detector num_classes: 6 _init_params: backbone: ESNet_l nms_iou_threshold: 0.6 nms_keep_topk: 100 nms_score_threshold: 0.025 nms_topk: 1000 num_classes: 6 completed_epochs: 0 status: Infer version: 2.1.0

而代码中读取时为: 图片

而model.yml中根本没有arch等关键字,labels:也是二级目标 我自己修改了个yml: 图片 这样也就对了

目标分割的也是,导出的model.yml为: Model: DeepLabV3P Transforms:

  • Resize: interp: LINEAR keep_ratio: false target_size:
    • 512
    • 512
  • Normalize: is_scale: true max_val:
    • 255.0
    • 255.0
    • 255.0 mean:
    • 0.5
    • 0.5
    • 0.5 min_val:
    • 0
    • 0
    • 0 std:
    • 0.5
    • 0.5
    • 0.5 _Attributes: eval_metrics: miou: 0.9178956151008606 fixed_input_shape:
    • -1
    • 3
    • -1
    • -1 labels:
    • background
    • optic_disc model_type: segmenter num_classes: 2 _init_params: num_classes: 2 use_mixed_loss: false completed_epochs: 0 status: Infer version: 2.1.0

里面是包含了version: 2.1.0但是,最后读取时,用的配置文件中没有version,一看是配置文件不是直接用的导出的 图片 我自己修改和加了字段,重新修改了yml: 图片 图片 也对了

xinsuinizhuan avatar Feb 07 '22 06:02 xinsuinizhuan

所以,现在来看,paddleX直接导出的model.yml是不能直接用paddleX下的cpp推理的,不能正确读取model.yml,也不知道是代码问题,还是model.yml的问题。您最好对照我说的,检查一下,看到底是哪儿的问题。

xinsuinizhuan avatar Feb 07 '22 06:02 xinsuinizhuan

咋样,我上面那样改,只是不报错了,但是推理是错的,感觉没有做transform? 着急,能不能帮忙给看看

xinsuinizhuan avatar Feb 07 '22 14:02 xinsuinizhuan

你的运行命令是不是敲错了? paddlex导出的模型,在运行的时候--model_type 要传paddlex。我看你截图的这些代码都走到PaddleSegPaddleDetection了,会走到这两个地方是因为你--model_type传的是detseg。 你执行exe的时候,具体的命令是怎样的?

FlyingQianMM avatar Feb 09 '22 03:02 FlyingQianMM

paddlex

图片 这个type传啥?不是,目标检测的传det,目标分割的传seg,目标分类的传cls,实例分割的传mask?

xinsuinizhuan avatar Feb 09 '22 07:02 xinsuinizhuan

你的运行命令是不是敲错了? paddlex导出的模型,在运行的时候--model_type 要传paddlex。我看你截图的这些代码都走到PaddleSegPaddleDetection了,会走到这两个地方是因为你--model_type传的是detseg。 你执行exe的时候,具体的命令是怎样的?

另外,我提的问题,都是init这个cfg model.yml里面的解析的问题,跟这个type有关系不? 图片 乱了。我也不知道咋用了。

xinsuinizhuan avatar Feb 09 '22 07:02 xinsuinizhuan

你的运行命令是不是敲错了? paddlex导出的模型,在运行的时候--model_type 要传paddlex。我看你截图的这些代码都走到PaddleSegPaddleDetection了,会走到这两个地方是因为你--model_type传的是detseg。 你执行exe的时候,具体的命令是怎样的? 我现在的问题是,只要是paddleX导出的模型,model.yml,使用cpp里面的代码解析的时候,很多地方不对应的问题,就比如,目标检查里面,解析model.yml的时候,要一个arch字段,但是导出的model.yml根本没有这个字段;分割的时候,要个version字段,但是model.yml里面是有version字段,但是最后用的是新建的一个node字段。我觉得跟type没关系吧

xinsuinizhuan avatar Feb 09 '22 07:02 xinsuinizhuan