CDLab icon indicating copy to clipboard operation
CDLab copied to clipboard

STANet训练时在计算损失函数阶段出现的tar和pred的shape不匹配问题

Open zhang2209 opened this issue 4 months ago • 4 comments

作者您好!

我在训练STANet时出现了在计算损失函数阶段tar和pred的shape不匹配问题(我没有对核心代码做过修改),报错信息如下:

Image

然后我打断点进行排查: 在 src/impl/trainers/cd_trainer.py 的 train_epoch 方法中定位到 pred = self._process_model_out(out) 这行代码(见下图),此时 out 的 shape 为 [batch, 64, 256, 256]

Image

紧接着代码跳到 src/impl/trainers/cd_trainer_metric.py 的 _process_model_out 方法(见下图),此时执行 out.squeeze(1) ,但是 out 的 shape 为 [batch, 64, 256, 256] ,所以 out.squeeze(1) 不会对 out 做任何操作,out 的 shape 仍为 [batch, 64, 256, 256]

Image

然后代码跳到 src/impl/trainers/cd_trainer_metric.py 中计算损失函数(见下图),此时 tar 的 shape 为 [batch, 256 , 256] ,但 pred 的 shape 为 [batch, 64, 256, 256] 所以直接进行乘法运算就出现了错误

Image

想请教下作者这个问题该如何解决,是否需要对代码做些改动?

zhang2209 avatar Sep 16 '25 13:09 zhang2209

@Bobholamovic 求作者解答一下,感激不尽!

zhang2209 avatar Sep 20 '25 11:09 zhang2209

使用的配置文件和数据集都是默认的吗

Bobholamovic avatar Sep 22 '25 02:09 Bobholamovic

使用的配置文件和数据集都是默认的吗

数据集用的SYSU,前后时相图像是3通道256×256的,标签是单通道的黑白图

配置文件是直接复制了原有的配置文件,没做修改,具体如下:

config_sysu.yaml # Basic configurations on SYSU dataset

# Data dataset: SYSU num_workers: 2 repeats: 5 subset: val crop_size: 256

# Optimizer optimizer: Adam lr: 0.0004 weight_decay: 0.0 load_optim: False save_optim: False sched_on: True schedulers: - name: StepLR step_size: 15 gamma: 0.2

# Training related batch_size: 4 num_epochs: 30 resume: '' anew: False device: cuda

# Experiment exp_dir: ../exp/ # tag: '' # suffix: '' # DO NOT specify exp_config debug_on: False inherit_off: False log_off: False track_intvl: 10 tb_on: False tb_intvl: 500 suffix_off: True save_on: False out_dir: ''

# Criterion criterion: WNLL weights: - 0.5 # Weight of no-change class - 0.5 # Weight of change class

# Model model: out_type: logits2

config_sysu_stanet.yaml # SYSU+STANet

out_dir: stanet criterion: BC model: STANet out_type: dist

stanet_model: in_ch: 3 width: 64 att_type: PAM ds: 1 threshold: 1

zhang2209 avatar Sep 22 '25 03:09 zhang2209

这个数据集我没有尝试过,建议可以看看配置中哪些配置项会影响最终输出以及标签的形状,然后确认下是否都设置为正确的值。

Bobholamovic avatar Sep 22 '25 09:09 Bobholamovic