diff --git a/efficientdet/aug/autoaugment.py b/efficientdet/aug/autoaugment.py index a2faf124b..c4ad67d26 100644 --- a/efficientdet/aug/autoaugment.py +++ b/efficientdet/aug/autoaugment.py @@ -23,7 +23,7 @@ import tensorflow.compat.v1 as tf from tensorflow_addons import image as image_ops -import hparams_config +from .. import hparams_config # This signifies the max integer that the controller RNN could predict for the # augmentation scheme. diff --git a/efficientdet/aug/autoaugment_test.py b/efficientdet/aug/autoaugment_test.py index 2c0e1c3b2..cfbf0a10b 100644 --- a/efficientdet/aug/autoaugment_test.py +++ b/efficientdet/aug/autoaugment_test.py @@ -13,10 +13,19 @@ # limitations under the License. # ============================================================================== """Tests for Autoaugment.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.aug + __package__ = "efficientdet.aug" + from absl import logging import tensorflow.compat.v1 as tf -from aug import autoaugment +from . import autoaugment class AutoaugmentTest(tf.test.TestCase): diff --git a/efficientdet/aug/gridmask_test.py b/efficientdet/aug/gridmask_test.py index cad712a39..e241e9c9b 100644 --- a/efficientdet/aug/gridmask_test.py +++ b/efficientdet/aug/gridmask_test.py @@ -13,10 +13,19 @@ # limitations under the License. # ============================================================================== """GridMask Augmentation simple test.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.aug + __package__ = "efficientdet.aug" + from absl import logging import tensorflow.compat.v1 as tf -from aug import gridmask +from . import gridmask class GridMaskTest(tf.test.TestCase): diff --git a/efficientdet/aug/mosaic_test.py b/efficientdet/aug/mosaic_test.py index 65e6d572f..cc786f9c0 100644 --- a/efficientdet/aug/mosaic_test.py +++ b/efficientdet/aug/mosaic_test.py @@ -13,10 +13,19 @@ # limitations under the License. # ============================================================================== """Mosaic Augmentation simple test.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.aug + __package__ = "efficientdet.aug" + from absl import logging import tensorflow.compat.v1 as tf -from aug import mosaic +from . import mosaic class MosaicTest(tf.test.TestCase): diff --git a/efficientdet/backbone/backbone_factory.py b/efficientdet/backbone/backbone_factory.py index 69cb1a743..0c44603f0 100644 --- a/efficientdet/backbone/backbone_factory.py +++ b/efficientdet/backbone/backbone_factory.py @@ -17,9 +17,9 @@ from absl import logging import tensorflow as tf -from backbone import efficientnet_builder -from backbone import efficientnet_lite_builder -from backbone import efficientnet_model +from . import efficientnet_builder +from . import efficientnet_lite_builder +from . import efficientnet_model def get_model_builder(model_name): diff --git a/efficientdet/backbone/efficientnet_builder.py b/efficientdet/backbone/efficientnet_builder.py index b173a48e9..dc373728b 100644 --- a/efficientdet/backbone/efficientnet_builder.py +++ b/efficientdet/backbone/efficientnet_builder.py @@ -24,8 +24,8 @@ import numpy as np import tensorflow as tf -import utils -from backbone import efficientnet_model +from .. import utils +from . import efficientnet_model def efficientnet_params(model_name): diff --git a/efficientdet/backbone/efficientnet_builder_test.py b/efficientdet/backbone/efficientnet_builder_test.py index 42480a0db..47ec2b08b 100644 --- a/efficientdet/backbone/efficientnet_builder_test.py +++ b/efficientdet/backbone/efficientnet_builder_test.py @@ -13,11 +13,20 @@ # limitations under the License. # ============================================================================== """Tests for efficientnet_builder.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.backbone + __package__ = "efficientdet.backbone" + from absl import logging import numpy as np import tensorflow.compat.v1 as tf -from backbone import efficientnet_builder +from . import efficientnet_builder class EfficientnetBuilderTest(tf.test.TestCase): diff --git a/efficientdet/backbone/efficientnet_lite_builder.py b/efficientdet/backbone/efficientnet_lite_builder.py index abd537080..d4c6d71f0 100644 --- a/efficientdet/backbone/efficientnet_lite_builder.py +++ b/efficientdet/backbone/efficientnet_lite_builder.py @@ -21,9 +21,9 @@ from absl import logging import tensorflow.compat.v1 as tf -import utils -from backbone import efficientnet_builder -from backbone import efficientnet_model +from .. import utils +from . import efficientnet_builder +from . import efficientnet_model # Edge models use inception-style MEAN and STDDEV for better post-quantization. MEAN_RGB = [127.0, 127.0, 127.0] diff --git a/efficientdet/backbone/efficientnet_lite_builder_test.py b/efficientdet/backbone/efficientnet_lite_builder_test.py index b4af3be7b..359c6fb9f 100644 --- a/efficientdet/backbone/efficientnet_lite_builder_test.py +++ b/efficientdet/backbone/efficientnet_lite_builder_test.py @@ -13,11 +13,20 @@ # limitations under the License. # ============================================================================== """Tests for efficientnet_lite_builder.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.backbone + __package__ = "efficientdet.backbone" + from absl import logging import numpy as np import tensorflow.compat.v1 as tf -from backbone import efficientnet_lite_builder +from . import efficientnet_lite_builder class EfficientnetBuilderTest(tf.test.TestCase): diff --git a/efficientdet/backbone/efficientnet_model.py b/efficientdet/backbone/efficientnet_model.py index bd7c19754..323b825af 100644 --- a/efficientdet/backbone/efficientnet_model.py +++ b/efficientdet/backbone/efficientnet_model.py @@ -29,7 +29,7 @@ from six.moves import xrange import tensorflow as tf -import utils +from .. import utils GlobalParams = collections.namedtuple('GlobalParams', [ 'batch_norm_momentum', 'batch_norm_epsilon', 'dropout_rate', 'data_format', diff --git a/efficientdet/backbone/efficientnet_model_test.py b/efficientdet/backbone/efficientnet_model_test.py index beb7e46fa..5498b8f4d 100644 --- a/efficientdet/backbone/efficientnet_model_test.py +++ b/efficientdet/backbone/efficientnet_model_test.py @@ -13,11 +13,20 @@ # limitations under the License. # ============================================================================== """Tests for efficientnet_model.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.backbone + __package__ = "efficientdet.backbone" + from absl import logging import tensorflow.compat.v1 as tf -import utils -from backbone import efficientnet_model +from .. import utils +from . import efficientnet_model class ModelTest(tf.test.TestCase): diff --git a/efficientdet/coco_metric.py b/efficientdet/coco_metric.py index f9f454af8..747585664 100644 --- a/efficientdet/coco_metric.py +++ b/efficientdet/coco_metric.py @@ -25,7 +25,7 @@ from pycocotools.cocoeval import COCOeval import tensorflow as tf -from keras import label_util +from .keras import label_util class EvaluationMetric(): diff --git a/efficientdet/coco_metric_test.py b/efficientdet/coco_metric_test.py index e184bef22..60834d010 100644 --- a/efficientdet/coco_metric_test.py +++ b/efficientdet/coco_metric_test.py @@ -14,9 +14,18 @@ # ============================================================================== """Tests for coco_metric.""" +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) + import efficientdet + __package__ = "efficientdet" + + from absl import logging import tensorflow.compat.v1 as tf -import coco_metric +from . import coco_metric class CocoMetricTest(tf.test.TestCase): diff --git a/efficientdet/dataloader.py b/efficientdet/dataloader.py index c1eae452b..6321a7249 100644 --- a/efficientdet/dataloader.py +++ b/efficientdet/dataloader.py @@ -16,10 +16,10 @@ from absl import logging import tensorflow as tf -import utils -from keras import anchors -from object_detection import preprocessor -from object_detection import tf_example_decoder +from . import utils +from .keras import anchors +from .object_detection import preprocessor +from .object_detection import tf_example_decoder class InputProcessor: diff --git a/efficientdet/dataloader_test.py b/efficientdet/dataloader_test.py index 8f5f6c51b..dd47ef637 100644 --- a/efficientdet/dataloader_test.py +++ b/efficientdet/dataloader_test.py @@ -13,15 +13,24 @@ # limitations under the License. # ============================================================================== """Data loader and processing test cases.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) + import efficientdet + __package__ = "efficientdet" + import os import tempfile import tensorflow as tf -import dataloader -import hparams_config -from dataset import tfrecord_util -from keras import anchors -from object_detection import tf_example_decoder +from . import dataloader +from . import hparams_config +from .dataset import tfrecord_util +from .keras import anchors +from .object_detection import tf_example_decoder class DataloaderTest(tf.test.TestCase): diff --git a/efficientdet/dataset/create_coco_tfrecord.py b/efficientdet/dataset/create_coco_tfrecord.py index b7904fe48..20d56820d 100644 --- a/efficientdet/dataset/create_coco_tfrecord.py +++ b/efficientdet/dataset/create_coco_tfrecord.py @@ -12,6 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.dataset + __package__ = "efficientdet.dataset" + r"""Convert raw COCO 2017 dataset to TFRecord. Example usage: @@ -39,8 +48,8 @@ from pycocotools import mask import tensorflow as tf -from dataset import label_map_util -from dataset import tfrecord_util +from . import label_map_util +from . import tfrecord_util flags.DEFINE_boolean( 'include_masks', False, 'Whether to include instance segmentations masks ' diff --git a/efficientdet/dataset/create_coco_tfrecord_test.py b/efficientdet/dataset/create_coco_tfrecord_test.py index e12c1e7d8..5de7debe3 100644 --- a/efficientdet/dataset/create_coco_tfrecord_test.py +++ b/efficientdet/dataset/create_coco_tfrecord_test.py @@ -14,6 +14,15 @@ # ============================================================================== """Test for create_coco_tfrecord.py.""" +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.dataset + __package__ = "efficientdet.dataset" + + import io import json import os @@ -25,7 +34,7 @@ import six import tensorflow as tf -from dataset import create_coco_tfrecord +from . import create_coco_tfrecord class CreateCocoTFRecordTest(tf.test.TestCase): diff --git a/efficientdet/dataset/create_pascal_tfrecord.py b/efficientdet/dataset/create_pascal_tfrecord.py index d7000a1e6..b08c107e4 100644 --- a/efficientdet/dataset/create_pascal_tfrecord.py +++ b/efficientdet/dataset/create_pascal_tfrecord.py @@ -12,6 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.dataset + __package__ = "efficientdet.dataset" + r"""Convert PASCAL dataset to TFRecord. Example usage: @@ -31,7 +40,7 @@ import PIL.Image import tensorflow as tf -from dataset import tfrecord_util +from . import tfrecord_util flags.DEFINE_string('data_dir', '', 'Root directory to raw PASCAL VOC dataset.') flags.DEFINE_string('set', 'train', 'Convert training set, validation set or ' diff --git a/efficientdet/dataset/create_pascal_tfrecord_test.py b/efficientdet/dataset/create_pascal_tfrecord_test.py index 4b51b0b95..a00c38244 100644 --- a/efficientdet/dataset/create_pascal_tfrecord_test.py +++ b/efficientdet/dataset/create_pascal_tfrecord_test.py @@ -14,6 +14,15 @@ # ============================================================================== """Test for create_pascal_tfrecord.py.""" +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.dataset + __package__ = "efficientdet.dataset" + + import os from absl import logging @@ -22,7 +31,7 @@ import six import tensorflow as tf -from dataset import create_pascal_tfrecord +from . import create_pascal_tfrecord class CreatePascalTFRecordTest(tf.test.TestCase): diff --git a/efficientdet/dataset/inspect_tfrecords.py b/efficientdet/dataset/inspect_tfrecords.py index d6d9b0e85..dc3384177 100644 --- a/efficientdet/dataset/inspect_tfrecords.py +++ b/efficientdet/dataset/inspect_tfrecords.py @@ -14,6 +14,15 @@ # ============================================================================== """Inspection of dataset""" +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.dataset + __package__ = "efficientdet.dataset" + + import os import sys @@ -23,10 +32,10 @@ from PIL import Image sys.path.append('./') -import dataloader -import hparams_config -import utils -from visualize import vis_utils +from .. import dataloader +from .. import hparams_config +from .. import utils +from ..visualize import vis_utils flags.DEFINE_string('save_samples_dir', 'tfrecord_samples', 'Location of samples to save') diff --git a/efficientdet/det_model_fn.py b/efficientdet/det_model_fn.py index 91ac57c1b..dea70eb42 100644 --- a/efficientdet/det_model_fn.py +++ b/efficientdet/det_model_fn.py @@ -18,14 +18,14 @@ from absl import logging import numpy as np import tensorflow.compat.v1 as tf -import coco_metric -import efficientdet_arch -import hparams_config -import nms_np -import utils -from keras import anchors -from keras import efficientdet_keras -from keras import postprocess +from . import coco_metric +from . import efficientdet_arch +from . import hparams_config +from . import nms_np +from . import utils +from .keras import anchors +from .keras import efficientdet_keras +from .keras import postprocess _DEFAULT_BATCH_SIZE = 64 diff --git a/efficientdet/det_model_fn_test.py b/efficientdet/det_model_fn_test.py index 1b33758b2..73474e5ce 100644 --- a/efficientdet/det_model_fn_test.py +++ b/efficientdet/det_model_fn_test.py @@ -13,8 +13,17 @@ # limitations under the License. # ============================================================================== """Tests for det_model_fn.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) + import efficientdet + __package__ = "efficientdet" + import tensorflow as tf -import det_model_fn +from . import det_model_fn def legacy_focal_loss(logits, targets, alpha, gamma, normalizer, _=0): diff --git a/efficientdet/efficientdet_arch.py b/efficientdet/efficientdet_arch.py index 543ea0713..03967b43a 100644 --- a/efficientdet/efficientdet_arch.py +++ b/efficientdet/efficientdet_arch.py @@ -25,11 +25,11 @@ import numpy as np import tensorflow.compat.v1 as tf -import hparams_config -import utils -from backbone import backbone_factory -from backbone import efficientnet_builder -from keras import fpn_configs +from . import hparams_config +from . import utils +from .backbone import backbone_factory +from .backbone import efficientnet_builder +from .keras import fpn_configs ################################################################################ diff --git a/efficientdet/efficientdet_arch_test.py b/efficientdet/efficientdet_arch_test.py index f09392686..43982737f 100644 --- a/efficientdet/efficientdet_arch_test.py +++ b/efficientdet/efficientdet_arch_test.py @@ -13,12 +13,21 @@ # limitations under the License. # ============================================================================== """Tests for efficientdet_arch.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) + import efficientdet + __package__ = "efficientdet" + from absl import logging import tensorflow.compat.v1 as tf -import efficientdet_arch -import hparams_config -import utils +from . import efficientdet_arch +from . import hparams_config +from . import utils class EfficientDetArchTest(tf.test.TestCase): diff --git a/efficientdet/g3doc/__init__.py b/efficientdet/g3doc/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/efficientdet/hparams_config_test.py b/efficientdet/hparams_config_test.py index 70c75d503..18382a631 100644 --- a/efficientdet/hparams_config_test.py +++ b/efficientdet/hparams_config_test.py @@ -13,13 +13,22 @@ # limitations under the License. # ====================================== """Tests for hparams_config.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) + import efficientdet + __package__ = "efficientdet" + import os import tempfile from absl import logging import tensorflow.compat.v1 as tf import yaml -import hparams_config +from . import hparams_config class HparamsConfigTest(tf.test.TestCase): diff --git a/efficientdet/inference.py b/efficientdet/inference.py index aeafce165..442d74143 100644 --- a/efficientdet/inference.py +++ b/efficientdet/inference.py @@ -23,14 +23,14 @@ from PIL import Image import tensorflow.compat.v1 as tf -import dataloader -import det_model_fn -import hparams_config -import utils -from keras import efficientdet_keras -from keras import label_util -from keras import postprocess -from visualize import vis_utils +from . import dataloader +from . import det_model_fn +from . import hparams_config +from . import utils +from .keras import efficientdet_keras +from .keras import label_util +from .keras import postprocess +from .visualize import vis_utils from tensorflow.python.client import timeline # pylint: disable=g-direct-tensorflow-import diff --git a/efficientdet/iou_utils_test.py b/efficientdet/iou_utils_test.py index f02e00091..b74ee7a8c 100644 --- a/efficientdet/iou_utils_test.py +++ b/efficientdet/iou_utils_test.py @@ -13,9 +13,18 @@ # limitations under the License. # ====================================== """Tests for iou_utils.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) + import efficientdet + __package__ = "efficientdet" + from absl import logging import tensorflow as tf -import iou_utils +from . import iou_utils class IouUtilsTest(tf.test.TestCase): diff --git a/efficientdet/keras/anchors.py b/efficientdet/keras/anchors.py index e4d4b1f1a..4b221d806 100644 --- a/efficientdet/keras/anchors.py +++ b/efficientdet/keras/anchors.py @@ -17,12 +17,12 @@ import numpy as np import tensorflow as tf -import utils -from object_detection import argmax_matcher -from object_detection import box_list -from object_detection import faster_rcnn_box_coder -from object_detection import region_similarity_calculator -from object_detection import target_assigner +from .. import utils +from ..object_detection import argmax_matcher +from ..object_detection import box_list +from ..object_detection import faster_rcnn_box_coder +from ..object_detection import region_similarity_calculator +from ..object_detection import target_assigner MAX_DETECTION_POINTS = 5000 diff --git a/efficientdet/keras/efficientdet_keras.py b/efficientdet/keras/efficientdet_keras.py index 271d08c76..0aad884b4 100644 --- a/efficientdet/keras/efficientdet_keras.py +++ b/efficientdet/keras/efficientdet_keras.py @@ -18,15 +18,15 @@ import numpy as np import tensorflow as tf -import dataloader -import hparams_config -import utils -from backbone import backbone_factory -from backbone import efficientnet_builder -from keras import fpn_configs -from keras import postprocess -from keras import tfmot -from keras import util_keras +from .. import dataloader +from .. import hparams_config +from .. import utils +from ..backbone import backbone_factory +from ..backbone import efficientnet_builder +from . import fpn_configs +from . import postprocess +from . import tfmot +from . import util_keras # pylint: disable=arguments-differ # fo keras layers. diff --git a/efficientdet/keras/efficientdet_keras_test.py b/efficientdet/keras/efficientdet_keras_test.py index 87528ccee..7cbc44b84 100644 --- a/efficientdet/keras/efficientdet_keras_test.py +++ b/efficientdet/keras/efficientdet_keras_test.py @@ -13,13 +13,22 @@ # limitations under the License. # ============================================================================== """Tests for efficientdet_keras.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.keras + __package__ = "efficientdet.keras" + import os import tempfile from absl import logging import tensorflow.compat.v1 as tf -import efficientdet_arch as legacy_arch -import hparams_config -from keras import efficientdet_keras +from .. import efficientdet_arch as legacy_arch +from .. import hparams_config +from . import efficientdet_keras SEED = 111111 diff --git a/efficientdet/keras/eval.py b/efficientdet/keras/eval.py index 7153df6d0..20c966041 100644 --- a/efficientdet/keras/eval.py +++ b/efficientdet/keras/eval.py @@ -13,21 +13,30 @@ # limitations under the License. # ============================================================================== """Eval libraries.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.keras + __package__ = "efficientdet.keras" + from absl import app from absl import flags from absl import logging import tensorflow as tf -import coco_metric -import dataloader -import hparams_config -import utils -from keras import util_keras +from .. import coco_metric +from .. import dataloader +from .. import hparams_config +from .. import utils -from keras import anchors -from keras import efficientdet_keras -from keras import label_util -from keras import postprocess +from . import util_keras +from . import anchors +from . import efficientdet_keras +from . import label_util +from . import postprocess # Cloud TPU Cluster Resolvers flags.DEFINE_string('tpu', None, 'The Cloud TPU name.') diff --git a/efficientdet/keras/fpn_configs.py b/efficientdet/keras/fpn_configs.py index d1104bfe5..90c098c31 100644 --- a/efficientdet/keras/fpn_configs.py +++ b/efficientdet/keras/fpn_configs.py @@ -18,7 +18,7 @@ QuFPN is proposed in https://github.com/google/automl/pull/580 """ import itertools -import hparams_config +from .. import hparams_config def bifpn_config(min_level, max_level, weight_method): diff --git a/efficientdet/keras/fpn_configs_test.py b/efficientdet/keras/fpn_configs_test.py index 1e37ba5b8..df183a782 100644 --- a/efficientdet/keras/fpn_configs_test.py +++ b/efficientdet/keras/fpn_configs_test.py @@ -13,9 +13,18 @@ # limitations under the License. # ============================================================================== """Tests for fpn_configs.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.keras + __package__ = "efficientdet.keras" + from absl import logging import tensorflow as tf -from keras import fpn_configs +from . import fpn_configs class FpnConfigTest(tf.test.TestCase): diff --git a/efficientdet/keras/infer.py b/efficientdet/keras/infer.py index 15b0a45f2..0a652d910 100644 --- a/efficientdet/keras/infer.py +++ b/efficientdet/keras/infer.py @@ -13,6 +13,15 @@ # limitations under the License. # ============================================================================== """A simple example on how to use keras model for inference.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.keras + __package__ = "efficientdet.keras" + import os from absl import app from absl import flags @@ -21,9 +30,9 @@ from PIL import Image import tensorflow as tf -import hparams_config -import inference -from keras import efficientdet_keras +from .. import hparams_config +from .. import inference +from . import efficientdet_keras flags.DEFINE_string('image_path', None, 'Location of test image.') flags.DEFINE_string('output_dir', None, 'Directory of annotated output images.') diff --git a/efficientdet/keras/inference.py b/efficientdet/keras/inference.py index 6b9af12b1..77b503153 100644 --- a/efficientdet/keras/inference.py +++ b/efficientdet/keras/inference.py @@ -21,12 +21,12 @@ import numpy as np import tensorflow as tf -import hparams_config -import utils -from keras import efficientdet_keras -from keras import label_util -from keras import util_keras -from visualize import vis_utils +from .. import hparams_config +from .. import utils +from . import efficientdet_keras +from . import label_util +from . import util_keras +from ..visualize import vis_utils def visualize_image(image, diff --git a/efficientdet/keras/inference_test.py b/efficientdet/keras/inference_test.py index 66bd42c87..3c35a68f2 100644 --- a/efficientdet/keras/inference_test.py +++ b/efficientdet/keras/inference_test.py @@ -12,13 +12,22 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.keras + __package__ = "efficientdet.keras" + r"""Inference test cases.""" import os import tempfile from absl import logging import tensorflow as tf -from keras import efficientdet_keras -from keras import inference +from . import efficientdet_keras +from . import inference class InferenceTest(tf.test.TestCase): diff --git a/efficientdet/keras/inspector.py b/efficientdet/keras/inspector.py index 44ef2d393..33e315e8d 100644 --- a/efficientdet/keras/inspector.py +++ b/efficientdet/keras/inspector.py @@ -12,6 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.keras + __package__ = "efficientdet.keras" + r"""Tool to inspect a model.""" import os @@ -23,9 +32,9 @@ from PIL import Image import tensorflow as tf -import hparams_config -import utils -from keras import inference +from .. import hparams_config +from .. import utils +from . import inference flags.DEFINE_string('model_name', 'efficientdet-d0', 'Model.') flags.DEFINE_string('mode', 'infer', diff --git a/efficientdet/keras/inspector_test.py b/efficientdet/keras/inspector_test.py index 2c7c80e8f..0fdfcb1e9 100644 --- a/efficientdet/keras/inspector_test.py +++ b/efficientdet/keras/inspector_test.py @@ -12,6 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.keras + __package__ = "efficientdet.keras" + r"""Tests for model inspect tool.""" import os import shutil @@ -23,7 +32,7 @@ from PIL import Image import tensorflow as tf -from keras import inspector +from . import inspector FLAGS = flags.FLAGS diff --git a/efficientdet/keras/label_util.py b/efficientdet/keras/label_util.py index 5cb009102..44c15741a 100644 --- a/efficientdet/keras/label_util.py +++ b/efficientdet/keras/label_util.py @@ -15,7 +15,7 @@ """A few predefined label id mapping.""" import tensorflow as tf import yaml -from hparams_config import Config +from ..hparams_config import Config coco = { # 0: 'background', diff --git a/efficientdet/keras/postprocess.py b/efficientdet/keras/postprocess.py index e3799b046..341402237 100644 --- a/efficientdet/keras/postprocess.py +++ b/efficientdet/keras/postprocess.py @@ -19,9 +19,9 @@ from absl import logging import tensorflow as tf -import nms_np -import utils -from keras import anchors +from .. import nms_np +from .. import utils +from . import anchors T = tf.Tensor # a shortcut for typing check. CLASS_OFFSET = 1 diff --git a/efficientdet/keras/postprocess_test.py b/efficientdet/keras/postprocess_test.py index 89e210c08..58278ef5a 100644 --- a/efficientdet/keras/postprocess_test.py +++ b/efficientdet/keras/postprocess_test.py @@ -13,10 +13,19 @@ # limitations under the License. # ============================================================================= """Test for postprocess.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.keras + __package__ = "efficientdet.keras" + from absl import logging import tensorflow as tf -from keras import postprocess +from . import postprocess class PostprocessTest(tf.test.TestCase): diff --git a/efficientdet/keras/segmentation.py b/efficientdet/keras/segmentation.py index c7f6b7e4a..f655609e5 100644 --- a/efficientdet/keras/segmentation.py +++ b/efficientdet/keras/segmentation.py @@ -13,13 +13,22 @@ # limitations under the License. # ============================================================================== """A demo script to show to train a segmentation model.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.keras + __package__ = "efficientdet.keras" + from absl import app from absl import logging import tensorflow as tf import tensorflow_datasets as tfds -import hparams_config -from keras import efficientdet_keras +from .. import hparams_config +from . import efficientdet_keras def create_mask(pred_mask): diff --git a/efficientdet/keras/train.py b/efficientdet/keras/train.py index 6fcd59054..d171d7a12 100644 --- a/efficientdet/keras/train.py +++ b/efficientdet/keras/train.py @@ -13,18 +13,27 @@ # limitations under the License. # ============================================================================== """The main training script.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.keras + __package__ = "efficientdet.keras" + import os from absl import app from absl import flags from absl import logging import tensorflow as tf -import dataloader -import hparams_config -import utils -from keras import tfmot -from keras import train_lib -from keras import util_keras +from .. import dataloader +from .. import hparams_config +from .. import utils +from . import tfmot +from . import train_lib +from . import util_keras # Cloud TPU Cluster Resolvers diff --git a/efficientdet/keras/train_lib.py b/efficientdet/keras/train_lib.py index 54f2f3a88..0087da880 100644 --- a/efficientdet/keras/train_lib.py +++ b/efficientdet/keras/train_lib.py @@ -21,12 +21,12 @@ import numpy as np import tensorflow as tf -import inference -import iou_utils -import utils -from keras import anchors -from keras import efficientdet_keras -from keras import postprocess +from .. import inference +from .. import iou_utils +from .. import utils +from . import anchors +from . import efficientdet_keras +from . import postprocess from tensorflow_model_optimization.python.core.sparsity.keras import pruning_wrapper @@ -316,8 +316,8 @@ def __init__(self, test_dataset, update_freq=None): self.update_freq = update_freq def set_model(self, model: tf.keras.Model): - import coco_metric - from keras import label_util + from .. import coco_metric + from . import label_util self.model = model config = model.config self.config = config diff --git a/efficientdet/keras/train_lib_test.py b/efficientdet/keras/train_lib_test.py index db740850b..6b32cd9c9 100644 --- a/efficientdet/keras/train_lib_test.py +++ b/efficientdet/keras/train_lib_test.py @@ -12,13 +12,22 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.keras + __package__ = "efficientdet.keras" + import tempfile from absl import logging import tensorflow as tf -import det_model_fn as legacy_fn -import hparams_config -from keras import train_lib +from .. import det_model_fn as legacy_fn +from .. import hparams_config +from . import train_lib class TrainLibTest(tf.test.TestCase): diff --git a/efficientdet/keras/util_keras.py b/efficientdet/keras/util_keras.py index 5cde4b45f..3023cbcb7 100644 --- a/efficientdet/keras/util_keras.py +++ b/efficientdet/keras/util_keras.py @@ -16,7 +16,7 @@ from typing import Text from absl import logging import tensorflow as tf -import utils +from .. import utils def build_batch_norm(is_training_bn: bool, diff --git a/efficientdet/keras/util_keras_test.py b/efficientdet/keras/util_keras_test.py index 91eafccb6..73684b166 100644 --- a/efficientdet/keras/util_keras_test.py +++ b/efficientdet/keras/util_keras_test.py @@ -12,12 +12,21 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.keras + __package__ = "efficientdet.keras" + from absl import logging from absl.testing import parameterized import tensorflow as tf -import utils -from keras import util_keras +from .. import utils +from . import util_keras class KerasUtilTest(tf.test.TestCase, parameterized.TestCase): diff --git a/efficientdet/keras/wbf_test.py b/efficientdet/keras/wbf_test.py index 5eebc6202..e65193b6a 100644 --- a/efficientdet/keras/wbf_test.py +++ b/efficientdet/keras/wbf_test.py @@ -13,10 +13,19 @@ # limitations under the License. # ============================================================================== """Test for wbf.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.keras + __package__ = "efficientdet.keras" + from absl import logging import tensorflow as tf -from keras import wbf +from . import wbf class WbfTest(tf.test.TestCase): diff --git a/efficientdet/main.py b/efficientdet/main.py index 219e21c67..2848d019d 100644 --- a/efficientdet/main.py +++ b/efficientdet/main.py @@ -13,6 +13,15 @@ # limitations under the License. # ============================================================================== """The main training script.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) + import efficientdet + __package__ = "efficientdet" + import multiprocessing import os from absl import app @@ -21,10 +30,10 @@ import numpy as np import tensorflow.compat.v1 as tf -import dataloader -import det_model_fn -import hparams_config -import utils +from . import dataloader +from . import det_model_fn +from . import hparams_config +from . import utils flags.DEFINE_string( 'tpu', diff --git a/efficientdet/model_inspect.py b/efficientdet/model_inspect.py index f9d98c748..0f8bf8361 100644 --- a/efficientdet/model_inspect.py +++ b/efficientdet/model_inspect.py @@ -12,6 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) + import efficientdet + __package__ = "efficientdet" + r"""Tool to inspect a model.""" import os import time @@ -25,9 +34,9 @@ from PIL import Image import tensorflow.compat.v1 as tf -import hparams_config -import inference -import utils +from . import hparams_config +from . import inference +from . import utils from tensorflow.python.client import timeline # pylint: disable=g-direct-tensorflow-import flags.DEFINE_string('model_name', 'efficientdet-d0', 'Model.') diff --git a/efficientdet/model_inspect_test.py b/efficientdet/model_inspect_test.py index 6fd0a5dd8..3b31e6409 100644 --- a/efficientdet/model_inspect_test.py +++ b/efficientdet/model_inspect_test.py @@ -12,6 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) + import efficientdet + __package__ = "efficientdet" + r"""Tests for model inspect tool.""" import os import shutil @@ -23,8 +32,8 @@ from PIL import Image import tensorflow.compat.v1 as tf -import model_inspect -import utils +from . import model_inspect +from . import utils FLAGS = flags.FLAGS diff --git a/efficientdet/object_detection/argmax_matcher.py b/efficientdet/object_detection/argmax_matcher.py index 56ffdd0d4..c33f22613 100644 --- a/efficientdet/object_detection/argmax_matcher.py +++ b/efficientdet/object_detection/argmax_matcher.py @@ -27,8 +27,8 @@ """ import tensorflow.compat.v1 as tf -from object_detection import matcher -from object_detection import shape_utils +from . import matcher +from . import shape_utils class ArgMaxMatcher(matcher.Matcher): diff --git a/efficientdet/object_detection/faster_rcnn_box_coder.py b/efficientdet/object_detection/faster_rcnn_box_coder.py index a06ba10f0..87bfd4a39 100644 --- a/efficientdet/object_detection/faster_rcnn_box_coder.py +++ b/efficientdet/object_detection/faster_rcnn_box_coder.py @@ -29,8 +29,8 @@ import tensorflow.compat.v1 as tf -from object_detection import box_coder -from object_detection import box_list +from . import box_coder +from . import box_list EPSILON = 1e-8 diff --git a/efficientdet/object_detection/preprocessor.py b/efficientdet/object_detection/preprocessor.py index 557d5f7e3..174e0dc2b 100644 --- a/efficientdet/object_detection/preprocessor.py +++ b/efficientdet/object_detection/preprocessor.py @@ -41,7 +41,7 @@ import tensorflow.compat.v1 as tf -from object_detection import box_list +from . import box_list def _flip_boxes_left_right(boxes): diff --git a/efficientdet/object_detection/target_assigner.py b/efficientdet/object_detection/target_assigner.py index a7297d2d2..2ff4a9f48 100644 --- a/efficientdet/object_detection/target_assigner.py +++ b/efficientdet/object_detection/target_assigner.py @@ -32,8 +32,8 @@ """ import tensorflow.compat.v1 as tf -from object_detection import box_list -from object_detection import shape_utils +from . import box_list +from . import shape_utils KEYPOINTS_FIELD_NAME = 'keypoints' diff --git a/efficientdet/requirements.txt b/efficientdet/requirements.txt index c9b6dace4..baf99bc7f 100644 --- a/efficientdet/requirements.txt +++ b/efficientdet/requirements.txt @@ -10,4 +10,4 @@ tensorflow-addons>=0.11.2 neural-structured-learning>=1.3.1 tensorflow-model-optimization>=0.5 Cython>=0.29.13 -git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI +pycocotools diff --git a/efficientdet/tensorrt.py b/efficientdet/tensorrt.py index 06675f969..38e765f18 100644 --- a/efficientdet/tensorrt.py +++ b/efficientdet/tensorrt.py @@ -12,6 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) + import efficientdet + __package__ = "efficientdet" + r"""Simple tools for TensorRT. Example usage: diff --git a/efficientdet/testdata/__init__.py b/efficientdet/testdata/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/efficientdet/utils_test.py b/efficientdet/utils_test.py index 79ba89038..00259da13 100644 --- a/efficientdet/utils_test.py +++ b/efficientdet/utils_test.py @@ -13,11 +13,20 @@ # limitations under the License. # ============================================================================== """Tests for utils.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) + import efficientdet + __package__ = "efficientdet" + import os from absl import logging import tensorflow.compat.v1 as tf -import utils +from . import utils class UtilsTest(tf.test.TestCase): diff --git a/efficientdet/visualize/shape_utils.py b/efficientdet/visualize/shape_utils.py index 6aed19f62..f335b7b72 100644 --- a/efficientdet/visualize/shape_utils.py +++ b/efficientdet/visualize/shape_utils.py @@ -16,7 +16,7 @@ from six.moves import zip import tensorflow.compat.v1 as tf -from visualize import static_shape +from . import static_shape def _is_tensor(t): diff --git a/efficientdet/visualize/vis_utils.py b/efficientdet/visualize/vis_utils.py index 2d30bda1d..fb6c630eb 100644 --- a/efficientdet/visualize/vis_utils.py +++ b/efficientdet/visualize/vis_utils.py @@ -32,8 +32,8 @@ from six.moves import zip import tensorflow.compat.v1 as tf -from visualize import shape_utils -from visualize import standard_fields as fields +from . import shape_utils +from . import standard_fields as fields _TITLE_LEFT_MARGIN = 10 _TITLE_TOP_MARGIN = 10 diff --git a/efficientdet/visualize/vis_utils_test.py b/efficientdet/visualize/vis_utils_test.py index 66f710bc9..c944d566a 100644 --- a/efficientdet/visualize/vis_utils_test.py +++ b/efficientdet/visualize/vis_utils_test.py @@ -13,6 +13,15 @@ # limitations under the License. # ============================================================================== """Tests for visualize.""" + +import os +import sys +# Allow relative imports when being executed as script. +if __name__ == "__main__" and __package__ is None: + sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) + import efficientdet.visualize + __package__ = "efficientdet.visualize" + import os from absl import logging import numpy as np @@ -21,8 +30,8 @@ from six.moves import range import tensorflow.compat.v1 as tf -from visualize import standard_fields as fields -from visualize import vis_utils +from . import standard_fields as fields +from . import vis_utils _TESTDATA_PATH = 'testdata' diff --git a/setup.py b/setup.py new file mode 100644 index 000000000..f4b25048f --- /dev/null +++ b/setup.py @@ -0,0 +1,41 @@ +import setuptools + + +setuptools.setup( + name = 'efficientdet', + version = '0.0.0', + description = '', + url = 'https://github.com/google/automl', + author = 'Google', + author_email = '', + maintainer = '', + maintainer_email = '', + packages = setuptools.find_packages(), + install_requires = [ + 'lxml>=4.6.1', + 'absl-py>=0.7.1', + 'matplotlib>=3.0.3', + 'numpy>=1.16.4', + 'Pillow>=6.0.0', + 'PyYAML>=5.1', + 'six>=1.12.0', + 'tensorflow>=2.3.0', + 'tensorflow-addons>=0.11.2', + 'neural-structured-learning>=1.3.1', + 'tensorflow-model-optimization>=0.5', + 'Cython>=0.29.13', + 'pycocotools' + ], + entry_points = { + 'console_scripts': [ + 'efficientdet-tf-model-inspect=efficientdet.model_inspect:launcher', + 'efficientdet-tf-main=efficientdet.main:launcher', + 'efficientdet-keras-train=efficientdet.keras.train:launcher', + 'efficientdet-keras-inspector=efficientdet.keras.inspector:launcher', + 'efficientdet-keras-eval=efficientdet.keras.eval:launcher', + 'efficientdet-create-coco-tfrecord=efficientdet.dataset.create_coco_tfrecord:launcher', + 'efficientdet-create-pascal-tfrecord=efficientdet.dataset.create_pascal_tfrecord:launcher', + 'efficientdet-inspect-tfrecord=efficientdet.dataset.inspect_tfrecords:launcher' + ], + } +)