code: def __init__(self, feature_channels=None, fpn_out=256):
      if feature_channels is None:
          feature_channels = [256, 512, 1024, 2048]
      super(FPN_fuse, self).__init__()
      if feature_channels[0] != fpn_out:
          raise AssertionError
      self.conv1x1 = nn.ModuleList(
          [
              nn.Conv2d(ft_size, fpn_out, kernel_size=1)
              for ft_size in feature_channels[1:]
          ]
      )
      self.smooth_conv = nn.ModuleList(
          [nn.Conv2d(fpn_out, fpn_out, kernel_size=3, padding=1)]
          * (len(feature_channels) - 1)
      )
      self.conv_fusion = nn.Sequential(
          nn.Conv2d(
              len(feature_channels) * fpn_out,
              fpn_out,
              kernel_size=3,
              padding=1,
              bias=False,
          ),
          nn.BatchNorm2d(fpn_out),
          nn.ReLU(inplace=True),
      )
  
imports: import torch
  import logging
  import torch.nn
  import torch.nn.functional
  from torchvision import models
  from itertools import chain
  import numpy
  from collections import OrderedDict
label_desc: Use image node_id 1 to create a new FPN_fuse object from inherited base classes: nn with example: obj = FPN_fuse(feature_channels, fpn_out)