PaddlePaddle / PaddleDetection

Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.
Apache License 2.0
12.61k stars 2.86k forks source link

加载预训练权重后报错 #4471

Open zwhua006 opened 2 years ago

zwhua006 commented 2 years ago

进行迁移学习的时候,训练自己的数据集加载预训练权重后训练报错 [11/04 23:20:44] ppdet.utils.checkpoint INFO: Finish loading model weights: /project/train/src_repo/PaddleDetection/weights/picodet_l_640_coco.pdparams Traceback (most recent call last): File "tools/train.py", line 171, in main() File "tools/train.py", line 167, in main run(FLAGS, cfg) File "tools/train.py", line 127, in run trainer.train(FLAGS.eval) File "/project/train/src_repo/PaddleDetection/ppdet/engine/trainer.py", line 393, in train outputs = model(data) File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/layers.py", line 898, in call outputs = self.forward(*inputs, *kwargs) File "/project/train/src_repo/PaddleDetection/ppdet/modeling/architectures/meta_arch.py", line 54, in forward out = self.get_loss() File "/project/train/src_repo/PaddleDetection/ppdet/modeling/architectures/picodet.py", line 79, in get_loss loss_gfl = self.head.get_loss(head_outs, self.inputs) File "/project/train/src_repo/PaddleDetection/ppdet/modeling/heads/simota_head.py", line 393, in get_loss flatten_bboxes.detach(), gt_box, gt_labels) File "/project/train/src_repo/PaddleDetection/ppdet/modeling/heads/simota_head.py", line 55, in multi_apply return tuple(map(list, zip(map_results))) File "/project/train/src_repo/PaddleDetection/ppdet/modeling/heads/simota_head.py", line 131, in _get_target_single F.sigmoid(cls_preds), centors, decoded_bboxes, gt_bboxes, gt_labels) File "/project/train/src_repo/PaddleDetection/ppdet/modeling/assigners/simota_assigner.py", line 186, in call priors, gt_bboxes) File "/project/train/src_repo/PaddleDetection/ppdet/modeling/assigners/simota_assigner.py", line 77, in get_in_gt_and_in_center_info is_in_gts_all = is_in_gts.sum(axis=1) > 0 File "/usr/local/lib/python3.6/dist-packages/paddle/tensor/math.py", line 743, in sum 'reduce_all', reduce_all_flag) RuntimeError: (NotFound) Operator reduce_sum does not have kernel for data_type[bool]:data_layout[ANY_LAYOUT]:place[CUDAPlace(0)]:library_type[PLAIN]. [Hint: Expected kernel_iter != kernels.end(), but received kernel_iter == kernels.end().] (at /paddle/paddle/fluid/imperative/prepared_operator.cc:135) [operator < reduce_sum > error]

只是将coco detection.yml中类别数目改为2,同时更改了类名,然后修改了picodet_l_640_coco.yml的pretrained weights.如果不加载coco预训练权重的话,没有这个错误

yghstill commented 2 years ago

@zwhua006 感谢反馈,看着是https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.3/ppdet/modeling/assigners/simota_assigner.py#L77 报错,我们尽快排查下原因。

yghstill commented 2 years ago

@zwhua006 请问下PaddlePaddle 的版本是低于2.1.2吗?PicoDet模型模型训练要求最低Paddle版本为2.1.2

zwhua006 commented 2 years ago

的确是这个原因,我刚刚排查发现了,感谢您