text: # Copyright 2021 Huawei Technologies Co., Ltd
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  _base_ = [
      '../_base_/datasets/coco_detection.py', '../_base_/default_runtime.py'
  ]
  model = dict(
      type='DETR',
      pretrained='torchvision://resnet50',
      backbone=dict(
          type='ResNet',
          depth=50,
          num_stages=4,
          out_indices=(3, ),
          frozen_stages=1,
          norm_cfg=dict(type='BN', requires_grad=False),
          norm_eval=True,
          style='pytorch'),
      bbox_head=dict(
          type='TransformerHead',
          num_classes=80,
          in_channels=2048,
          num_fcs=2,
          transformer=dict(
              type='Transformer',
              embed_dims=256,
              num_heads=8,
              num_encoder_layers=6,
              num_decoder_layers=6,
              feedforward_channels=2048,
              dropout=0.1,
              act_cfg=dict(type='ReLU', inplace=True),
              norm_cfg=dict(type='LN'),
              num_fcs=2,
              pre_norm=False,
              return_intermediate_dec=True),
          positional_encoding=dict(
              type='SinePositionalEncoding', num_feats=128, normalize=True),
          loss_cls=dict(
              type='CrossEntropyLoss',
              bg_cls_weight=0.1,
              use_sigmoid=False,
              loss_weight=1.0,
              class_weight=1.0),
          loss_bbox=dict(type='L1Loss', loss_weight=5.0),
          loss_iou=dict(type='GIoULoss', loss_weight=2.0)))
  # training and testing settings
  train_cfg = dict(
      assigner=dict(
          type='HungarianAssigner', cls_weight=1., bbox_weight=5.,
          iou_weight=2.))
  test_cfg = dict(max_per_img=100)
  img_norm_cfg = dict(
      mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
  # train_pipeline, NOTE the img_scale and the Pad's size_divisor is different
  # from the default setting in mmdet.
  train_pipeline = [
      dict(type='LoadImageFromFile'),
      dict(type='LoadAnnotations', with_bbox=True),
      dict(type='RandomFlip', flip_ratio=0.5),
      dict(
          type='AutoAugment',
          policies=[[
              dict(
                  type='Resize',
                  img_scale=[(480, 1333), (512, 1333), (544, 1333), (576, 1333),
                             (608, 1333), (640, 1333), (672, 1333), (704, 1333),
                             (736, 1333), (768, 1333), (800, 1333)],
                  multiscale_mode='value',
                  keep_ratio=True)
          ],
                    [
                        dict(
                            type='Resize',
                            img_scale=[(400, 1333), (500, 1333), (600, 1333)],
                            multiscale_mode='value',
                            keep_ratio=True),
                        dict(
                            type='RandomCrop',
                            crop_type='absolute_range',
                            crop_size=(384, 600),
                            allow_negative_crop=True),
                        dict(
                            type='Resize',
                            img_scale=[(480, 1333), (512, 1333), (544, 1333),
                                       (576, 1333), (608, 1333), (640, 1333),
                                       (672, 1333), (704, 1333), (736, 1333),
                                       (768, 1333), (800, 1333)],
                            multiscale_mode='value',
                            override=True,
                            keep_ratio=True)
                    ]]),
      dict(type='Normalize', **img_norm_cfg),
      dict(type='Pad', size_divisor=1),
      dict(type='DefaultFormatBundle'),
      dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels'])
  ]
  # test_pipeline, NOTE the Pad's size_divisor is different from the default
  # setting (size_divisor=32). While there is little effect on the performance
  # whether we use the default setting or use size_divisor=1.
  test_pipeline = [
      dict(type='LoadImageFromFile'),
      dict(
          type='MultiScaleFlipAug',
          img_scale=(1333, 800),
          flip=False,
          transforms=[
              dict(type='Resize', keep_ratio=True),
              dict(type='RandomFlip'),
              dict(type='Normalize', **img_norm_cfg),
              dict(type='Pad', size_divisor=1),
              dict(type='ImageToTensor', keys=['img']),
              dict(type='Collect', keys=['img'])
          ])
  ]
  data = dict(
      samples_per_gpu=4,
      workers_per_gpu=4,
      train=dict(pipeline=train_pipeline),
      val=dict(pipeline=test_pipeline),
      test=dict(pipeline=test_pipeline))
  # optimizer
  optimizer = dict(
      type='AdamW',
      lr=0.0001,
      weight_decay=0.0001,
      paramwise_cfg=dict(
          custom_keys={'backbone': dict(lr_mult=0.1, decay_mult=1.0)}))
  optimizer_config = dict(grad_clip=dict(max_norm=0.1, norm_type=2))
  # learning policy
  lr_config = dict(policy='step', step=[100])
  total_epochs = 150
  