diff --git a/.isort.cfg b/.isort.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..c1684dddc8a36fd02b5a9310a5b70cecb8194a7c
--- /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 127b9030a6fcc860a7c72af2d635908dc23eb190..8ef07f0559c9d8bcbeee6dd6452d91d5d6d83b1f 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 0ebbb9e110fb1c246916ba7c5efbdef96d9c7025..dc51381815174c5d5b1366642d0c0fc7aa126755 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 60c902eaa86575f5ea3632f4ffea1c65e4dc1c0e..91238e6bdf9101ae37eee1b39f9b640a45b68134 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 7284a73c3ade0c62862e8cf009609274d4dcc0fe..21abe5ec508722c13147c9b524fb86cd600a136e 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 867a56b87e869d6b38ca379a4ff1231ffd9f7e20..4ab52590bcddde63f27b5e24b282528f78fb3e73 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 99dcbe8e0f640fb84f0d9e995212405b0fe628ef..5c93b36e3f5496b5334eb8425bbc9ad70cf70261 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 20b3957bcfe303225a3f5704e46c1a2832d85935..2a918bf87e45ec0847cff403a9698914b7d382dd 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 25e820be19a4d0542a9e94639e765b1ad60bcd2d..351a097f671cd4d3e7d396972f74b750438ff67b 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 0711d976c3393ee1339899f5346fbd28f29ab418..2500f3113cf222391aacabdb0d0b59543a61f00a 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 1786d9362410bc3e535f436bdd7777746dab141c..c37f7bd0291474d1411cc4e5f0799bf6959385f5 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 b1ab45ef5612f99f645fc0f9c33856947f70cb08..6b4dacb1c7ce93aed1a9dbff231840f62847e47f 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 be93dfc28934052a7497b3c42aa3e9dd1b3b3fe6..0acbc0033e1c43069f21ffdbdbbbaaf49f48c199 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 f97954b8a77ebe97cec74ee4420be953146c63e4..fcee4fb043ff88597861d88449d38dc341152019 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 51d7e3c91e9fffc76d4ac6d71abe05f4f8a039e6..be830b6a2fdf536caf3e2175182462869d302150 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 e0ea78ceb7fb7332a597bb10093f1b247c1790d5..18d7195da8dcf539827921dd7e2323d630c91d20 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 1843713738ef417b17aa090b2d69562b131a8626..d3746e1b237727eccc52cb4619f549f93a1c97e6 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 c222eb293416813f982be06d2a98736eac85f1c4..6c529008249149ae8d90a2f0b427a74f97b98048 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 2b8b144071b09b93ef7569e824252ca3bdb1d3d3..b3fb5b4f29e112a6e061c7e8ac63d02719284765 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 957906dc7d3b199e48f2d582a247b26b6a13486f..6ddf6c14f5a27c38a42ef6855aedff501ba22eaf 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 40ad0499f0b3ef99859ddf796c1197f1d0dd0f76..73f89d725b202d880cdbb05b01ba7aace2691110 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 aecef2b2169b9acd5fd767c2a4696b68f6ac9511..11512ffc578fd4b10f17f6129b517bc887594440 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 c3cc7051c03d34c7e00adf94d01022e0baaec942..d2d71d0e4bef21ec5a9dd430ac62466e317fd6fd 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 53a5cc9f6b35bdb467d609bbe4aecfcddfea4c26..045db70b918974a6c9b5f5acafd872bb71b0aba1 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 0a5fd37a5a2f4edc4f42f5e39ebcc748b387851a..50f1cc515e05f0fa4e485960db2035156c9434e7 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 db86c470ea6aa4b3097f080476f97fac67a30703..600dd4a13b6473af50fd761260dec92cb555c4e6 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 178d1025a26354a3c6f149e0d15555544332a340..9c942d6ace8c628a7319303db01d33b95065647a 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 abe128030690f900eb78a6b2406aab03d0de0dc4..eaead29a9fa27dd45f7c3421e77cbb7681ef0f20 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 c0b42b291e3ef5249c4d1c2ceb2e0993c0e999f9..c5feaa48c2bf6529f168277edecb01adfd142a13 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 f7ba8a4e5eabda9605e71a9371709224fb16730d..ae65711332b738ba174bad5b1e92c4a762f19376 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 df80570bdd5ee9b93e59694cc6c00fb80955d6a4..1a155f9ee2acd459518cf4597ac77447550a3791 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 470c511f6bd8729a1af9e97454bc62d446c3c4b2..801cf8f15f2f47e9f67d9f79d663e9a97a437318 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 0c9b6444e63e4d9c846bf5e624e9d99179f5b0b2..dc82ab711e83dc0238b135be5303b1198ae599f2 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 96fb48ee06a9208172af60d0731cdd3681e63d13..038dd109c08a454d4505616a3c7c8eb9ffe0580e 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 f76bdc53293370348449f0c204d8a0b535a23791..9bd0207df4f4d0f474a443aa8230bbf8b5895546 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 64c03916498cc4ce8cb28d2f4ce026f88dd55037..9e3b2aa70e27c56e41d4daddeae0ad47f4b2c5ca 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 b4e961b128b5ba1969aeb0618150acfb67a7d9c7..969cd7ccd76b00352c74a2d7dd135f03cff906bc 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 4c3dce1b164c750f58f9fb2fc0e836a1dcc0e8d1..89cc5929af2127d380f8c74d8d001d1601981063 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 49c4a33070c04e1a0b2d85c08b6b9921d157128f..2c321646151ce915bedd28f958d92bdc1f15196b 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 bcf410f35cb35e628ca8f9fc4bb47242ae8c0c93..7135fe1d38d1c1d73952569079b097aea7f821ab 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 003e87f9817e1eeff8c5860395270ec7ebf8a0eb..becfdad534ca2d6a0e473e0630138e20866bb476 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 9153bcd147b5c4f9658fb7d09403b78b8ba4e181..b035f53e1683bf11f85f318b6d94c6d4730332e6 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 0e5b6fdb816d4ba92e4d6d361779b7f190c66f1e..7c93d7419981edde1c725e45002931e70d8f4ed2 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 51043af85ad6bddef41c29e8ae2c3ef9cd8491f0..2f947fae474b5efe17152649f3ddcde6980d0078 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 6f73b34a976e76f1a5a117c42c9de2e81f41f9ff..f7e0fa6f82d9fec45bf65301c902ed5f256f83d0 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 6924818d0b6bf0b8340c3ef509b60ab1b0e9ba85..1abd6094644bb5ee2779401c8ed31525cf997903 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 f70510cecaf633bc140f5d0280b6040db7788e73..e1536b54b5a0ca3595890ce57bc335ec11ef7766 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 8593396d73e9cd35cdd5e2da4e9b3cece24176bb..fab60dbc61081a69460c6684fc9fcb792bce7087 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 fe10b866456ed8bc88910733ba0b14d18d817af6..dd9d4776f87b93397ece03a49f5a2e30dcb174cd 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 7a463560d0be442ac342543ccf0592a2aa674a26..6b28e1257ad871da9a49a0045d02853f42ca9ab6 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 011ff3620fe9562f57124970b323386493221319..cf2499463d94a557e9ca85844c1717f186be3833 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 a50f4592017e4413989874ea19342edad94fead7..a868b2be97ce2578c8e510986c848a314a783f52 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 75d71e8a9c4da5220dea44b2d5d418c4bc22101a..bc340730b2ec0db938508dfc94e71369484d1918 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 af5cee853db176a00f0a3e63a04cee6652e7d802..96ebd11a4e8dde654ef655ae4f7ecc75d59bd23a 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 9ba3ed72298a36ed63a185f581de889b72324f8d..7c8125543e6fba2441fcff2536054317ad8e241e 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 457a560cc1fe06a6ee390226aa7b92111e5e0343..704978fddb0892dbae6ca51776b026310596107f 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 743eba6de19cf10e1b3dbd841c31dde053f9796b..06a8fbf4285b4a9576ef65bc881974746a1071f1 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 7786837ba9238fc4871b69d70351c71ec92c7312..9517776fe7e9a10b66fbc4db762541dacc96183e 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 ef9a538f85932402c5faa1cbf5a0176b426ee995..f2bddc445b5eb5217695b734cf8a6d4006915033 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 8ce5bc443a66e4cbf6b6cd45d61b1a22989c9a90..03215f1249df4cc54b8e65aca737fcb3b4810be4 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 394cd69c5064e097becf12752755ee510045193b..136456b398b0ac4caab113e996b6f4d0548fee5c 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 c39616086a240cf57cf115d4264eb32b9cc9f7c7..d11af790241baeb84af617211c7bf0a95e7a2dbb 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 39795f14a59cf526cae0a5ed46e185a6871f632c..a049f17674b7a1aa730057e5cc294d2368fe707c 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 f3a3f25304059c702db2c3413400623d9291c885..c0fdec700ca63b3f68f78187ad1f0ec4d3021db2 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 8c3290a89a3aa4686aed87c888136c17e3c69e9f..7909cde157769993cb1c4d789af67ba4b666042c 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():