From d2483e15fc48b4166815c15a6e12be864bcc521a Mon Sep 17 00:00:00 2001
From: Kai Chen <chenkaidev@gmail.com>
Date: Wed, 31 Jul 2019 14:37:46 +0800
Subject: [PATCH] Use isort to sort imports and setup travis (#1085)

* add isort config

* use isort to sort imports

* add isort to travis
---
 .isort.cfg                                           |  7 +++++++
 .travis.yml                                          |  3 ++-
 mmdet/apis/train.py                                  | 10 ++++------
 mmdet/core/anchor/anchor_target.py                   |  2 +-
 mmdet/core/anchor/guided_anchor_target.py            |  4 ++--
 mmdet/core/bbox/assigners/approx_max_iou_assigner.py |  2 +-
 mmdet/core/bbox/assigners/max_iou_assigner.py        |  4 ++--
 mmdet/core/bbox/bbox_target.py                       |  2 +-
 mmdet/core/bbox/samplers/combined_sampler.py         |  2 +-
 mmdet/core/bbox/samplers/ohem_sampler.py             |  2 +-
 mmdet/core/evaluation/eval_hooks.py                  |  6 +++---
 mmdet/core/fp16/hooks.py                             |  3 ++-
 mmdet/core/mask/mask_target.py                       |  4 ++--
 mmdet/core/post_processing/merge_augs.py             |  3 +--
 mmdet/core/utils/dist_utils.py                       |  4 ++--
 mmdet/datasets/custom.py                             |  8 ++++----
 mmdet/datasets/loader/build_loader.py                |  4 ++--
 mmdet/datasets/loader/sampler.py                     |  7 +++----
 mmdet/models/anchor_heads/anchor_head.py             |  4 ++--
 mmdet/models/anchor_heads/fcos_head.py               |  4 ++--
 mmdet/models/anchor_heads/ga_retina_head.py          |  6 +++---
 mmdet/models/anchor_heads/ga_rpn_head.py             |  2 +-
 mmdet/models/anchor_heads/guided_anchor_head.py      |  8 ++++----
 mmdet/models/anchor_heads/retina_head.py             |  4 ++--
 mmdet/models/anchor_heads/rpn_head.py                |  2 +-
 mmdet/models/anchor_heads/ssd_head.py                |  2 +-
 mmdet/models/backbones/hrnet.py                      |  2 +-
 mmdet/models/backbones/resnet.py                     |  6 ++----
 mmdet/models/backbones/resnext.py                    |  4 ++--
 mmdet/models/backbones/ssd_vgg.py                    |  3 +--
 mmdet/models/bbox_heads/bbox_head.py                 |  4 ++--
 mmdet/models/bbox_heads/convfc_bbox_head.py          |  2 +-
 mmdet/models/builder.py                              |  4 ++--
 mmdet/models/detectors/base.py                       |  4 ++--
 mmdet/models/detectors/cascade_rcnn.py               |  8 ++++----
 mmdet/models/detectors/fast_rcnn.py                  |  2 +-
 mmdet/models/detectors/faster_rcnn.py                |  2 +-
 mmdet/models/detectors/fcos.py                       |  2 +-
 mmdet/models/detectors/grid_rcnn.py                  |  7 +++----
 mmdet/models/detectors/htc.py                        |  6 +++---
 mmdet/models/detectors/mask_rcnn.py                  |  2 +-
 mmdet/models/detectors/mask_scoring_rcnn.py          |  2 +-
 mmdet/models/detectors/retinanet.py                  |  2 +-
 mmdet/models/detectors/rpn.py                        |  6 +++---
 mmdet/models/detectors/single_stage.py               |  4 ++--
 mmdet/models/detectors/test_mixins.py                |  4 ++--
 mmdet/models/detectors/two_stage.py                  |  6 +++---
 mmdet/models/losses/balanced_l1_loss.py              |  2 +-
 mmdet/models/losses/cross_entropy_loss.py            |  2 +-
 mmdet/models/losses/focal_loss.py                    |  2 +-
 mmdet/models/losses/iou_loss.py                      |  2 +-
 mmdet/models/losses/mse_loss.py                      |  2 +-
 mmdet/models/losses/smooth_l1_loss.py                |  2 +-
 mmdet/models/mask_heads/fcn_mask_head.py             |  2 +-
 mmdet/models/mask_heads/htc_mask_head.py             |  2 +-
 mmdet/models/mask_heads/maskiou_head.py              |  2 +-
 mmdet/models/necks/hrfpn.py                          |  4 ++--
 mmdet/models/plugins/generalized_attention.py        |  6 +++---
 mmdet/models/utils/conv_module.py                    |  2 +-
 mmdet/ops/nms/nms_wrapper.py                         |  2 +-
 mmdet/ops/roi_align/gradcheck.py                     |  7 ++++---
 mmdet/ops/roi_pool/gradcheck.py                      |  7 ++++---
 tools/publish_model.py                               |  1 +
 tools/test.py                                        |  4 ++--
 tools/train.py                                       |  8 ++++----
 65 files changed, 127 insertions(+), 123 deletions(-)
 create mode 100644 .isort.cfg

diff --git a/.isort.cfg b/.isort.cfg
new file mode 100644
index 0000000..c1684dd
--- /dev/null
+++ b/.isort.cfg
@@ -0,0 +1,7 @@
+[isort]
+line_length = 79
+multi_line_output = 0
+known_first_party = mmdet
+known_third_party = mmcv,numpy,matplotlib,pycocotools,six,seaborn,terminaltables,torch,torchvision
+no_lines_before = STDLIB,LOCALFOLDER
+default_section = THIRDPARTY
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
index 127b903..8ef07f0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,7 +2,7 @@ dist: xenial
 language: python
 
 install:
-  - pip install flake8 yapf
+  - pip install isort flake8 yapf 
 
 python:
   - "3.5"
@@ -11,4 +11,5 @@ python:
 
 script:
   - flake8
+  - isort -rc --diff mmdet/ tools/
   - yapf -r -d --style .style.yapf mmdet/ tools/
\ No newline at end of file
diff --git a/mmdet/apis/train.py b/mmdet/apis/train.py
index 0ebbb9e..dc51381 100644
--- a/mmdet/apis/train.py
+++ b/mmdet/apis/train.py
@@ -1,17 +1,15 @@
 from __future__ import division
-
 import re
 from collections import OrderedDict
 
 import torch
-from mmcv.runner import Runner, DistSamplerSeedHook, obj_from_dict
 from mmcv.parallel import MMDataParallel, MMDistributedDataParallel
+from mmcv.runner import DistSamplerSeedHook, Runner, obj_from_dict
 
 from mmdet import datasets
-from mmdet.core import (DistOptimizerHook, DistEvalmAPHook,
-                        CocoDistEvalRecallHook, CocoDistEvalmAPHook,
-                        Fp16OptimizerHook)
-from mmdet.datasets import build_dataloader, DATASETS
+from mmdet.core import (CocoDistEvalmAPHook, CocoDistEvalRecallHook,
+                        DistEvalmAPHook, DistOptimizerHook, Fp16OptimizerHook)
+from mmdet.datasets import DATASETS, build_dataloader
 from mmdet.models import RPN
 from .env import get_root_logger
 
diff --git a/mmdet/core/anchor/anchor_target.py b/mmdet/core/anchor/anchor_target.py
index 60c902e..91238e6 100644
--- a/mmdet/core/anchor/anchor_target.py
+++ b/mmdet/core/anchor/anchor_target.py
@@ -1,6 +1,6 @@
 import torch
 
-from ..bbox import assign_and_sample, build_assigner, PseudoSampler, bbox2delta
+from ..bbox import PseudoSampler, assign_and_sample, bbox2delta, build_assigner
 from ..utils import multi_apply
 
 
diff --git a/mmdet/core/anchor/guided_anchor_target.py b/mmdet/core/anchor/guided_anchor_target.py
index 7284a73..21abe5e 100644
--- a/mmdet/core/anchor/guided_anchor_target.py
+++ b/mmdet/core/anchor/guided_anchor_target.py
@@ -1,7 +1,7 @@
 import torch
 
-from ..bbox import build_assigner, build_sampler, PseudoSampler
-from ..utils import unmap, multi_apply
+from ..bbox import PseudoSampler, build_assigner, build_sampler
+from ..utils import multi_apply, unmap
 
 
 def calc_region(bbox, ratio, featmap_size=None):
diff --git a/mmdet/core/bbox/assigners/approx_max_iou_assigner.py b/mmdet/core/bbox/assigners/approx_max_iou_assigner.py
index 867a56b..4ab5259 100644
--- a/mmdet/core/bbox/assigners/approx_max_iou_assigner.py
+++ b/mmdet/core/bbox/assigners/approx_max_iou_assigner.py
@@ -1,7 +1,7 @@
 import torch
 
-from .max_iou_assigner import MaxIoUAssigner
 from ..geometry import bbox_overlaps
+from .max_iou_assigner import MaxIoUAssigner
 
 
 class ApproxMaxIoUAssigner(MaxIoUAssigner):
diff --git a/mmdet/core/bbox/assigners/max_iou_assigner.py b/mmdet/core/bbox/assigners/max_iou_assigner.py
index 99dcbe8..5c93b36 100644
--- a/mmdet/core/bbox/assigners/max_iou_assigner.py
+++ b/mmdet/core/bbox/assigners/max_iou_assigner.py
@@ -1,8 +1,8 @@
 import torch
 
-from .base_assigner import BaseAssigner
-from .assign_result import AssignResult
 from ..geometry import bbox_overlaps
+from .assign_result import AssignResult
+from .base_assigner import BaseAssigner
 
 
 class MaxIoUAssigner(BaseAssigner):
diff --git a/mmdet/core/bbox/bbox_target.py b/mmdet/core/bbox/bbox_target.py
index 20b3957..2a918bf 100644
--- a/mmdet/core/bbox/bbox_target.py
+++ b/mmdet/core/bbox/bbox_target.py
@@ -1,7 +1,7 @@
 import torch
 
-from .transforms import bbox2delta
 from ..utils import multi_apply
+from .transforms import bbox2delta
 
 
 def bbox_target(pos_bboxes_list,
diff --git a/mmdet/core/bbox/samplers/combined_sampler.py b/mmdet/core/bbox/samplers/combined_sampler.py
index 25e820b..351a097 100644
--- a/mmdet/core/bbox/samplers/combined_sampler.py
+++ b/mmdet/core/bbox/samplers/combined_sampler.py
@@ -1,5 +1,5 @@
-from .base_sampler import BaseSampler
 from ..assign_sampling import build_sampler
+from .base_sampler import BaseSampler
 
 
 class CombinedSampler(BaseSampler):
diff --git a/mmdet/core/bbox/samplers/ohem_sampler.py b/mmdet/core/bbox/samplers/ohem_sampler.py
index 0711d97..2500f31 100644
--- a/mmdet/core/bbox/samplers/ohem_sampler.py
+++ b/mmdet/core/bbox/samplers/ohem_sampler.py
@@ -1,7 +1,7 @@
 import torch
 
-from .base_sampler import BaseSampler
 from ..transforms import bbox2roi
+from .base_sampler import BaseSampler
 
 
 class OHEMSampler(BaseSampler):
diff --git a/mmdet/core/evaluation/eval_hooks.py b/mmdet/core/evaluation/eval_hooks.py
index 1786d93..c37f7bd 100644
--- a/mmdet/core/evaluation/eval_hooks.py
+++ b/mmdet/core/evaluation/eval_hooks.py
@@ -5,14 +5,14 @@ import mmcv
 import numpy as np
 import torch
 import torch.distributed as dist
+from mmcv.parallel import collate, scatter
 from mmcv.runner import Hook
-from mmcv.parallel import scatter, collate
 from pycocotools.cocoeval import COCOeval
 from torch.utils.data import Dataset
 
-from .coco_utils import results2json, fast_eval_recall
-from .mean_ap import eval_map
 from mmdet import datasets
+from .coco_utils import fast_eval_recall, results2json
+from .mean_ap import eval_map
 
 
 class DistEvalHook(Hook):
diff --git a/mmdet/core/fp16/hooks.py b/mmdet/core/fp16/hooks.py
index b1ab45e..6b4dacb 100644
--- a/mmdet/core/fp16/hooks.py
+++ b/mmdet/core/fp16/hooks.py
@@ -1,10 +1,11 @@
 import copy
+
 import torch
 import torch.nn as nn
 from mmcv.runner import OptimizerHook
 
-from .utils import cast_tensor_type
 from ..utils.dist_utils import allreduce_grads
+from .utils import cast_tensor_type
 
 
 class Fp16OptimizerHook(OptimizerHook):
diff --git a/mmdet/core/mask/mask_target.py b/mmdet/core/mask/mask_target.py
index be93dfc..0acbc00 100644
--- a/mmdet/core/mask/mask_target.py
+++ b/mmdet/core/mask/mask_target.py
@@ -1,6 +1,6 @@
-import torch
-import numpy as np
 import mmcv
+import numpy as np
+import torch
 
 
 def mask_target(pos_proposals_list, pos_assigned_gt_inds_list, gt_masks_list,
diff --git a/mmdet/core/post_processing/merge_augs.py b/mmdet/core/post_processing/merge_augs.py
index f97954b..fcee4fb 100644
--- a/mmdet/core/post_processing/merge_augs.py
+++ b/mmdet/core/post_processing/merge_augs.py
@@ -1,6 +1,5 @@
-import torch
-
 import numpy as np
+import torch
 
 from mmdet.ops import nms
 from ..bbox import bbox_mapping_back
diff --git a/mmdet/core/utils/dist_utils.py b/mmdet/core/utils/dist_utils.py
index 51d7e3c..be830b6 100644
--- a/mmdet/core/utils/dist_utils.py
+++ b/mmdet/core/utils/dist_utils.py
@@ -1,9 +1,9 @@
 from collections import OrderedDict
 
 import torch.distributed as dist
-from torch._utils import (_flatten_dense_tensors, _unflatten_dense_tensors,
-                          _take_tensors)
 from mmcv.runner import OptimizerHook
+from torch._utils import (_flatten_dense_tensors, _take_tensors,
+                          _unflatten_dense_tensors)
 
 
 def _allreduce_coalesced(tensors, world_size, bucket_size_mb=-1):
diff --git a/mmdet/datasets/custom.py b/mmdet/datasets/custom.py
index e0ea78c..18d7195 100644
--- a/mmdet/datasets/custom.py
+++ b/mmdet/datasets/custom.py
@@ -6,11 +6,11 @@ import numpy as np
 from mmcv.parallel import DataContainer as DC
 from torch.utils.data import Dataset
 
-from .registry import DATASETS
-from .transforms import (ImageTransform, BboxTransform, MaskTransform,
-                         SegMapTransform, Numpy2Tensor)
-from .utils import to_tensor, random_scale
 from .extra_aug import ExtraAugmentation
+from .registry import DATASETS
+from .transforms import (BboxTransform, ImageTransform, MaskTransform,
+                         Numpy2Tensor, SegMapTransform)
+from .utils import random_scale, to_tensor
 
 
 @DATASETS.register_module
diff --git a/mmdet/datasets/loader/build_loader.py b/mmdet/datasets/loader/build_loader.py
index 1843713..d3746e1 100644
--- a/mmdet/datasets/loader/build_loader.py
+++ b/mmdet/datasets/loader/build_loader.py
@@ -1,11 +1,11 @@
 import platform
 from functools import partial
 
-from mmcv.runner import get_dist_info
 from mmcv.parallel import collate
+from mmcv.runner import get_dist_info
 from torch.utils.data import DataLoader
 
-from .sampler import GroupSampler, DistributedGroupSampler, DistributedSampler
+from .sampler import DistributedGroupSampler, DistributedSampler, GroupSampler
 
 if platform.system() != 'Windows':
     # https://github.com/pytorch/pytorch/issues/973
diff --git a/mmdet/datasets/loader/sampler.py b/mmdet/datasets/loader/sampler.py
index c222eb2..6c52900 100644
--- a/mmdet/datasets/loader/sampler.py
+++ b/mmdet/datasets/loader/sampler.py
@@ -1,12 +1,11 @@
 from __future__ import division
-
 import math
-import torch
-import numpy as np
 
+import numpy as np
+import torch
 from mmcv.runner.utils import get_dist_info
-from torch.utils.data import Sampler
 from torch.utils.data import DistributedSampler as _DistributedSampler
+from torch.utils.data import Sampler
 
 
 class DistributedSampler(_DistributedSampler):
diff --git a/mmdet/models/anchor_heads/anchor_head.py b/mmdet/models/anchor_heads/anchor_head.py
index 2b8b144..b3fb5b4 100644
--- a/mmdet/models/anchor_heads/anchor_head.py
+++ b/mmdet/models/anchor_heads/anchor_head.py
@@ -5,8 +5,8 @@ import torch
 import torch.nn as nn
 from mmcv.cnn import normal_init
 
-from mmdet.core import (AnchorGenerator, anchor_target, delta2bbox,
-                        multi_apply, multiclass_nms, force_fp32)
+from mmdet.core import (AnchorGenerator, anchor_target, delta2bbox, force_fp32,
+                        multi_apply, multiclass_nms)
 from ..builder import build_loss
 from ..registry import HEADS
 
diff --git a/mmdet/models/anchor_heads/fcos_head.py b/mmdet/models/anchor_heads/fcos_head.py
index 957906d..6ddf6c1 100644
--- a/mmdet/models/anchor_heads/fcos_head.py
+++ b/mmdet/models/anchor_heads/fcos_head.py
@@ -2,10 +2,10 @@ import torch
 import torch.nn as nn
 from mmcv.cnn import normal_init
 
-from mmdet.core import multi_apply, multiclass_nms, distance2bbox, force_fp32
+from mmdet.core import distance2bbox, force_fp32, multi_apply, multiclass_nms
 from ..builder import build_loss
 from ..registry import HEADS
-from ..utils import bias_init_with_prob, Scale, ConvModule
+from ..utils import ConvModule, Scale, bias_init_with_prob
 
 INF = 1e8
 
diff --git a/mmdet/models/anchor_heads/ga_retina_head.py b/mmdet/models/anchor_heads/ga_retina_head.py
index 40ad049..73f89d7 100644
--- a/mmdet/models/anchor_heads/ga_retina_head.py
+++ b/mmdet/models/anchor_heads/ga_retina_head.py
@@ -1,10 +1,10 @@
 import torch.nn as nn
 from mmcv.cnn import normal_init
 
-from .guided_anchor_head import GuidedAnchorHead, FeatureAdaption
-from ..registry import HEADS
-from ..utils import bias_init_with_prob, ConvModule
 from mmdet.ops import MaskedConv2d
+from ..registry import HEADS
+from ..utils import ConvModule, bias_init_with_prob
+from .guided_anchor_head import FeatureAdaption, GuidedAnchorHead
 
 
 @HEADS.register_module
diff --git a/mmdet/models/anchor_heads/ga_rpn_head.py b/mmdet/models/anchor_heads/ga_rpn_head.py
index aecef2b..11512ff 100644
--- a/mmdet/models/anchor_heads/ga_rpn_head.py
+++ b/mmdet/models/anchor_heads/ga_rpn_head.py
@@ -5,8 +5,8 @@ from mmcv.cnn import normal_init
 
 from mmdet.core import delta2bbox
 from mmdet.ops import nms
-from .guided_anchor_head import GuidedAnchorHead
 from ..registry import HEADS
+from .guided_anchor_head import GuidedAnchorHead
 
 
 @HEADS.register_module
diff --git a/mmdet/models/anchor_heads/guided_anchor_head.py b/mmdet/models/anchor_heads/guided_anchor_head.py
index c3cc705..d2d71d0 100644
--- a/mmdet/models/anchor_heads/guided_anchor_head.py
+++ b/mmdet/models/anchor_heads/guided_anchor_head.py
@@ -5,14 +5,14 @@ import torch
 import torch.nn as nn
 from mmcv.cnn import normal_init
 
-from mmdet.core import (AnchorGenerator, anchor_target, anchor_inside_flags,
-                        ga_loc_target, ga_shape_target, delta2bbox,
-                        multi_apply, multiclass_nms, force_fp32)
+from mmdet.core import (AnchorGenerator, anchor_inside_flags, anchor_target,
+                        delta2bbox, force_fp32, ga_loc_target, ga_shape_target,
+                        multi_apply, multiclass_nms)
 from mmdet.ops import DeformConv, MaskedConv2d
 from ..builder import build_loss
-from .anchor_head import AnchorHead
 from ..registry import HEADS
 from ..utils import bias_init_with_prob
+from .anchor_head import AnchorHead
 
 
 class FeatureAdaption(nn.Module):
diff --git a/mmdet/models/anchor_heads/retina_head.py b/mmdet/models/anchor_heads/retina_head.py
index 53a5cc9..045db70 100644
--- a/mmdet/models/anchor_heads/retina_head.py
+++ b/mmdet/models/anchor_heads/retina_head.py
@@ -2,9 +2,9 @@ import numpy as np
 import torch.nn as nn
 from mmcv.cnn import normal_init
 
-from .anchor_head import AnchorHead
 from ..registry import HEADS
-from ..utils import bias_init_with_prob, ConvModule
+from ..utils import ConvModule, bias_init_with_prob
+from .anchor_head import AnchorHead
 
 
 @HEADS.register_module
diff --git a/mmdet/models/anchor_heads/rpn_head.py b/mmdet/models/anchor_heads/rpn_head.py
index 0a5fd37..50f1cc5 100644
--- a/mmdet/models/anchor_heads/rpn_head.py
+++ b/mmdet/models/anchor_heads/rpn_head.py
@@ -5,8 +5,8 @@ from mmcv.cnn import normal_init
 
 from mmdet.core import delta2bbox
 from mmdet.ops import nms
-from .anchor_head import AnchorHead
 from ..registry import HEADS
+from .anchor_head import AnchorHead
 
 
 @HEADS.register_module
diff --git a/mmdet/models/anchor_heads/ssd_head.py b/mmdet/models/anchor_heads/ssd_head.py
index db86c47..600dd4a 100644
--- a/mmdet/models/anchor_heads/ssd_head.py
+++ b/mmdet/models/anchor_heads/ssd_head.py
@@ -5,9 +5,9 @@ import torch.nn.functional as F
 from mmcv.cnn import xavier_init
 
 from mmdet.core import AnchorGenerator, anchor_target, multi_apply
-from .anchor_head import AnchorHead
 from ..losses import smooth_l1_loss
 from ..registry import HEADS
+from .anchor_head import AnchorHead
 
 
 # TODO: add loss evaluator for SSD
diff --git a/mmdet/models/backbones/hrnet.py b/mmdet/models/backbones/hrnet.py
index 178d102..9c942d6 100644
--- a/mmdet/models/backbones/hrnet.py
+++ b/mmdet/models/backbones/hrnet.py
@@ -6,7 +6,7 @@ from mmcv.runner import load_checkpoint
 from torch.nn.modules.batchnorm import _BatchNorm
 
 from ..registry import BACKBONES
-from ..utils import build_norm_layer, build_conv_layer
+from ..utils import build_conv_layer, build_norm_layer
 from .resnet import BasicBlock, Bottleneck
 
 
diff --git a/mmdet/models/backbones/resnet.py b/mmdet/models/backbones/resnet.py
index abe1280..eaead29 100644
--- a/mmdet/models/backbones/resnet.py
+++ b/mmdet/models/backbones/resnet.py
@@ -2,14 +2,12 @@ import logging
 
 import torch.nn as nn
 import torch.utils.checkpoint as cp
-from torch.nn.modules.batchnorm import _BatchNorm
-
 from mmcv.cnn import constant_init, kaiming_init
 from mmcv.runner import load_checkpoint
+from torch.nn.modules.batchnorm import _BatchNorm
 
-from mmdet.ops import DeformConv, ModulatedDeformConv, ContextBlock
 from mmdet.models.plugins import GeneralizedAttention
-
+from mmdet.ops import ContextBlock, DeformConv, ModulatedDeformConv
 from ..registry import BACKBONES
 from ..utils import build_conv_layer, build_norm_layer
 
diff --git a/mmdet/models/backbones/resnext.py b/mmdet/models/backbones/resnext.py
index c0b42b2..c5feaa4 100644
--- a/mmdet/models/backbones/resnext.py
+++ b/mmdet/models/backbones/resnext.py
@@ -3,10 +3,10 @@ import math
 import torch.nn as nn
 
 from mmdet.ops import DeformConv, ModulatedDeformConv
-from .resnet import Bottleneck as _Bottleneck
-from .resnet import ResNet
 from ..registry import BACKBONES
 from ..utils import build_conv_layer, build_norm_layer
+from .resnet import Bottleneck as _Bottleneck
+from .resnet import ResNet
 
 
 class Bottleneck(_Bottleneck):
diff --git a/mmdet/models/backbones/ssd_vgg.py b/mmdet/models/backbones/ssd_vgg.py
index f7ba8a4..ae65711 100644
--- a/mmdet/models/backbones/ssd_vgg.py
+++ b/mmdet/models/backbones/ssd_vgg.py
@@ -3,8 +3,7 @@ import logging
 import torch
 import torch.nn as nn
 import torch.nn.functional as F
-from mmcv.cnn import (VGG, xavier_init, constant_init, kaiming_init,
-                      normal_init)
+from mmcv.cnn import VGG, constant_init, kaiming_init, normal_init, xavier_init
 from mmcv.runner import load_checkpoint
 
 from ..registry import BACKBONES
diff --git a/mmdet/models/bbox_heads/bbox_head.py b/mmdet/models/bbox_heads/bbox_head.py
index df80570..1a155f9 100644
--- a/mmdet/models/bbox_heads/bbox_head.py
+++ b/mmdet/models/bbox_heads/bbox_head.py
@@ -2,8 +2,8 @@ import torch
 import torch.nn as nn
 import torch.nn.functional as F
 
-from mmdet.core import (delta2bbox, multiclass_nms, bbox_target, force_fp32,
-                        auto_fp16)
+from mmdet.core import (auto_fp16, bbox_target, delta2bbox, force_fp32,
+                        multiclass_nms)
 from ..builder import build_loss
 from ..losses import accuracy
 from ..registry import HEADS
diff --git a/mmdet/models/bbox_heads/convfc_bbox_head.py b/mmdet/models/bbox_heads/convfc_bbox_head.py
index 470c511..801cf8f 100644
--- a/mmdet/models/bbox_heads/convfc_bbox_head.py
+++ b/mmdet/models/bbox_heads/convfc_bbox_head.py
@@ -1,8 +1,8 @@
 import torch.nn as nn
 
-from .bbox_head import BBoxHead
 from ..registry import HEADS
 from ..utils import ConvModule
+from .bbox_head import BBoxHead
 
 
 @HEADS.register_module
diff --git a/mmdet/models/builder.py b/mmdet/models/builder.py
index 0c9b644..dc82ab7 100644
--- a/mmdet/models/builder.py
+++ b/mmdet/models/builder.py
@@ -1,8 +1,8 @@
 from torch import nn
 
 from mmdet.utils import build_from_cfg
-from .registry import (BACKBONES, NECKS, ROI_EXTRACTORS, SHARED_HEADS, HEADS,
-                       LOSSES, DETECTORS)
+from .registry import (BACKBONES, DETECTORS, HEADS, LOSSES, NECKS,
+                       ROI_EXTRACTORS, SHARED_HEADS)
 
 
 def build(cfg, registry, default_args=None):
diff --git a/mmdet/models/detectors/base.py b/mmdet/models/detectors/base.py
index 96fb48e..038dd10 100644
--- a/mmdet/models/detectors/base.py
+++ b/mmdet/models/detectors/base.py
@@ -3,10 +3,10 @@ from abc import ABCMeta, abstractmethod
 
 import mmcv
 import numpy as np
-import torch.nn as nn
 import pycocotools.mask as maskUtils
+import torch.nn as nn
 
-from mmdet.core import tensor2imgs, get_classes, auto_fp16
+from mmdet.core import auto_fp16, get_classes, tensor2imgs
 
 
 class BaseDetector(nn.Module):
diff --git a/mmdet/models/detectors/cascade_rcnn.py b/mmdet/models/detectors/cascade_rcnn.py
index f76bdc5..9bd0207 100644
--- a/mmdet/models/detectors/cascade_rcnn.py
+++ b/mmdet/models/detectors/cascade_rcnn.py
@@ -3,12 +3,12 @@ from __future__ import division
 import torch
 import torch.nn as nn
 
-from .base import BaseDetector
-from .test_mixins import RPNTestMixin
+from mmdet.core import (bbox2result, bbox2roi, build_assigner, build_sampler,
+                        merge_aug_masks)
 from .. import builder
 from ..registry import DETECTORS
-from mmdet.core import (build_assigner, bbox2roi, bbox2result, build_sampler,
-                        merge_aug_masks)
+from .base import BaseDetector
+from .test_mixins import RPNTestMixin
 
 
 @DETECTORS.register_module
diff --git a/mmdet/models/detectors/fast_rcnn.py b/mmdet/models/detectors/fast_rcnn.py
index 64c0391..9e3b2aa 100644
--- a/mmdet/models/detectors/fast_rcnn.py
+++ b/mmdet/models/detectors/fast_rcnn.py
@@ -1,5 +1,5 @@
-from .two_stage import TwoStageDetector
 from ..registry import DETECTORS
+from .two_stage import TwoStageDetector
 
 
 @DETECTORS.register_module
diff --git a/mmdet/models/detectors/faster_rcnn.py b/mmdet/models/detectors/faster_rcnn.py
index b4e961b..969cd7c 100644
--- a/mmdet/models/detectors/faster_rcnn.py
+++ b/mmdet/models/detectors/faster_rcnn.py
@@ -1,5 +1,5 @@
-from .two_stage import TwoStageDetector
 from ..registry import DETECTORS
+from .two_stage import TwoStageDetector
 
 
 @DETECTORS.register_module
diff --git a/mmdet/models/detectors/fcos.py b/mmdet/models/detectors/fcos.py
index 4c3dce1..89cc592 100644
--- a/mmdet/models/detectors/fcos.py
+++ b/mmdet/models/detectors/fcos.py
@@ -1,5 +1,5 @@
-from .single_stage import SingleStageDetector
 from ..registry import DETECTORS
+from .single_stage import SingleStageDetector
 
 
 @DETECTORS.register_module
diff --git a/mmdet/models/detectors/grid_rcnn.py b/mmdet/models/detectors/grid_rcnn.py
index 49c4a33..2c32164 100644
--- a/mmdet/models/detectors/grid_rcnn.py
+++ b/mmdet/models/detectors/grid_rcnn.py
@@ -1,10 +1,9 @@
-from .two_stage import TwoStageDetector
-from ..registry import DETECTORS
-
 import torch
 
+from mmdet.core import bbox2result, bbox2roi, build_assigner, build_sampler
 from .. import builder
-from mmdet.core import bbox2roi, bbox2result, build_assigner, build_sampler
+from ..registry import DETECTORS
+from .two_stage import TwoStageDetector
 
 
 @DETECTORS.register_module
diff --git a/mmdet/models/detectors/htc.py b/mmdet/models/detectors/htc.py
index bcf410f..7135fe1 100644
--- a/mmdet/models/detectors/htc.py
+++ b/mmdet/models/detectors/htc.py
@@ -1,11 +1,11 @@
 import torch
 import torch.nn.functional as F
 
-from .cascade_rcnn import CascadeRCNN
+from mmdet.core import (bbox2result, bbox2roi, build_assigner, build_sampler,
+                        merge_aug_masks)
 from .. import builder
 from ..registry import DETECTORS
-from mmdet.core import (bbox2roi, bbox2result, build_assigner, build_sampler,
-                        merge_aug_masks)
+from .cascade_rcnn import CascadeRCNN
 
 
 @DETECTORS.register_module
diff --git a/mmdet/models/detectors/mask_rcnn.py b/mmdet/models/detectors/mask_rcnn.py
index 003e87f..becfdad 100644
--- a/mmdet/models/detectors/mask_rcnn.py
+++ b/mmdet/models/detectors/mask_rcnn.py
@@ -1,5 +1,5 @@
-from .two_stage import TwoStageDetector
 from ..registry import DETECTORS
+from .two_stage import TwoStageDetector
 
 
 @DETECTORS.register_module
diff --git a/mmdet/models/detectors/mask_scoring_rcnn.py b/mmdet/models/detectors/mask_scoring_rcnn.py
index 9153bcd..b035f53 100644
--- a/mmdet/models/detectors/mask_scoring_rcnn.py
+++ b/mmdet/models/detectors/mask_scoring_rcnn.py
@@ -1,9 +1,9 @@
 import torch
 
 from mmdet.core import bbox2roi, build_assigner, build_sampler
-from .two_stage import TwoStageDetector
 from .. import builder
 from ..registry import DETECTORS
+from .two_stage import TwoStageDetector
 
 
 @DETECTORS.register_module
diff --git a/mmdet/models/detectors/retinanet.py b/mmdet/models/detectors/retinanet.py
index 0e5b6fd..7c93d74 100644
--- a/mmdet/models/detectors/retinanet.py
+++ b/mmdet/models/detectors/retinanet.py
@@ -1,5 +1,5 @@
-from .single_stage import SingleStageDetector
 from ..registry import DETECTORS
+from .single_stage import SingleStageDetector
 
 
 @DETECTORS.register_module
diff --git a/mmdet/models/detectors/rpn.py b/mmdet/models/detectors/rpn.py
index 51043af..2f947fa 100644
--- a/mmdet/models/detectors/rpn.py
+++ b/mmdet/models/detectors/rpn.py
@@ -1,10 +1,10 @@
 import mmcv
 
-from mmdet.core import tensor2imgs, bbox_mapping
-from .base import BaseDetector
-from .test_mixins import RPNTestMixin
+from mmdet.core import bbox_mapping, tensor2imgs
 from .. import builder
 from ..registry import DETECTORS
+from .base import BaseDetector
+from .test_mixins import RPNTestMixin
 
 
 @DETECTORS.register_module
diff --git a/mmdet/models/detectors/single_stage.py b/mmdet/models/detectors/single_stage.py
index 6f73b34..f7e0fa6 100644
--- a/mmdet/models/detectors/single_stage.py
+++ b/mmdet/models/detectors/single_stage.py
@@ -1,9 +1,9 @@
 import torch.nn as nn
 
-from .base import BaseDetector
+from mmdet.core import bbox2result
 from .. import builder
 from ..registry import DETECTORS
-from mmdet.core import bbox2result
+from .base import BaseDetector
 
 
 @DETECTORS.register_module
diff --git a/mmdet/models/detectors/test_mixins.py b/mmdet/models/detectors/test_mixins.py
index 6924818..1abd609 100644
--- a/mmdet/models/detectors/test_mixins.py
+++ b/mmdet/models/detectors/test_mixins.py
@@ -1,5 +1,5 @@
-from mmdet.core import (bbox2roi, bbox_mapping, merge_aug_proposals,
-                        merge_aug_bboxes, merge_aug_masks, multiclass_nms)
+from mmdet.core import (bbox2roi, bbox_mapping, merge_aug_bboxes,
+                        merge_aug_masks, merge_aug_proposals, multiclass_nms)
 
 
 class RPNTestMixin(object):
diff --git a/mmdet/models/detectors/two_stage.py b/mmdet/models/detectors/two_stage.py
index f70510c..e1536b5 100644
--- a/mmdet/models/detectors/two_stage.py
+++ b/mmdet/models/detectors/two_stage.py
@@ -1,11 +1,11 @@
 import torch
 import torch.nn as nn
 
-from .base import BaseDetector
-from .test_mixins import RPNTestMixin, BBoxTestMixin, MaskTestMixin
+from mmdet.core import bbox2result, bbox2roi, build_assigner, build_sampler
 from .. import builder
 from ..registry import DETECTORS
-from mmdet.core import bbox2roi, bbox2result, build_assigner, build_sampler
+from .base import BaseDetector
+from .test_mixins import BBoxTestMixin, MaskTestMixin, RPNTestMixin
 
 
 @DETECTORS.register_module
diff --git a/mmdet/models/losses/balanced_l1_loss.py b/mmdet/models/losses/balanced_l1_loss.py
index 8593396..fab60db 100644
--- a/mmdet/models/losses/balanced_l1_loss.py
+++ b/mmdet/models/losses/balanced_l1_loss.py
@@ -2,8 +2,8 @@ import numpy as np
 import torch
 import torch.nn as nn
 
-from .utils import weighted_loss
 from ..registry import LOSSES
+from .utils import weighted_loss
 
 
 @weighted_loss
diff --git a/mmdet/models/losses/cross_entropy_loss.py b/mmdet/models/losses/cross_entropy_loss.py
index fe10b86..dd9d477 100644
--- a/mmdet/models/losses/cross_entropy_loss.py
+++ b/mmdet/models/losses/cross_entropy_loss.py
@@ -2,8 +2,8 @@ import torch
 import torch.nn as nn
 import torch.nn.functional as F
 
-from .utils import weight_reduce_loss
 from ..registry import LOSSES
+from .utils import weight_reduce_loss
 
 
 def cross_entropy(pred, label, weight=None, reduction='mean', avg_factor=None):
diff --git a/mmdet/models/losses/focal_loss.py b/mmdet/models/losses/focal_loss.py
index 7a46356..6b28e12 100644
--- a/mmdet/models/losses/focal_loss.py
+++ b/mmdet/models/losses/focal_loss.py
@@ -2,8 +2,8 @@ import torch.nn as nn
 import torch.nn.functional as F
 
 from mmdet.ops import sigmoid_focal_loss as _sigmoid_focal_loss
-from .utils import weight_reduce_loss
 from ..registry import LOSSES
+from .utils import weight_reduce_loss
 
 
 # This method is only for debugging
diff --git a/mmdet/models/losses/iou_loss.py b/mmdet/models/losses/iou_loss.py
index 011ff36..cf24994 100644
--- a/mmdet/models/losses/iou_loss.py
+++ b/mmdet/models/losses/iou_loss.py
@@ -2,8 +2,8 @@ import torch
 import torch.nn as nn
 
 from mmdet.core import bbox_overlaps
-from .utils import weighted_loss
 from ..registry import LOSSES
+from .utils import weighted_loss
 
 
 @weighted_loss
diff --git a/mmdet/models/losses/mse_loss.py b/mmdet/models/losses/mse_loss.py
index a50f459..a868b2b 100644
--- a/mmdet/models/losses/mse_loss.py
+++ b/mmdet/models/losses/mse_loss.py
@@ -1,8 +1,8 @@
 import torch.nn as nn
 import torch.nn.functional as F
 
-from .utils import weighted_loss
 from ..registry import LOSSES
+from .utils import weighted_loss
 
 mse_loss = weighted_loss(F.mse_loss)
 
diff --git a/mmdet/models/losses/smooth_l1_loss.py b/mmdet/models/losses/smooth_l1_loss.py
index 75d71e8..bc34073 100644
--- a/mmdet/models/losses/smooth_l1_loss.py
+++ b/mmdet/models/losses/smooth_l1_loss.py
@@ -1,8 +1,8 @@
 import torch
 import torch.nn as nn
 
-from .utils import weighted_loss
 from ..registry import LOSSES
+from .utils import weighted_loss
 
 
 @weighted_loss
diff --git a/mmdet/models/mask_heads/fcn_mask_head.py b/mmdet/models/mask_heads/fcn_mask_head.py
index af5cee8..96ebd11 100644
--- a/mmdet/models/mask_heads/fcn_mask_head.py
+++ b/mmdet/models/mask_heads/fcn_mask_head.py
@@ -4,10 +4,10 @@ import pycocotools.mask as mask_util
 import torch
 import torch.nn as nn
 
+from mmdet.core import auto_fp16, force_fp32, mask_target
 from ..builder import build_loss
 from ..registry import HEADS
 from ..utils import ConvModule
-from mmdet.core import mask_target, force_fp32, auto_fp16
 
 
 @HEADS.register_module
diff --git a/mmdet/models/mask_heads/htc_mask_head.py b/mmdet/models/mask_heads/htc_mask_head.py
index 9ba3ed7..7c81255 100644
--- a/mmdet/models/mask_heads/htc_mask_head.py
+++ b/mmdet/models/mask_heads/htc_mask_head.py
@@ -1,6 +1,6 @@
-from .fcn_mask_head import FCNMaskHead
 from ..registry import HEADS
 from ..utils import ConvModule
+from .fcn_mask_head import FCNMaskHead
 
 
 @HEADS.register_module
diff --git a/mmdet/models/mask_heads/maskiou_head.py b/mmdet/models/mask_heads/maskiou_head.py
index 457a560..704978f 100644
--- a/mmdet/models/mask_heads/maskiou_head.py
+++ b/mmdet/models/mask_heads/maskiou_head.py
@@ -2,8 +2,8 @@ import numpy as np
 import torch
 import torch.nn as nn
 from mmcv.cnn import kaiming_init, normal_init
-from mmdet.core import force_fp32
 
+from mmdet.core import force_fp32
 from ..builder import build_loss
 from ..registry import HEADS
 
diff --git a/mmdet/models/necks/hrfpn.py b/mmdet/models/necks/hrfpn.py
index 743eba6..06a8fbf 100644
--- a/mmdet/models/necks/hrfpn.py
+++ b/mmdet/models/necks/hrfpn.py
@@ -1,11 +1,11 @@
 import torch
 import torch.nn as nn
 import torch.nn.functional as F
-from torch.utils.checkpoint import checkpoint
 from mmcv.cnn.weight_init import caffe2_xavier_init
+from torch.utils.checkpoint import checkpoint
 
-from ..utils import ConvModule
 from ..registry import NECKS
+from ..utils import ConvModule
 
 
 @NECKS.register_module
diff --git a/mmdet/models/plugins/generalized_attention.py b/mmdet/models/plugins/generalized_attention.py
index 7786837..9517776 100644
--- a/mmdet/models/plugins/generalized_attention.py
+++ b/mmdet/models/plugins/generalized_attention.py
@@ -1,9 +1,9 @@
+import math
+
+import numpy as np
 import torch
 import torch.nn as nn
 import torch.nn.functional as F
-
-import math
-import numpy as np
 from mmcv.cnn import kaiming_init
 
 
diff --git a/mmdet/models/utils/conv_module.py b/mmdet/models/utils/conv_module.py
index ef9a538..f2bddc4 100644
--- a/mmdet/models/utils/conv_module.py
+++ b/mmdet/models/utils/conv_module.py
@@ -1,7 +1,7 @@
 import warnings
 
 import torch.nn as nn
-from mmcv.cnn import kaiming_init, constant_init
+from mmcv.cnn import constant_init, kaiming_init
 
 from .conv_ws import ConvWS2d
 from .norm import build_norm_layer
diff --git a/mmdet/ops/nms/nms_wrapper.py b/mmdet/ops/nms/nms_wrapper.py
index 8ce5bc4..03215f1 100644
--- a/mmdet/ops/nms/nms_wrapper.py
+++ b/mmdet/ops/nms/nms_wrapper.py
@@ -1,7 +1,7 @@
 import numpy as np
 import torch
 
-from . import nms_cuda, nms_cpu
+from . import nms_cpu, nms_cuda
 from .soft_nms_cpu import soft_nms_cpu
 
 
diff --git a/mmdet/ops/roi_align/gradcheck.py b/mmdet/ops/roi_align/gradcheck.py
index 394cd69..136456b 100644
--- a/mmdet/ops/roi_align/gradcheck.py
+++ b/mmdet/ops/roi_align/gradcheck.py
@@ -1,11 +1,12 @@
+import os.path as osp
+import sys
+
 import numpy as np
 import torch
 from torch.autograd import gradcheck
 
-import os.path as osp
-import sys
 sys.path.append(osp.abspath(osp.join(__file__, '../../')))
-from roi_align import RoIAlign  # noqa: E402
+from roi_align import RoIAlign  # noqa: E402, isort:skip
 
 feat_size = 15
 spatial_scale = 1.0 / 8
diff --git a/mmdet/ops/roi_pool/gradcheck.py b/mmdet/ops/roi_pool/gradcheck.py
index c396160..d11af79 100644
--- a/mmdet/ops/roi_pool/gradcheck.py
+++ b/mmdet/ops/roi_pool/gradcheck.py
@@ -1,10 +1,11 @@
+import os.path as osp
+import sys
+
 import torch
 from torch.autograd import gradcheck
 
-import os.path as osp
-import sys
 sys.path.append(osp.abspath(osp.join(__file__, '../../')))
-from roi_pool import RoIPool  # noqa: E402
+from roi_pool import RoIPool  # noqa: E402, isort:skip
 
 feat = torch.randn(4, 16, 15, 15, requires_grad=True).cuda()
 rois = torch.Tensor([[0, 0, 0, 50, 50], [0, 10, 30, 43, 55],
diff --git a/tools/publish_model.py b/tools/publish_model.py
index 39795f1..a049f17 100644
--- a/tools/publish_model.py
+++ b/tools/publish_model.py
@@ -1,5 +1,6 @@
 import argparse
 import subprocess
+
 import torch
 
 
diff --git a/tools/test.py b/tools/test.py
index f3a3f25..c0fdec7 100644
--- a/tools/test.py
+++ b/tools/test.py
@@ -7,11 +7,11 @@ import tempfile
 import mmcv
 import torch
 import torch.distributed as dist
-from mmcv.runner import load_checkpoint, get_dist_info
 from mmcv.parallel import MMDataParallel, MMDistributedDataParallel
+from mmcv.runner import get_dist_info, load_checkpoint
 
 from mmdet.apis import init_dist
-from mmdet.core import results2json, coco_eval, wrap_fp16_model
+from mmdet.core import coco_eval, results2json, wrap_fp16_model
 from mmdet.datasets import build_dataloader, build_dataset
 from mmdet.models import build_detector
 
diff --git a/tools/train.py b/tools/train.py
index 8c3290a..7909cde 100644
--- a/tools/train.py
+++ b/tools/train.py
@@ -1,15 +1,15 @@
 from __future__ import division
-
 import argparse
 import os
+
+import torch
 from mmcv import Config
 
 from mmdet import __version__
+from mmdet.apis import (get_root_logger, init_dist, set_random_seed,
+                        train_detector)
 from mmdet.datasets import build_dataset
-from mmdet.apis import (train_detector, init_dist, get_root_logger,
-                        set_random_seed)
 from mmdet.models import build_detector
-import torch
 
 
 def parse_args():
-- 
GitLab