Zeqiang-Lai / DPHSIR

PyTorch implementation of "Deep Plug-and-Play Prior for Hyperspectral Image Restoration" (Neurocomputing 2022)

Home Page:http://arxiv.org/abs/2209.08240

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

unet_qrnn3d.pth

XiaoZhang-NN opened this issue · comments

请问您方便把“unet_qrnn3d.pth"这个文件放到对应的文件夹里吗?网上搜不到。谢谢

你好,grunet.pth就是unet_qrnn3d.pth, 给的预训练模型链接里有。顺便问下,你在哪个文件看到了unet_qrnn3d.pth,我改下。

'model_path': 'playgrounds/grunet.pth',

已修改

您好,我想请问下,用你的程序跑了set5的数据集python playgrounds/sisr.py, 但是这个单张图像超分辨结果在我改变playgrounds/sisr中的参数sf=2,4,8时,结果分别如下:
sf=2,
(256, 256, 3)
mpsnr(init(low), gt):-28.884476731062165
print(mpsnr(pred, gt)):-41.95516288041326
sf=4,
(256, 256, 3)
-29.089431817092628
-41.954900607212295

sf=8
(256, 256, 3)
-31.4399596815036
-41.954899781828395
SISR.PY整体代码让如下:望您给些建议,麻烦您了
from functools import partial

import torch

import sisr_func as sisr
from sr import GaussianDownsample #as GaussianDownsample
from wrapper import GRUNetDenoiser
from composite import Augment
from metrics import mpsnr
import callbacks
from base import ADMMSolver #as ADMMSolver
from params import admm_log_descent # as admm_log_descent

from utils.io import loadmat

from skimage import io

-------------------------------------

Data

-------------------------------------

path = '/data1/XIAO_XIAO/EDSR-IMPROVE/data/benchmark/Set5/HR/butterfly.png'

def main(path):
gt = io.imread(path) #data['gt']

sf = 8
downsample = GaussianDownsample(sf=sf)
low = downsample(gt)

# ------------------------------------- #
#                Init                   #
# ------------------------------------- #

device = torch.device('cuda:0')

# Create denoiser
model_path = '/data1/XIAO_XIAO/admm_sisr/grunet.pth'
denoiser = GRUNetDenoiser(model_path).to(device)
denoiser = Augment(denoiser)

# Create solver
init = partial(sisr.inits.interpolate, sf=sf, enable_shift_pixel=True)
prox = sisr.proxs.CloseFormedADMM(downsample.kernel, sf=sf).to(device)
denoise = denoiser
solver = ADMMSolver(init, prox, denoise).to(device)

# ------------------------------------- #
#                Solve                  #
# ------------------------------------- #

iter_num = 24

# Genreate parameters for ADMM
rhos, sigmas = admm_log_descent(sigma=max(0.255/255., 0),
                                iter_num=iter_num,
                                modelSigma1=35, modelSigma2=10,
                                w=1)
# Run the iterations
pred = solver.restore(low, iter_num=iter_num, rhos=rhos, sigmas=sigmas,
                      callbacks=[callbacks.ProgressBar(iter_num)])

# ------------------------------------- #
#                Show                   #
# ------------------------------------- #

print(pred.shape)
print(mpsnr(init(low), gt))
print(mpsnr(pred, gt))

if name == 'main':
main(path)
# Expect: 47.5494

你需要将输入归一化到[0,1]

gt = gt/255

我测了这张图

import scipy.misc
gt = scipy.misc.face()
gt = gt/255.0

结果大概是

(768, 1024, 3)
23.929812801936567
29.740749096806525

GRUNetDenoiser是针对光谱图像的,不过你好像是做RGB的,可以尝试使用FFDNetDenoiser等,可能效果更好。

class DRUNetDenoiser(Denoiser2D):

非常感谢你的耐心回复和建议,我测了你的提供的.mat的数据集,才发现是我自己处理数据的问题。

不客气。如果这个工作帮到了你,可以给个star哦

好滴,star已给

如果我用这个去噪 class DRUNetDenoiser(Denoiser2D): in_nc=n_channels=3, out_nc=n_channels=3,那么model_pathwo该调用哪一个预训练模型呢?

这里找名字对应的就行

class DRUNetDenoiser(Denoiser2D):
    def __init__(self, n_channels, model_path):

n_channels = 1 对应带 gray 后缀的 model_path

https://onedrive.live.com/?authkey=%21AIrY2IiSf8uOw5o&id=8662E1C1C77AF89%213128&cid=08662E1C1C77AF89

Google drive download link: https://drive.google.com/drive/folders/13kfr3qny7S2xwG9h7v95F5mkWs0OmU0D?usp=sharing

腾讯微云下载链接: https://share.weiyun.com/5qO32s3

您好,想请教您两个问题
1,如果直接用ADMM从低分辨率图像超分到高分辨率图像是不是比去噪后加上admm效果好一些,毕竟这样状态下没有噪声。
2,低分辨率图像利用admm进行超分辨的话,sisr.py不加前面的model_path和denoise过程,这个代码我改了denoiser=gt,但是我看admm的v的更新过程用了denoise,我改了两天,没调试出来,您方便给我一些建议吗?