diff --git a/.pylintrc b/.pylintrc index 50c7898e..14c035b8 100644 --- a/.pylintrc +++ b/.pylintrc @@ -1,6 +1,5 @@ [MASTER] extension-pkg-whitelist=numpy,torch,cv2 -init-hook="sys.path.insert(0, './tools'); import _init_paths" [MESSAGES CONTROL] disable=wrong-import-position diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 00000000..8e436af4 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,6 @@ +include CHANGELOG.md +include CONTRIBUTORS.md +include LICENSE.txt +include README.rst +include setupbase.py +recursive-include detectron_pytorch/ *.cu *.c *.cpp *.h *.o *.so *.a *.yml *.yaml *.pyx diff --git a/README.md b/README.md index a2b4a5e4..27c9354f 100644 --- a/README.md +++ b/README.md @@ -78,11 +78,11 @@ Tested under python3. Compile the CUDA code: ``` -cd lib # please change to this directory -sh make.sh +export CUDA_PATH=/usr/local/cuda # Or any other custom location +python setup.py build_static ``` -If your are using Volta GPUs, uncomment this [line](https://github.com/roytseng-tw/mask-rcnn.pytorch/tree/master/lib/make.sh#L15) in `lib/mask.sh` and remember to postpend a backslash at the line above. `CUDA_PATH` defaults to `/usr/loca/cuda`. If you want to use a CUDA library on different path, change this [line](https://github.com/roytseng-tw/mask-rcnn.pytorch/tree/master/lib/make.sh#L3) accordingly. +If your are using Volta GPUs, uncomment this [line](https://github.com/roytseng-tw/mask-rcnn.pytorch/tree/master/lib/make.sh#L15) in `lib/mask.sh` and remember to postpend a backslash at the line above. `CUDA_PATH` defaults to `/usr/loca/cuda`. It will compile all the modules you need, including NMS, ROI_Pooing, ROI_Crop and ROI_Align. (Actually gpu nms is never used ...) @@ -144,7 +144,7 @@ You can the following command to download them all: - extra required packages: `argparse_color_formater`, `colorama`, `requests` ``` -python tools/download_imagenet_weights.py +python -m detectron_pytorch.tools.download_imagenet_weights ``` **NOTE**: Caffe pretrained weights have slightly better performance than Pytorch pretrained. Suggest to use Caffe pretrained models from the above link to reproduce the results. By the way, Detectron also use pretrained weights from Caffe. @@ -193,7 +193,7 @@ Following config options will be adjusted **automatically** according to actual ### Train from scratch Take mask-rcnn with res50 backbone for example. ``` -python tools/train_net_step.py --dataset coco2017 --cfg configs/baselines/e2e_mask_rcnn_R-50-C4.yml --use_tfboard --bs {batch_size} --nw {num_workers} +python -m detectron_pytorch.tools.train_net_step --dataset coco2017 --cfg configs/baselines/e2e_mask_rcnn_R-50-C4.yml --use_tfboard --bs {batch_size} --nw {num_workers} ``` Use `--bs` to overwrite the default batch size to a proper value that fits into your GPUs. Simliar for `--nw`, number of data loader threads defaults to 4 in config.py. @@ -206,17 +206,17 @@ Specify `—-use_tfboard` to log the losses on Tensorboard. As in Caffe, update network once (`optimizer.step()`) every `iter_size` iterations (forward + backward). This way to have a larger effective batch size for training. Notice that, step count is only increased after network update. ``` -python tools/train_net_step.py --dataset coco2017 --cfg configs/baselines/e2e_mask_rcnn_R-50-C4.yml --bs 4 --iter_size 4 +python -m detectron_pytorch.tools.train_net_step --dataset coco2017 --cfg configs/baselines/e2e_mask_rcnn_R-50-C4.yml --bs 4 --iter_size 4 ``` `iter_size` defaults to 1. ### Finetune from a pretrained checkpoint ``` -python tools/train_net_step.py ... --load_ckpt {path/to/the/checkpoint} +python -m detectron_pytorch.tools.train_net_step ... --load_ckpt {path/to/the/checkpoint} ``` or using Detectron's checkpoint file ``` -python tools/train_net_step.py ... --load_detectron {path/to/the/checkpoint} +python -m detectron_pytorch.tools.train_net_step ... --load_detectron {path/to/the/checkpoint} ``` ### Resume training with the same dataset and batch size @@ -229,24 +229,24 @@ When resume the training, **step count** and **optimizer state** will also be re ### Set config options in command line ``` - python tools/train_net_step.py ... --no_save --set {config.name1} {value1} {config.name2} {value2} ... + python -m detectron_pytorch.tools.train_net_step ... --no_save --set {config.name1} {value1} {config.name2} {value2} ... ``` - For Example, run for debugging. ``` - python tools/train_net_step.py ... --no_save --set DEBUG True + python -m detectron_pytorch.tools.train_net_step ... --no_save --set DEBUG True ``` Load less annotations to accelarate training progress. Add `--no_save` to avoid saving any checkpoint or logging. ### Show command line help messages ``` -python train_net_step.py --help +python -m detectron_pytorch.tools.train_net_step --help ``` ### Two Training Scripts -In short, use `train_net_step.py`. +In short, use `detectron_pytorch.tools.train_net_step`. -In `train_net_step.py`: +In `detectron_pytorch.tools.train_net_step`: - `SOLVER.LR_POLICY: steps_with_decay` is supported. - Training warm up in [Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour](https://arxiv.org/abs/1706.02677) is supported. @@ -268,7 +268,7 @@ In `train_net_step.py`: ### Evaluate the training results For example, test mask-rcnn on coco2017 val set ``` -python tools/test_net.py --dataset coco2017 --cfg config/baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml --load_ckpt {path/to/your/checkpoint} +python -m detectron_pytorch.tools.test_net --dataset coco2017 --cfg config/baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml --load_ckpt {path/to/your/checkpoint} ``` Use `--load_detectron` to load Detectron's checkpoint. If multiple gpus are available, add `--multi-gpu-testing`. @@ -276,7 +276,7 @@ Specify a different output directry, use `--output_dir {...}`. Defaults to `{the ### Visualize the training results on images ``` -python tools/infer_simple.py --dataset coco --cfg cfgs/baselines/e2e_mask_rcnn_R-50-C4.yml --load_ckpt {path/to/your/checkpoint} --image_dir {dir/of/input/images} --output_dir {dir/to/save/visualizations} +python -m detectron_pytorch.tools.infer_simple --dataset coco --cfg cfgs/baselines/e2e_mask_rcnn_R-50-C4.yml --load_ckpt {path/to/your/checkpoint} --image_dir {dir/of/input/images} --output_dir {dir/to/save/visualizations} ``` `--output_dir` defaults to `infer_outputs`. diff --git a/detectron_pytorch/__init__.py b/detectron_pytorch/__init__.py new file mode 100644 index 00000000..043fa398 --- /dev/null +++ b/detectron_pytorch/__init__.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# ----------------------------------------------------------------------------- +# Copyright (c) Roy Tseng +# +# Licensed under the terms of the MIT License +# (see LICENSE.txt for details) +# ----------------------------------------------------------------------------- +"""Detectron PyTorch""" + +VERSION_INFO = (0, 1, 0, 'dev0') +__version__ = '.'.join(map(str, VERSION_INFO)) diff --git a/lib/core/__init__.py b/detectron_pytorch/core/__init__.py similarity index 100% rename from lib/core/__init__.py rename to detectron_pytorch/core/__init__.py diff --git a/lib/core/config.py b/detectron_pytorch/core/config.py similarity index 99% rename from lib/core/config.py rename to detectron_pytorch/core/config.py index 3375ae22..4774e394 100644 --- a/lib/core/config.py +++ b/detectron_pytorch/core/config.py @@ -16,8 +16,8 @@ from torch.nn import init import yaml -import nn as mynn -from utils.collections import AttrDict +import detectron_pytorch.nn as mynn +from detectron_pytorch.utils.collections import AttrDict __C = AttrDict() # Consumers can get config by: diff --git a/lib/core/test.py b/detectron_pytorch/core/test.py similarity index 98% rename from lib/core/test.py rename to detectron_pytorch/core/test.py index eac67355..3c73a722 100644 --- a/lib/core/test.py +++ b/detectron_pytorch/core/test.py @@ -38,13 +38,13 @@ from torch.autograd import Variable import torch -from core.config import cfg -from utils.timer import Timer -import utils.boxes as box_utils -import utils.blob as blob_utils -import utils.fpn as fpn_utils -import utils.image as image_utils -import utils.keypoints as keypoint_utils +from detectron_pytorch.core.config import cfg +from detectron_pytorch.utils.timer import Timer +import detectron_pytorch.utils.boxes as box_utils +import detectron_pytorch.utils.blob as blob_utils +import detectron_pytorch.utils.fpn as fpn_utils +import detectron_pytorch.utils.image as image_utils +import detectron_pytorch.utils.keypoints as keypoint_utils def im_detect_all(model, im, box_proposals=None, timers=None): diff --git a/lib/core/test_engine.py b/detectron_pytorch/core/test_engine.py similarity index 94% rename from lib/core/test_engine.py rename to detectron_pytorch/core/test_engine.py index 02dedf6f..a3e2cfd4 100644 --- a/lib/core/test_engine.py +++ b/detectron_pytorch/core/test_engine.py @@ -30,21 +30,21 @@ import torch -from core.config import cfg -# from core.rpn_generator import generate_rpn_on_dataset #TODO: for rpn only case -# from core.rpn_generator import generate_rpn_on_range -from core.test import im_detect_all -from datasets import task_evaluation -from datasets.json_dataset import JsonDataset -from modeling import model_builder -import nn as mynn -from utils.detectron_weight_helper import load_detectron_weight -import utils.env as envu -import utils.net as net_utils -import utils.subprocess as subprocess_utils -import utils.vis as vis_utils -from utils.io import save_object -from utils.timer import Timer +from detectron_pytorch.core.config import cfg +# from detectron_pytorch.core.rpn_generator import generate_rpn_on_dataset #TODO: for rpn only case +# from detectron_pytorch.core.rpn_generator import generate_rpn_on_range +from detectron_pytorch.core.test import im_detect_all +from detectron_pytorch.datasets import task_evaluation +from detectron_pytorch.datasets.json_dataset import JsonDataset +from detectron_pytorch.modeling import model_builder +import detectron_pytorch.nn as mynn +from detectron_pytorch.utils.detectron_weight_helper import load_detectron_weight +import detectron_pytorch.utils.env as envu +import detectron_pytorch.utils.net as net_utils +import detectron_pytorch.utils.subprocess as subprocess_utils +import detectron_pytorch.utils.vis as vis_utils +from detectron_pytorch.utils.io import save_object +from detectron_pytorch.utils.timer import Timer logger = logging.getLogger(__name__) diff --git a/lib/datasets/VOCdevkit-matlab-wrapper/get_voc_opts.m b/detectron_pytorch/datasets/VOCdevkit-matlab-wrapper/get_voc_opts.m similarity index 100% rename from lib/datasets/VOCdevkit-matlab-wrapper/get_voc_opts.m rename to detectron_pytorch/datasets/VOCdevkit-matlab-wrapper/get_voc_opts.m diff --git a/lib/datasets/VOCdevkit-matlab-wrapper/voc_eval.m b/detectron_pytorch/datasets/VOCdevkit-matlab-wrapper/voc_eval.m similarity index 100% rename from lib/datasets/VOCdevkit-matlab-wrapper/voc_eval.m rename to detectron_pytorch/datasets/VOCdevkit-matlab-wrapper/voc_eval.m diff --git a/lib/datasets/VOCdevkit-matlab-wrapper/xVOCap.m b/detectron_pytorch/datasets/VOCdevkit-matlab-wrapper/xVOCap.m similarity index 100% rename from lib/datasets/VOCdevkit-matlab-wrapper/xVOCap.m rename to detectron_pytorch/datasets/VOCdevkit-matlab-wrapper/xVOCap.m diff --git a/lib/datasets/__init__.py b/detectron_pytorch/datasets/__init__.py similarity index 100% rename from lib/datasets/__init__.py rename to detectron_pytorch/datasets/__init__.py diff --git a/lib/datasets/cityscapes/__init__.py b/detectron_pytorch/datasets/cityscapes/__init__.py similarity index 100% rename from lib/datasets/cityscapes/__init__.py rename to detectron_pytorch/datasets/cityscapes/__init__.py diff --git a/lib/datasets/cityscapes/coco_to_cityscapes_id.py b/detectron_pytorch/datasets/cityscapes/coco_to_cityscapes_id.py similarity index 100% rename from lib/datasets/cityscapes/coco_to_cityscapes_id.py rename to detectron_pytorch/datasets/cityscapes/coco_to_cityscapes_id.py diff --git a/lib/datasets/cityscapes/tools/convert_cityscapes_to_coco.py b/detectron_pytorch/datasets/cityscapes/tools/convert_cityscapes_to_coco.py similarity index 98% rename from lib/datasets/cityscapes/tools/convert_cityscapes_to_coco.py rename to detectron_pytorch/datasets/cityscapes/tools/convert_cityscapes_to_coco.py index 1a3d6bf2..50bff0e7 100644 --- a/lib/datasets/cityscapes/tools/convert_cityscapes_to_coco.py +++ b/detectron_pytorch/datasets/cityscapes/tools/convert_cityscapes_to_coco.py @@ -12,8 +12,8 @@ import cityscapesscripts.evaluation.instances2dict_with_polygons as cs -import utils.segms as segms_util -import utils.boxes as bboxs_util +import detectron_pytorch.utils.segms as segms_util +import detectron_pytorch.utils.boxes as bboxs_util def parse_args(): diff --git a/lib/datasets/cityscapes/tools/convert_coco_model_to_cityscapes.py b/detectron_pytorch/datasets/cityscapes/tools/convert_coco_model_to_cityscapes.py similarity index 98% rename from lib/datasets/cityscapes/tools/convert_coco_model_to_cityscapes.py rename to detectron_pytorch/datasets/cityscapes/tools/convert_coco_model_to_cityscapes.py index 1bdc9a42..730fb604 100644 --- a/lib/datasets/cityscapes/tools/convert_coco_model_to_cityscapes.py +++ b/detectron_pytorch/datasets/cityscapes/tools/convert_coco_model_to_cityscapes.py @@ -14,7 +14,7 @@ import sys import numpy as np -import datasets.cityscapes.coco_to_cityscapes_id as cs +import detectron_pytorch.datasets.cityscapes.coco_to_cityscapes_id as cs NUM_CS_CLS = 9 NUM_COCO_CLS = 81 diff --git a/lib/datasets/cityscapes_json_dataset_evaluator.py b/detectron_pytorch/datasets/cityscapes_json_dataset_evaluator.py similarity index 94% rename from lib/datasets/cityscapes_json_dataset_evaluator.py rename to detectron_pytorch/datasets/cityscapes_json_dataset_evaluator.py index 33188331..3f3959c3 100644 --- a/lib/datasets/cityscapes_json_dataset_evaluator.py +++ b/detectron_pytorch/datasets/cityscapes_json_dataset_evaluator.py @@ -27,9 +27,9 @@ import pycocotools.mask as mask_util -from core.config import cfg -from datasets.dataset_catalog import DATASETS -from datasets.dataset_catalog import RAW_DIR +from detectron_pytorch.core.config import cfg +from detectron_pytorch.datasets.dataset_catalog import DATASETS +from detectron_pytorch.datasets.dataset_catalog import RAW_DIR logger = logging.getLogger(__name__) diff --git a/lib/datasets/dataset_catalog.py b/detectron_pytorch/datasets/dataset_catalog.py similarity index 99% rename from lib/datasets/dataset_catalog.py rename to detectron_pytorch/datasets/dataset_catalog.py index 18cef3ec..9e146603 100644 --- a/lib/datasets/dataset_catalog.py +++ b/detectron_pytorch/datasets/dataset_catalog.py @@ -22,7 +22,7 @@ import os -from core.config import cfg +from detectron_pytorch.core.config import cfg # Path to data dir _DATA_DIR = cfg.DATA_DIR diff --git a/lib/datasets/dummy_datasets.py b/detectron_pytorch/datasets/dummy_datasets.py similarity index 97% rename from lib/datasets/dummy_datasets.py rename to detectron_pytorch/datasets/dummy_datasets.py index 5d7e6cfa..bc1956bd 100644 --- a/lib/datasets/dummy_datasets.py +++ b/detectron_pytorch/datasets/dummy_datasets.py @@ -22,7 +22,7 @@ from __future__ import print_function from __future__ import unicode_literals -from utils.collections import AttrDict +from detectron_pytorch.utils.collections import AttrDict def get_coco_dataset(): diff --git a/lib/datasets/json_dataset.py b/detectron_pytorch/datasets/json_dataset.py similarity index 99% rename from lib/datasets/json_dataset.py rename to detectron_pytorch/datasets/json_dataset.py index b721d445..b53c04cd 100644 --- a/lib/datasets/json_dataset.py +++ b/detectron_pytorch/datasets/json_dataset.py @@ -33,15 +33,15 @@ import scipy.sparse # Must happen before importing COCO API (which imports matplotlib) -import utils.env as envu +import detectron_pytorch.utils.env as envu envu.set_up_matplotlib() # COCO API from pycocotools import mask as COCOmask from pycocotools.coco import COCO -import utils.boxes as box_utils -from core.config import cfg -from utils.timer import Timer +import detectron_pytorch.utils.boxes as box_utils +from detectron_pytorch.core.config import cfg +from detectron_pytorch.utils.timer import Timer from .dataset_catalog import ANN_FN from .dataset_catalog import DATASETS from .dataset_catalog import IM_DIR diff --git a/lib/datasets/json_dataset_evaluator.py b/detectron_pytorch/datasets/json_dataset_evaluator.py similarity index 99% rename from lib/datasets/json_dataset_evaluator.py rename to detectron_pytorch/datasets/json_dataset_evaluator.py index ba67517b..8f2cf830 100644 --- a/lib/datasets/json_dataset_evaluator.py +++ b/detectron_pytorch/datasets/json_dataset_evaluator.py @@ -28,9 +28,9 @@ from pycocotools.cocoeval import COCOeval -from core.config import cfg -from utils.io import save_object -import utils.boxes as box_utils +from detectron_pytorch.core.config import cfg +from detectron_pytorch.utils.io import save_object +import detectron_pytorch.utils.boxes as box_utils logger = logging.getLogger(__name__) diff --git a/lib/datasets/roidb.py b/detectron_pytorch/datasets/roidb.py similarity index 97% rename from lib/datasets/roidb.py rename to detectron_pytorch/datasets/roidb.py index e1950f8a..d90e3e19 100644 --- a/lib/datasets/roidb.py +++ b/detectron_pytorch/datasets/roidb.py @@ -24,11 +24,11 @@ import logging import numpy as np -import utils.boxes as box_utils -import utils.keypoints as keypoint_utils -import utils.segms as segm_utils -import utils.blob as blob_utils -from core.config import cfg +import detectron_pytorch.utils.boxes as box_utils +import detectron_pytorch.utils.keypoints as keypoint_utils +import detectron_pytorch.utils.segms as segm_utils +import detectron_pytorch.utils.blob as blob_utils +from detectron_pytorch.core.config import cfg from .json_dataset import JsonDataset logger = logging.getLogger(__name__) diff --git a/lib/datasets/task_evaluation.py b/detectron_pytorch/datasets/task_evaluation.py similarity index 97% rename from lib/datasets/task_evaluation.py rename to detectron_pytorch/datasets/task_evaluation.py index 0d8f4496..866a8f0c 100644 --- a/lib/datasets/task_evaluation.py +++ b/detectron_pytorch/datasets/task_evaluation.py @@ -40,11 +40,11 @@ import os import pprint -from core.config import cfg -from utils.logging import send_email -import datasets.cityscapes_json_dataset_evaluator as cs_json_dataset_evaluator -import datasets.json_dataset_evaluator as json_dataset_evaluator -import datasets.voc_dataset_evaluator as voc_dataset_evaluator +from detectron_pytorch.core.config import cfg +from detectron_pytorch.utils.logging import send_email +import detectron_pytorch.datasets.cityscapes_json_dataset_evaluator as cs_json_dataset_evaluator +import detectron_pytorch.datasets.json_dataset_evaluator as json_dataset_evaluator +import detectron_pytorch.datasets.voc_dataset_evaluator as voc_dataset_evaluator logger = logging.getLogger(__name__) diff --git a/lib/datasets/voc_dataset_evaluator.py b/detectron_pytorch/datasets/voc_dataset_evaluator.py similarity index 96% rename from lib/datasets/voc_dataset_evaluator.py rename to detectron_pytorch/datasets/voc_dataset_evaluator.py index 2eae2a1f..ba851f15 100644 --- a/lib/datasets/voc_dataset_evaluator.py +++ b/detectron_pytorch/datasets/voc_dataset_evaluator.py @@ -26,11 +26,11 @@ import shutil import uuid -from core.config import cfg -from datasets.dataset_catalog import DATASETS -from datasets.dataset_catalog import DEVKIT_DIR -from datasets.voc_eval import voc_eval -from utils.io import save_object +from detectron_pytorch.core.config import cfg +from detectron_pytorch.datasets.dataset_catalog import DATASETS +from detectron_pytorch.datasets.dataset_catalog import DEVKIT_DIR +from detectron_pytorch.datasets.voc_eval import voc_eval +from detectron_pytorch.utils.io import save_object logger = logging.getLogger(__name__) diff --git a/lib/datasets/voc_eval.py b/detectron_pytorch/datasets/voc_eval.py similarity index 100% rename from lib/datasets/voc_eval.py rename to detectron_pytorch/datasets/voc_eval.py diff --git a/lib/make.sh b/detectron_pytorch/make.sh similarity index 98% rename from lib/make.sh rename to detectron_pytorch/make.sh index 8470621a..a6be0326 100755 --- a/lib/make.sh +++ b/detectron_pytorch/make.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash -CUDA_PATH=/usr/local/cuda/ - +cd detectron_pytorch python setup.py build_ext --inplace rm -rf build diff --git a/lib/model/__init__.py b/detectron_pytorch/model/__init__.py similarity index 100% rename from lib/model/__init__.py rename to detectron_pytorch/model/__init__.py diff --git a/detectron_pytorch/model/nms/.gitignore b/detectron_pytorch/model/nms/.gitignore new file mode 100644 index 00000000..140f8cf8 --- /dev/null +++ b/detectron_pytorch/model/nms/.gitignore @@ -0,0 +1 @@ +*.so diff --git a/lib/model/nms/__init__.py b/detectron_pytorch/model/nms/__init__.py similarity index 100% rename from lib/model/nms/__init__.py rename to detectron_pytorch/model/nms/__init__.py diff --git a/lib/model/nms/_ext/__init__.py b/detectron_pytorch/model/nms/_ext/__init__.py similarity index 100% rename from lib/model/nms/_ext/__init__.py rename to detectron_pytorch/model/nms/_ext/__init__.py diff --git a/lib/model/nms/_ext/nms/__init__.py b/detectron_pytorch/model/nms/_ext/nms/__init__.py similarity index 100% rename from lib/model/nms/_ext/nms/__init__.py rename to detectron_pytorch/model/nms/_ext/nms/__init__.py diff --git a/lib/model/nms/build.py b/detectron_pytorch/model/nms/build.py similarity index 100% rename from lib/model/nms/build.py rename to detectron_pytorch/model/nms/build.py diff --git a/lib/model/nms/make.sh b/detectron_pytorch/model/nms/make.sh similarity index 100% rename from lib/model/nms/make.sh rename to detectron_pytorch/model/nms/make.sh diff --git a/lib/model/nms/nms_gpu.py b/detectron_pytorch/model/nms/nms_gpu.py similarity index 100% rename from lib/model/nms/nms_gpu.py rename to detectron_pytorch/model/nms/nms_gpu.py diff --git a/lib/model/nms/nms_kernel.cu b/detectron_pytorch/model/nms/nms_kernel.cu similarity index 100% rename from lib/model/nms/nms_kernel.cu rename to detectron_pytorch/model/nms/nms_kernel.cu diff --git a/lib/model/nms/nms_wrapper.py b/detectron_pytorch/model/nms/nms_wrapper.py similarity index 84% rename from lib/model/nms/nms_wrapper.py rename to detectron_pytorch/model/nms/nms_wrapper.py index c9a39565..d7b8201c 100644 --- a/lib/model/nms/nms_wrapper.py +++ b/detectron_pytorch/model/nms/nms_wrapper.py @@ -5,8 +5,8 @@ # Written by Ross Girshick # -------------------------------------------------------- import torch -from core.config import cfg -from model.nms.nms_gpu import nms_gpu +from detectron_pytorch.core.config import cfg +from detectron_pytorch.model.nms.nms_gpu import nms_gpu def nms(dets, thresh, force_cpu=False): """Dispatch to either CPU or GPU NMS implementations.""" diff --git a/lib/model/nms/src/nms_cuda.c b/detectron_pytorch/model/nms/src/nms_cuda.c similarity index 100% rename from lib/model/nms/src/nms_cuda.c rename to detectron_pytorch/model/nms/src/nms_cuda.c diff --git a/lib/model/nms/src/nms_cuda.h b/detectron_pytorch/model/nms/src/nms_cuda.h similarity index 100% rename from lib/model/nms/src/nms_cuda.h rename to detectron_pytorch/model/nms/src/nms_cuda.h diff --git a/lib/model/nms/src/nms_cuda_kernel.cu b/detectron_pytorch/model/nms/src/nms_cuda_kernel.cu similarity index 100% rename from lib/model/nms/src/nms_cuda_kernel.cu rename to detectron_pytorch/model/nms/src/nms_cuda_kernel.cu diff --git a/lib/model/nms/src/nms_cuda_kernel.h b/detectron_pytorch/model/nms/src/nms_cuda_kernel.h similarity index 100% rename from lib/model/nms/src/nms_cuda_kernel.h rename to detectron_pytorch/model/nms/src/nms_cuda_kernel.h diff --git a/lib/model/roi_align/__init__.py b/detectron_pytorch/model/roi_align/__init__.py similarity index 100% rename from lib/model/roi_align/__init__.py rename to detectron_pytorch/model/roi_align/__init__.py diff --git a/lib/model/roi_align/_ext/__init__.py b/detectron_pytorch/model/roi_align/_ext/__init__.py similarity index 100% rename from lib/model/roi_align/_ext/__init__.py rename to detectron_pytorch/model/roi_align/_ext/__init__.py diff --git a/lib/model/roi_align/_ext/roi_align/__init__.py b/detectron_pytorch/model/roi_align/_ext/roi_align/__init__.py similarity index 100% rename from lib/model/roi_align/_ext/roi_align/__init__.py rename to detectron_pytorch/model/roi_align/_ext/roi_align/__init__.py diff --git a/lib/model/roi_align/build.py b/detectron_pytorch/model/roi_align/build.py similarity index 100% rename from lib/model/roi_align/build.py rename to detectron_pytorch/model/roi_align/build.py diff --git a/lib/model/roi_align/functions/__init__.py b/detectron_pytorch/model/roi_align/functions/__init__.py similarity index 100% rename from lib/model/roi_align/functions/__init__.py rename to detectron_pytorch/model/roi_align/functions/__init__.py diff --git a/lib/model/roi_align/functions/roi_align.py b/detectron_pytorch/model/roi_align/functions/roi_align.py similarity index 100% rename from lib/model/roi_align/functions/roi_align.py rename to detectron_pytorch/model/roi_align/functions/roi_align.py diff --git a/lib/model/roi_align/make.sh b/detectron_pytorch/model/roi_align/make.sh similarity index 86% rename from lib/model/roi_align/make.sh rename to detectron_pytorch/model/roi_align/make.sh index 49b80b7a..3b9aa3cd 100755 --- a/lib/model/roi_align/make.sh +++ b/detectron_pytorch/model/roi_align/make.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -CUDA_PATH=/usr/local/cuda/ +# CUDA_PATH=/usr/local/cuda/ cd src echo "Compiling my_lib kernels by nvcc..." diff --git a/lib/model/roi_align/modules/__init__.py b/detectron_pytorch/model/roi_align/modules/__init__.py similarity index 100% rename from lib/model/roi_align/modules/__init__.py rename to detectron_pytorch/model/roi_align/modules/__init__.py diff --git a/lib/model/roi_align/modules/roi_align.py b/detectron_pytorch/model/roi_align/modules/roi_align.py similarity index 100% rename from lib/model/roi_align/modules/roi_align.py rename to detectron_pytorch/model/roi_align/modules/roi_align.py diff --git a/lib/model/roi_align/src/roi_align_cuda.c b/detectron_pytorch/model/roi_align/src/roi_align_cuda.c similarity index 100% rename from lib/model/roi_align/src/roi_align_cuda.c rename to detectron_pytorch/model/roi_align/src/roi_align_cuda.c diff --git a/lib/model/roi_align/src/roi_align_cuda.h b/detectron_pytorch/model/roi_align/src/roi_align_cuda.h similarity index 100% rename from lib/model/roi_align/src/roi_align_cuda.h rename to detectron_pytorch/model/roi_align/src/roi_align_cuda.h diff --git a/lib/model/roi_align/src/roi_align_kernel.cu b/detectron_pytorch/model/roi_align/src/roi_align_kernel.cu similarity index 100% rename from lib/model/roi_align/src/roi_align_kernel.cu rename to detectron_pytorch/model/roi_align/src/roi_align_kernel.cu diff --git a/lib/model/roi_align/src/roi_align_kernel.h b/detectron_pytorch/model/roi_align/src/roi_align_kernel.h similarity index 100% rename from lib/model/roi_align/src/roi_align_kernel.h rename to detectron_pytorch/model/roi_align/src/roi_align_kernel.h diff --git a/lib/model/roi_crop/__init__.py b/detectron_pytorch/model/roi_crop/__init__.py similarity index 100% rename from lib/model/roi_crop/__init__.py rename to detectron_pytorch/model/roi_crop/__init__.py diff --git a/lib/model/roi_crop/_ext/__init__.py b/detectron_pytorch/model/roi_crop/_ext/__init__.py similarity index 100% rename from lib/model/roi_crop/_ext/__init__.py rename to detectron_pytorch/model/roi_crop/_ext/__init__.py diff --git a/lib/model/roi_crop/_ext/crop_resize/__init__.py b/detectron_pytorch/model/roi_crop/_ext/crop_resize/__init__.py similarity index 100% rename from lib/model/roi_crop/_ext/crop_resize/__init__.py rename to detectron_pytorch/model/roi_crop/_ext/crop_resize/__init__.py diff --git a/lib/model/roi_crop/_ext/roi_crop/__init__.py b/detectron_pytorch/model/roi_crop/_ext/roi_crop/__init__.py similarity index 100% rename from lib/model/roi_crop/_ext/roi_crop/__init__.py rename to detectron_pytorch/model/roi_crop/_ext/roi_crop/__init__.py diff --git a/lib/model/roi_crop/build.py b/detectron_pytorch/model/roi_crop/build.py similarity index 100% rename from lib/model/roi_crop/build.py rename to detectron_pytorch/model/roi_crop/build.py diff --git a/lib/model/roi_crop/functions/__init__.py b/detectron_pytorch/model/roi_crop/functions/__init__.py similarity index 100% rename from lib/model/roi_crop/functions/__init__.py rename to detectron_pytorch/model/roi_crop/functions/__init__.py diff --git a/lib/model/roi_crop/functions/crop_resize.py b/detectron_pytorch/model/roi_crop/functions/crop_resize.py similarity index 100% rename from lib/model/roi_crop/functions/crop_resize.py rename to detectron_pytorch/model/roi_crop/functions/crop_resize.py diff --git a/lib/model/roi_crop/functions/gridgen.py b/detectron_pytorch/model/roi_crop/functions/gridgen.py similarity index 100% rename from lib/model/roi_crop/functions/gridgen.py rename to detectron_pytorch/model/roi_crop/functions/gridgen.py diff --git a/lib/model/roi_crop/functions/roi_crop.py b/detectron_pytorch/model/roi_crop/functions/roi_crop.py similarity index 100% rename from lib/model/roi_crop/functions/roi_crop.py rename to detectron_pytorch/model/roi_crop/functions/roi_crop.py diff --git a/lib/model/roi_crop/make.sh b/detectron_pytorch/model/roi_crop/make.sh similarity index 100% rename from lib/model/roi_crop/make.sh rename to detectron_pytorch/model/roi_crop/make.sh diff --git a/lib/model/roi_crop/modules/__init__.py b/detectron_pytorch/model/roi_crop/modules/__init__.py similarity index 100% rename from lib/model/roi_crop/modules/__init__.py rename to detectron_pytorch/model/roi_crop/modules/__init__.py diff --git a/lib/model/roi_crop/modules/gridgen.py b/detectron_pytorch/model/roi_crop/modules/gridgen.py similarity index 100% rename from lib/model/roi_crop/modules/gridgen.py rename to detectron_pytorch/model/roi_crop/modules/gridgen.py diff --git a/lib/model/roi_crop/modules/roi_crop.py b/detectron_pytorch/model/roi_crop/modules/roi_crop.py similarity index 100% rename from lib/model/roi_crop/modules/roi_crop.py rename to detectron_pytorch/model/roi_crop/modules/roi_crop.py diff --git a/lib/model/roi_crop/src/roi_crop.c b/detectron_pytorch/model/roi_crop/src/roi_crop.c similarity index 100% rename from lib/model/roi_crop/src/roi_crop.c rename to detectron_pytorch/model/roi_crop/src/roi_crop.c diff --git a/lib/model/roi_crop/src/roi_crop.h b/detectron_pytorch/model/roi_crop/src/roi_crop.h similarity index 100% rename from lib/model/roi_crop/src/roi_crop.h rename to detectron_pytorch/model/roi_crop/src/roi_crop.h diff --git a/lib/model/roi_crop/src/roi_crop_cuda.c b/detectron_pytorch/model/roi_crop/src/roi_crop_cuda.c similarity index 100% rename from lib/model/roi_crop/src/roi_crop_cuda.c rename to detectron_pytorch/model/roi_crop/src/roi_crop_cuda.c diff --git a/lib/model/roi_crop/src/roi_crop_cuda.h b/detectron_pytorch/model/roi_crop/src/roi_crop_cuda.h similarity index 100% rename from lib/model/roi_crop/src/roi_crop_cuda.h rename to detectron_pytorch/model/roi_crop/src/roi_crop_cuda.h diff --git a/lib/model/roi_crop/src/roi_crop_cuda_kernel.cu b/detectron_pytorch/model/roi_crop/src/roi_crop_cuda_kernel.cu similarity index 100% rename from lib/model/roi_crop/src/roi_crop_cuda_kernel.cu rename to detectron_pytorch/model/roi_crop/src/roi_crop_cuda_kernel.cu diff --git a/lib/model/roi_crop/src/roi_crop_cuda_kernel.h b/detectron_pytorch/model/roi_crop/src/roi_crop_cuda_kernel.h similarity index 100% rename from lib/model/roi_crop/src/roi_crop_cuda_kernel.h rename to detectron_pytorch/model/roi_crop/src/roi_crop_cuda_kernel.h diff --git a/lib/model/roi_pooling/__init__.py b/detectron_pytorch/model/roi_pooling/__init__.py similarity index 100% rename from lib/model/roi_pooling/__init__.py rename to detectron_pytorch/model/roi_pooling/__init__.py diff --git a/lib/model/roi_pooling/_ext/__init__.py b/detectron_pytorch/model/roi_pooling/_ext/__init__.py similarity index 100% rename from lib/model/roi_pooling/_ext/__init__.py rename to detectron_pytorch/model/roi_pooling/_ext/__init__.py diff --git a/lib/model/roi_pooling/_ext/roi_pooling/__init__.py b/detectron_pytorch/model/roi_pooling/_ext/roi_pooling/__init__.py similarity index 100% rename from lib/model/roi_pooling/_ext/roi_pooling/__init__.py rename to detectron_pytorch/model/roi_pooling/_ext/roi_pooling/__init__.py diff --git a/lib/model/roi_pooling/build.py b/detectron_pytorch/model/roi_pooling/build.py similarity index 100% rename from lib/model/roi_pooling/build.py rename to detectron_pytorch/model/roi_pooling/build.py diff --git a/lib/model/roi_pooling/functions/__init__.py b/detectron_pytorch/model/roi_pooling/functions/__init__.py similarity index 100% rename from lib/model/roi_pooling/functions/__init__.py rename to detectron_pytorch/model/roi_pooling/functions/__init__.py diff --git a/lib/model/roi_pooling/functions/roi_pool.py b/detectron_pytorch/model/roi_pooling/functions/roi_pool.py similarity index 100% rename from lib/model/roi_pooling/functions/roi_pool.py rename to detectron_pytorch/model/roi_pooling/functions/roi_pool.py diff --git a/lib/model/roi_pooling/modules/__init__.py b/detectron_pytorch/model/roi_pooling/modules/__init__.py similarity index 100% rename from lib/model/roi_pooling/modules/__init__.py rename to detectron_pytorch/model/roi_pooling/modules/__init__.py diff --git a/lib/model/roi_pooling/modules/roi_pool.py b/detectron_pytorch/model/roi_pooling/modules/roi_pool.py similarity index 100% rename from lib/model/roi_pooling/modules/roi_pool.py rename to detectron_pytorch/model/roi_pooling/modules/roi_pool.py diff --git a/lib/model/roi_pooling/src/roi_pooling.c b/detectron_pytorch/model/roi_pooling/src/roi_pooling.c similarity index 100% rename from lib/model/roi_pooling/src/roi_pooling.c rename to detectron_pytorch/model/roi_pooling/src/roi_pooling.c diff --git a/lib/model/roi_pooling/src/roi_pooling.h b/detectron_pytorch/model/roi_pooling/src/roi_pooling.h similarity index 100% rename from lib/model/roi_pooling/src/roi_pooling.h rename to detectron_pytorch/model/roi_pooling/src/roi_pooling.h diff --git a/lib/model/roi_pooling/src/roi_pooling_cuda.c b/detectron_pytorch/model/roi_pooling/src/roi_pooling_cuda.c similarity index 100% rename from lib/model/roi_pooling/src/roi_pooling_cuda.c rename to detectron_pytorch/model/roi_pooling/src/roi_pooling_cuda.c diff --git a/lib/model/roi_pooling/src/roi_pooling_cuda.h b/detectron_pytorch/model/roi_pooling/src/roi_pooling_cuda.h similarity index 100% rename from lib/model/roi_pooling/src/roi_pooling_cuda.h rename to detectron_pytorch/model/roi_pooling/src/roi_pooling_cuda.h diff --git a/lib/model/roi_pooling/src/roi_pooling_kernel.cu b/detectron_pytorch/model/roi_pooling/src/roi_pooling_kernel.cu similarity index 100% rename from lib/model/roi_pooling/src/roi_pooling_kernel.cu rename to detectron_pytorch/model/roi_pooling/src/roi_pooling_kernel.cu diff --git a/lib/model/roi_pooling/src/roi_pooling_kernel.h b/detectron_pytorch/model/roi_pooling/src/roi_pooling_kernel.h similarity index 100% rename from lib/model/roi_pooling/src/roi_pooling_kernel.h rename to detectron_pytorch/model/roi_pooling/src/roi_pooling_kernel.h diff --git a/lib/model/nms/.gitignore b/detectron_pytorch/model/utils/.gitignore similarity index 100% rename from lib/model/nms/.gitignore rename to detectron_pytorch/model/utils/.gitignore diff --git a/lib/model/utils/__init__.py b/detectron_pytorch/model/utils/__init__.py similarity index 100% rename from lib/model/utils/__init__.py rename to detectron_pytorch/model/utils/__init__.py diff --git a/lib/model/utils/net_utils.py b/detectron_pytorch/model/utils/net_utils.py similarity index 96% rename from lib/model/utils/net_utils.py rename to detectron_pytorch/model/utils/net_utils.py index 4bbac9c8..3cf918e5 100644 --- a/lib/model/utils/net_utils.py +++ b/detectron_pytorch/model/utils/net_utils.py @@ -4,8 +4,8 @@ from torch.autograd import Variable import numpy as np import torchvision.models as models -from core.config import cfg -from model.roi_crop.functions.roi_crop import RoICropFunction +from detectron_pytorch.core.config import cfg +from detectron_pytorch.model.roi_crop.functions.roi_crop import RoICropFunction import cv2 import pdb import random @@ -36,7 +36,7 @@ def weights_normal_init(model, dev=0.01): def _crop_pool_layer(bottom, rois, max_pool=True): - # code modified from + # code modified from # https://github.com/ruotianluo/pytorch-faster-rcnn # implement it using stn # box to affine @@ -86,7 +86,7 @@ def _crop_pool_layer(bottom, rois, max_pool=True): bottom = bottom.view(1, batch_size, D, H, W).contiguous().expand(roi_per_batch, batch_size, D, H, W)\ .contiguous().view(-1, D, H, W) crops = F.grid_sample(bottom, grid) - + return crops, grid def _affine_grid_gen(rois, input_size, grid_size): @@ -152,11 +152,11 @@ def compare_grid_sample(): W = 4 # random.randint(1, 8) input = Variable(torch.randn(N, C, H, W).cuda(), requires_grad=True) input_p = input.clone().data.contiguous() - + grid = Variable(torch.randn(N, H, W, 2).cuda(), requires_grad=True) grid_clone = grid.clone().contiguous() - out_offcial = F.grid_sample(input, grid) + out_offcial = F.grid_sample(input, grid) grad_outputs = Variable(torch.rand(out_offcial.size()).cuda()) grad_outputs_clone = grad_outputs.clone().contiguous() grad_inputs = torch.autograd.grad(out_offcial, (input, grid), grad_outputs.contiguous()) diff --git a/lib/modeling/FPN.py b/detectron_pytorch/modeling/FPN.py similarity index 97% rename from lib/modeling/FPN.py rename to detectron_pytorch/modeling/FPN.py index 03cd60bc..4670f5bb 100644 --- a/lib/modeling/FPN.py +++ b/detectron_pytorch/modeling/FPN.py @@ -6,13 +6,13 @@ import torch.nn.functional as F from torch.nn import init -from core.config import cfg -import utils.net as net_utils -import modeling.ResNet as ResNet -from modeling.generate_anchors import generate_anchors -from modeling.generate_proposals import GenerateProposalsOp -from modeling.collect_and_distribute_fpn_rpn_proposals import CollectAndDistributeFpnRpnProposalsOp -import nn as mynn +from detectron_pytorch.core.config import cfg +import detectron_pytorch.utils.net as net_utils +import detectron_pytorch.modeling.ResNet as ResNet +from detectron_pytorch.modeling.generate_anchors import generate_anchors +from detectron_pytorch.modeling.generate_proposals import GenerateProposalsOp +from detectron_pytorch.modeling.collect_and_distribute_fpn_rpn_proposals import CollectAndDistributeFpnRpnProposalsOp +import detectron_pytorch.nn as mynn # Lowest and highest pyramid levels in the backbone network. For FPN, we assume # that all networks have 5 spatial reductions, each by a factor of 2. Level 1 diff --git a/lib/modeling/ResNet.py b/detectron_pytorch/modeling/ResNet.py similarity index 98% rename from lib/modeling/ResNet.py rename to detectron_pytorch/modeling/ResNet.py index 41f31a8e..ef3db1d9 100644 --- a/lib/modeling/ResNet.py +++ b/detectron_pytorch/modeling/ResNet.py @@ -5,10 +5,10 @@ import torch.nn as nn import torch.nn.functional as F -from core.config import cfg -import nn as mynn -import utils.net as net_utils -from utils.resnet_weights_helper import convert_state_dict +from detectron_pytorch.core.config import cfg +import detectron_pytorch.nn as mynn +import detectron_pytorch.utils.net as net_utils +from detectron_pytorch.utils.resnet_weights_helper import convert_state_dict # ---------------------------------------------------------------------------- # # Bits for specific architectures (ResNet50, ResNet101, ...) diff --git a/lib/modeling/__init__.py b/detectron_pytorch/modeling/__init__.py similarity index 100% rename from lib/modeling/__init__.py rename to detectron_pytorch/modeling/__init__.py diff --git a/lib/modeling/collect_and_distribute_fpn_rpn_proposals.py b/detectron_pytorch/modeling/collect_and_distribute_fpn_rpn_proposals.py similarity index 89% rename from lib/modeling/collect_and_distribute_fpn_rpn_proposals.py rename to detectron_pytorch/modeling/collect_and_distribute_fpn_rpn_proposals.py index dd28a539..3718edd5 100644 --- a/lib/modeling/collect_and_distribute_fpn_rpn_proposals.py +++ b/detectron_pytorch/modeling/collect_and_distribute_fpn_rpn_proposals.py @@ -1,11 +1,11 @@ import numpy as np from torch import nn -from core.config import cfg -from datasets import json_dataset -import roi_data.fast_rcnn -import utils.blob as blob_utils -import utils.fpn as fpn_utils +from detectron_pytorch.core.config import cfg +from detectron_pytorch.datasets import json_dataset +import detectron_pytorch.roi_data.fast_rcnn as fast_rcnn +import detectron_pytorch.utils.blob as blob_utils +import detectron_pytorch.utils.fpn as fpn_utils class CollectAndDistributeFpnRpnProposalsOp(nn.Module): @@ -58,9 +58,9 @@ def forward(self, inputs, roidb, im_info): json_dataset.add_proposals(roidb, rois, im_scales, crowd_thresh=0) # Compute training labels for the RPN proposals; also handles # distributing the proposals over FPN levels - output_blob_names = roi_data.fast_rcnn.get_fast_rcnn_blob_names() + output_blob_names = fast_rcnn.get_fast_rcnn_blob_names() blobs = {k: [] for k in output_blob_names} - roi_data.fast_rcnn.add_fast_rcnn_blobs(blobs, im_scales, roidb) + fast_rcnn.add_fast_rcnn_blobs(blobs, im_scales, roidb) else: # For inference we have a special code path that avoids some data # loader overhead @@ -89,7 +89,7 @@ def collect(inputs, is_training): def distribute(rois, label_blobs): """To understand the output blob order see return value of - roi_data.fast_rcnn.get_fast_rcnn_blob_names(is_training=False) + fast_rcnn.get_fast_rcnn_blob_names(is_training=False) """ lvl_min = cfg.FPN.ROI_MIN_LEVEL lvl_max = cfg.FPN.ROI_MAX_LEVEL @@ -100,7 +100,7 @@ def distribute(rois, label_blobs): # rois = np.delete(rois, idx_neg, axis=0) # lvls = np.delete(lvls, idx_neg, axis=0) - output_blob_names = roi_data.fast_rcnn.get_fast_rcnn_blob_names(is_training=False) + output_blob_names = fast_rcnn.get_fast_rcnn_blob_names(is_training=False) outputs = [None] * len(output_blob_names) outputs[0] = rois diff --git a/lib/modeling/fast_rcnn_heads.py b/detectron_pytorch/modeling/fast_rcnn_heads.py similarity index 98% rename from lib/modeling/fast_rcnn_heads.py rename to detectron_pytorch/modeling/fast_rcnn_heads.py index 3b386ed3..61769f0c 100644 --- a/lib/modeling/fast_rcnn_heads.py +++ b/detectron_pytorch/modeling/fast_rcnn_heads.py @@ -4,9 +4,9 @@ import torch.nn.init as init from torch.autograd import Variable -from core.config import cfg -import nn as mynn -import utils.net as net_utils +from detectron_pytorch.core.config import cfg +import detectron_pytorch.nn as mynn +import detectron_pytorch.utils.net as net_utils class fast_rcnn_outputs(nn.Module): diff --git a/lib/modeling/generate_anchors.py b/detectron_pytorch/modeling/generate_anchors.py similarity index 100% rename from lib/modeling/generate_anchors.py rename to detectron_pytorch/modeling/generate_anchors.py diff --git a/lib/modeling/generate_proposal_labels.py b/detectron_pytorch/modeling/generate_proposal_labels.py similarity index 81% rename from lib/modeling/generate_proposal_labels.py rename to detectron_pytorch/modeling/generate_proposal_labels.py index 0c2b93e6..7b4b483d 100644 --- a/lib/modeling/generate_proposal_labels.py +++ b/detectron_pytorch/modeling/generate_proposal_labels.py @@ -1,8 +1,8 @@ from torch import nn -from core.config import cfg -from datasets import json_dataset -import roi_data.fast_rcnn +from detectron_pytorch.core.config import cfg +from detectron_pytorch.datasets import json_dataset +import detectron_pytorch.roi_data.fast_rcnn as fast_rcnn class GenerateProposalLabelsOp(nn.Module): @@ -26,7 +26,7 @@ def forward(self, rpn_rois, roidb, im_info): """ im_scales = im_info.data.numpy()[:, 2] - output_blob_names = roi_data.fast_rcnn.get_fast_rcnn_blob_names() + output_blob_names = fast_rcnn.get_fast_rcnn_blob_names() # For historical consistency with the original Faster R-CNN # implementation we are *not* filtering crowd proposals. # This choice should be investigated in the future (it likely does @@ -34,6 +34,6 @@ def forward(self, rpn_rois, roidb, im_info): # Note: crowd_thresh=0 will ignore _filter_crowd_proposals json_dataset.add_proposals(roidb, rpn_rois, im_scales, crowd_thresh=0) blobs = {k: [] for k in output_blob_names} - roi_data.fast_rcnn.add_fast_rcnn_blobs(blobs, im_scales, roidb) + fast_rcnn.add_fast_rcnn_blobs(blobs, im_scales, roidb) return blobs diff --git a/lib/modeling/generate_proposals.py b/detectron_pytorch/modeling/generate_proposals.py similarity index 98% rename from lib/modeling/generate_proposals.py rename to detectron_pytorch/modeling/generate_proposals.py index 1ab6472d..99532a4f 100644 --- a/lib/modeling/generate_proposals.py +++ b/detectron_pytorch/modeling/generate_proposals.py @@ -3,8 +3,8 @@ from torch import nn -from core.config import cfg -import utils.boxes as box_utils +from detectron_pytorch.core.config import cfg +import detectron_pytorch.utils.boxes as box_utils logger = logging.getLogger(__name__) @@ -52,7 +52,7 @@ def forward(self, rpn_cls_prob, rpn_bbox_pred, im_info): # 6. apply NMS with a loose threshold (0.7) to the remaining proposals # 7. take after_nms_topN proposals after NMS # 8. return the top proposals - + """Type conversion""" # predicted probability of fg object for each RPN anchor scores = rpn_cls_prob.data.cpu().numpy() diff --git a/lib/modeling/keypoint_rcnn_heads.py b/detectron_pytorch/modeling/keypoint_rcnn_heads.py similarity index 98% rename from lib/modeling/keypoint_rcnn_heads.py rename to detectron_pytorch/modeling/keypoint_rcnn_heads.py index 4b73d2a7..842bc405 100644 --- a/lib/modeling/keypoint_rcnn_heads.py +++ b/detectron_pytorch/modeling/keypoint_rcnn_heads.py @@ -6,8 +6,8 @@ import torch.nn.init as init from torch.autograd import Variable -from core.config import cfg -import nn as mynn +from detectron_pytorch.core.config import cfg +import detectron_pytorch.nn as mynn # ---------------------------------------------------------------------------- # diff --git a/lib/modeling/mask_rcnn_heads.py b/detectron_pytorch/modeling/mask_rcnn_heads.py similarity index 98% rename from lib/modeling/mask_rcnn_heads.py rename to detectron_pytorch/modeling/mask_rcnn_heads.py index e71be164..50130e9c 100644 --- a/lib/modeling/mask_rcnn_heads.py +++ b/detectron_pytorch/modeling/mask_rcnn_heads.py @@ -7,10 +7,10 @@ import torch.nn.init as init from torch.autograd import Variable -from core.config import cfg -from modeling import ResNet -import nn as mynn -import utils.net as net_utils +from detectron_pytorch.core.config import cfg +from detectron_pytorch.modeling import ResNet +import detectron_pytorch.nn as mynn +import detectron_pytorch.utils.net as net_utils # ---------------------------------------------------------------------------- # diff --git a/lib/modeling/model_builder.py b/detectron_pytorch/modeling/model_builder.py similarity index 95% rename from lib/modeling/model_builder.py rename to detectron_pytorch/modeling/model_builder.py index 0c7f1f49..d510020b 100644 --- a/lib/modeling/model_builder.py +++ b/detectron_pytorch/modeling/model_builder.py @@ -7,17 +7,17 @@ import torch.nn.functional as F from torch.autograd import Variable -from core.config import cfg -from model.roi_pooling.functions.roi_pool import RoIPoolFunction -from model.roi_crop.functions.roi_crop import RoICropFunction -from modeling.roi_xfrom.roi_align.functions.roi_align import RoIAlignFunction -import modeling.rpn_heads as rpn_heads -import modeling.fast_rcnn_heads as fast_rcnn_heads -import modeling.mask_rcnn_heads as mask_rcnn_heads -import modeling.keypoint_rcnn_heads as keypoint_rcnn_heads -import utils.blob as blob_utils -import utils.net as net_utils -import utils.resnet_weights_helper as resnet_utils +from detectron_pytorch.core.config import cfg +from detectron_pytorch.model.roi_pooling.functions.roi_pool import RoIPoolFunction +from detectron_pytorch.model.roi_crop.functions.roi_crop import RoICropFunction +from detectron_pytorch.modeling.roi_xfrom.roi_align.functions.roi_align import RoIAlignFunction +import detectron_pytorch.modeling.rpn_heads as rpn_heads +import detectron_pytorch.modeling.fast_rcnn_heads as fast_rcnn_heads +import detectron_pytorch.modeling.mask_rcnn_heads as mask_rcnn_heads +import detectron_pytorch.modeling.keypoint_rcnn_heads as keypoint_rcnn_heads +import detectron_pytorch.utils.blob as blob_utils +import detectron_pytorch.utils.net as net_utils +import detectron_pytorch.utils.resnet_weights_helper as resnet_utils logger = logging.getLogger(__name__) @@ -35,7 +35,7 @@ def get_func(func_name): if len(parts) == 1: return globals()[parts[0]] # Otherwise, assume we're referencing a module under modeling - module_name = 'modeling.' + '.'.join(parts[:-1]) + module_name = 'detectron_pytorch.modeling.' + '.'.join(parts[:-1]) module = importlib.import_module(module_name) return getattr(module, parts[-1]) except Exception: diff --git a/lib/modeling/roi_xfrom/__init__.py b/detectron_pytorch/modeling/roi_xfrom/__init__.py similarity index 100% rename from lib/modeling/roi_xfrom/__init__.py rename to detectron_pytorch/modeling/roi_xfrom/__init__.py diff --git a/lib/modeling/roi_xfrom/roi_align/__init__.py b/detectron_pytorch/modeling/roi_xfrom/roi_align/__init__.py similarity index 100% rename from lib/modeling/roi_xfrom/roi_align/__init__.py rename to detectron_pytorch/modeling/roi_xfrom/roi_align/__init__.py diff --git a/lib/modeling/roi_xfrom/roi_align/_ext/__init__.py b/detectron_pytorch/modeling/roi_xfrom/roi_align/_ext/__init__.py similarity index 100% rename from lib/modeling/roi_xfrom/roi_align/_ext/__init__.py rename to detectron_pytorch/modeling/roi_xfrom/roi_align/_ext/__init__.py diff --git a/lib/modeling/roi_xfrom/roi_align/_ext/roi_align/__init__.py b/detectron_pytorch/modeling/roi_xfrom/roi_align/_ext/roi_align/__init__.py similarity index 100% rename from lib/modeling/roi_xfrom/roi_align/_ext/roi_align/__init__.py rename to detectron_pytorch/modeling/roi_xfrom/roi_align/_ext/roi_align/__init__.py diff --git a/lib/modeling/roi_xfrom/roi_align/build.py b/detectron_pytorch/modeling/roi_xfrom/roi_align/build.py similarity index 100% rename from lib/modeling/roi_xfrom/roi_align/build.py rename to detectron_pytorch/modeling/roi_xfrom/roi_align/build.py diff --git a/lib/modeling/roi_xfrom/roi_align/functions/__init__.py b/detectron_pytorch/modeling/roi_xfrom/roi_align/functions/__init__.py similarity index 100% rename from lib/modeling/roi_xfrom/roi_align/functions/__init__.py rename to detectron_pytorch/modeling/roi_xfrom/roi_align/functions/__init__.py diff --git a/lib/modeling/roi_xfrom/roi_align/functions/roi_align.py b/detectron_pytorch/modeling/roi_xfrom/roi_align/functions/roi_align.py similarity index 100% rename from lib/modeling/roi_xfrom/roi_align/functions/roi_align.py rename to detectron_pytorch/modeling/roi_xfrom/roi_align/functions/roi_align.py diff --git a/lib/modeling/roi_xfrom/roi_align/make.sh b/detectron_pytorch/modeling/roi_xfrom/roi_align/make.sh similarity index 86% rename from lib/modeling/roi_xfrom/roi_align/make.sh rename to detectron_pytorch/modeling/roi_xfrom/roi_align/make.sh index 8428ce49..0e6c4c9f 100644 --- a/lib/modeling/roi_xfrom/roi_align/make.sh +++ b/detectron_pytorch/modeling/roi_xfrom/roi_align/make.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -CUDA_PATH=/usr/local/cuda/ +# CUDA_PATH=/usr/local/cuda/ cd src echo "Compiling my_lib kernels by nvcc..." diff --git a/lib/modeling/roi_xfrom/roi_align/modules/__init__.py b/detectron_pytorch/modeling/roi_xfrom/roi_align/modules/__init__.py similarity index 100% rename from lib/modeling/roi_xfrom/roi_align/modules/__init__.py rename to detectron_pytorch/modeling/roi_xfrom/roi_align/modules/__init__.py diff --git a/lib/modeling/roi_xfrom/roi_align/modules/roi_align.py b/detectron_pytorch/modeling/roi_xfrom/roi_align/modules/roi_align.py similarity index 100% rename from lib/modeling/roi_xfrom/roi_align/modules/roi_align.py rename to detectron_pytorch/modeling/roi_xfrom/roi_align/modules/roi_align.py diff --git a/lib/modeling/roi_xfrom/roi_align/src/roi_align_cuda.c b/detectron_pytorch/modeling/roi_xfrom/roi_align/src/roi_align_cuda.c similarity index 100% rename from lib/modeling/roi_xfrom/roi_align/src/roi_align_cuda.c rename to detectron_pytorch/modeling/roi_xfrom/roi_align/src/roi_align_cuda.c diff --git a/lib/modeling/roi_xfrom/roi_align/src/roi_align_cuda.h b/detectron_pytorch/modeling/roi_xfrom/roi_align/src/roi_align_cuda.h similarity index 100% rename from lib/modeling/roi_xfrom/roi_align/src/roi_align_cuda.h rename to detectron_pytorch/modeling/roi_xfrom/roi_align/src/roi_align_cuda.h diff --git a/lib/modeling/roi_xfrom/roi_align/src/roi_align_kernel.cu b/detectron_pytorch/modeling/roi_xfrom/roi_align/src/roi_align_kernel.cu similarity index 100% rename from lib/modeling/roi_xfrom/roi_align/src/roi_align_kernel.cu rename to detectron_pytorch/modeling/roi_xfrom/roi_align/src/roi_align_kernel.cu diff --git a/lib/modeling/roi_xfrom/roi_align/src/roi_align_kernel.h b/detectron_pytorch/modeling/roi_xfrom/roi_align/src/roi_align_kernel.h similarity index 100% rename from lib/modeling/roi_xfrom/roi_align/src/roi_align_kernel.h rename to detectron_pytorch/modeling/roi_xfrom/roi_align/src/roi_align_kernel.h diff --git a/lib/modeling/rpn_heads.py b/detectron_pytorch/modeling/rpn_heads.py similarity index 94% rename from lib/modeling/rpn_heads.py rename to detectron_pytorch/modeling/rpn_heads.py index 5edcf3a7..c3dfcf29 100644 --- a/lib/modeling/rpn_heads.py +++ b/detectron_pytorch/modeling/rpn_heads.py @@ -2,12 +2,12 @@ from torch.nn import init import torch.nn.functional as F -from core.config import cfg -from modeling.generate_anchors import generate_anchors -from modeling.generate_proposals import GenerateProposalsOp -from modeling.generate_proposal_labels import GenerateProposalLabelsOp -import modeling.FPN as FPN -import utils.net as net_utils +from detectron_pytorch.core.config import cfg +from detectron_pytorch.modeling.generate_anchors import generate_anchors +from detectron_pytorch.modeling.generate_proposals import GenerateProposalsOp +from detectron_pytorch.modeling.generate_proposal_labels import GenerateProposalLabelsOp +import detectron_pytorch.modeling.FPN as FPN +import detectron_pytorch.utils.net as net_utils # ---------------------------------------------------------------------------- # diff --git a/lib/nn/__init__.py b/detectron_pytorch/nn/__init__.py similarity index 100% rename from lib/nn/__init__.py rename to detectron_pytorch/nn/__init__.py diff --git a/lib/nn/functional.py b/detectron_pytorch/nn/functional.py similarity index 100% rename from lib/nn/functional.py rename to detectron_pytorch/nn/functional.py diff --git a/lib/nn/init.py b/detectron_pytorch/nn/init.py similarity index 100% rename from lib/nn/init.py rename to detectron_pytorch/nn/init.py diff --git a/lib/nn/modules/__init__.py b/detectron_pytorch/nn/modules/__init__.py similarity index 100% rename from lib/nn/modules/__init__.py rename to detectron_pytorch/nn/modules/__init__.py diff --git a/lib/nn/modules/affine.py b/detectron_pytorch/nn/modules/affine.py similarity index 100% rename from lib/nn/modules/affine.py rename to detectron_pytorch/nn/modules/affine.py diff --git a/lib/nn/modules/normalization.py b/detectron_pytorch/nn/modules/normalization.py similarity index 96% rename from lib/nn/modules/normalization.py rename to detectron_pytorch/nn/modules/normalization.py index ae6df882..6e4ad6a7 100644 --- a/lib/nn/modules/normalization.py +++ b/detectron_pytorch/nn/modules/normalization.py @@ -3,7 +3,7 @@ import torch import torch.nn as nn -import nn.functional as myF +from .. import functional as myF class GroupNorm(nn.Module): diff --git a/lib/nn/modules/upsample.py b/detectron_pytorch/nn/modules/upsample.py similarity index 100% rename from lib/nn/modules/upsample.py rename to detectron_pytorch/nn/modules/upsample.py diff --git a/lib/nn/parallel/__init__.py b/detectron_pytorch/nn/parallel/__init__.py similarity index 100% rename from lib/nn/parallel/__init__.py rename to detectron_pytorch/nn/parallel/__init__.py diff --git a/lib/nn/parallel/_functions.py b/detectron_pytorch/nn/parallel/_functions.py similarity index 100% rename from lib/nn/parallel/_functions.py rename to detectron_pytorch/nn/parallel/_functions.py diff --git a/lib/nn/parallel/data_parallel.py b/detectron_pytorch/nn/parallel/data_parallel.py similarity index 100% rename from lib/nn/parallel/data_parallel.py rename to detectron_pytorch/nn/parallel/data_parallel.py diff --git a/lib/nn/parallel/parallel_apply.py b/detectron_pytorch/nn/parallel/parallel_apply.py similarity index 100% rename from lib/nn/parallel/parallel_apply.py rename to detectron_pytorch/nn/parallel/parallel_apply.py diff --git a/lib/nn/parallel/replicate.py b/detectron_pytorch/nn/parallel/replicate.py similarity index 100% rename from lib/nn/parallel/replicate.py rename to detectron_pytorch/nn/parallel/replicate.py diff --git a/lib/nn/parallel/scatter_gather.py b/detectron_pytorch/nn/parallel/scatter_gather.py similarity index 100% rename from lib/nn/parallel/scatter_gather.py rename to detectron_pytorch/nn/parallel/scatter_gather.py diff --git a/lib/roi_data/__init__.py b/detectron_pytorch/roi_data/__init__.py similarity index 100% rename from lib/roi_data/__init__.py rename to detectron_pytorch/roi_data/__init__.py diff --git a/lib/roi_data/data_utils.py b/detectron_pytorch/roi_data/data_utils.py similarity index 96% rename from lib/roi_data/data_utils.py rename to detectron_pytorch/roi_data/data_utils.py index 076f963d..7ee4135c 100644 --- a/lib/roi_data/data_utils.py +++ b/detectron_pytorch/roi_data/data_utils.py @@ -26,9 +26,9 @@ import numpy as np import threading -from core.config import cfg -from modeling.generate_anchors import generate_anchors -import utils.boxes as box_utils +from detectron_pytorch.core.config import cfg +from detectron_pytorch.modeling.generate_anchors import generate_anchors +import detectron_pytorch.utils.boxes as box_utils logger = logging.getLogger(__name__) diff --git a/lib/roi_data/fast_rcnn.py b/detectron_pytorch/roi_data/fast_rcnn.py similarity index 95% rename from lib/roi_data/fast_rcnn.py rename to detectron_pytorch/roi_data/fast_rcnn.py index 8cb500b3..9f8e21e5 100644 --- a/lib/roi_data/fast_rcnn.py +++ b/detectron_pytorch/roi_data/fast_rcnn.py @@ -25,12 +25,12 @@ import numpy as np import numpy.random as npr -from core.config import cfg -import roi_data.keypoint_rcnn -import roi_data.mask_rcnn -import utils.boxes as box_utils -import utils.blob as blob_utils -import utils.fpn as fpn_utils +from detectron_pytorch.core.config import cfg +import detectron_pytorch.roi_data.keypoint_rcnn as keypoint_rcnn +import detectron_pytorch.roi_data.mask_rcnn as mask_rcnn +import detectron_pytorch.utils.boxes as box_utils +import detectron_pytorch.utils.blob as blob_utils +import detectron_pytorch.utils.fpn as fpn_utils def get_fast_rcnn_blob_names(is_training=True): @@ -121,7 +121,7 @@ def add_fast_rcnn_blobs(blobs, im_scales, roidb): # all minibatch images valid = True if cfg.MODEL.KEYPOINTS_ON: - valid = roi_data.keypoint_rcnn.finalize_keypoint_minibatch(blobs, valid) + valid = keypoint_rcnn.finalize_keypoint_minibatch(blobs, valid) return valid @@ -192,12 +192,12 @@ def _sample_rois(roidb, im_scale, batch_idx): # Optionally add Mask R-CNN blobs if cfg.MODEL.MASK_ON: - roi_data.mask_rcnn.add_mask_rcnn_blobs(blob_dict, sampled_boxes, roidb, - im_scale, batch_idx) + mask_rcnn.add_mask_rcnn_blobs(blob_dict, sampled_boxes, roidb, + im_scale, batch_idx) # Optionally add Keypoint R-CNN blobs if cfg.MODEL.KEYPOINTS_ON: - roi_data.keypoint_rcnn.add_keypoint_rcnn_blobs( + keypoint_rcnn.add_keypoint_rcnn_blobs( blob_dict, roidb, fg_rois_per_image, fg_inds, im_scale, batch_idx) return blob_dict diff --git a/lib/roi_data/keypoint_rcnn.py b/detectron_pytorch/roi_data/keypoint_rcnn.py similarity index 96% rename from lib/roi_data/keypoint_rcnn.py rename to detectron_pytorch/roi_data/keypoint_rcnn.py index fed45907..d6575a15 100644 --- a/lib/roi_data/keypoint_rcnn.py +++ b/detectron_pytorch/roi_data/keypoint_rcnn.py @@ -25,9 +25,9 @@ import numpy as np -from core.config import cfg -import utils.blob as blob_utils -import utils.keypoints as keypoint_utils +from detectron_pytorch.core.config import cfg +import detectron_pytorch.utils.blob as blob_utils +import detectron_pytorch.utils.keypoints as keypoint_utils def add_keypoint_rcnn_blobs(blobs, roidb, fg_rois_per_image, fg_inds, im_scale, diff --git a/lib/roi_data/loader.py b/detectron_pytorch/roi_data/loader.py similarity index 98% rename from lib/roi_data/loader.py rename to detectron_pytorch/roi_data/loader.py index 70aeb6fc..1d4195cb 100644 --- a/lib/roi_data/loader.py +++ b/detectron_pytorch/roi_data/loader.py @@ -8,9 +8,9 @@ from torch.utils.data.dataloader import default_collate from torch._six import int_classes as _int_classes -from core.config import cfg -from roi_data.minibatch import get_minibatch -import utils.blob as blob_utils +from detectron_pytorch.core.config import cfg +from detectron_pytorch.roi_data.minibatch import get_minibatch +import detectron_pytorch.utils.blob as blob_utils # from model.rpn.bbox_transform import bbox_transform_inv, clip_boxes @@ -118,7 +118,7 @@ def __len__(self): def cal_minibatch_ratio(ratio_list): """Given the ratio_list, we want to make the RATIO same for each minibatch on each GPU. - Note: this only work for 1) cfg.TRAIN.MAX_SIZE is ignored during `prep_im_for_blob` + Note: this only work for 1) cfg.TRAIN.MAX_SIZE is ignored during `prep_im_for_blob` and 2) cfg.TRAIN.SCALES containing SINGLE scale. Since all prepared images will have same min side length of cfg.TRAIN.SCALES[0], we can pad and batch images base on that. diff --git a/lib/roi_data/mask_rcnn.py b/detectron_pytorch/roi_data/mask_rcnn.py similarity index 96% rename from lib/roi_data/mask_rcnn.py rename to detectron_pytorch/roi_data/mask_rcnn.py index e5fc69aa..8563e533 100644 --- a/lib/roi_data/mask_rcnn.py +++ b/detectron_pytorch/roi_data/mask_rcnn.py @@ -25,10 +25,10 @@ import logging import numpy as np -from core.config import cfg -import utils.blob as blob_utils -import utils.boxes as box_utils -import utils.segms as segm_utils +from detectron_pytorch.core.config import cfg +import detectron_pytorch.utils.blob as blob_utils +import detectron_pytorch.utils.boxes as box_utils +import detectron_pytorch.utils.segms as segm_utils def add_mask_rcnn_blobs(blobs, sampled_boxes, roidb, im_scale, batch_idx): diff --git a/lib/roi_data/minibatch.py b/detectron_pytorch/roi_data/minibatch.py similarity index 84% rename from lib/roi_data/minibatch.py rename to detectron_pytorch/roi_data/minibatch.py index 65ef9e66..0f52e7f2 100644 --- a/lib/roi_data/minibatch.py +++ b/detectron_pytorch/roi_data/minibatch.py @@ -1,9 +1,10 @@ import numpy as np import cv2 -from core.config import cfg -import utils.blob as blob_utils -import roi_data.rpn +from detectron_pytorch.core.config import cfg +import detectron_pytorch.utils.blob as blob_utils +import detectron_pytorch.roi_data.rpn as rpn +import detectron_pytorch.roi_data.fast_rcnn as fast_rcnn def get_minibatch_blob_names(is_training=True): @@ -13,12 +14,12 @@ def get_minibatch_blob_names(is_training=True): blob_names = ['data'] if cfg.RPN.RPN_ON: # RPN-only or end-to-end Faster R-CNN - blob_names += roi_data.rpn.get_rpn_blob_names(is_training=is_training) + blob_names += rpn.get_rpn_blob_names(is_training=is_training) elif cfg.RETINANET.RETINANET_ON: raise NotImplementedError else: # Fast R-CNN like models trained on precomputed proposals - blob_names += roi_data.fast_rcnn.get_fast_rcnn_blob_names( + blob_names += fast_rcnn.get_fast_rcnn_blob_names( is_training=is_training ) return blob_names @@ -35,12 +36,12 @@ def get_minibatch(roidb): blobs['data'] = im_blob if cfg.RPN.RPN_ON: # RPN-only or end-to-end Faster/Mask R-CNN - valid = roi_data.rpn.add_rpn_blobs(blobs, im_scales, roidb) + valid = rpn.add_rpn_blobs(blobs, im_scales, roidb) elif cfg.RETINANET.RETINANET_ON: raise NotImplementedError else: # Fast R-CNN like models trained on precomputed proposals - valid = roi_data.fast_rcnn.add_fast_rcnn_blobs(blobs, im_scales, roidb) + valid = fast_rcnn.add_fast_rcnn_blobs(blobs, im_scales, roidb) return blobs, valid diff --git a/lib/roi_data/rpn.py b/detectron_pytorch/roi_data/rpn.py similarity index 98% rename from lib/roi_data/rpn.py rename to detectron_pytorch/roi_data/rpn.py index 8a63b953..7c89cd90 100644 --- a/lib/roi_data/rpn.py +++ b/detectron_pytorch/roi_data/rpn.py @@ -2,10 +2,10 @@ import numpy as np import numpy.random as npr -from core.config import cfg -import roi_data.data_utils as data_utils -import utils.blob as blob_utils -import utils.boxes as box_utils +from detectron_pytorch.core.config import cfg +import detectron_pytorch.roi_data.data_utils as data_utils +import detectron_pytorch.utils.blob as blob_utils +import detectron_pytorch.utils.boxes as box_utils logger = logging.getLogger(__name__) diff --git a/lib/setup.py b/detectron_pytorch/setup.py similarity index 100% rename from lib/setup.py rename to detectron_pytorch/setup.py diff --git a/lib/utils/__init__.py b/detectron_pytorch/tools/__init__.py similarity index 100% rename from lib/utils/__init__.py rename to detectron_pytorch/tools/__init__.py diff --git a/tools/download_imagenet_weights.py b/detectron_pytorch/tools/download_imagenet_weights.py similarity index 96% rename from tools/download_imagenet_weights.py rename to detectron_pytorch/tools/download_imagenet_weights.py index f01d0a62..0b4740dc 100644 --- a/tools/download_imagenet_weights.py +++ b/detectron_pytorch/tools/download_imagenet_weights.py @@ -10,8 +10,8 @@ from argparse_color_formatter import ColorHelpFormatter from colorama import init, Fore -import _init_paths # pylint: disable=unused-import -from core.config import cfg +# import _init_paths # pylint: disable=unused-import +from detectron_pytorch.core.config import cfg def parse_args(): diff --git a/tools/infer_simple.py b/detectron_pytorch/tools/infer_simple.py similarity index 89% rename from tools/infer_simple.py rename to detectron_pytorch/tools/infer_simple.py index c9e2597a..4ee8d13a 100644 --- a/tools/infer_simple.py +++ b/detectron_pytorch/tools/infer_simple.py @@ -22,17 +22,17 @@ import torch.nn as nn from torch.autograd import Variable -import _init_paths -import nn as mynn -from core.config import cfg, cfg_from_file, cfg_from_list, assert_and_infer_cfg -from core.test import im_detect_all -from modeling.model_builder import Generalized_RCNN -import datasets.dummy_datasets as datasets -import utils.misc as misc_utils -import utils.net as net_utils -import utils.vis as vis_utils -from utils.detectron_weight_helper import load_detectron_weight -from utils.timer import Timer +import detectron_pytorch.nn as mynn +from detectron_pytorch.core.config import ( + cfg, cfg_from_file, cfg_from_list, assert_and_infer_cfg) +from detectron_pytorch.core.test import im_detect_all +from detectron_pytorch.modeling.model_builder import Generalized_RCNN +import detectron_pytorch.datasets.dummy_datasets as datasets +import detectron_pytorch.utils.misc as misc_utils +import detectron_pytorch.utils.net as net_utils +import detectron_pytorch.utils.vis as vis_utils +from detectron_pytorch.utils.detectron_weight_helper import load_detectron_weight +from detectron_pytorch.utils.timer import Timer # OpenCL may be enabled by default in OpenCV3; disable it because it's not # thread safe and causes unwanted GPU memory allocations. diff --git a/tools/test_net.py b/detectron_pytorch/tools/test_net.py similarity index 92% rename from tools/test_net.py rename to detectron_pytorch/tools/test_net.py index 23ca0fbd..d38005a2 100644 --- a/tools/test_net.py +++ b/detectron_pytorch/tools/test_net.py @@ -9,10 +9,10 @@ import torch -import _init_paths # pylint: disable=unused-import -from core.config import cfg, merge_cfg_from_file, merge_cfg_from_list, assert_and_infer_cfg -from core.test_engine import run_inference -import utils.logging +from detectron_pytorch.core.config import ( + cfg, merge_cfg_from_file, merge_cfg_from_list, assert_and_infer_cfg) +from detectron_pytorch.core.test_engine import run_inference +import detectron_pytorch.utils.logging # OpenCL may be enabled by default in OpenCV3; disable it because it's not # thread safe and causes unwanted GPU memory allocations. @@ -63,7 +63,7 @@ def parse_args(): if not torch.cuda.is_available(): sys.exit("Need a CUDA device to run the code.") - logger = utils.logging.setup_logging(__name__) + logger = detectron_pytorch.utils.logging.setup_logging(__name__) args = parse_args() logger.info('Called with args:') logger.info(args) diff --git a/tools/train_net.py b/detectron_pytorch/tools/train_net.py similarity index 94% rename from tools/train_net.py rename to detectron_pytorch/tools/train_net.py index 499ba39f..3109a92f 100644 --- a/tools/train_net.py +++ b/detectron_pytorch/tools/train_net.py @@ -18,18 +18,19 @@ import cv2 cv2.setNumThreads(0) # pytorch issue 1355: possible deadlock in dataloader -import _init_paths # pylint: disable=unused-import -import nn as mynn -import utils.net as net_utils -import utils.misc as misc_utils -from core.config import cfg, cfg_from_file, cfg_from_list, assert_and_infer_cfg -from datasets.roidb import combined_roidb_for_training -from modeling.model_builder import Generalized_RCNN -from roi_data.loader import RoiDataLoader, MinibatchSampler, collate_minibatch -from utils.detectron_weight_helper import load_detectron_weight -from utils.logging import log_stats -from utils.timer import Timer -from utils.training_stats import TrainingStats +import detectron_pytorch.nn as mynn +import detectron_pytorch.utils.net as net_utils +import detectron_pytorch.utils.misc as misc_utils +from detectron_pytorch.core.config import ( + cfg, cfg_from_file, cfg_from_list, assert_and_infer_cfg) +from detectron_pytorch.datasets.roidb import combined_roidb_for_training +from detectron_pytorch.modeling.model_builder import Generalized_RCNN +from detectron_pytorch.roi_data.loader import ( + RoiDataLoader, MinibatchSampler, collate_minibatch) +from detectron_pytorch.utils.detectron_weight_helper import load_detectron_weight +from detectron_pytorch.utils.logging import log_stats +from detectron_pytorch.utils.timer import Timer +from detectron_pytorch.utils.training_stats import TrainingStats # OpenCL may be enabled by default in OpenCV3; disable it because it's not # thread safe and causes unwanted GPU memory allocations. diff --git a/tools/train_net_step.py b/detectron_pytorch/tools/train_net_step.py similarity index 95% rename from tools/train_net_step.py rename to detectron_pytorch/tools/train_net_step.py index 10c8c367..bfcf5857 100644 --- a/tools/train_net_step.py +++ b/detectron_pytorch/tools/train_net_step.py @@ -17,18 +17,20 @@ import cv2 cv2.setNumThreads(0) # pytorch issue 1355: possible deadlock in dataloader -import _init_paths # pylint: disable=unused-import -import nn as mynn -import utils.net as net_utils -import utils.misc as misc_utils -from core.config import cfg, cfg_from_file, cfg_from_list, assert_and_infer_cfg -from datasets.roidb import combined_roidb_for_training -from roi_data.loader import RoiDataLoader, MinibatchSampler, BatchSampler, collate_minibatch -from modeling.model_builder import Generalized_RCNN -from utils.detectron_weight_helper import load_detectron_weight -from utils.logging import setup_logging -from utils.timer import Timer -from utils.training_stats import TrainingStats +import detectron_pytorch.nn as mynn +import detectron_pytorch.utils.net as net_utils +import detectron_pytorch.utils.misc as misc_utils +from detectron_pytorch.core.config import ( + cfg, cfg_from_file, cfg_from_list, assert_and_infer_cfg) +from detectron_pytorch.datasets.roidb import combined_roidb_for_training +from detectron_pytorch.roi_data.loader import ( + RoiDataLoader, MinibatchSampler, BatchSampler, collate_minibatch) +from detectron_pytorch.modeling.model_builder import Generalized_RCNN +from detectron_pytorch.utils.detectron_weight_helper import ( + load_detectron_weight) +from detectron_pytorch.utils.logging import setup_logging +from detectron_pytorch.utils.timer import Timer +from detectron_pytorch.utils.training_stats import TrainingStats # Set up logging and load config options logger = setup_logging(__name__) diff --git a/detectron_pytorch/utils/__init__.py b/detectron_pytorch/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lib/utils/blob.py b/detectron_pytorch/utils/blob.py similarity index 99% rename from lib/utils/blob.py rename to detectron_pytorch/utils/blob.py index 523a3e34..fbbd9da5 100644 --- a/lib/utils/blob.py +++ b/detectron_pytorch/utils/blob.py @@ -31,7 +31,7 @@ import numpy as np import cv2 -from core.config import cfg +from detectron_pytorch.core.config import cfg def get_image_blob(im, target_scale, target_max_size): diff --git a/lib/utils/boxes.py b/detectron_pytorch/utils/boxes.py similarity index 98% rename from lib/utils/boxes.py rename to detectron_pytorch/utils/boxes.py index 1b776a7f..09ba36d9 100644 --- a/lib/utils/boxes.py +++ b/detectron_pytorch/utils/boxes.py @@ -48,9 +48,11 @@ import warnings import numpy as np -from core.config import cfg -import utils.cython_bbox as cython_bbox -import utils.cython_nms as cython_nms +from detectron_pytorch.core.config import cfg +from . import cython_bbox +from . import cython_nms +# import detectron_pytorch.utils.cython_bbox as cython_bbox +# import detectron_pytorch.utils.cython_nms as cython_nms bbox_overlaps = cython_bbox.bbox_overlaps diff --git a/lib/utils/collections.py b/detectron_pytorch/utils/collections.py similarity index 100% rename from lib/utils/collections.py rename to detectron_pytorch/utils/collections.py diff --git a/lib/utils/colormap.py b/detectron_pytorch/utils/colormap.py similarity index 100% rename from lib/utils/colormap.py rename to detectron_pytorch/utils/colormap.py diff --git a/lib/utils/cython_bbox.c b/detectron_pytorch/utils/cython_bbox.c similarity index 100% rename from lib/utils/cython_bbox.c rename to detectron_pytorch/utils/cython_bbox.c diff --git a/lib/utils/cython_bbox.pyx b/detectron_pytorch/utils/cython_bbox.pyx similarity index 100% rename from lib/utils/cython_bbox.pyx rename to detectron_pytorch/utils/cython_bbox.pyx diff --git a/lib/utils/cython_nms.c b/detectron_pytorch/utils/cython_nms.c similarity index 100% rename from lib/utils/cython_nms.c rename to detectron_pytorch/utils/cython_nms.c diff --git a/lib/utils/cython_nms.pyx b/detectron_pytorch/utils/cython_nms.pyx similarity index 100% rename from lib/utils/cython_nms.pyx rename to detectron_pytorch/utils/cython_nms.pyx diff --git a/lib/utils/detectron_weight_helper.py b/detectron_pytorch/utils/detectron_weight_helper.py similarity index 100% rename from lib/utils/detectron_weight_helper.py rename to detectron_pytorch/utils/detectron_weight_helper.py diff --git a/lib/utils/env.py b/detectron_pytorch/utils/env.py similarity index 100% rename from lib/utils/env.py rename to detectron_pytorch/utils/env.py diff --git a/lib/utils/fpn.py b/detectron_pytorch/utils/fpn.py similarity index 96% rename from lib/utils/fpn.py rename to detectron_pytorch/utils/fpn.py index fcfca1ca..b15e601a 100644 --- a/lib/utils/fpn.py +++ b/detectron_pytorch/utils/fpn.py @@ -1,7 +1,8 @@ import numpy as np -import utils.boxes as box_utils -from core.config import cfg +from . import boxes as box_utils +# import utils.boxes as box_utils +from detectron_pytorch.core.config import cfg # ---------------------------------------------------------------------------- # diff --git a/lib/utils/image.py b/detectron_pytorch/utils/image.py similarity index 100% rename from lib/utils/image.py rename to detectron_pytorch/utils/image.py diff --git a/lib/utils/io.py b/detectron_pytorch/utils/io.py similarity index 100% rename from lib/utils/io.py rename to detectron_pytorch/utils/io.py diff --git a/lib/utils/keypoints.py b/detectron_pytorch/utils/keypoints.py similarity index 98% rename from lib/utils/keypoints.py rename to detectron_pytorch/utils/keypoints.py index c7caa1c0..10a20249 100644 --- a/lib/utils/keypoints.py +++ b/detectron_pytorch/utils/keypoints.py @@ -23,8 +23,9 @@ import cv2 import numpy as np -from core.config import cfg -import utils.blob as blob_utils +from detectron_pytorch.core.config import cfg +from . import blob as blob_utils +# import utils.blob as blob_utils def get_keypoints(): diff --git a/lib/utils/logging.py b/detectron_pytorch/utils/logging.py similarity index 98% rename from lib/utils/logging.py rename to detectron_pytorch/utils/logging.py index 518426c2..9e0959b8 100644 --- a/lib/utils/logging.py +++ b/detectron_pytorch/utils/logging.py @@ -28,7 +28,7 @@ import smtplib import sys -from core.config import cfg +from detectron_pytorch.core.config import cfg # Print lower precision floating point values than default FLOAT_REPR # Note! Has no use for json encode with C speedups diff --git a/lib/utils/misc.py b/detectron_pytorch/utils/misc.py similarity index 99% rename from lib/utils/misc.py rename to detectron_pytorch/utils/misc.py index 97714b79..dd58821a 100644 --- a/lib/utils/misc.py +++ b/detectron_pytorch/utils/misc.py @@ -7,7 +7,7 @@ import torch -from core.config import cfg +from detectron_pytorch.core.config import cfg def get_run_name(): diff --git a/lib/utils/net.py b/detectron_pytorch/utils/net.py similarity index 98% rename from lib/utils/net.py rename to detectron_pytorch/utils/net.py index 32c5d705..f4cad908 100644 --- a/lib/utils/net.py +++ b/detectron_pytorch/utils/net.py @@ -6,8 +6,8 @@ import torch.nn.functional as F from torch.autograd import Variable -from core.config import cfg -import nn as mynn +from detectron_pytorch.core.config import cfg +import detectron_pytorch.nn as mynn logger = logging.getLogger(__name__) diff --git a/lib/utils/resnet_weights_helper.py b/detectron_pytorch/utils/resnet_weights_helper.py similarity index 94% rename from lib/utils/resnet_weights_helper.py rename to detectron_pytorch/utils/resnet_weights_helper.py index 3336128c..bd18a507 100644 --- a/lib/utils/resnet_weights_helper.py +++ b/detectron_pytorch/utils/resnet_weights_helper.py @@ -6,9 +6,10 @@ import torch -import nn as mynn -import utils.detectron_weight_helper as dwh -from core.config import cfg +import detectron_pytorch.nn as mynn +from . import detectron_weight_helper as dwh +# import utils.detectron_weight_helper as dwh +from detectron_pytorch.core.config import cfg def load_pretrained_imagenet_weights(model): diff --git a/lib/utils/segms.py b/detectron_pytorch/utils/segms.py similarity index 100% rename from lib/utils/segms.py rename to detectron_pytorch/utils/segms.py diff --git a/lib/utils/subprocess.py b/detectron_pytorch/utils/subprocess.py similarity index 99% rename from lib/utils/subprocess.py rename to detectron_pytorch/utils/subprocess.py index 42b3f177..40da55c5 100644 --- a/lib/utils/subprocess.py +++ b/detectron_pytorch/utils/subprocess.py @@ -33,7 +33,7 @@ import numpy as np import torch -from core.config import cfg +from detectron_pytorch.core.config import cfg logger = logging.getLogger(__name__) diff --git a/lib/utils/timer.py b/detectron_pytorch/utils/timer.py similarity index 100% rename from lib/utils/timer.py rename to detectron_pytorch/utils/timer.py diff --git a/lib/utils/training_stats.py b/detectron_pytorch/utils/training_stats.py similarity index 97% rename from lib/utils/training_stats.py rename to detectron_pytorch/utils/training_stats.py index 8cae8a18..6a552cf7 100644 --- a/lib/utils/training_stats.py +++ b/detectron_pytorch/utils/training_stats.py @@ -26,11 +26,11 @@ import datetime import numpy as np -from core.config import cfg -from utils.logging import log_stats -from utils.logging import SmoothedValue -from utils.timer import Timer -import utils.net as nu +from detectron_pytorch.core.config import cfg +from detectron_pytorch.utils.logging import log_stats +from detectron_pytorch.utils.logging import SmoothedValue +from detectron_pytorch.utils.timer import Timer +import detectron_pytorch.utils.net as nu class TrainingStats(object): diff --git a/lib/utils/vis.py b/detectron_pytorch/utils/vis.py similarity index 98% rename from lib/utils/vis.py rename to detectron_pytorch/utils/vis.py index db8676e6..bbe650de 100644 --- a/lib/utils/vis.py +++ b/detectron_pytorch/utils/vis.py @@ -28,8 +28,8 @@ import os import pycocotools.mask as mask_util -from utils.colormap import colormap -import utils.keypoints as keypoint_utils +from detectron_pytorch.utils.colormap import colormap +import detectron_pytorch.utils.keypoints as keypoint_utils # Use a non-interactive backend import matplotlib diff --git a/lib/model/roi_crop/_ext/crop_resize/_crop_resize.so b/lib/model/roi_crop/_ext/crop_resize/_crop_resize.so deleted file mode 100755 index 9baf6615..00000000 Binary files a/lib/model/roi_crop/_ext/crop_resize/_crop_resize.so and /dev/null differ diff --git a/lib/model/utils/.gitignore b/lib/model/utils/.gitignore deleted file mode 100644 index 15a165d4..00000000 --- a/lib/model/utils/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.c -*.cpp -*.so diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 00000000..9553c5f3 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[aliases] +install = build_static install diff --git a/setup.py b/setup.py new file mode 100644 index 00000000..2083356b --- /dev/null +++ b/setup.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +# ----------------------------------------------------------------------------- +# Copyright (c) Edgar Andrés Margffoy-Tuay +# +# Licensed under the terms of the MIT License +# (see LICENSE.txt for details) +# ----------------------------------------------------------------------------- +"""Setup script for detectron_pytorch.""" + +# Standard library imports +import ast +import os +import os.path as osp +import sys + +# Third party imports +from setuptools import find_packages, setup + +from setupbase import (BuildStatic, HERE, + SdistWithBuildStatic) + +os.environ['CUDA_PATH'] = os.environ.get('CUDA_PATH', '/usr/local/cuda/') + +def get_version(module='detectron_pytorch'): + """Get version.""" + with open(os.path.join(HERE, module, '__init__.py'), 'r') as f: + data = f.read() + lines = data.split('\n') + for line in lines: + if line.startswith('VERSION_INFO'): + version_tuple = ast.literal_eval(line.split('=')[-1].strip()) + version = '.'.join(map(str, version_tuple)) + break + return version + + +def get_description(): + """Get long description.""" + with open(os.path.join(HERE, 'README.md'), 'r') as f: + data = f.read() + return data + + +REQUIREMENTS = ['pytorch', 'torchvision', 'cython', + 'matplotlib', 'numpy', 'scipy', 'opencv-python', + 'pyyaml', 'packaging', 'pycocotools', + 'argparse_color_formatter'] + +cmdclass = { + 'build_static': BuildStatic, + 'sdist': SdistWithBuildStatic, + # 'clean_components': CleanComponents +} + + +setup( + name='Detectron-pytorch', + version=get_version(), + cmdclass=cmdclass, + keywords=['Detectron', 'PyTorch'], + url='https://github.com/roytseng-tw/Detectron.pytorch', + license='MIT', + author='Roy Tseng', + # author_email='admin@spyder-ide.org', + description='A pytorch implementation of Detectron. Both training from ' + 'scratch and inferring directly from pretrained Detectron ' + 'weights are available. ', + long_description=get_description(), + packages=find_packages(exclude=['contrib', 'docs', 'tests*']), + install_requires=REQUIREMENTS, + include_package_data=True, + classifiers=[ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'Intended Audience :: Science/Research', + 'License :: OSI Approved :: MIT License', + 'Operating System :: POSIX :: Linux', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6' + ]) diff --git a/setupbase.py b/setupbase.py new file mode 100644 index 00000000..9b3ea4ca --- /dev/null +++ b/setupbase.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +# ----------------------------------------------------------------------------- +# Copyright (c) Spyder Project Contributors +# Copyright (c) 2015-, Jupyter Development Team. +# Copyright (c) 2008-2015, IPython Development Team. +# +# Distributed under the terms of the Modified BSD License. +# +# ----------------------------------------------------------------------------- + +""" +General setup rules to build CUDA wrappers. +Some functions were taken from the Jupyter Notebook +setupbase definition +See: https://github.com/jupyter/notebook/blob/master/setupbase.py +""" + +import os +import os.path as osp +import pipes +import shutil +import sys + +from distutils import log +from distutils.core import Command +from setuptools.command.develop import develop +from setuptools.command.sdist import sdist +from subprocess import check_call + +if sys.platform == 'win32': + from subprocess import list2cmdline +else: + def list2cmdline(cmd_list): + return ' '.join(map(pipes.quote, cmd_list)) + + +HERE = os.path.abspath(os.path.dirname(__file__)) + +repo_root = os.path.dirname(os.path.abspath(__file__)) + + +def run(cmd, *args, **kwargs): + """Echo a command before running it""" + log.info('> ' + list2cmdline(cmd)) + kwargs['shell'] = (sys.platform == 'win32') + return check_call(cmd, *args, **kwargs) + + +class BuildStatic(Command): + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + log.info("running [bash detectron_pytorch/make.sh]") + run(['bash', 'detectron_pytorch/make.sh'], cwd=repo_root) + + +class DevelopWithBuildStatic(develop): + def install_for_development(self): + self.run_command('build_static') + return develop.install_for_development(self) + + +class SdistWithBuildStatic(sdist): + def run(self): + self.run_command('build_static') + sdist.run(self) + + def make_distribution(self): + return sdist.make_distribution(self) diff --git a/tools/_init_paths.py b/tools/_init_paths.py deleted file mode 100644 index e60754f9..00000000 --- a/tools/_init_paths.py +++ /dev/null @@ -1,22 +0,0 @@ -"""Add {PROJECT_ROOT}/lib. to PYTHONPATH - -Usage: -import this module before import any modules under lib/ -e.g - import _init_paths - from core.config import cfg -""" - -import os.path as osp -import sys - - -def add_path(path): - if path not in sys.path: - sys.path.insert(0, path) - -this_dir = osp.abspath(osp.dirname(osp.dirname(__file__))) - -# Add lib to PYTHONPATH -lib_path = osp.join(this_dir, 'lib') -add_path(lib_path)