PaddlePaddle / PaddleClas

A treasure chest for visual classification and recognition powered by PaddlePaddle
Apache License 2.0
5.48k stars 1.17k forks source link

Please set "Arch.class_num" in config if use "CutmixOperator". #1643

Closed ChrisMengxl closed 2 years ago

ChrisMengxl commented 2 years ago

欢迎您使用PaddleClas并反馈相关问题,非常感谢您对PaddleClas的贡献! 提出issue时,辛苦您提供以下信息,方便我们快速定位问题并及时有效地解决您的问题:

  1. PaddleClas版本以及PaddlePaddle版本:PaddleClas 2.3 和PaddlePaddle 2.1.2

  2. 涉及的其他产品使用的版本号:如您在使用PaddleClas的同时还在使用其他产品,如PaddleServing、PaddleInference等,请您提供其版本号

  3. 训练环境信息:——Aistudio a. 具体操作系统 Linux b. Python版本号 Python3.7

  4. 完整的代码(相比于repo中代码,有改动的地方)、详细的错误信息及相关log:

    使用 DataAugment/ResNet50_Cutmix.yaml 模板,但类别67类, Global: checkpoints: null pretrained_model: null output_dir: ./output/ device: gpu save_interval: 50 eval_during_train: True eval_interval: 10 epochs: 300 print_batch_step: 10 use_visualdl: True class_num: 67 ...... Arch: --此处没有设置Arch.class_num: 67 ,但是全局设置class_num: 67 name: ResNet50

[2022/01/16 18:51:04] root ERROR: Please set "Arch.class_num" in config if use "CutmixOperator". Traceback (most recent call last): File "tools/train.py", line 31, in engine = Engine(config, mode="train") File "/home/aistudio/PaddleClas/ppcls/engine/engine.py", line 121, in init self.config["DataLoader"], "Train", self.device, self.use_dali) File "/home/aistudio/PaddleClas/ppcls/data/init.py", line 112, in build_dataloader batch_ops = create_operators(batch_transform, class_num) File "/home/aistudio/PaddleClas/ppcls/data/init.py", line 57, in create_operators op = op_func(param) File "/home/aistudio/PaddleClas/ppcls/data/preprocess/batch_ops/batch_operators.py", line 117, in init raise Exception(msg) Exception: Please set "Arch.class_num" in config if use "CutmixOperator".**

问题是,DataAugment/ResNet50_Baseline.yaml 设置全局class_num: 67可以,为啥ResNet50_Cutmix.yaml 不可以用全局?

另外,若设置Arch.class_num: 67 则提示: /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1301: UserWarning: Skip loading for fc.bias. fc.bias receives a shape [1000], but the expected shape is [67].

Intsigstephon commented 2 years ago

1) 需要设置Arch.class_num. 2)提示的是一个warning; 如果类别不为1000的话,都会收到这个warning. 官方提供的预训练模型是1000类的; 如果修改了类别,则最后一层fc的参数size不匹配,无法load

TingquanGao commented 2 years ago

建议使用Arch.class_num,Global.class_num字段之后将不再使用。 报错是因为,在使用“CutmixOperator”时,需要先对标签处理为soft label,因此需要获取分类数。此处的分类数是根据Arch.class_num字段所获取的。

ChrisMengxl commented 2 years ago

建议使用Arch.class_num,Global.class_num字段之后将不再使用。 报错是因为,在使用“CutmixOperator”时,需要先对标签处理为soft label,因此需要获取分类数。此处的分类数是根据Arch.class_num字段所获取的。

十分十分感谢。

ChrisMengxl commented 2 years ago

1) 需要设置Arch.class_num. 2)提示的是一个warning; 如果类别不为1000的话,都会收到这个warning. 官方提供的预训练模型是1000类的; 如果修改了类别,则最后一层fc的参数size不匹配,无法load

十分十分感谢。