Caoxuheng / HIFtool

A toolbox for HSI-MSI fusion/pan-sharpening, including MoGDCN, Fusformer, PSRT, MSST, DCTransformer, iDaFormer, HySure, HyMS, DBSR, UDALN,uHNTC, ZSL and pretrained weights
MIT License
18 stars 2 forks source link

关于Network_eval.py #2

Closed tarxs closed 4 months ago

tarxs commented 4 months ago

你好,昨天我用chikusei数据集训练了PSRT,PSNR是正常的,50多。但是使用Network_eval.py测试的时候,无论用的是from utils import PSNR_GPU还是imgvision,计算出的PSNR都是5左右,请问是怎么回事

Caoxuheng commented 4 months ago

你好,请提供一下运行代码部分

---- 回复的原邮件 ---- | 发件人 | @.> | | 发送日期 | 2024年06月12日 10:26 | | 收件人 | Caoxuheng/HIFtool @.> | | 抄送人 | Subscribed @.***> | | 主题 | [Caoxuheng/HIFtool] 关于Network_eval.py (Issue #2) |

你好,昨天我用chikusei数据集训练了PSRT,PSNR是正常的,50多。但是使用Network_eval.py测试的时候,无论用的是from utils import PSNR_GPU还是imgvision,计算出的PSNR都是5左右,请问是怎么回事

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>

tarxs commented 4 months ago

改了的地方: Network_training.py:

case_lst = ['model', 'unsupervised', 'supervised']
case = case_lst[2]
Fusion = ModeSelection(case)

Method = 'PSRT'
model, opt = model_generator(Method)

dataset_name = 'chikusei'
model_folder = Method + '/' + dataset_name + '/'

Network_eval.py:

if __name__=='__main__':

    from torch.utils.data import DataLoader
    from Dataloader_tool import QBDataset
    from Dataloader_tool import ChikuseiDataset
    from Dataloader_tool import PaviaDataset
    from Dataloader_tool import XionganDataset

    # Build Network
    Method = 'PSRT'
    model, opt = model_generator(Method, 'cuda')

    # Dataset Setting
    dataset_name = 'chikusei'
    model_folder = Method + '/' + dataset_name + '/'
    # Training Setting
    Batch_size = 1
    start = 2000

    test_data = ChikuseiDataset(f'Multispectral Image Dataset\{dataset_name}\{dataset_name}.mat', type='test')

    test_data_loader = DataLoader(dataset=test_data, num_workers=0, batch_size=Batch_size, shuffle=False,
                                  pin_memory=True, drop_last=False)
    output_HRHSI = Eva(model, test_data_loader, model_folder=model_folder, start_epoch=start, name=Method)

其他部分都没有动

Caoxuheng commented 4 months ago

可能是由于数据动态范围不一致导致的,可以尝试把30~32行的归一化操作去除。

30             # GT /=GT.max()
31             # LRHSI /=LRHSI.max()
32             # HRMSI /=HRMSI.max() 
tarxs commented 4 months ago

注释掉就正常了,非常感谢。 再请问一个问题就是

output_HRHSI = output_HRHSI[0].detach().cpu().permute(1, 2, 0).numpy()
print(output_HRHSI.shape)

GT = GT[0].detach().cpu().permute(1, 2, 0).numpy()
iv.spectra_metric(output_HRHSI, GT).Evaluation()

这里是评估的是测试集里的一张图片吧,还是整个测试集,是否应该放在循环里再取平均

Caoxuheng commented 4 months ago

是的,这里是对一张重建图像,即output_HRHSI的第0张图像,的评估。imgvision的评价指标暂时不支持以batch为维度的批量评价,如果使用该工具对整个测试集进行评估,目前只能通过循环后取平均实现。 不过,目前公布的遥感图像测试集只包含一张图像,所以截至目前,针对本项目中释放的数据集,这里的评价指标就是对整个测试集的评估。

tarxs commented 4 months ago

是的,这里是对一张重建图像,即output_HRHSI的第0张图像,的评估。imgvision的评价指标暂时不支持以batch为维度的批量评价,如果使用该工具对整个测试集进行评估,目前只能通过循环后取平均实现。 不过,目前公布的遥感图像测试集只包含一张图像,所以截至目前,针对本项目中释放的数据集,这里的评价指标就是对整个测试集的评估。

好的,我明白了Pavia、Chikusei、Xiongan数据集的测试集都是一张从大图片上截取的一张小图片。 非常感谢回答我的诸多问题

Caoxuheng commented 4 months ago

你的理解是对的。 问题已经解决,如果还有其他问题,请重新发起issue。