添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在之前的博客中已经介绍了ESPCN的原理了( 学习笔记之——基于深度学习的图像超分辨率重构 )本博文是对ESPCN进行实现。代码的框架仍然采用xintao前辈的代码,本博文会给出关键的实现部分

python train.py -opt options/train/train_sr.json

python test.py -opt options/test/test_sr.json

ESPCN的网络结构

network.py

# Generator
def define_G(opt):
    gpu_ids = opt['gpu_ids']
    opt_net = opt['network_G']
    which_model = opt_net['which_model_G']#hear decide which model, and thia para is in .json. if you add a new model, this part must be modified
    if which_model == 'sr_resnet':  # SRResNet
        netG = arch.SRResNet(in_nc=opt_net['in_nc'], out_nc=opt_net['out_nc'], nf=opt_net['nf'], \
            nb=opt_net['nb'], upscale=opt_net['scale'], norm_type=opt_net['norm_type'], \
            act_type='relu', mode=opt_net['mode'], upsample_mode='pixelshuffle')
#############################################################################################################
    elif which_model=='fsrcnn':#FSRCNN
        netG=arch.FSRCNN(in_nc=opt_net['in_nc'], out_nc=opt_net['out_nc'], nf=opt_net['nf'], \
            nb=opt_net['nb'], upscale=opt_net['scale'], norm_type=opt_net['norm_type'], \
            act_type='relu', mode=opt_net['mode'], upsample_mode='pixelshuffle')
#############################################################################################################
#############################################################################################################
    elif which_model=='espcn':#ESPCN
        netG=arch.ESPCN(in_nc=opt_net['in_nc'], out_nc=opt_net['out_nc'], nf=opt_net['nf'], \
            nb=opt_net['nb'], upscale=opt_net['scale'], norm_type=opt_net['norm_type'], \
            act_type='relu', mode=opt_net['mode'], upsample_mode='pixelshuffle')
#############################################################################################################
#############################################################################################################
    elif which_model=='srresnet':#SRResNet, the Original version
        netG=arch.OSRRESNET(in_nc=opt_net['in_nc'], out_nc=opt_net['out_nc'], nf=opt_net['nf'], \
            nb=opt_net['nb'], upscale=opt_net['scale'], norm_type=opt_net['norm_type'], \
            act_type='relu', mode=opt_net['mode'], upsample_mode='pixelshuffle')
#############################################################################################################
    elif which_model == 'sft_arch':  # SFT-GAN
        netG = sft_arch.SFT_Net()
    elif which_model == 'RRDB_net':  # RRDB,this is ESRGAN
        netG = arch.RRDBNet(in_nc=opt_net['in_nc'], out_nc=opt_net['out_nc'], nf=opt_net['nf'],
            nb=opt_net['nb'], gc=opt_net['gc'], upscale=opt_net['scale'], norm_type=opt_net['norm_type'],
            act_type='leakyrelu', mode=opt_net['mode'], upsample_mode='upconv')
    else:
        raise NotImplementedError('Generator model [{:s}] not recognized'.format(which_model))
    if opt['is_train']:
        init_weights(netG, init_type='kaiming', scale=0.1)###the weight initing. you can change this to change the method of init_weight
    if gpu_ids:
        assert torch.cuda.is_available()
        netG = nn.DataParallel(netG)
    return netG

architecture.py

#######################################################################################################3
#EPSCN
class ESPCN(nn.Module):
    def __init__(self, in_nc, out_nc, nf, nb, upscale=2, norm_type='batch', act_type='relu', \
            mode='NAC', res_scale=1, upsample_mode='upconv'):##play attention the upscales
        super(ESPCN,self).__init__()
        self.conv1=nn.Conv2d(in_channels=in_nc,out_channels=64,kernel_size=5,stride=1,padding=2)
        self.conv2=nn.Conv2d(in_channels=64,out_channels=32,kernel_size=3,stride=1,padding=1)
        self.conv3=nn.Conv2d(in_channels=32,out_channels=in_nc*(upscale ** 2),kernel_size=3,stride=1,padding=1)
        self.pixel_shuffle=nn.PixelShuffle(upscale)
    def forward(self, x):
        out=F.tanh(self.conv1(x))
        out=F.tanh(self.conv2(out))
        out=F.sigmoid(self.pixel_shuffle(self.conv3(out)))
        return out

setting

"name": "espcn_x4"//"001_RRDB_PSNR_x4_DIV2K" // please remove "debug_" during training or tensorboard wounld not work , "use_tb_logger": true , "model":"sr" , "scale": 4 , "gpu_ids": [4] , "datasets": { "train": { "name": "DIV2K800" , "mode": "LRHR" , "dataroot_HR": "/home/guanwp/BasicSR_datasets/DIV2K800_sub" , "dataroot_LR": "/home/guanwp/BasicSR_datasets/DIV2K800_sub_bicLRx4" , "subset_file": null , "use_shuffle": true , "n_workers": 8 , "batch_size": 16//how many samples in each iters , "HR_size": 192 // 128 | 192 , "use_flip": true , "use_rot": true , "val": { "name": "val_set5" , "mode": "LRHR" , "dataroot_HR": "/home/guanwp/BasicSR_datasets/val_set5/Set5" , "dataroot_LR": "/home/guanwp/BasicSR_datasets/val_set5/Set5_sub_bicLRx4" , "path": { "root": "/home/guanwp/BasicSR-master", "pretrain_model_G": null ,"experiments_root": "/home/guanwp/BasicSR-master/experiments/", "models": "/home/guanwp/BasicSR-master/experiments/espcn_x4/models", "log": "/home/guanwp/BasicSR-master/experiments/espcn_x4", "val_images": "/home/guanwp/BasicSR-master/experiments/espcn_x4/val_images" , "network_G": { "which_model_G": "espcn"//"srresnet"//"sr_resnet"//"fsrcnn"//"sr_resnet" // RRDB_net | sr_resnet , "norm_type": null , "mode": "CNA" , "nf": 64//56//64 , "nb": 23 , "in_nc": 3 , "out_nc": 3 , "gc": 32 , "group": 1 , "train": { "lr_G": 1e-3//1e-3//2e-4 , "lr_scheme": "MultiStepLR" , "lr_steps": [200000,400000,600000,800000,1000000,1500000] , "lr_gamma": 0.5 , "pixel_criterion": "l1"//"l1"//'l2'//huber//Cross , "pixel_weight": 1.0 , "val_freq": 5e3 , "manual_seed": 0 , "niter": 2e6//2e6//1e6 , "logger": { "print_freq": 200 , "save_checkpoint_freq": 5e3

target

result

结果比原文的结果差一点点,感觉是由于学习率一开始太小带来的~

在之前的博客中已经介绍了ESPCN的原理了(学习笔记之——基于深度学习的图像超分辨率重构)本博文是对ESPCN进行实现。代码的框架仍然采用xintao前辈的代码,本博文会给出关键的实现部分python train.py -opt options/train/train_sr.jsonpython test.py -opt options/test/test_sr.jsonESPCN的网...
(1) 图的定义:图是由点集V=viV={v_i}V=vi​以及V中元素无序对的集合E=ekE={e_k}E=ek​所构成的二元组,记为G=(V,E)G=(V,E)G=(V,E),V中的元素viv_ivi​称为节点,E中的元素eke_kek​称为边。通俗理解:图是节点和边构成及集合。 (2) 简单图:不含环和多重边的图称为简单图;多重图:含有多重边的图 (3) 完全图:每一对节点之间都有边相连的简单图称为完全图;有向完全图: 每一对节点间有且仅有一条有向边的简单图 (4) 二部图:图G(V,E)G(V,E)
cuda 9.2 python 3.6 github: [https://github.com/leftthomas/ESPCN](https://github.com/leftthomas/ESPCN) 上面github应该是官方代码,但是用的pytorch0.4以前的版本应该是,cuda是8.0,python是2.7 模型输入:原始低分辨率图片 核心:亚像素卷积。在网络的最末端实现LR到HR的分辨率 背景:之前的SRCNN,通过双三次插值得到的高分辨率的图像,直接从低分辨率LR得到了高分辨率的图片。(输入是双三次插值的高分辨率图像(类似于粗糙的高分辨率图像)),那么在网络卷积中就会造成,粗糙的高分辨率图和标签进行计算。这样计算时间复杂度较大。 ESPCN网络模型 # 网络模型代码 import math import torch ├── 视频 │ ├── 1CRM客户关系管理系统_项目的配置以及启动.url │ ├── 2CRM客户关系管理系统_工作桌面_信息中心_邮箱功能_客户管理_订单管理.url │ └── 3CRM客户关系管理系统_财务管理_产品管理_部门管理_岗位管理_数据回收站_权限管.url └── 论文 ├── 基于Java的现代数字化CRM客户关系管理系统答辩ppt.pptx
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
好的,针对您的问题,安装 PyTorch GPU 版本的步骤如下: 1. 确认您的电脑已经安装了支持 CUDA 的 NVIDIA 显卡,并且已经安装了 CUDA 工具包和 cuDNN 库。 2. 打开 PyTorch 官网(https://pytorch.org/),选择相应的 PyTorch 版本和 CUDA 版本,复制对应的安装命令。 3. 打开 Anaconda Prompt 或者终端,输入命令并执行安装。 例如,如果您要安装 PyTorch 1.9.0 版本,CUDA 11.1 版本,Python 3.8 版本的 GPU 版本,可以使用以下命令: conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch -c nvidia 执行完毕后,您就可以在 Python 中使用 PyTorch GPU 版本进行深度学习任务了。