The sixth place winning solution (6/220) in 2021 Gaofen Challenge.

Overview

SwinTransformer + OBBDet

The sixth place winning solution (6/220) in the track of Fine-grained Object Recognition in High-Resolution Optical Images, 2021 Gaofen Challenge on Automated High-Resolution Earth Observation Image Interpretation.

Members

Qi Ming, Junjie Song, Yunpeng Dong.

Solution

  • Off-line date augmentation
    We use random combination of affine transformation, flip, scaling, optical distortion for data augmentation.

  • Multi-scale training and testing
    The training images are resized into sizes of 600, 800, and 1024 for training and testing.

  • Strong backbone
    Swin transformer is adopt in ORCNN and RoI Transformer for better performance.

  • Model ensemble
    We have merged the results from RoI Transformer, ORCNN, S2ANet, and ReDet.

  • Lower confidence
    Set the output threshold into 0.005.

Tried but didn't work

  • Soft-NMS.
  • Adjust NMS threshold.
  • Class-agnostic NMS.
  • Mosaic, and mix up for data augmentation.
  • Oversample the categories with fewer instances.
  • Train the detectors for specific classes with low AP.
  • Multi-scale training and testing on SwinTransformer-based detectors (even dropped by about 1% mAP).

Detections

demo image

You might also like...
Kaggle | 9th place single model solution for TGS Salt Identification Challenge

UNet for segmenting salt deposits from seismic images with PyTorch. General We, tugstugi and xuyuan, have participated in the Kaggle competition TGS S

1st place solution to the Satellite Image Change Detection Challenge hosted by SenseTime
1st place solution to the Satellite Image Change Detection Challenge hosted by SenseTime

1st place solution to the Satellite Image Change Detection Challenge hosted by SenseTime

10th place solution for Google Smartphone Decimeter Challenge at kaggle.
10th place solution for Google Smartphone Decimeter Challenge at kaggle.

Under refactoring 10th place solution for Google Smartphone Decimeter Challenge at kaggle. Google Smartphone Decimeter Challenge Global Navigation Sat

Kohei's 5th place solution for xview3 challenge

xview3-kohei-solution Usage This repository assumes that the given data set is stored in the following locations: $ ls data/input/xview3/*.csv data/in

4st place solution for the PBVS 2022 Multi-modal Aerial View Object Classification Challenge - Track 1 (SAR) at PBVS2022
4st place solution for the PBVS 2022 Multi-modal Aerial View Object Classification Challenge - Track 1 (SAR) at PBVS2022

A Two-Stage Shake-Shake Network for Long-tailed Recognition of SAR Aerial View Objects 4st place solution for the PBVS 2022 Multi-modal Aerial View Ob

Winning solution of the Indoor Location & Navigation Kaggle competition
Winning solution of the Indoor Location & Navigation Kaggle competition

This repository contains the code to generate the winning solution of the Kaggle competition on indoor location and navigation organized by Microsoft

An efficient PyTorch implementation of the winning entry of the 2017 VQA Challenge.

Bottom-Up and Top-Down Attention for Visual Question Answering An efficient PyTorch implementation of the winning entry of the 2017 VQA Challenge. The

BirdCLEF 2021 - Birdcall Identification 4th place solution

BirdCLEF 2021 - Birdcall Identification 4th place solution My solution detail kaggle discussion Inference Notebook (best submission) Environment Use K

My 1st place solution at Kaggle Hotel-ID 2021

1st place solution at Kaggle Hotel-ID My 1st place solution at Kaggle Hotel-ID to Combat Human Trafficking 2021. https://www.kaggle.com/c/hotel-id-202

Comments
  • FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmp5luxzbce/tmp2lvn83mu.py'

    FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmp5luxzbce/tmp2lvn83mu.py'

    您好: 我尝试复现你的这个项目,但是因为我的算力不足,我想用HRSC2016数据集,当我把

    mmdet/models/backbones/swin.py mmdet/models/backbones/init.py configs/obb/oriented_rcnn/fasxxx.py 等等文件准备好,并且选择好HRSC2016数据集之后,出现了这个问题:

    FoundError: [Errno 2] No such file or directory: '/tmp/tmp9tms1rcn/tmpidew67pt.py' (obbdetection) root@container-60cd118dac-91f4b7d2:~/OBBDetection# python tools/train.py configs/obb/oriented_rcnn/faster_rcnn_orpn_swin_fpn_3x_hrsc.py --work-dir work_dirs Traceback (most recent call last): File "/root/miniconda3/envs/obbdetection/lib/python3.7/site-packages/mmcv/utils/config.py", line 101, in _validate_py_syntax ast.parse(content) File "/root/miniconda3/envs/obbdetection/lib/python3.7/ast.py", line 35, in parse return compile(source, filename, mode, PyCF_ONLY_AST) File "", line 80 train_cfg = dict( ^ SyntaxError: invalid syntax

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last): File "tools/train.py", line 153, in main() File "tools/train.py", line 64, in main cfg = Config.fromfile(args.config) File "/root/miniconda3/envs/obbdetection/lib/python3.7/site-packages/mmcv/utils/config.py", line 332, in fromfile use_predefined_variables) File "/root/miniconda3/envs/obbdetection/lib/python3.7/site-packages/mmcv/utils/config.py", line 205, in _file2dict Config._validate_py_syntax(filename) File "/root/miniconda3/envs/obbdetection/lib/python3.7/site-packages/mmcv/utils/config.py", line 103, in _validate_py_syntax raise SyntaxError('There are syntax errors in config ' SyntaxError: There are syntax errors in config file /root/OBBDetection/configs/obb/oriented_rcnn/faster_rcnn_orpn_swin_fpn_3x_hrsc.py: invalid syntax (, line 80) Exception ignored in: <function _TemporaryFileCloser.del at 0x7f7604d4aef0> Traceback (most recent call last): File "/root/miniconda3/envs/obbdetection/lib/python3.7/tempfile.py", line 448, in del self.close() File "/root/miniconda3/envs/obbdetection/lib/python3.7/tempfile.py", line 444, in close unlink(self.name) FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmp5luxzbce/tmp2lvn83mu.py' (obbdetection) root@container-60cd118dac-91f4b7d2:~/OBBDetection#

    我把pretrain和optimal等注释掉了,也是不行:

    base = [

    '../base/datasets/dota.py',

    '../base/schedules/schedule_1x.py',

    '../../base/default_runtime.py'

    ]

    base = [ '../base/datasets/hrsc.py', '../base/schedules/schedule_3x.py', '../../base/default_runtime.py' ] model = dict( type='OrientedRCNN', backbone=dict( type='SwinTransformer', embed_dims=96, depths=[2, 2, 6, 2], num_heads=[3, 6, 12, 24], window_size=7, mlp_ratio=4, qkv_bias=True, qk_scale=None, drop_rate=0., attn_drop_rate=0., drop_path_rate=0.2, patch_norm=True, out_indices=(0, 1, 2, 3), with_cp=False, convert_weights=True, # init_cfg=dict(type='Pretrained', checkpoint='swin_tiny_patch4_window7_224.pth')),

    neck=dict(
        type='FPN',
        in_channels=[96, 192, 384, 768],
        out_channels=256,
        num_outs=5),
    rpn_head=dict(
        type='OrientedRPNHead',
        in_channels=256,
        feat_channels=256,
        anchor_generator=dict(
            type='AnchorGenerator',
            scales=[6],
            ratios=[0.5, 1.0, 2.0],
            strides=[4, 8, 16, 32, 64]),
        bbox_coder=dict(
            type='MidpointOffsetCoder',
            target_means=[.0, .0, .0, .0, .0, .0],
            target_stds=[1.0, 1.0, 1.0, 1.0, 0.5, 0.5]),
        loss_cls=dict(
            type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0),
        loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)),
    roi_head=dict(
        type='OBBStandardRoIHead',
        bbox_roi_extractor=dict(
            type='OBBSingleRoIExtractor',
            roi_layer=dict(type='RoIAlignRotated', out_size=7, sample_num=2),
            out_channels=256,
            extend_factor=(1.4, 1.2),
            featmap_strides=[4, 8, 16, 32]),
        bbox_head=dict(
            type='OBBShared2FCBBoxHead',
            start_bbox_type='obb',
            end_bbox_type='obb',
            in_channels=256,
            fc_out_channels=1024,
            roi_feat_size=7,
            num_classes=33,
            bbox_coder=dict(
                type='OBB2OBBDeltaXYWHTCoder',
                target_means=[0., 0., 0., 0., 0.],
                target_stds=[0.1, 0.1, 0.2, 0.2, 0.1]),
            reg_class_agnostic=True,
            loss_cls=dict(
                type='CrossEntropyLoss',
                use_sigmoid=False,
                loss_weight=1.0),
            loss_bbox=dict(type='SmoothL1Loss', beta=1.0,
                           loss_weight=1.0))))
    

    model training and testing settings

    train_cfg = dict( rpn=dict( assigner=dict( type='MaxIoUAssigner', pos_iou_thr=0.7, neg_iou_thr=0.3, min_pos_iou=0.3, match_low_quality=True, gpu_assign_thr=200, ignore_iof_thr=-1), sampler=dict( type='RandomSampler', num=256, pos_fraction=0.5, neg_pos_ub=-1, add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, debug=False), rpn_proposal=dict( nms_across_levels=False, nms_pre=2000, nms_post=2000, max_num=2000, nms_thr=0.8, min_bbox_size=0), rcnn=dict( assigner=dict( type='MaxIoUAssigner', pos_iou_thr=0.5, neg_iou_thr=0.5, min_pos_iou=0.5, match_low_quality=False, ignore_iof_thr=-1, iou_calculator=dict(type='OBBOverlaps')), sampler=dict( type='OBBRandomSampler', num=512, pos_fraction=0.25, neg_pos_ub=-1, add_gt_as_proposals=True), pos_weight=-1, debug=False)) test_cfg = dict( rpn=dict( nms_across_levels=False, nms_pre=2000, nms_post=2000, max_num=2000, nms_thr=0.8, min_bbox_size=0), rcnn=dict( score_thr=0.005, nms=dict(type='obb_nms', iou_thr=0.1), max_per_img=2000))

    optimizer = dict(

    delete=True,

    type='AdamW',

    lr=0.0001,

    betas=(0.9, 0.999),

    weight_decay=0.05,

    paramwise_cfg=dict(

    custom_keys={

    'absolute_pos_embed': dict(decay_mult=0.),

    'relative_position_bias_table': dict(decay_mult=0.),

    'norm': dict(decay_mult=0.)

    }))

    lr_config = dict(warmup_iters=1000, step=[9, 11])

    runner = dict(max_epochs=12)

    请问这个文件是干什么的?

    opened by WaitAtQingDao 1
  • FAIR1M数据集增强

    FAIR1M数据集增强

    您好,我想请问您在对FAIR1M数据集做数据增强的时候使用的是toolbox里面的smart_augment.py吗?如果直接用原图进行增强的话,我使用时每一张图片的增强产生的数量实在是太多了,感觉不太对,请问您当时比赛的时候具体是使用了toolbox中的哪一个文件如何进行的增强呢,十分想完成一下复现,感谢了!(同时我看您博文中提到了随机缩放的方法,请问它对应的增强函数是哪一个呀?)

    如果方便,希望能跟您加个微信学习一下!!

    opened by fffucla 0
The 1st place solution of track2 (Vehicle Re-Identification) in the NVIDIA AI City Challenge at CVPR 2021 Workshop.

AICITY2021_Track2_DMT The 1st place solution of track2 (Vehicle Re-Identification) in the NVIDIA AI City Challenge at CVPR 2021 Workshop. Introduction

Hao Luo 91 Dec 21, 2022
Waymo motion prediction challenge 2021: 3rd place solution

Waymo motion prediction challenge 2021: 3rd place solution ?? Technical report ??️ Presentation ?? Announcement ??Motion Prediction Channel Website ??

null 158 Jan 8, 2023
4th place solution for the SIGIR 2021 challenge.

SIGIR-2021 (Tinkoff.AI) How to start Download train and test data: https://sigir-ecom.github.io/data-task.html Place it under sigir-2021/data/. Run py

Tinkoff.AI 4 Jul 1, 2022
Meli Data Challenge 2021 - First Place Solution

My solution for the Meli Data Challenge 2021

Matias Moreyra 23 Mar 9, 2022
Codebase for the solution that won first place and was awarded the most human-like agent in the 2021 NeurIPS Competition MineRL BASALT Challenge.

KAIROS MineRL BASALT Codebase for the solution that won first place and was awarded the most human-like agent in the 2021 NeurIPS Competition MineRL B

Vinicius G. Goecks 37 Oct 30, 2022
1st place solution in CCF BDCI 2021 ULSEG challenge

1st place solution in CCF BDCI 2021 ULSEG challenge This is the source code of the 1st place solution for ultrasound image angioma segmentation task (

Chenxu Peng 30 Nov 22, 2022
This is the winning solution of the Endocv-2021 grand challange.

Endocv2021-winner [Paper] This is the winning solution of the Endocv-2021 grand challange. Dependencies pytorch # tested with 1.7 and 1.8 torchvision

Vajira Thambawita 14 Dec 3, 2022
Code for 1st place solution in Sleep AI Challenge SNU Hospital

Sleep AI Challenge SNU Hospital 2021 Code for 1st place solution for Sleep AI Challenge (Note that the code is not fully organized) Refer to the notio

Saewon Yang 13 Jan 3, 2022
4th place solution to datafactory challenge by Intermarché.

Solution to Datafactory challenge by Intermarché. 4th place solution to datafactory challenge by Intermarché. The objective of the challenge is to pre

Raphael Sourty 11 Mar 19, 2022
Kaggle | 9th place (part of) solution for the Bristol-Myers Squibb – Molecular Translation challenge

Part of the 9th place solution for the Bristol-Myers Squibb – Molecular Translation challenge translating images containing chemical structures into I

Erdene-Ochir Tuguldur 22 Nov 30, 2022