clarifai 9.7.0__py3-none-any.whl → 9.7.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- clarifai/auth/__init__.py +6 -0
- clarifai/auth/helper.py +35 -36
- clarifai/auth/register.py +23 -0
- clarifai/{client → auth}/stub.py +10 -10
- clarifai/client/__init__.py +1 -4
- clarifai/client/app.py +483 -0
- clarifai/client/auth/__init__.py +4 -0
- clarifai/client/{abc.py → auth/abc.py} +2 -2
- clarifai/client/auth/helper.py +377 -0
- clarifai/client/auth/register.py +23 -0
- {clarifai_utils/client → clarifai/client/auth}/stub.py +10 -10
- clarifai/client/base.py +112 -0
- clarifai/client/dataset.py +290 -0
- clarifai/client/input.py +730 -0
- clarifai/client/lister.py +41 -0
- clarifai/client/model.py +218 -0
- clarifai/client/module.py +82 -0
- clarifai/client/user.py +125 -0
- clarifai/client/workflow.py +194 -0
- clarifai/datasets/upload/base.py +66 -0
- clarifai/datasets/upload/examples/README.md +31 -0
- clarifai/datasets/upload/examples/image_classification/cifar10/dataset.py +42 -0
- clarifai/datasets/upload/examples/image_classification/food-101/dataset.py +39 -0
- clarifai/datasets/upload/examples/text_classification/imdb_dataset/dataset.py +37 -0
- clarifai/{data_upload/datasets → datasets/upload}/features.py +4 -12
- clarifai/datasets/upload/image.py +156 -0
- clarifai/datasets/upload/loaders/README.md +49 -0
- clarifai/{data_upload/datasets/zoo → datasets/upload/loaders}/coco_captions.py +24 -21
- {clarifai_utils/data_upload/datasets/zoo → clarifai/datasets/upload/loaders}/coco_detection.py +46 -42
- clarifai/datasets/upload/loaders/coco_segmentation.py +166 -0
- clarifai/{data_upload/datasets/zoo → datasets/upload/loaders}/imagenet_classification.py +22 -12
- clarifai/{data_upload/datasets/zoo → datasets/upload/loaders}/xview_detection.py +44 -53
- clarifai/datasets/upload/text.py +50 -0
- clarifai/datasets/upload/utils.py +62 -0
- clarifai/errors.py +90 -0
- clarifai/urls/helper.py +16 -17
- clarifai/utils/logging.py +40 -0
- clarifai/utils/misc.py +33 -0
- clarifai/versions.py +6 -0
- {clarifai-9.7.0.dist-info → clarifai-9.7.2.dist-info}/LICENSE +1 -1
- clarifai-9.7.2.dist-info/METADATA +179 -0
- clarifai-9.7.2.dist-info/RECORD +350 -0
- clarifai_utils/auth/__init__.py +6 -0
- clarifai_utils/auth/helper.py +35 -36
- clarifai_utils/auth/register.py +23 -0
- clarifai_utils/auth/stub.py +127 -0
- clarifai_utils/client/__init__.py +1 -4
- clarifai_utils/client/app.py +483 -0
- clarifai_utils/client/auth/__init__.py +4 -0
- clarifai_utils/client/{abc.py → auth/abc.py} +2 -2
- clarifai_utils/client/auth/helper.py +377 -0
- clarifai_utils/client/auth/register.py +23 -0
- clarifai_utils/client/auth/stub.py +127 -0
- clarifai_utils/client/base.py +112 -0
- clarifai_utils/client/dataset.py +290 -0
- clarifai_utils/client/input.py +730 -0
- clarifai_utils/client/lister.py +41 -0
- clarifai_utils/client/model.py +218 -0
- clarifai_utils/client/module.py +82 -0
- clarifai_utils/client/user.py +125 -0
- clarifai_utils/client/workflow.py +194 -0
- clarifai_utils/datasets/upload/base.py +66 -0
- clarifai_utils/datasets/upload/examples/README.md +31 -0
- clarifai_utils/datasets/upload/examples/image_classification/cifar10/dataset.py +42 -0
- clarifai_utils/datasets/upload/examples/image_classification/food-101/dataset.py +39 -0
- clarifai_utils/datasets/upload/examples/text_classification/imdb_dataset/dataset.py +37 -0
- clarifai_utils/{data_upload/datasets → datasets/upload}/features.py +4 -12
- clarifai_utils/datasets/upload/image.py +156 -0
- clarifai_utils/datasets/upload/loaders/README.md +49 -0
- clarifai_utils/{data_upload/datasets/zoo → datasets/upload/loaders}/coco_captions.py +24 -21
- {clarifai/data_upload/datasets/zoo → clarifai_utils/datasets/upload/loaders}/coco_detection.py +46 -42
- clarifai_utils/datasets/upload/loaders/coco_segmentation.py +166 -0
- clarifai_utils/{data_upload/datasets/zoo → datasets/upload/loaders}/imagenet_classification.py +22 -12
- clarifai_utils/{data_upload/datasets/zoo → datasets/upload/loaders}/xview_detection.py +44 -53
- clarifai_utils/datasets/upload/text.py +50 -0
- clarifai_utils/datasets/upload/utils.py +62 -0
- clarifai_utils/errors.py +90 -0
- clarifai_utils/urls/helper.py +16 -17
- clarifai_utils/utils/logging.py +40 -0
- clarifai_utils/utils/misc.py +33 -0
- clarifai_utils/versions.py +6 -0
- clarifai/data_upload/README.md +0 -63
- clarifai/data_upload/convert_csv.py +0 -182
- clarifai/data_upload/datasets/base.py +0 -87
- clarifai/data_upload/datasets/image.py +0 -253
- clarifai/data_upload/datasets/text.py +0 -60
- clarifai/data_upload/datasets/zoo/README.md +0 -55
- clarifai/data_upload/datasets/zoo/coco_segmentation.py +0 -160
- clarifai/data_upload/examples/README.md +0 -5
- clarifai/data_upload/examples/image_classification/cifar10/dataset.py +0 -40
- clarifai/data_upload/examples/image_classification/food-101/dataset.py +0 -39
- clarifai/data_upload/examples/image_classification/food-101/images/beignets/1036242.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/beignets/1114182.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/beignets/2012944.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/beignets/2464389.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/beignets/478632.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/hamburger/1061270.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/hamburger/1202261.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/hamburger/1381751.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/hamburger/3289634.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/hamburger/862025.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/prime_rib/102197.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/prime_rib/2749372.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/prime_rib/2938268.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/prime_rib/3590861.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/prime_rib/746716.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/ramen/2955110.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/ramen/3208966.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/ramen/3270629.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/ramen/3424562.jpg +0 -0
- clarifai/data_upload/examples/image_classification/food-101/images/ramen/544680.jpg +0 -0
- clarifai/data_upload/examples/image_detection/voc/annotations/2007_000464.xml +0 -39
- clarifai/data_upload/examples/image_detection/voc/annotations/2008_000853.xml +0 -28
- clarifai/data_upload/examples/image_detection/voc/annotations/2008_003182.xml +0 -54
- clarifai/data_upload/examples/image_detection/voc/annotations/2008_008526.xml +0 -67
- clarifai/data_upload/examples/image_detection/voc/annotations/2009_004315.xml +0 -28
- clarifai/data_upload/examples/image_detection/voc/annotations/2009_004382.xml +0 -28
- clarifai/data_upload/examples/image_detection/voc/annotations/2011_000430.xml +0 -28
- clarifai/data_upload/examples/image_detection/voc/annotations/2011_001610.xml +0 -46
- clarifai/data_upload/examples/image_detection/voc/annotations/2011_006412.xml +0 -99
- clarifai/data_upload/examples/image_detection/voc/annotations/2012_000690.xml +0 -43
- clarifai/data_upload/examples/image_detection/voc/dataset.py +0 -76
- clarifai/data_upload/examples/image_detection/voc/images/2007_000464.jpg +0 -0
- clarifai/data_upload/examples/image_detection/voc/images/2008_000853.jpg +0 -0
- clarifai/data_upload/examples/image_detection/voc/images/2008_003182.jpg +0 -0
- clarifai/data_upload/examples/image_detection/voc/images/2008_008526.jpg +0 -0
- clarifai/data_upload/examples/image_detection/voc/images/2009_004315.jpg +0 -0
- clarifai/data_upload/examples/image_detection/voc/images/2009_004382.jpg +0 -0
- clarifai/data_upload/examples/image_detection/voc/images/2011_000430.jpg +0 -0
- clarifai/data_upload/examples/image_detection/voc/images/2011_001610.jpg +0 -0
- clarifai/data_upload/examples/image_detection/voc/images/2011_006412.jpg +0 -0
- clarifai/data_upload/examples/image_detection/voc/images/2012_000690.jpg +0 -0
- clarifai/data_upload/examples/image_segmentation/coco/annotations/instances_val2017_subset.json +0 -5342
- clarifai/data_upload/examples/image_segmentation/coco/dataset.py +0 -107
- clarifai/data_upload/examples/image_segmentation/coco/images/000000074646.jpg +0 -0
- clarifai/data_upload/examples/image_segmentation/coco/images/000000086956.jpg +0 -0
- clarifai/data_upload/examples/image_segmentation/coco/images/000000166563.jpg +0 -0
- clarifai/data_upload/examples/image_segmentation/coco/images/000000176857.jpg +0 -0
- clarifai/data_upload/examples/image_segmentation/coco/images/000000182202.jpg +0 -0
- clarifai/data_upload/examples/image_segmentation/coco/images/000000193245.jpg +0 -0
- clarifai/data_upload/examples/image_segmentation/coco/images/000000384850.jpg +0 -0
- clarifai/data_upload/examples/image_segmentation/coco/images/000000409630.jpg +0 -0
- clarifai/data_upload/examples/image_segmentation/coco/images/000000424349.jpg +0 -0
- clarifai/data_upload/examples/image_segmentation/coco/images/000000573008.jpg +0 -0
- clarifai/data_upload/examples/text_classification/imdb_dataset/dataset.py +0 -40
- clarifai/data_upload/examples.py +0 -17
- clarifai/data_upload/upload.py +0 -356
- clarifai/dataset_export/dataset_export_inputs.py +0 -205
- clarifai/listing/concepts.py +0 -37
- clarifai/listing/datasets.py +0 -37
- clarifai/listing/inputs.py +0 -111
- clarifai/listing/installed_module_versions.py +0 -40
- clarifai/listing/lister.py +0 -200
- clarifai/listing/models.py +0 -46
- clarifai/listing/module_versions.py +0 -42
- clarifai/listing/modules.py +0 -36
- clarifai/runners/base.py +0 -140
- clarifai/runners/example.py +0 -36
- clarifai-9.7.0.dist-info/METADATA +0 -99
- clarifai-9.7.0.dist-info/RECORD +0 -456
- clarifai_utils/data_upload/README.md +0 -63
- clarifai_utils/data_upload/convert_csv.py +0 -182
- clarifai_utils/data_upload/datasets/base.py +0 -87
- clarifai_utils/data_upload/datasets/image.py +0 -253
- clarifai_utils/data_upload/datasets/text.py +0 -60
- clarifai_utils/data_upload/datasets/zoo/README.md +0 -55
- clarifai_utils/data_upload/datasets/zoo/coco_segmentation.py +0 -160
- clarifai_utils/data_upload/examples/README.md +0 -5
- clarifai_utils/data_upload/examples/image_classification/cifar10/dataset.py +0 -40
- clarifai_utils/data_upload/examples/image_classification/food-101/dataset.py +0 -39
- clarifai_utils/data_upload/examples/image_classification/food-101/images/beignets/1036242.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/beignets/1114182.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/beignets/2012944.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/beignets/2464389.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/beignets/478632.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/hamburger/1061270.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/hamburger/1202261.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/hamburger/1381751.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/hamburger/3289634.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/hamburger/862025.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/prime_rib/102197.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/prime_rib/2749372.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/prime_rib/2938268.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/prime_rib/3590861.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/prime_rib/746716.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/ramen/2955110.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/ramen/3208966.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/ramen/3270629.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/ramen/3424562.jpg +0 -0
- clarifai_utils/data_upload/examples/image_classification/food-101/images/ramen/544680.jpg +0 -0
- clarifai_utils/data_upload/examples/image_detection/__init__.py +0 -0
- clarifai_utils/data_upload/examples/image_detection/voc/__init__.py +0 -0
- clarifai_utils/data_upload/examples/image_detection/voc/annotations/2007_000464.xml +0 -39
- clarifai_utils/data_upload/examples/image_detection/voc/annotations/2008_000853.xml +0 -28
- clarifai_utils/data_upload/examples/image_detection/voc/annotations/2008_003182.xml +0 -54
- clarifai_utils/data_upload/examples/image_detection/voc/annotations/2008_008526.xml +0 -67
- clarifai_utils/data_upload/examples/image_detection/voc/annotations/2009_004315.xml +0 -28
- clarifai_utils/data_upload/examples/image_detection/voc/annotations/2009_004382.xml +0 -28
- clarifai_utils/data_upload/examples/image_detection/voc/annotations/2011_000430.xml +0 -28
- clarifai_utils/data_upload/examples/image_detection/voc/annotations/2011_001610.xml +0 -46
- clarifai_utils/data_upload/examples/image_detection/voc/annotations/2011_006412.xml +0 -99
- clarifai_utils/data_upload/examples/image_detection/voc/annotations/2012_000690.xml +0 -43
- clarifai_utils/data_upload/examples/image_detection/voc/dataset.py +0 -76
- clarifai_utils/data_upload/examples/image_detection/voc/images/2007_000464.jpg +0 -0
- clarifai_utils/data_upload/examples/image_detection/voc/images/2008_000853.jpg +0 -0
- clarifai_utils/data_upload/examples/image_detection/voc/images/2008_003182.jpg +0 -0
- clarifai_utils/data_upload/examples/image_detection/voc/images/2008_008526.jpg +0 -0
- clarifai_utils/data_upload/examples/image_detection/voc/images/2009_004315.jpg +0 -0
- clarifai_utils/data_upload/examples/image_detection/voc/images/2009_004382.jpg +0 -0
- clarifai_utils/data_upload/examples/image_detection/voc/images/2011_000430.jpg +0 -0
- clarifai_utils/data_upload/examples/image_detection/voc/images/2011_001610.jpg +0 -0
- clarifai_utils/data_upload/examples/image_detection/voc/images/2011_006412.jpg +0 -0
- clarifai_utils/data_upload/examples/image_detection/voc/images/2012_000690.jpg +0 -0
- clarifai_utils/data_upload/examples/image_segmentation/__init__.py +0 -0
- clarifai_utils/data_upload/examples/image_segmentation/coco/__init__.py +0 -0
- clarifai_utils/data_upload/examples/image_segmentation/coco/annotations/instances_val2017_subset.json +0 -5342
- clarifai_utils/data_upload/examples/image_segmentation/coco/dataset.py +0 -107
- clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000074646.jpg +0 -0
- clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000086956.jpg +0 -0
- clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000166563.jpg +0 -0
- clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000176857.jpg +0 -0
- clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000182202.jpg +0 -0
- clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000193245.jpg +0 -0
- clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000384850.jpg +0 -0
- clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000409630.jpg +0 -0
- clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000424349.jpg +0 -0
- clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000573008.jpg +0 -0
- clarifai_utils/data_upload/examples/text_classification/__init__.py +0 -0
- clarifai_utils/data_upload/examples/text_classification/imdb_dataset/__init__.py +0 -0
- clarifai_utils/data_upload/examples/text_classification/imdb_dataset/dataset.py +0 -40
- clarifai_utils/data_upload/examples.py +0 -17
- clarifai_utils/data_upload/upload.py +0 -356
- clarifai_utils/dataset_export/dataset_export_inputs.py +0 -205
- clarifai_utils/listing/__init__.py +0 -0
- clarifai_utils/listing/concepts.py +0 -37
- clarifai_utils/listing/datasets.py +0 -37
- clarifai_utils/listing/inputs.py +0 -111
- clarifai_utils/listing/installed_module_versions.py +0 -40
- clarifai_utils/listing/lister.py +0 -200
- clarifai_utils/listing/models.py +0 -46
- clarifai_utils/listing/module_versions.py +0 -42
- clarifai_utils/listing/modules.py +0 -36
- clarifai_utils/runners/__init__.py +0 -0
- clarifai_utils/runners/base.py +0 -140
- clarifai_utils/runners/example.py +0 -36
- /clarifai/{data_upload/__init__.py → cli.py} +0 -0
- /clarifai/{data_upload/datasets → datasets}/__init__.py +0 -0
- /clarifai/{data_upload/datasets/zoo → datasets/upload}/__init__.py +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/__init__.py +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/__init__.py +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/cifar_small_test.csv +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/cifar_small_train.csv +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_700.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_701.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_702.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_703.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_704.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_705.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_706.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_707.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_708.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_709.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/__init__.py +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/1420783.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/3287885.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/3617075.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/38052.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/39147.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/139558.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/1636096.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/2480925.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/3385808.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/3647386.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/1826869.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/2243245.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/259212.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/2842688.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/3035414.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/1545393.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/2427642.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/3520891.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/377566.jpg +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/503504.jpg +0 -0
- /clarifai/{data_upload/examples/image_detection → datasets/upload/examples/text_classification}/__init__.py +0 -0
- /clarifai/{data_upload/examples/image_detection/voc → datasets/upload/examples/text_classification/imdb_dataset}/__init__.py +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/text_classification/imdb_dataset/test.csv +0 -0
- /clarifai/{data_upload → datasets/upload}/examples/text_classification/imdb_dataset/train.csv +0 -0
- /clarifai/{data_upload/examples/image_segmentation → datasets/upload/loaders}/__init__.py +0 -0
- /clarifai/{data_upload/examples/image_segmentation/coco → utils}/__init__.py +0 -0
- {clarifai-9.7.0.dist-info → clarifai-9.7.2.dist-info}/WHEEL +0 -0
- {clarifai-9.7.0.dist-info → clarifai-9.7.2.dist-info}/entry_points.txt +0 -0
- {clarifai-9.7.0.dist-info → clarifai-9.7.2.dist-info}/top_level.txt +0 -0
- /clarifai/data_upload/examples/text_classification/__init__.py → /clarifai_utils/cli.py +0 -0
- {clarifai/data_upload/examples/text_classification/imdb_dataset → clarifai_utils/datasets}/__init__.py +0 -0
- {clarifai/listing → clarifai_utils/datasets/upload}/__init__.py +0 -0
- {clarifai/runners → clarifai_utils/datasets/upload/examples/image_classification}/__init__.py +0 -0
- /clarifai_utils/{data_upload → datasets/upload/examples/image_classification/cifar10}/__init__.py +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/cifar_small_test.csv +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/cifar_small_train.csv +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_700.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_701.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_702.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_703.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_704.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_705.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_706.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_707.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_708.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_709.jpg +0 -0
- /clarifai_utils/{data_upload/datasets → datasets/upload/examples/image_classification/food-101}/__init__.py +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/1420783.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/3287885.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/3617075.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/38052.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/39147.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/139558.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/1636096.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/2480925.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/3385808.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/3647386.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/1826869.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/2243245.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/259212.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/2842688.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/3035414.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/1545393.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/2427642.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/3520891.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/377566.jpg +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/503504.jpg +0 -0
- /clarifai_utils/{data_upload/datasets/zoo → datasets/upload/examples/text_classification}/__init__.py +0 -0
- /clarifai_utils/{data_upload/examples/image_classification → datasets/upload/examples/text_classification/imdb_dataset}/__init__.py +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/text_classification/imdb_dataset/test.csv +0 -0
- /clarifai_utils/{data_upload → datasets/upload}/examples/text_classification/imdb_dataset/train.csv +0 -0
- /clarifai_utils/{data_upload/examples/image_classification/cifar10 → datasets/upload/loaders}/__init__.py +0 -0
- /clarifai_utils/{data_upload/examples/image_classification/food-101 → utils}/__init__.py +0 -0
{clarifai/data_upload/datasets/zoo → clarifai_utils/datasets/upload/loaders}/coco_detection.py
RENAMED
|
@@ -9,10 +9,12 @@ import requests
|
|
|
9
9
|
from pycocotools.coco import COCO
|
|
10
10
|
from tqdm import tqdm
|
|
11
11
|
|
|
12
|
+
from clarifai.datasets.upload.base import ClarifaiDataLoader
|
|
13
|
+
|
|
12
14
|
from ..features import VisualDetectionFeatures
|
|
13
15
|
|
|
14
16
|
|
|
15
|
-
class
|
|
17
|
+
class COCODetectionDataLoader(ClarifaiDataLoader):
|
|
16
18
|
"""COCO 2017 Image Detection Dataset."""
|
|
17
19
|
|
|
18
20
|
def __init__(self, split: str = "train"):
|
|
@@ -30,9 +32,12 @@ class COCODetectionDataset:
|
|
|
30
32
|
}
|
|
31
33
|
self.split = split
|
|
32
34
|
self.url = "http://images.cocodataset.org/zips/" # coco base image-zip url
|
|
33
|
-
self.data_dir = os.path.join(os.
|
|
35
|
+
self.data_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
|
36
|
+
"data") # data storage directory
|
|
34
37
|
self.extracted_coco_dirs = {"train": None, "val": None, "annotations": None}
|
|
35
38
|
|
|
39
|
+
self.load_data()
|
|
40
|
+
|
|
36
41
|
def coco_download(self, save_dir):
|
|
37
42
|
"""Download coco dataset."""
|
|
38
43
|
if not os.path.exists(save_dir):
|
|
@@ -69,13 +74,7 @@ class COCODetectionDataset:
|
|
|
69
74
|
print(f" Deleting {filename}")
|
|
70
75
|
os.remove(path=os.path.join(save_dir, filename))
|
|
71
76
|
|
|
72
|
-
def
|
|
73
|
-
"""
|
|
74
|
-
Transform coco object detection data into clarifai proto compatible
|
|
75
|
-
format for upload.
|
|
76
|
-
Returns:
|
|
77
|
-
VisualDetectionFeatures type generator.
|
|
78
|
-
"""
|
|
77
|
+
def load_data(self):
|
|
79
78
|
if isinstance(self.filenames, dict) and len(self.filenames) == 3:
|
|
80
79
|
self.coco_download(self.data_dir)
|
|
81
80
|
self.extracted_coco_dirs["train"] = [os.path.join(self.data_dir, i) \
|
|
@@ -91,40 +90,45 @@ class COCODetectionDataset:
|
|
|
91
90
|
|
|
92
91
|
annot_file = glob(self.extracted_coco_dirs["annotations"] + "/" +\
|
|
93
92
|
f"instances_{self.split}*")[0]
|
|
94
|
-
coco = COCO(annot_file)
|
|
95
|
-
categories = coco.loadCats(coco.getCatIds())
|
|
96
|
-
cat_id_map = {category["id"]: category["name"] for category in categories}
|
|
97
|
-
cat_img_ids = {}
|
|
98
|
-
for cat_id in list(cat_id_map.keys()):
|
|
99
|
-
cat_img_ids[cat_id] = coco.getImgIds(catIds=[cat_id])
|
|
93
|
+
self.coco = COCO(annot_file)
|
|
94
|
+
categories = self.coco.loadCats(self.coco.getCatIds())
|
|
95
|
+
self.cat_id_map = {category["id"]: category["name"] for category in categories}
|
|
96
|
+
self.cat_img_ids = {}
|
|
97
|
+
for cat_id in list(self.cat_id_map.keys()):
|
|
98
|
+
self.cat_img_ids[cat_id] = self.coco.getImgIds(catIds=[cat_id])
|
|
100
99
|
|
|
101
100
|
img_ids = []
|
|
102
|
-
for i in list(cat_img_ids.values()):
|
|
101
|
+
for i in list(self.cat_img_ids.values()):
|
|
103
102
|
img_ids.extend(i)
|
|
104
103
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
104
|
+
self.img_ids = list(set(img_ids))
|
|
105
|
+
|
|
106
|
+
def __len__(self):
|
|
107
|
+
return len(self.img_ids)
|
|
108
|
+
|
|
109
|
+
def __getitem__(self, idx):
|
|
110
|
+
_id = self.img_ids[idx]
|
|
111
|
+
annots = [] # bboxes
|
|
112
|
+
class_names = []
|
|
113
|
+
labels = [i for i in list(filter(lambda x: _id in self.cat_img_ids[x], self.cat_img_ids))]
|
|
114
|
+
image_path = glob(self.extracted_coco_dirs[self.split]+"/"+\
|
|
115
|
+
f"{str(_id).zfill(12)}*")[0]
|
|
116
|
+
|
|
117
|
+
image_height, image_width = cv2.imread(image_path).shape[:2]
|
|
118
|
+
for cat_id in labels:
|
|
119
|
+
annot_ids = self.coco.getAnnIds(imgIds=_id, catIds=[cat_id])
|
|
120
|
+
if len(annot_ids) > 0:
|
|
121
|
+
img_annotations = self.coco.loadAnns(annot_ids)
|
|
122
|
+
for ann in img_annotations:
|
|
123
|
+
class_names.append(self.cat_id_map[cat_id])
|
|
124
|
+
x_min = ann['bbox'][0] / image_width #left_col
|
|
125
|
+
y_min = ann['bbox'][1] / image_height #top_row
|
|
126
|
+
x_max = (ann['bbox'][0] + ann['bbox'][2]) / image_width #right_col
|
|
127
|
+
y_max = (ann['bbox'][1] + ann['bbox'][3]) / image_height #bottom_row
|
|
128
|
+
annots.append([x_min, y_min, x_max, y_max])
|
|
129
|
+
else: # if no annotations for given image_id-cat_id pair
|
|
130
|
+
continue
|
|
131
|
+
assert len(class_names) == len(annots), f"Num classes must match num bbox annotations\
|
|
132
|
+
for a single image. Found {len(class_names)} classes and {len(annots)} bboxes."
|
|
133
|
+
|
|
134
|
+
return VisualDetectionFeatures(image_path, class_names, annots, id=str(_id))
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
#! COCO 2017 Image Segmentation dataset
|
|
2
|
+
|
|
3
|
+
import gc
|
|
4
|
+
import os
|
|
5
|
+
import zipfile
|
|
6
|
+
from functools import reduce
|
|
7
|
+
from glob import glob
|
|
8
|
+
|
|
9
|
+
import cv2
|
|
10
|
+
import numpy as np
|
|
11
|
+
import requests
|
|
12
|
+
from pycocotools import mask as maskUtils
|
|
13
|
+
from pycocotools.coco import COCO
|
|
14
|
+
from tqdm import tqdm
|
|
15
|
+
|
|
16
|
+
from clarifai.datasets.upload.base import ClarifaiDataLoader
|
|
17
|
+
|
|
18
|
+
from ..features import VisualSegmentationFeatures
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class COCOSegmentationDataLoader(ClarifaiDataLoader):
|
|
22
|
+
"""COCO 2017 Image Segmentation Dataset."""
|
|
23
|
+
|
|
24
|
+
def __init__(self, split: str = "train"):
|
|
25
|
+
"""
|
|
26
|
+
Initialize coco dataset.
|
|
27
|
+
Args:
|
|
28
|
+
filenames: the coco zip filenames: Dict[str, str] to be downloaded if download=True,
|
|
29
|
+
data_dir: the local coco dataset directory
|
|
30
|
+
split: "train" or "val"
|
|
31
|
+
"""
|
|
32
|
+
self.filenames = {
|
|
33
|
+
"train": "train2017.zip",
|
|
34
|
+
"val": "val2017.zip",
|
|
35
|
+
"annotations": "annotations_trainval2017.zip"
|
|
36
|
+
}
|
|
37
|
+
self.split = split
|
|
38
|
+
self.url = "http://images.cocodataset.org/zips/" # coco base image-zip url
|
|
39
|
+
self.data_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
|
40
|
+
"data") # data storage dir
|
|
41
|
+
self.extracted_coco_dirs = {"train": None, "val": None, "annotations": None}
|
|
42
|
+
|
|
43
|
+
self.load_data()
|
|
44
|
+
|
|
45
|
+
def coco_download(self, save_dir):
|
|
46
|
+
"""Download coco dataset."""
|
|
47
|
+
if not os.path.exists(save_dir):
|
|
48
|
+
os.mkdir(save_dir)
|
|
49
|
+
|
|
50
|
+
#check if train, val and annotation dirs exist
|
|
51
|
+
#so that the coco2017 data isn't downloaded
|
|
52
|
+
for key, filename in self.filenames.items():
|
|
53
|
+
existing_files = glob(f"{save_dir}/{key}*")
|
|
54
|
+
if existing_files:
|
|
55
|
+
print(f"{key} dataset already downloded and extracted")
|
|
56
|
+
continue
|
|
57
|
+
|
|
58
|
+
print("-" * 80)
|
|
59
|
+
print(f"Downloading {filename}")
|
|
60
|
+
print("-" * 80)
|
|
61
|
+
|
|
62
|
+
if "annotations" in filename:
|
|
63
|
+
self.url = "http://images.cocodataset.org/annotations/"
|
|
64
|
+
|
|
65
|
+
response = requests.get(self.url + filename, stream=True)
|
|
66
|
+
response.raise_for_status()
|
|
67
|
+
with open(os.path.join(save_dir, filename), "wb") as _file:
|
|
68
|
+
for chunk in tqdm(response.iter_content(chunk_size=5124000)):
|
|
69
|
+
if chunk:
|
|
70
|
+
_file.write(chunk)
|
|
71
|
+
print("Coco data download complete...")
|
|
72
|
+
|
|
73
|
+
#extract files
|
|
74
|
+
zf = zipfile.ZipFile(os.path.join(save_dir, filename))
|
|
75
|
+
print(f" Extracting {filename} file")
|
|
76
|
+
zf.extractall(path=save_dir)
|
|
77
|
+
# Delete coco zip
|
|
78
|
+
print(f" Deleting {filename}")
|
|
79
|
+
os.remove(path=os.path.join(save_dir, filename))
|
|
80
|
+
|
|
81
|
+
def load_data(self):
|
|
82
|
+
"""Load coco dataset image ids or filenames."""
|
|
83
|
+
if isinstance(self.filenames, dict) and len(self.filenames) == 3:
|
|
84
|
+
self.coco_download(self.data_dir)
|
|
85
|
+
self.extracted_coco_dirs["train"] = [os.path.join(self.data_dir, i) \
|
|
86
|
+
for i in os.listdir(self.data_dir) if "train" in i][0]
|
|
87
|
+
self.extracted_coco_dirs["val"] = [os.path.join(self.data_dir, i) \
|
|
88
|
+
for i in os.listdir(self.data_dir) if "val" in i][0]
|
|
89
|
+
|
|
90
|
+
self.extracted_coco_dirs["annotations"] = [os.path.join(self.data_dir, i) \
|
|
91
|
+
for i in os.listdir(self.data_dir) if "annotations" in i][0]
|
|
92
|
+
else:
|
|
93
|
+
raise Exception(f"`filenames` must be a dict of atleast 3 coco zip file names; \
|
|
94
|
+
train, val and annotations. Found {len(self.filenames)} items instead.")
|
|
95
|
+
|
|
96
|
+
annot_file = glob(self.extracted_coco_dirs["annotations"] + "/" + f"instances_{self.split}*")[
|
|
97
|
+
0]
|
|
98
|
+
self.coco = COCO(annot_file)
|
|
99
|
+
categories = self.coco.loadCats(self.coco.getCatIds())
|
|
100
|
+
self.cat_id_map = {category["id"]: category["name"] for category in categories}
|
|
101
|
+
self.cat_img_ids = {}
|
|
102
|
+
for cat_id in list(self.cat_id_map.keys()):
|
|
103
|
+
self.cat_img_ids[cat_id] = self.coco.getImgIds(catIds=[cat_id])
|
|
104
|
+
|
|
105
|
+
img_ids = set()
|
|
106
|
+
for i in list(self.cat_img_ids.values()):
|
|
107
|
+
img_ids.update(i)
|
|
108
|
+
|
|
109
|
+
self.img_ids = list(img_ids)
|
|
110
|
+
|
|
111
|
+
def __len__(self):
|
|
112
|
+
return len(self.img_ids)
|
|
113
|
+
|
|
114
|
+
def __getitem__(self, idx):
|
|
115
|
+
"""Get image and annotations for a given index."""
|
|
116
|
+
_id = self.img_ids[idx]
|
|
117
|
+
annots = [] # polygons
|
|
118
|
+
class_names = []
|
|
119
|
+
labels = [i for i in list(filter(lambda x: _id in self.cat_img_ids[x], self.cat_img_ids))]
|
|
120
|
+
image_path = glob(self.extracted_coco_dirs[self.split]+"/"+\
|
|
121
|
+
f"{str(_id).zfill(12)}*")[0]
|
|
122
|
+
|
|
123
|
+
image_height, image_width = cv2.imread(image_path).shape[:2]
|
|
124
|
+
for cat_id in labels:
|
|
125
|
+
annot_ids = self.coco.getAnnIds(imgIds=_id, catIds=[cat_id])
|
|
126
|
+
if len(annot_ids) > 0:
|
|
127
|
+
img_annotations = self.coco.loadAnns(annot_ids)
|
|
128
|
+
for ann in img_annotations:
|
|
129
|
+
# get polygons
|
|
130
|
+
if type(ann['segmentation']) == list:
|
|
131
|
+
for seg in ann['segmentation']:
|
|
132
|
+
poly = np.array(seg).reshape((int(len(seg) / 2), 2))
|
|
133
|
+
poly[:, 0], poly[:, 1] = poly[:, 0] / image_width, poly[:, 1] / image_height
|
|
134
|
+
annots.append(poly.tolist()) #[[x=col, y=row],...]
|
|
135
|
+
class_names.append(self.cat_id_map[cat_id])
|
|
136
|
+
else: # seg: {"counts":[...]}
|
|
137
|
+
if type(ann['segmentation']['counts']) == list:
|
|
138
|
+
rle = maskUtils.frPyObjects([ann['segmentation']], image_height, image_width)
|
|
139
|
+
else:
|
|
140
|
+
rle = ann['segmentation']
|
|
141
|
+
mask = maskUtils.decode(rle) #binary mask
|
|
142
|
+
#convert mask to polygons and add to annots
|
|
143
|
+
contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
|
|
144
|
+
polygons = []
|
|
145
|
+
for cont in contours:
|
|
146
|
+
if cont.size >= 6:
|
|
147
|
+
polygons.append(cont.astype(float).flatten().tolist())
|
|
148
|
+
# store polygons in (x,y) pairs
|
|
149
|
+
polygons_flattened = reduce(lambda x, y: x + y, polygons)
|
|
150
|
+
del polygons
|
|
151
|
+
del contours
|
|
152
|
+
del mask
|
|
153
|
+
gc.collect()
|
|
154
|
+
|
|
155
|
+
polygons = np.array(polygons_flattened).reshape((int(len(polygons_flattened) / 2), 2))
|
|
156
|
+
polygons[:, 0] = polygons[:, 0] / image_width
|
|
157
|
+
polygons[:, 1] = polygons[:, 1] / image_height
|
|
158
|
+
|
|
159
|
+
annots.append(polygons.tolist()) #[[x=col, y=row],...,[x=col, y=row]]
|
|
160
|
+
class_names.append(self.cat_id_map[cat_id])
|
|
161
|
+
else: # if no annotations for given image_id-cat_id pair
|
|
162
|
+
continue
|
|
163
|
+
assert len(class_names) == len(annots), f"Num classes must match num annotations\
|
|
164
|
+
for a single image. Found {len(class_names)} classes and {len(annots)} polygons."
|
|
165
|
+
|
|
166
|
+
return VisualSegmentationFeatures(image_path, class_names, annots, id=str(_id))
|
clarifai_utils/{data_upload/datasets/zoo → datasets/upload/loaders}/imagenet_classification.py
RENAMED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
4
|
|
|
5
|
-
from clarifai.
|
|
5
|
+
from clarifai.datasets.upload.base import ClarifaiDataLoader
|
|
6
|
+
from ..features import VisualClassificationFeatures
|
|
6
7
|
|
|
7
8
|
|
|
8
|
-
class
|
|
9
|
+
class ImageNetDataLoader(ClarifaiDataLoader):
|
|
9
10
|
"""ImageNet Dataset."""
|
|
10
11
|
|
|
11
12
|
def __init__(self, split: str = "train"):
|
|
@@ -16,16 +17,15 @@ class ImageNetDataset:
|
|
|
16
17
|
split: "train" or "test"
|
|
17
18
|
"""
|
|
18
19
|
self.split = split
|
|
19
|
-
self.data_dir = os.path.join(os.
|
|
20
|
+
self.data_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
|
21
|
+
"data") # data storage directory
|
|
20
22
|
self.label_map = dict()
|
|
23
|
+
self.concepts = []
|
|
24
|
+
self.image_paths = []
|
|
21
25
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
format for upload.
|
|
26
|
-
Returns:
|
|
27
|
-
VisualClassificationFeatures type generator.
|
|
28
|
-
"""
|
|
26
|
+
self.load_data()
|
|
27
|
+
|
|
28
|
+
def load_data(self):
|
|
29
29
|
#Creating label map
|
|
30
30
|
with open(os.path.join(self.data_dir, "LOC_synset_mapping.txt")) as _file:
|
|
31
31
|
for _id in _file:
|
|
@@ -43,5 +43,15 @@ class ImageNetDataset:
|
|
|
43
43
|
folder_path = os.path.join(self.data_dir, self.split) + "/" + _folder
|
|
44
44
|
for _img in os.listdir(folder_path):
|
|
45
45
|
if _img.lower().endswith(('.png', '.jpg', '.jpeg', '.tiff')):
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
self.concepts.append(concept)
|
|
47
|
+
self.image_paths.append(folder_path + "/" + _img)
|
|
48
|
+
|
|
49
|
+
assert len(self.concepts) == len(self.image_paths)
|
|
50
|
+
"Number of concepts and images are not equal"
|
|
51
|
+
|
|
52
|
+
def __len__(self):
|
|
53
|
+
return len(self.image_paths)
|
|
54
|
+
|
|
55
|
+
def __getitem__(self, idx):
|
|
56
|
+
return VisualClassificationFeatures(
|
|
57
|
+
image_path=self.image_paths[idx], label=self.concepts[idx], id=None)
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import glob
|
|
2
2
|
import json
|
|
3
|
-
import math
|
|
4
3
|
import os
|
|
5
4
|
from collections import defaultdict
|
|
6
5
|
from concurrent.futures import ThreadPoolExecutor
|
|
@@ -10,10 +9,12 @@ from typing import DefaultDict, Dict, List
|
|
|
10
9
|
import cv2
|
|
11
10
|
from tqdm import tqdm
|
|
12
11
|
|
|
12
|
+
from clarifai.datasets.upload.base import ClarifaiDataLoader
|
|
13
|
+
|
|
13
14
|
from ..features import VisualDetectionFeatures
|
|
14
15
|
|
|
15
16
|
|
|
16
|
-
class
|
|
17
|
+
class xviewDetectionDataLoader(ClarifaiDataLoader):
|
|
17
18
|
"""xview Image Detection Dataset"""
|
|
18
19
|
|
|
19
20
|
xview_concepts = [
|
|
@@ -31,21 +32,21 @@ class xviewDetectionDataset:
|
|
|
31
32
|
]
|
|
32
33
|
|
|
33
34
|
def __init__(self, split: str = "train") -> None:
|
|
35
|
+
"""Initialize and Compress xview dataset.
|
|
36
|
+
Args:
|
|
37
|
+
split: "train"
|
|
34
38
|
"""
|
|
35
|
-
Initialize and Compress xview dataset.
|
|
36
|
-
Args:
|
|
37
|
-
split: "train"
|
|
38
|
-
"""
|
|
39
39
|
|
|
40
|
-
self.data_dir = os.path.join(os.
|
|
40
|
+
self.data_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "data")
|
|
41
41
|
self.img_dir = os.path.join(self.data_dir, "train_images")
|
|
42
42
|
self.img_comp_dir = os.path.join(self.data_dir, "train_images_comp")
|
|
43
43
|
self.label_file = os.path.join(self.data_dir, "xview_train.geojson")
|
|
44
|
-
self.max_annotations_per_img = 700 # Max annotations per image(due to max grpc 10KB limit)
|
|
45
44
|
|
|
46
|
-
self.preprocess()
|
|
45
|
+
# self.preprocess()
|
|
47
46
|
self.all_data = self.xview_data_parser()
|
|
48
47
|
|
|
48
|
+
self.load_data()
|
|
49
|
+
|
|
49
50
|
def compress_tiff(self, img_path: str) -> None:
|
|
50
51
|
"""Compress tiff image"""
|
|
51
52
|
img_comp_path = os.path.join(self.img_comp_dir, os.path.basename(img_path))
|
|
@@ -54,10 +55,7 @@ class xviewDetectionDataset:
|
|
|
54
55
|
img_comp_path, img_arr, params=(cv2.IMWRITE_TIFF_COMPRESSION, 8)) # 8: Adobe Deflate
|
|
55
56
|
|
|
56
57
|
def preprocess(self):
|
|
57
|
-
"""
|
|
58
|
-
Compress the tiff images to comply with clarifai grpc image encoding limit(<20MB)
|
|
59
|
-
Uses ADOBE_DEFLATE compression algorithm
|
|
60
|
-
"""
|
|
58
|
+
"""Compress the tiff images to comply with clarifai grpc image encoding limit(<20MB) Uses ADOBE_DEFLATE compression algorithm"""
|
|
61
59
|
all_img_ids = glob.glob(os.path.join(self.img_dir, "*.tif"))
|
|
62
60
|
|
|
63
61
|
if not os.path.exists(self.img_comp_dir):
|
|
@@ -80,7 +78,7 @@ class xviewDetectionDataset:
|
|
|
80
78
|
results.append(result)
|
|
81
79
|
|
|
82
80
|
def xview_classes2indices(self, classes: List) -> List:
|
|
83
|
-
"""
|
|
81
|
+
"""remap xview classes 11-94 to 0-59"""
|
|
84
82
|
indices = [
|
|
85
83
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, -1, 3, -1, 4, 5, 6, 7, 8, -1, 9, 10,
|
|
86
84
|
11, 12, 13, 14, 15, -1, -1, 16, 17, 18, 19, 20, 21, 22, -1, 23, 24, 25, -1, 26, 27, -1, 28,
|
|
@@ -91,13 +89,11 @@ class xviewDetectionDataset:
|
|
|
91
89
|
return [indices[int(c)] for c in classes]
|
|
92
90
|
|
|
93
91
|
def xview_indices2concepts(self, indices: List) -> List:
|
|
94
|
-
"""
|
|
92
|
+
"""remap classes to concept names"""
|
|
95
93
|
return [self.xview_concepts[i] for i in indices]
|
|
96
94
|
|
|
97
95
|
def xview_data_parser(self) -> DefaultDict[str, Dict[List, List]]:
|
|
98
|
-
"""
|
|
99
|
-
Parse geojson data into nested dict of imageid w.r.t bounding boxes, concepts
|
|
100
|
-
"""
|
|
96
|
+
"""Parse geojson data into nested dict of imageid w.r.t bounding boxes, concepts"""
|
|
101
97
|
all_data = defaultdict(lambda: dict(bboxes=[], concepts=[]))
|
|
102
98
|
|
|
103
99
|
with open(self.label_file) as f:
|
|
@@ -110,48 +106,43 @@ class xviewDetectionDataset:
|
|
|
110
106
|
xview_classid = feature['properties']['type_id']
|
|
111
107
|
bbox = list(map(int, feature['properties']['bounds_imcoords'].split(",")))
|
|
112
108
|
concept = self.xview_indices2concepts(self.xview_classes2indices([xview_classid]))
|
|
113
|
-
geo_loc = feature['geometry']['coordinates'] # Long,Lat
|
|
114
109
|
|
|
115
110
|
all_data[image_id]['bboxes'].append(bbox)
|
|
116
111
|
all_data[image_id]['concepts'].append(concept[0])
|
|
117
112
|
|
|
118
113
|
return all_data
|
|
119
114
|
|
|
120
|
-
def
|
|
115
|
+
def load_data(self):
|
|
116
|
+
"""Load image paths"""
|
|
117
|
+
self.image_paths = []
|
|
118
|
+
all_img_ids = glob.glob(os.path.join(self.img_comp_dir, "*.tif"))
|
|
119
|
+
self.image_paths = all_img_ids
|
|
120
|
+
|
|
121
|
+
def __len__(self):
|
|
122
|
+
return len(self.image_paths)
|
|
123
|
+
|
|
124
|
+
def __getitem__(self, index: int):
|
|
125
|
+
"""Get dataset for a given index.
|
|
126
|
+
Returns:
|
|
127
|
+
VisualDetectionFeature type.
|
|
121
128
|
"""
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
129
|
+
_id = os.path.splitext(os.path.basename(self.image_paths[index]))[0]
|
|
130
|
+
image_path = self.image_paths[index]
|
|
131
|
+
|
|
132
|
+
image_height, image_width = cv2.imread(image_path).shape[:2]
|
|
133
|
+
annots = []
|
|
134
|
+
class_names = []
|
|
135
|
+
for bbox, concept in zip(self.all_data[_id]['bboxes'], self.all_data[_id]['concepts']):
|
|
136
|
+
x_min = max(min(bbox[0] / image_width, 1.0), 0.0) #left_col
|
|
137
|
+
y_min = max(min(bbox[1] / image_height, 1.0), 0.0) #top_row
|
|
138
|
+
x_max = max(min(bbox[2] / image_width, 1.0), 0.0) #right_col
|
|
139
|
+
y_max = max(min(bbox[3] / image_height, 1.0), 0.0) #bottom_row
|
|
140
|
+
if (x_min >= x_max) or (y_min >= y_max):
|
|
134
141
|
continue
|
|
142
|
+
annots.append([x for x in [x_min, y_min, x_max, y_max]])
|
|
143
|
+
class_names.append(concept)
|
|
135
144
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
continue
|
|
145
|
+
assert len(class_names) == len(annots), f"Num classes must match num bbox annotations\
|
|
146
|
+
for a single image. Found {len(class_names)} classes and {len(annots)} bboxes."
|
|
139
147
|
|
|
140
|
-
|
|
141
|
-
annots = []
|
|
142
|
-
class_names = []
|
|
143
|
-
for bbox, concept in zip(self.all_data[_id]['bboxes'][:self.max_annotations_per_img],
|
|
144
|
-
self.all_data[_id]['concepts'][:self.max_annotations_per_img]):
|
|
145
|
-
x_min = max(min(bbox[0] / image_width, 1.0), 0.0) #left_col
|
|
146
|
-
y_min = max(min(bbox[1] / image_height, 1.0), 0.0) #top_row
|
|
147
|
-
x_max = max(min(bbox[2] / image_width, 1.0), 0.0) #right_col
|
|
148
|
-
y_max = max(min(bbox[3] / image_height, 1.0), 0.0) #bottom_row
|
|
149
|
-
if (x_min >= x_max) or (y_min >= y_max):
|
|
150
|
-
continue
|
|
151
|
-
annots.append([round(x, 3) for x in [x_min, y_min, x_max, y_max]])
|
|
152
|
-
class_names.append(concept)
|
|
153
|
-
|
|
154
|
-
assert len(class_names) == len(annots), f"Num classes must match num bbox annotations\
|
|
155
|
-
for a single image. Found {len(class_names)} classes and {len(annots)} bboxes."
|
|
156
|
-
|
|
157
|
-
yield VisualDetectionFeatures(image_path, class_names, annots, id=_id)
|
|
148
|
+
return VisualDetectionFeatures(image_path, class_names, annots, id=_id)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
from concurrent.futures import ThreadPoolExecutor
|
|
2
|
+
from typing import Iterator, List, Tuple
|
|
3
|
+
|
|
4
|
+
from clarifai_grpc.grpc.api import resources_pb2
|
|
5
|
+
from google.protobuf.struct_pb2 import Struct
|
|
6
|
+
|
|
7
|
+
from .base import ClarifaiDataset
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class TextClassificationDataset(ClarifaiDataset):
|
|
11
|
+
"""Upload text classification datasets to clarifai datasets"""
|
|
12
|
+
|
|
13
|
+
def __init__(self, datagen_object: Iterator, dataset_id: str, split: str) -> None:
|
|
14
|
+
super().__init__(datagen_object, dataset_id, split)
|
|
15
|
+
|
|
16
|
+
def _extract_protos(self, batch_input_ids: List[int]
|
|
17
|
+
) -> Tuple[List[resources_pb2.Input], List[resources_pb2.Annotation]]:
|
|
18
|
+
"""Create input image and annotation protos for batch of input ids.
|
|
19
|
+
Args:
|
|
20
|
+
batch_input_ids: List of input IDs to retrieve the protos for.
|
|
21
|
+
Returns:
|
|
22
|
+
input_protos: List of input protos.
|
|
23
|
+
annotation_protos: List of annotation protos.
|
|
24
|
+
"""
|
|
25
|
+
input_protos, annotation_protos = [], []
|
|
26
|
+
|
|
27
|
+
def process_datagen_item(id):
|
|
28
|
+
datagen_item = self.datagen_object[id]
|
|
29
|
+
metadata = Struct()
|
|
30
|
+
text = datagen_item.text
|
|
31
|
+
labels = datagen_item.labels if isinstance(
|
|
32
|
+
datagen_item.labels, list) else [datagen_item.labels] # clarifai concept
|
|
33
|
+
input_id = f"{self.dataset_id}-{self.split}-{id}" if datagen_item.id is None else f"{self.split}-{str(datagen_item.id)}"
|
|
34
|
+
metadata.update({"split": self.split})
|
|
35
|
+
|
|
36
|
+
self.all_input_ids[id] = input_id
|
|
37
|
+
input_protos.append(
|
|
38
|
+
self.input_object.get_text_input(
|
|
39
|
+
input_id=input_id,
|
|
40
|
+
raw_text=text,
|
|
41
|
+
dataset_id=self.dataset_id,
|
|
42
|
+
labels=labels,
|
|
43
|
+
metadata=metadata))
|
|
44
|
+
|
|
45
|
+
with ThreadPoolExecutor(max_workers=4) as executor:
|
|
46
|
+
futures = [executor.submit(process_datagen_item, id) for id in batch_input_ids]
|
|
47
|
+
for job in futures:
|
|
48
|
+
job.result()
|
|
49
|
+
|
|
50
|
+
return input_protos, annotation_protos
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import importlib
|
|
2
|
+
import inspect
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
5
|
+
from typing import Union
|
|
6
|
+
|
|
7
|
+
from .base import ClarifaiDataLoader
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def load_module_dataloader(module_dir: Union[str, os.PathLike], split: str) -> ClarifaiDataLoader:
|
|
11
|
+
"""Validate and import dataset module data generator.
|
|
12
|
+
Args:
|
|
13
|
+
`module_dir`: relative path to the module directory
|
|
14
|
+
The directory must contain a `dataset.py` script and the data itself.
|
|
15
|
+
`split`: "train" or "val"/"test" dataset split
|
|
16
|
+
Module Directory Structure:
|
|
17
|
+
---------------------------
|
|
18
|
+
<folder_name>/
|
|
19
|
+
├──__init__.py
|
|
20
|
+
├──<Your local dir dataset>/
|
|
21
|
+
└──dataset.py
|
|
22
|
+
dataset.py must implement a class named following the convention,
|
|
23
|
+
<dataset_name>Dataset and this class must have a dataloader()
|
|
24
|
+
generator method
|
|
25
|
+
"""
|
|
26
|
+
sys.path.append(str(module_dir))
|
|
27
|
+
|
|
28
|
+
if not os.path.exists(os.path.join(module_dir, "__init__.py")):
|
|
29
|
+
with open(os.path.join(module_dir, "__init__.py"), "w"):
|
|
30
|
+
pass
|
|
31
|
+
|
|
32
|
+
import dataset # dataset module
|
|
33
|
+
|
|
34
|
+
# get main module class
|
|
35
|
+
main_module_cls = None
|
|
36
|
+
for name, obj in dataset.__dict__.items():
|
|
37
|
+
if inspect.isclass(obj) and "DataLoader" in name:
|
|
38
|
+
main_module_cls = obj
|
|
39
|
+
else:
|
|
40
|
+
continue
|
|
41
|
+
|
|
42
|
+
return main_module_cls(split)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def load_dataloader(name: str, split: str) -> ClarifaiDataLoader:
|
|
46
|
+
"""Get dataset generator object from dataset loaders.
|
|
47
|
+
Args:
|
|
48
|
+
`name`: dataset module name in datasets/upload/loaders/.
|
|
49
|
+
`split`: "train" or "val"/"test" dataset split
|
|
50
|
+
Returns:
|
|
51
|
+
Data generator object
|
|
52
|
+
"""
|
|
53
|
+
loader_dataset = importlib.import_module(f"clarifai.datasets.upload.loaders.{name}")
|
|
54
|
+
# get main module class
|
|
55
|
+
main_module_cls = None
|
|
56
|
+
for name, obj in loader_dataset.__dict__.items():
|
|
57
|
+
if inspect.isclass(obj) and "DataLoader" in name:
|
|
58
|
+
main_module_cls = obj
|
|
59
|
+
else:
|
|
60
|
+
continue
|
|
61
|
+
|
|
62
|
+
return main_module_cls(split)
|