open-mmlab / mmsegmentation

OpenMMLab Semantic Segmentation Toolbox and Benchmark.
https://mmsegmentation.readthedocs.io/en/main/
Apache License 2.0
7.68k stars 2.53k forks source link

AttributeError: 'Mask2FormerHead' object has no attribute 'threshold' #3712

Open Skyninth opened 2 weeks ago

Skyninth commented 2 weeks ago

06/17 11:25:03 - mmengine - INFO - Iter(train) [ 50/90000] base_lr: 9.9951e-05 lr: 9.9951e-06 eta: 1 day, 1:16:30 time: 0.9964 data_time: 0.0160 memory: 20881 grad_norm: 2.4602 loss: 1.3251 decode.loss_cls: 0.0000 decode.loss_mask: 0.0000 decode.loss_dice: 0.0000 decode.d0.loss_cls: 1.3249 decode.d0.loss_mask: 0.0000 decode.d0.loss_dice: 0.0000 decode.d1.loss_cls: 0.0001 decode.d1.loss_mask: 0.0000 decode.d1.loss_dice: 0.0000 decode.d2.loss_cls: 0.0000 decode.d2.loss_mask: 0.0000 decode.d2.loss_dice: 0.0000 decode.d3.loss_cls: 0.0000 decode.d3.loss_mask: 0.0000 decode.d3.loss_dice: 0.0000 decode.d4.loss_cls: 0.0000 decode.d4.loss_mask: 0.0000 decode.d4.loss_dice: 0.0000 decode.d5.loss_cls: 0.0000 decode.d5.loss_mask: 0.0000 decode.d5.loss_dice: 0.0000 decode.d6.loss_cls: 0.0000 decode.d6.loss_mask: 0.0000 decode.d6.loss_dice: 0.0000 decode.d7.loss_cls: 0.0000 decode.d7.loss_mask: 0.0000 decode.d7.loss_dice: 0.0000 decode.d8.loss_cls: 0.0000 decode.d8.loss_mask: 0.0000 decode.d8.loss_dice: 0.0000 06/17 11:25:52 - mmengine - INFO - Iter(train) [ 100/90000] base_lr: 9.9901e-05 lr: 9.9901e-06 eta: 1 day, 1:03:36 time: 0.9953 data_time: 0.0158 memory: 19056 grad_norm: 2.1069 loss: 1.0589 decode.loss_cls: 0.0000 decode.loss_mask: 0.0000 decode.loss_dice: 0.0000 decode.d0.loss_cls: 1.0588 decode.d0.loss_mask: 0.0000 decode.d0.loss_dice: 0.0000 decode.d1.loss_cls: 0.0001 decode.d1.loss_mask: 0.0000 decode.d1.loss_dice: 0.0000 decode.d2.loss_cls: 0.0000 decode.d2.loss_mask: 0.0000 decode.d2.loss_dice: 0.0000 decode.d3.loss_cls: 0.0000 decode.d3.loss_mask: 0.0000 decode.d3.loss_dice: 0.0000 decode.d4.loss_cls: 0.0000 decode.d4.loss_mask: 0.0000 decode.d4.loss_dice: 0.0000 decode.d5.loss_cls: 0.0000 decode.d5.loss_mask: 0.0000 decode.d5.loss_dice: 0.0000 decode.d6.loss_cls: 0.0000 decode.d6.loss_mask: 0.0000 decode.d6.loss_dice: 0.0000 decode.d7.loss_cls: 0.0000 decode.d7.loss_mask: 0.0000 decode.d7.loss_dice: 0.0000 decode.d8.loss_cls: 0.0000 decode.d8.loss_mask: 0.0000 decode.d8.loss_dice: 0.0000 06/17 11:26:42 - mmengine - INFO - Iter(train) [ 150/90000] base_lr: 9.9851e-05 lr: 9.9851e-06 eta: 1 day, 0:58:56 time: 0.9952 data_time: 0.0152 memory: 19056 grad_norm: 1.7905 loss: 0.8241 decode.loss_cls: 0.0000 decode.loss_mask: 0.0000 decode.loss_dice: 0.0000 decode.d0.loss_cls: 0.8240 decode.d0.loss_mask: 0.0000 decode.d0.loss_dice: 0.0000 decode.d1.loss_cls: 0.0000 decode.d1.loss_mask: 0.0000 decode.d1.loss_dice: 0.0000 decode.d2.loss_cls: 0.0000 decode.d2.loss_mask: 0.0000 decode.d2.loss_dice: 0.0000 decode.d3.loss_cls: 0.0000 decode.d3.loss_mask: 0.0000 decode.d3.loss_dice: 0.0000 decode.d4.loss_cls: 0.0000 decode.d4.loss_mask: 0.0000 decode.d4.loss_dice: 0.0000 decode.d5.loss_cls: 0.0000 decode.d5.loss_mask: 0.0000 decode.d5.loss_dice: 0.0000 decode.d6.loss_cls: 0.0000 decode.d6.loss_mask: 0.0000 decode.d6.loss_dice: 0.0000 decode.d7.loss_cls: 0.0000 decode.d7.loss_mask: 0.0000 decode.d7.loss_dice: 0.0000 decode.d8.loss_cls: 0.0000 decode.d8.loss_mask: 0.0000 decode.d8.loss_dice: 0.0000 06/17 11:27:32 - mmengine - INFO - Iter(train) [ 200/90000] base_lr: 9.9801e-05 lr: 9.9801e-06 eta: 1 day, 0:56:24 time: 0.9968 data_time: 0.0156 memory: 19056 grad_norm: 1.4811 loss: 0.6155 decode.loss_cls: 0.0000 decode.loss_mask: 0.0000 decode.loss_dice: 0.0000 decode.d0.loss_cls: 0.6155 decode.d0.loss_mask: 0.0000 decode.d0.loss_dice: 0.0000 decode.d1.loss_cls: 0.0000 decode.d1.loss_mask: 0.0000 decode.d1.loss_dice: 0.0000 decode.d2.loss_cls: 0.0000 decode.d2.loss_mask: 0.0000 decode.d2.loss_dice: 0.0000 decode.d3.loss_cls: 0.0000 decode.d3.loss_mask: 0.0000 decode.d3.loss_dice: 0.0000 decode.d4.loss_cls: 0.0000 decode.d4.loss_mask: 0.0000 decode.d4.loss_dice: 0.0000 decode.d5.loss_cls: 0.0000 decode.d5.loss_mask: 0.0000 decode.d5.loss_dice: 0.0000 decode.d6.loss_cls: 0.0000 decode.d6.loss_mask: 0.0000 decode.d6.loss_dice: 0.0000 decode.d7.loss_cls: 0.0000 decode.d7.loss_mask: 0.0000 decode.d7.loss_dice: 0.0000 decode.d8.loss_cls: 0.0000 decode.d8.loss_mask: 0.0000 decode.d8.loss_dice: 0.0000 06/17 11:28:24 - mmengine - INFO - Iter(train) [ 250/90000] base_lr: 9.9751e-05 lr: 9.9751e-06 eta: 1 day, 1:10:02 time: 1.0503 data_time: 0.0162 memory: 19056 grad_norm: 1.1710 loss: 0.4363 decode.loss_cls: 0.0000 decode.loss_mask: 0.0000 decode.loss_dice: 0.0000 decode.d0.loss_cls: 0.4363 decode.d0.loss_mask: 0.0000 decode.d0.loss_dice: 0.0000 decode.d1.loss_cls: 0.0000 decode.d1.loss_mask: 0.0000 decode.d1.loss_dice: 0.0000 decode.d2.loss_cls: 0.0000 decode.d2.loss_mask: 0.0000 decode.d2.loss_dice: 0.0000 decode.d3.loss_cls: 0.0000 decode.d3.loss_mask: 0.0000 decode.d3.loss_dice: 0.0000 decode.d4.loss_cls: 0.0000 decode.d4.loss_mask: 0.0000 decode.d4.loss_dice: 0.0000 decode.d5.loss_cls: 0.0000 decode.d5.loss_mask: 0.0000 decode.d5.loss_dice: 0.0000 decode.d6.loss_cls: 0.0000 decode.d6.loss_mask: 0.0000 decode.d6.loss_dice: 0.0000 decode.d7.loss_cls: 0.0000 decode.d7.loss_mask: 0.0000 decode.d7.loss_dice: 0.0000 decode.d8.loss_cls: 0.0000 decode.d8.loss_mask: 0.0000 decode.d8.loss_dice: 0.0000 06/17 11:29:14 - mmengine - INFO - Iter(train) [ 300/90000] base_lr: 9.9701e-05 lr: 9.9701e-06 eta: 1 day, 1:06:42 time: 0.9976 data_time: 0.0153 memory: 19056 grad_norm: 0.8709 loss: 0.2910 decode.loss_cls: 0.0000 decode.loss_mask: 0.0000 decode.loss_dice: 0.0000 decode.d0.loss_cls: 0.2910 decode.d0.loss_mask: 0.0000 decode.d0.loss_dice: 0.0000 decode.d1.loss_cls: 0.0000 decode.d1.loss_mask: 0.0000 decode.d1.loss_dice: 0.0000 decode.d2.loss_cls: 0.0000 decode.d2.loss_mask: 0.0000 decode.d2.loss_dice: 0.0000 decode.d3.loss_cls: 0.0000 decode.d3.loss_mask: 0.0000 decode.d3.loss_dice: 0.0000 decode.d4.loss_cls: 0.0000 decode.d4.loss_mask: 0.0000 decode.d4.loss_dice: 0.0000 decode.d5.loss_cls: 0.0000 decode.d5.loss_mask: 0.0000 decode.d5.loss_dice: 0.0000 decode.d6.loss_cls: 0.0000 decode.d6.loss_mask: 0.0000 decode.d6.loss_dice: 0.0000 decode.d7.loss_cls: 0.0000 decode.d7.loss_mask: 0.0000 decode.d7.loss_dice: 0.0000 decode.d8.loss_cls: 0.0000 decode.d8.loss_mask: 0.0000 decode.d8.loss_dice: 0.0000 06/17 11:29:15 - mmengine - INFO - Saving checkpoint at 300 iterations /ProjectRoot/openmmlab/lib/python3.8/site-packages/mmdet/models/layers/positional_encoding.py:103: UserWarning: floordiv is deprecated, and its behavior will change in a future version of pytorch. It currently rounds toward 0 (like the 'trunc' function NOT 'floor'). This results in incorrect rounding for negative values. To keep the current behavior, use torch.div(a, b, rounding_mode='trunc'), or for actual floor division, use torch.div(a, b, rounding_mode='floor'). dim_t = self.temperature(2 (dim_t // 2) / self.num_feats) Traceback (most recent call last): File "tools/train.py", line 104, in main() File "tools/train.py", line 100, in main runner.train() File "/ProjectRoot/openmmlab/lib/python3.8/site-packages/mmengine/runner/runner.py", line 1777, in train model = self.train_loop.run() # type: ignore File "/ProjectRoot/openmmlab/lib/python3.8/site-packages/mmengine/runner/loops.py", line 294, in run self.runner.val_loop.run() File "/ProjectRoot/openmmlab/lib/python3.8/site-packages/mmengine/runner/loops.py", line 373, in run self.run_iter(idx, data_batch) File "/ProjectRoot/openmmlab/lib/python3.8/site-packages/torch/autograd/grad_mode.py", line 27, in decorate_context return func(args, kwargs) File "/ProjectRoot/openmmlab/lib/python3.8/site-packages/mmengine/runner/loops.py", line 393, in run_iter outputs = self.runner.model.val_step(data_batch) File "/ProjectRoot/openmmlab/lib/python3.8/site-packages/mmengine/model/base_model/base_model.py", line 133, in val_step return self._run_forward(data, mode='predict') # type: ignore File "/ProjectRoot/openmmlab/lib/python3.8/site-packages/mmengine/model/base_model/base_model.py", line 361, in _run_forward results = self(*data, mode=mode) File "/ProjectRoot/openmmlab/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1110, in _call_impl return forward_call(input, **kwargs) File "/ProjectRoot/painting_seg/mmsegmentation/mmseg/models/segmentors/base.py", line 96, in forward return self.predict(inputs, data_samples) File "/ProjectRoot/painting_seg/mmsegmentation/mmseg/models/segmentors/encoder_decoder.py", line 222, in predict return self.postprocess_result(seg_logits, data_samples) File "/ProjectRoot/painting_seg/mmsegmentation/mmseg/models/segmentors/base.py", line 192, in postprocess_result self.decode_head.threshold).to(i_seg_logits) File "/ProjectRoot/openmmlab/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1185, in getattr raise AttributeError("'{}' object has no attribute '{}'".format( AttributeError: 'Mask2FormerHead' object has no attribute 'threshold'

my_custom_dataset:

Copyright (c) OpenMMLab. All rights reserved.

from mmseg.registry import DATASETS from .basesegdataset import BaseSegDataset

@DATASETS.register_module() class PaintingDataset(BaseSegDataset): """Painting dataset.

The ``img_suffix`` is fixed to '_leftImg8bit.png' and ``seg_map_suffix`` is
fixed to '_gtFine_labelTrainIds.png' for Cityscapes dataset.
"""
METAINFO = dict(
    # classes=('background', 'master'),
    # palette=[[0, 0, 0], [255, 255, 255]])
    classes=('background', 'master'),
    palette=[[0, 0, 0], [255, 255, 255]])

def __init__(self,
             img_suffix='.jpeg',
             seg_map_suffix='.png',
             reduce_zero_label=True,
             **kwargs) -> None:
    super().__init__(
        img_suffix=img_suffix, 
        seg_map_suffix=seg_map_suffix, 
        reduce_zero_label=reduce_zero_label,
        **kwargs)

I only have two class, one background and one foreground. Some of my images only have foreground and no background, so if I set num_class=2, reduce_zero_label=False, my val result is nan. So I set num_class=1, reduce_zero_label=True, But I encountered this problem. The decode_head of mask2Former is not inherited from decode_head, but referenced from mmdet, so what should I do? Please give me some suggestions. Or how to make my result not nan when num_class=2

Saillxl commented 3 hours ago

do you have solve this problem?