docstr: 为backbone(resnet50)添加额外的一系列卷积层，得到相应的一系列特征提取器
  :param input_size:
  :return:
docstr_tok: ["\u4e3abackbone","(","resnet50",")","\u6dfb\u52a0\u989d\u5916\u7684\u4e00\u7cfb\u5217\u5377\u79ef\u5c42\uff0c\u5f97\u5230\u76f8\u5e94\u7684\u4e00\u7cfb\u5217\u7279\u5f81\u63d0\u53d6\u5668",":","param","input_size",":",":","return",":"]
code: def _build_additional_features(self, input_size):
      """
      为backbone(resnet50)添加额外的一系列卷积层，得到相应的一系列特征提取器
      :param input_size:
      :return:
      """
      additional_blocks = []
      # input_size = [1024, 512, 512, 256, 256, 256] for resnet50
      middle_channels = [256, 256, 128, 128, 128]
      for i, (input_ch, output_ch, middle_ch) in enumerate(
          zip(input_size[:-1], input_size[1:], middle_channels)
      ):
          padding, stride = (1, 2) if i < 3 else (0, 1)
          layer = nn.Sequential(
              nn.Conv2d(input_ch, middle_ch, kernel_size=1, bias=False),
              nn.BatchNorm2d(middle_ch),
              nn.ReLU(inplace=True),
              nn.Conv2d(
                  middle_ch,
                  output_ch,
                  kernel_size=3,
                  padding=padding,
                  stride=stride,
                  bias=False,
              ),
              nn.BatchNorm2d(output_ch),
              nn.ReLU(inplace=True),
          )
          additional_blocks.append(layer)
      self.additional_blocks = nn.ModuleList(additional_blocks)
  
imports: import torch
  from torch import nn, Tensor
  from torch.jit.annotations import List
  from .res50_backbone import resnet50
  from .utils import dboxes300_coco, Encoder, PostProcess
label_desc: Use image node_id 2 for calling the SSD300 obj's underlying member method code with example usage: obj._build_additional_features(input_size) without return types