算法debug

run里面配置参数,根据代码输入相应参数即可debug

train里面有个buld_model,跳进去        进入bulider。然后这时是build_model,调用的是这个实质的bulid函数(其他的都是build什么,比如有backone,loss啥的)

然后调用的是registry.py里面的函数

然后到basicsr.py的def --init--即构造器里面。java和python还是挺像的,比如继承父类,就算在这个类的括号(父类名) 

之后就到这个BsicVsr网络了,这就是实质的网络结构了

这个大致debug倒是弄懂了。但是代码封装性太强 好难看 这里调用一下,那里调用下。

Backbone::

从字面意思来看,“backbone”的原意是“人的脊梁骨”,后来引申为“支柱,核心”。

神经网络

中,尤其是CV领域,一般先利用主干网络对图像进行特征提取(常见的主干网络有vggnet,resnet,inception等)。

主干网络,用来做特征提取的网络,代表整个网络的一部分、前部分,一般是用于前端提取图片信息,生成特征图feature map,供后面的网络使用。这一部分是整个CV任务的基础、支柱、主干、核心和上游任务,因为后续的下游任务都是基于提取出来的图像特征去做文章(比如分类,生成等)。

这些“backbone”的特征提取能力很强,并且可以加载训练好的模型参数(比如官方在大型数据集(Pascal 、Imagenet)上训练好的),然后接自己的网络,进行微调(finetune)即可。

所以,将这一部分网络结构称为“backbone”十分形象。

Models和net的区别

网络是一系列算法的集合或组合,它是某种预测的规则,例如按照什么方法去分析处理;而模型是网络+模型数据的产物,也就是说模型是包含了网络结构和训练数据的,网络是我们得到模型的工具;我们在做工程部署的时候一般会说部署模型,而不是网络;可见还是有一些差异的。

这个BasicVSR生成的网络:::::

BasicVSR(
  (generator): BasicVSRNet(
    (spynet): SPyNet(
      (basic_module): ModuleList(
        (0): SPyNetBasicModule(
          (basic_module): Sequential(
            (0): ConvModule(
              (conv): Conv2d(8, 32, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (1): ConvModule(
              (conv): Conv2d(32, 64, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (2): ConvModule(
              (conv): Conv2d(64, 32, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (3): ConvModule(
              (conv): Conv2d(32, 16, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (4): ConvModule(
              (conv): Conv2d(16, 2, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
            )
          )
        )
        (1): SPyNetBasicModule(
          (basic_module): Sequential(
            (0): ConvModule(
              (conv): Conv2d(8, 32, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (1): ConvModule(
              (conv): Conv2d(32, 64, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (2): ConvModule(
              (conv): Conv2d(64, 32, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (3): ConvModule(
              (conv): Conv2d(32, 16, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (4): ConvModule(
              (conv): Conv2d(16, 2, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
            )
          )
        )
        (2): SPyNetBasicModule(
          (basic_module): Sequential(
            (0): ConvModule(
              (conv): Conv2d(8, 32, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (1): ConvModule(
              (conv): Conv2d(32, 64, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (2): ConvModule(
              (conv): Conv2d(64, 32, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (3): ConvModule(
              (conv): Conv2d(32, 16, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (4): ConvModule(
              (conv): Conv2d(16, 2, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
            )
          )
        )
        (3): SPyNetBasicModule(
          (basic_module): Sequential(
            (0): ConvModule(
              (conv): Conv2d(8, 32, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (1): ConvModule(
              (conv): Conv2d(32, 64, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (2): ConvModule(
              (conv): Conv2d(64, 32, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (3): ConvModule(
              (conv): Conv2d(32, 16, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (4): ConvModule(
              (conv): Conv2d(16, 2, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
            )
          )
        )
        (4): SPyNetBasicModule(
          (basic_module): Sequential(
            (0): ConvModule(
              (conv): Conv2d(8, 32, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (1): ConvModule(
              (conv): Conv2d(32, 64, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (2): ConvModule(
              (conv): Conv2d(64, 32, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (3): ConvModule(
              (conv): Conv2d(32, 16, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (4): ConvModule(
              (conv): Conv2d(16, 2, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
            )
          )
        )
        (5): SPyNetBasicModule(
          (basic_module): Sequential(
            (0): ConvModule(
              (conv): Conv2d(8, 32, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (1): ConvModule(
              (conv): Conv2d(32, 64, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (2): ConvModule(
              (conv): Conv2d(64, 32, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (3): ConvModule(
              (conv): Conv2d(32, 16, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
              (activate): ReLU(inplace=True)
            )
            (4): ConvModule(
              (conv): Conv2d(16, 2, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))
            )
          )
        )
      )
    )
    (backward_resblocks): ResidualBlocksWithInputConv(
      (main): Sequential(
        (0): Conv2d(67, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
        (1): LeakyReLU(negative_slope=0.1, inplace=True)
        (2): Sequential(
          (0): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (1): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (2): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (3): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (4): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (5): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (6): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (7): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (8): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (9): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (10): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (11): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (12): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (13): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (14): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (15): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (16): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (17): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (18): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (19): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (20): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (21): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (22): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (23): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (24): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (25): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (26): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (27): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (28): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (29): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
        )
      )
    )
    (forward_resblocks): ResidualBlocksWithInputConv(
      (main): Sequential(
        (0): Conv2d(67, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
        (1): LeakyReLU(negative_slope=0.1, inplace=True)
        (2): Sequential(
          (0): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (1): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (2): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (3): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (4): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (5): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (6): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (7): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (8): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (9): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (10): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (11): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (12): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (13): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (14): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (15): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (16): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (17): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (18): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (19): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (20): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (21): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (22): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (23): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (24): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (25): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (26): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (27): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (28): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
          (29): ResidualBlockNoBN(
            (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (relu): ReLU(inplace=True)
          )
        )
      )
    )
    (fusion): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1))
    (upsample1): PixelShufflePack(
      (upsample_conv): Conv2d(64, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    )
    (upsample2): PixelShufflePack(
      (upsample_conv): Conv2d(64, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    )
    (conv_hr): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (conv_last): Conv2d(64, 3, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (img_upsample): Upsample(scale_factor=4.0, mode=bilinear)
    (lrelu): LeakyReLU(negative_slope=0.1, inplace=True)
  )
  (pixel_loss): CharbonnierLoss()
)

感受野:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值