| | |
| | |
| |
|
| | import glob |
| | import os |
| | import shutil |
| | from os import path |
| | from setuptools import find_packages, setup |
| | from typing import List |
| | import torch |
| | from torch.utils.cpp_extension import CUDA_HOME, CppExtension, CUDAExtension |
| |
|
| | torch_ver = [int(x) for x in torch.__version__.split(".")[:2]] |
| | assert torch_ver >= [1, 4], "Requires PyTorch >= 1.4" |
| |
|
| |
|
| | def get_version(): |
| | init_py_path = path.join(path.abspath(path.dirname(__file__)), "detectron2", "__init__.py") |
| | init_py = open(init_py_path, "r").readlines() |
| | version_line = [l.strip() for l in init_py if l.startswith("__version__")][0] |
| | version = version_line.split("=")[-1].strip().strip("'\"") |
| |
|
| | |
| | |
| | suffix = os.getenv("D2_VERSION_SUFFIX", "") |
| | version = version + suffix |
| | if os.getenv("BUILD_NIGHTLY", "0") == "1": |
| | from datetime import datetime |
| |
|
| | date_str = datetime.today().strftime("%y%m%d") |
| | version = version + ".dev" + date_str |
| |
|
| | new_init_py = [l for l in init_py if not l.startswith("__version__")] |
| | new_init_py.append('__version__ = "{}"\n'.format(version)) |
| | with open(init_py_path, "w") as f: |
| | f.write("".join(new_init_py)) |
| | return version |
| |
|
| |
|
| | def get_extensions(): |
| | this_dir = path.dirname(path.abspath(__file__)) |
| | extensions_dir = path.join(this_dir, "detectron2", "layers", "csrc") |
| |
|
| | main_source = path.join(extensions_dir, "vision.cpp") |
| | sources = glob.glob(path.join(extensions_dir, "**", "*.cpp")) |
| | source_cuda = glob.glob(path.join(extensions_dir, "**", "*.cu")) + glob.glob( |
| | path.join(extensions_dir, "*.cu") |
| | ) |
| |
|
| | sources = [main_source] + sources |
| | extension = CppExtension |
| |
|
| | extra_compile_args = {"cxx": []} |
| | define_macros = [] |
| |
|
| | if ( |
| | torch.cuda.is_available() and CUDA_HOME is not None and os.path.isdir(CUDA_HOME) |
| | ) or os.getenv("FORCE_CUDA", "0") == "1": |
| | extension = CUDAExtension |
| | sources += source_cuda |
| | define_macros += [("WITH_CUDA", None)] |
| | extra_compile_args["nvcc"] = [ |
| | "-DCUDA_HAS_FP16=1", |
| | "-D__CUDA_NO_HALF_OPERATORS__", |
| | "-D__CUDA_NO_HALF_CONVERSIONS__", |
| | "-D__CUDA_NO_HALF2_OPERATORS__", |
| | ] |
| |
|
| | |
| | CC = os.environ.get("CC", None) |
| | if CC is not None: |
| | extra_compile_args["nvcc"].append("-ccbin={}".format(CC)) |
| |
|
| | include_dirs = [extensions_dir] |
| |
|
| | ext_modules = [ |
| | extension( |
| | "detectron2._C", |
| | sources, |
| | include_dirs=include_dirs, |
| | define_macros=define_macros, |
| | extra_compile_args=extra_compile_args, |
| | ) |
| | ] |
| |
|
| | return ext_modules |
| |
|
| |
|
| | def get_model_zoo_configs() -> List[str]: |
| | """ |
| | Return a list of configs to include in package for model zoo. Copy over these configs inside |
| | detectron2/model_zoo. |
| | """ |
| |
|
| | |
| | source_configs_dir = path.join(path.dirname(path.realpath(__file__)), "configs") |
| | destination = path.join( |
| | path.dirname(path.realpath(__file__)), "detectron2", "model_zoo", "configs" |
| | ) |
| | |
| |
|
| | |
| | if path.exists(source_configs_dir): |
| | if path.islink(destination): |
| | os.unlink(destination) |
| | elif path.isdir(destination): |
| | shutil.rmtree(destination) |
| |
|
| | if not path.exists(destination): |
| | try: |
| | os.symlink(source_configs_dir, destination) |
| | except OSError: |
| | |
| | shutil.copytree(source_configs_dir, destination) |
| |
|
| | config_paths = glob.glob("configs/**/*.yaml", recursive=True) |
| | return config_paths |
| |
|
| |
|
| | setup( |
| | name="detectron2", |
| | version=get_version(), |
| | author="FAIR", |
| | url="https://github.com/facebookresearch/detectron2", |
| | description="Detectron2 is FAIR's next-generation research " |
| | "platform for object detection and segmentation.", |
| | packages=find_packages(exclude=("configs", "tests*")), |
| | package_data={"detectron2.model_zoo": get_model_zoo_configs()}, |
| | python_requires=">=3.6", |
| | install_requires=[ |
| | "termcolor>=1.1", |
| | "Pillow", |
| | "yacs>=0.1.6", |
| | "tabulate", |
| | "cloudpickle", |
| | "matplotlib", |
| | "mock", |
| | "tqdm>4.29.0", |
| | "tensorboard", |
| | "fvcore>=0.1.1", |
| | "future", |
| | "pydot", |
| | ], |
| | extras_require={ |
| | "all": ["shapely", "psutil"], |
| | "dev": [ |
| | "flake8==3.7.9", |
| | "isort", |
| | "black @ git+https://github.com/psf/black@673327449f86fce558adde153bb6cbe54bfebad2", |
| | "flake8-bugbear", |
| | "flake8-comprehensions", |
| | ], |
| | }, |
| | ext_modules=get_extensions(), |
| | cmdclass={"build_ext": torch.utils.cpp_extension.BuildExtension}, |
| | ) |
| |
|