clarifai 9.7.1__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.
Files changed (336) hide show
  1. clarifai/auth/__init__.py +6 -0
  2. clarifai/auth/helper.py +35 -36
  3. clarifai/auth/register.py +23 -0
  4. clarifai/{client → auth}/stub.py +10 -10
  5. clarifai/client/__init__.py +1 -4
  6. clarifai/client/app.py +483 -0
  7. clarifai/client/auth/__init__.py +4 -0
  8. clarifai/client/{abc.py → auth/abc.py} +2 -2
  9. clarifai/client/auth/helper.py +377 -0
  10. clarifai/client/auth/register.py +23 -0
  11. {clarifai_utils/client → clarifai/client/auth}/stub.py +10 -10
  12. clarifai/client/base.py +112 -0
  13. clarifai/client/dataset.py +290 -0
  14. clarifai/client/input.py +730 -0
  15. clarifai/client/lister.py +41 -0
  16. clarifai/client/model.py +218 -0
  17. clarifai/client/module.py +82 -0
  18. clarifai/client/user.py +125 -0
  19. clarifai/client/workflow.py +194 -0
  20. clarifai/datasets/upload/base.py +66 -0
  21. clarifai/datasets/upload/examples/README.md +31 -0
  22. clarifai/datasets/upload/examples/image_classification/cifar10/dataset.py +42 -0
  23. clarifai/datasets/upload/examples/image_classification/food-101/dataset.py +39 -0
  24. clarifai/datasets/upload/examples/text_classification/imdb_dataset/dataset.py +37 -0
  25. clarifai/{data_upload/datasets → datasets/upload}/features.py +4 -12
  26. clarifai/datasets/upload/image.py +156 -0
  27. clarifai/datasets/upload/loaders/README.md +49 -0
  28. clarifai/{data_upload/datasets/zoo → datasets/upload/loaders}/coco_captions.py +24 -21
  29. {clarifai_utils/data_upload/datasets/zoo → clarifai/datasets/upload/loaders}/coco_detection.py +46 -42
  30. clarifai/datasets/upload/loaders/coco_segmentation.py +166 -0
  31. clarifai/{data_upload/datasets/zoo → datasets/upload/loaders}/imagenet_classification.py +22 -12
  32. clarifai/{data_upload/datasets/zoo → datasets/upload/loaders}/xview_detection.py +44 -53
  33. clarifai/datasets/upload/text.py +50 -0
  34. clarifai/datasets/upload/utils.py +62 -0
  35. clarifai/errors.py +90 -0
  36. clarifai/urls/helper.py +16 -17
  37. clarifai/utils/logging.py +40 -0
  38. clarifai/utils/misc.py +33 -0
  39. clarifai/versions.py +6 -0
  40. {clarifai-9.7.1.dist-info → clarifai-9.7.2.dist-info}/LICENSE +1 -1
  41. clarifai-9.7.2.dist-info/METADATA +179 -0
  42. clarifai-9.7.2.dist-info/RECORD +350 -0
  43. clarifai_utils/auth/__init__.py +6 -0
  44. clarifai_utils/auth/helper.py +35 -36
  45. clarifai_utils/auth/register.py +23 -0
  46. clarifai_utils/auth/stub.py +127 -0
  47. clarifai_utils/client/__init__.py +1 -4
  48. clarifai_utils/client/app.py +483 -0
  49. clarifai_utils/client/auth/__init__.py +4 -0
  50. clarifai_utils/client/{abc.py → auth/abc.py} +2 -2
  51. clarifai_utils/client/auth/helper.py +377 -0
  52. clarifai_utils/client/auth/register.py +23 -0
  53. clarifai_utils/client/auth/stub.py +127 -0
  54. clarifai_utils/client/base.py +112 -0
  55. clarifai_utils/client/dataset.py +290 -0
  56. clarifai_utils/client/input.py +730 -0
  57. clarifai_utils/client/lister.py +41 -0
  58. clarifai_utils/client/model.py +218 -0
  59. clarifai_utils/client/module.py +82 -0
  60. clarifai_utils/client/user.py +125 -0
  61. clarifai_utils/client/workflow.py +194 -0
  62. clarifai_utils/datasets/upload/base.py +66 -0
  63. clarifai_utils/datasets/upload/examples/README.md +31 -0
  64. clarifai_utils/datasets/upload/examples/image_classification/cifar10/dataset.py +42 -0
  65. clarifai_utils/datasets/upload/examples/image_classification/food-101/dataset.py +39 -0
  66. clarifai_utils/datasets/upload/examples/text_classification/imdb_dataset/dataset.py +37 -0
  67. clarifai_utils/{data_upload/datasets → datasets/upload}/features.py +4 -12
  68. clarifai_utils/datasets/upload/image.py +156 -0
  69. clarifai_utils/datasets/upload/loaders/README.md +49 -0
  70. clarifai_utils/{data_upload/datasets/zoo → datasets/upload/loaders}/coco_captions.py +24 -21
  71. {clarifai/data_upload/datasets/zoo → clarifai_utils/datasets/upload/loaders}/coco_detection.py +46 -42
  72. clarifai_utils/datasets/upload/loaders/coco_segmentation.py +166 -0
  73. clarifai_utils/{data_upload/datasets/zoo → datasets/upload/loaders}/imagenet_classification.py +22 -12
  74. clarifai_utils/{data_upload/datasets/zoo → datasets/upload/loaders}/xview_detection.py +44 -53
  75. clarifai_utils/datasets/upload/text.py +50 -0
  76. clarifai_utils/datasets/upload/utils.py +62 -0
  77. clarifai_utils/errors.py +90 -0
  78. clarifai_utils/urls/helper.py +16 -17
  79. clarifai_utils/utils/logging.py +40 -0
  80. clarifai_utils/utils/misc.py +33 -0
  81. clarifai_utils/versions.py +6 -0
  82. clarifai/data_upload/README.md +0 -63
  83. clarifai/data_upload/convert_csv.py +0 -182
  84. clarifai/data_upload/datasets/base.py +0 -87
  85. clarifai/data_upload/datasets/image.py +0 -253
  86. clarifai/data_upload/datasets/text.py +0 -60
  87. clarifai/data_upload/datasets/zoo/README.md +0 -55
  88. clarifai/data_upload/datasets/zoo/coco_segmentation.py +0 -160
  89. clarifai/data_upload/examples/README.md +0 -5
  90. clarifai/data_upload/examples/image_classification/cifar10/dataset.py +0 -40
  91. clarifai/data_upload/examples/image_classification/food-101/dataset.py +0 -39
  92. clarifai/data_upload/examples/image_classification/food-101/images/beignets/1036242.jpg +0 -0
  93. clarifai/data_upload/examples/image_classification/food-101/images/beignets/1114182.jpg +0 -0
  94. clarifai/data_upload/examples/image_classification/food-101/images/beignets/2012944.jpg +0 -0
  95. clarifai/data_upload/examples/image_classification/food-101/images/beignets/2464389.jpg +0 -0
  96. clarifai/data_upload/examples/image_classification/food-101/images/beignets/478632.jpg +0 -0
  97. clarifai/data_upload/examples/image_classification/food-101/images/hamburger/1061270.jpg +0 -0
  98. clarifai/data_upload/examples/image_classification/food-101/images/hamburger/1202261.jpg +0 -0
  99. clarifai/data_upload/examples/image_classification/food-101/images/hamburger/1381751.jpg +0 -0
  100. clarifai/data_upload/examples/image_classification/food-101/images/hamburger/3289634.jpg +0 -0
  101. clarifai/data_upload/examples/image_classification/food-101/images/hamburger/862025.jpg +0 -0
  102. clarifai/data_upload/examples/image_classification/food-101/images/prime_rib/102197.jpg +0 -0
  103. clarifai/data_upload/examples/image_classification/food-101/images/prime_rib/2749372.jpg +0 -0
  104. clarifai/data_upload/examples/image_classification/food-101/images/prime_rib/2938268.jpg +0 -0
  105. clarifai/data_upload/examples/image_classification/food-101/images/prime_rib/3590861.jpg +0 -0
  106. clarifai/data_upload/examples/image_classification/food-101/images/prime_rib/746716.jpg +0 -0
  107. clarifai/data_upload/examples/image_classification/food-101/images/ramen/2955110.jpg +0 -0
  108. clarifai/data_upload/examples/image_classification/food-101/images/ramen/3208966.jpg +0 -0
  109. clarifai/data_upload/examples/image_classification/food-101/images/ramen/3270629.jpg +0 -0
  110. clarifai/data_upload/examples/image_classification/food-101/images/ramen/3424562.jpg +0 -0
  111. clarifai/data_upload/examples/image_classification/food-101/images/ramen/544680.jpg +0 -0
  112. clarifai/data_upload/examples/image_detection/voc/annotations/2007_000464.xml +0 -39
  113. clarifai/data_upload/examples/image_detection/voc/annotations/2008_000853.xml +0 -28
  114. clarifai/data_upload/examples/image_detection/voc/annotations/2008_003182.xml +0 -54
  115. clarifai/data_upload/examples/image_detection/voc/annotations/2008_008526.xml +0 -67
  116. clarifai/data_upload/examples/image_detection/voc/annotations/2009_004315.xml +0 -28
  117. clarifai/data_upload/examples/image_detection/voc/annotations/2009_004382.xml +0 -28
  118. clarifai/data_upload/examples/image_detection/voc/annotations/2011_000430.xml +0 -28
  119. clarifai/data_upload/examples/image_detection/voc/annotations/2011_001610.xml +0 -46
  120. clarifai/data_upload/examples/image_detection/voc/annotations/2011_006412.xml +0 -99
  121. clarifai/data_upload/examples/image_detection/voc/annotations/2012_000690.xml +0 -43
  122. clarifai/data_upload/examples/image_detection/voc/dataset.py +0 -76
  123. clarifai/data_upload/examples/image_detection/voc/images/2007_000464.jpg +0 -0
  124. clarifai/data_upload/examples/image_detection/voc/images/2008_000853.jpg +0 -0
  125. clarifai/data_upload/examples/image_detection/voc/images/2008_003182.jpg +0 -0
  126. clarifai/data_upload/examples/image_detection/voc/images/2008_008526.jpg +0 -0
  127. clarifai/data_upload/examples/image_detection/voc/images/2009_004315.jpg +0 -0
  128. clarifai/data_upload/examples/image_detection/voc/images/2009_004382.jpg +0 -0
  129. clarifai/data_upload/examples/image_detection/voc/images/2011_000430.jpg +0 -0
  130. clarifai/data_upload/examples/image_detection/voc/images/2011_001610.jpg +0 -0
  131. clarifai/data_upload/examples/image_detection/voc/images/2011_006412.jpg +0 -0
  132. clarifai/data_upload/examples/image_detection/voc/images/2012_000690.jpg +0 -0
  133. clarifai/data_upload/examples/image_segmentation/coco/annotations/instances_val2017_subset.json +0 -5342
  134. clarifai/data_upload/examples/image_segmentation/coco/dataset.py +0 -107
  135. clarifai/data_upload/examples/image_segmentation/coco/images/000000074646.jpg +0 -0
  136. clarifai/data_upload/examples/image_segmentation/coco/images/000000086956.jpg +0 -0
  137. clarifai/data_upload/examples/image_segmentation/coco/images/000000166563.jpg +0 -0
  138. clarifai/data_upload/examples/image_segmentation/coco/images/000000176857.jpg +0 -0
  139. clarifai/data_upload/examples/image_segmentation/coco/images/000000182202.jpg +0 -0
  140. clarifai/data_upload/examples/image_segmentation/coco/images/000000193245.jpg +0 -0
  141. clarifai/data_upload/examples/image_segmentation/coco/images/000000384850.jpg +0 -0
  142. clarifai/data_upload/examples/image_segmentation/coco/images/000000409630.jpg +0 -0
  143. clarifai/data_upload/examples/image_segmentation/coco/images/000000424349.jpg +0 -0
  144. clarifai/data_upload/examples/image_segmentation/coco/images/000000573008.jpg +0 -0
  145. clarifai/data_upload/examples/text_classification/imdb_dataset/dataset.py +0 -40
  146. clarifai/data_upload/examples.py +0 -17
  147. clarifai/data_upload/upload.py +0 -356
  148. clarifai/dataset_export/dataset_export_inputs.py +0 -205
  149. clarifai/listing/concepts.py +0 -37
  150. clarifai/listing/datasets.py +0 -37
  151. clarifai/listing/inputs.py +0 -111
  152. clarifai/listing/installed_module_versions.py +0 -40
  153. clarifai/listing/lister.py +0 -200
  154. clarifai/listing/models.py +0 -46
  155. clarifai/listing/module_versions.py +0 -42
  156. clarifai/listing/modules.py +0 -36
  157. clarifai/runners/base.py +0 -140
  158. clarifai/runners/example.py +0 -36
  159. clarifai-9.7.1.dist-info/METADATA +0 -99
  160. clarifai-9.7.1.dist-info/RECORD +0 -456
  161. clarifai_utils/data_upload/README.md +0 -63
  162. clarifai_utils/data_upload/convert_csv.py +0 -182
  163. clarifai_utils/data_upload/datasets/base.py +0 -87
  164. clarifai_utils/data_upload/datasets/image.py +0 -253
  165. clarifai_utils/data_upload/datasets/text.py +0 -60
  166. clarifai_utils/data_upload/datasets/zoo/README.md +0 -55
  167. clarifai_utils/data_upload/datasets/zoo/coco_segmentation.py +0 -160
  168. clarifai_utils/data_upload/examples/README.md +0 -5
  169. clarifai_utils/data_upload/examples/image_classification/cifar10/dataset.py +0 -40
  170. clarifai_utils/data_upload/examples/image_classification/food-101/dataset.py +0 -39
  171. clarifai_utils/data_upload/examples/image_classification/food-101/images/beignets/1036242.jpg +0 -0
  172. clarifai_utils/data_upload/examples/image_classification/food-101/images/beignets/1114182.jpg +0 -0
  173. clarifai_utils/data_upload/examples/image_classification/food-101/images/beignets/2012944.jpg +0 -0
  174. clarifai_utils/data_upload/examples/image_classification/food-101/images/beignets/2464389.jpg +0 -0
  175. clarifai_utils/data_upload/examples/image_classification/food-101/images/beignets/478632.jpg +0 -0
  176. clarifai_utils/data_upload/examples/image_classification/food-101/images/hamburger/1061270.jpg +0 -0
  177. clarifai_utils/data_upload/examples/image_classification/food-101/images/hamburger/1202261.jpg +0 -0
  178. clarifai_utils/data_upload/examples/image_classification/food-101/images/hamburger/1381751.jpg +0 -0
  179. clarifai_utils/data_upload/examples/image_classification/food-101/images/hamburger/3289634.jpg +0 -0
  180. clarifai_utils/data_upload/examples/image_classification/food-101/images/hamburger/862025.jpg +0 -0
  181. clarifai_utils/data_upload/examples/image_classification/food-101/images/prime_rib/102197.jpg +0 -0
  182. clarifai_utils/data_upload/examples/image_classification/food-101/images/prime_rib/2749372.jpg +0 -0
  183. clarifai_utils/data_upload/examples/image_classification/food-101/images/prime_rib/2938268.jpg +0 -0
  184. clarifai_utils/data_upload/examples/image_classification/food-101/images/prime_rib/3590861.jpg +0 -0
  185. clarifai_utils/data_upload/examples/image_classification/food-101/images/prime_rib/746716.jpg +0 -0
  186. clarifai_utils/data_upload/examples/image_classification/food-101/images/ramen/2955110.jpg +0 -0
  187. clarifai_utils/data_upload/examples/image_classification/food-101/images/ramen/3208966.jpg +0 -0
  188. clarifai_utils/data_upload/examples/image_classification/food-101/images/ramen/3270629.jpg +0 -0
  189. clarifai_utils/data_upload/examples/image_classification/food-101/images/ramen/3424562.jpg +0 -0
  190. clarifai_utils/data_upload/examples/image_classification/food-101/images/ramen/544680.jpg +0 -0
  191. clarifai_utils/data_upload/examples/image_detection/__init__.py +0 -0
  192. clarifai_utils/data_upload/examples/image_detection/voc/__init__.py +0 -0
  193. clarifai_utils/data_upload/examples/image_detection/voc/annotations/2007_000464.xml +0 -39
  194. clarifai_utils/data_upload/examples/image_detection/voc/annotations/2008_000853.xml +0 -28
  195. clarifai_utils/data_upload/examples/image_detection/voc/annotations/2008_003182.xml +0 -54
  196. clarifai_utils/data_upload/examples/image_detection/voc/annotations/2008_008526.xml +0 -67
  197. clarifai_utils/data_upload/examples/image_detection/voc/annotations/2009_004315.xml +0 -28
  198. clarifai_utils/data_upload/examples/image_detection/voc/annotations/2009_004382.xml +0 -28
  199. clarifai_utils/data_upload/examples/image_detection/voc/annotations/2011_000430.xml +0 -28
  200. clarifai_utils/data_upload/examples/image_detection/voc/annotations/2011_001610.xml +0 -46
  201. clarifai_utils/data_upload/examples/image_detection/voc/annotations/2011_006412.xml +0 -99
  202. clarifai_utils/data_upload/examples/image_detection/voc/annotations/2012_000690.xml +0 -43
  203. clarifai_utils/data_upload/examples/image_detection/voc/dataset.py +0 -76
  204. clarifai_utils/data_upload/examples/image_detection/voc/images/2007_000464.jpg +0 -0
  205. clarifai_utils/data_upload/examples/image_detection/voc/images/2008_000853.jpg +0 -0
  206. clarifai_utils/data_upload/examples/image_detection/voc/images/2008_003182.jpg +0 -0
  207. clarifai_utils/data_upload/examples/image_detection/voc/images/2008_008526.jpg +0 -0
  208. clarifai_utils/data_upload/examples/image_detection/voc/images/2009_004315.jpg +0 -0
  209. clarifai_utils/data_upload/examples/image_detection/voc/images/2009_004382.jpg +0 -0
  210. clarifai_utils/data_upload/examples/image_detection/voc/images/2011_000430.jpg +0 -0
  211. clarifai_utils/data_upload/examples/image_detection/voc/images/2011_001610.jpg +0 -0
  212. clarifai_utils/data_upload/examples/image_detection/voc/images/2011_006412.jpg +0 -0
  213. clarifai_utils/data_upload/examples/image_detection/voc/images/2012_000690.jpg +0 -0
  214. clarifai_utils/data_upload/examples/image_segmentation/__init__.py +0 -0
  215. clarifai_utils/data_upload/examples/image_segmentation/coco/__init__.py +0 -0
  216. clarifai_utils/data_upload/examples/image_segmentation/coco/annotations/instances_val2017_subset.json +0 -5342
  217. clarifai_utils/data_upload/examples/image_segmentation/coco/dataset.py +0 -107
  218. clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000074646.jpg +0 -0
  219. clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000086956.jpg +0 -0
  220. clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000166563.jpg +0 -0
  221. clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000176857.jpg +0 -0
  222. clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000182202.jpg +0 -0
  223. clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000193245.jpg +0 -0
  224. clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000384850.jpg +0 -0
  225. clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000409630.jpg +0 -0
  226. clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000424349.jpg +0 -0
  227. clarifai_utils/data_upload/examples/image_segmentation/coco/images/000000573008.jpg +0 -0
  228. clarifai_utils/data_upload/examples/text_classification/__init__.py +0 -0
  229. clarifai_utils/data_upload/examples/text_classification/imdb_dataset/__init__.py +0 -0
  230. clarifai_utils/data_upload/examples/text_classification/imdb_dataset/dataset.py +0 -40
  231. clarifai_utils/data_upload/examples.py +0 -17
  232. clarifai_utils/data_upload/upload.py +0 -356
  233. clarifai_utils/dataset_export/dataset_export_inputs.py +0 -205
  234. clarifai_utils/listing/__init__.py +0 -0
  235. clarifai_utils/listing/concepts.py +0 -37
  236. clarifai_utils/listing/datasets.py +0 -37
  237. clarifai_utils/listing/inputs.py +0 -111
  238. clarifai_utils/listing/installed_module_versions.py +0 -40
  239. clarifai_utils/listing/lister.py +0 -200
  240. clarifai_utils/listing/models.py +0 -46
  241. clarifai_utils/listing/module_versions.py +0 -42
  242. clarifai_utils/listing/modules.py +0 -36
  243. clarifai_utils/runners/__init__.py +0 -0
  244. clarifai_utils/runners/base.py +0 -140
  245. clarifai_utils/runners/example.py +0 -36
  246. /clarifai/{data_upload/__init__.py → cli.py} +0 -0
  247. /clarifai/{data_upload/datasets → datasets}/__init__.py +0 -0
  248. /clarifai/{data_upload/datasets/zoo → datasets/upload}/__init__.py +0 -0
  249. /clarifai/{data_upload → datasets/upload}/examples/image_classification/__init__.py +0 -0
  250. /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/__init__.py +0 -0
  251. /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/cifar_small_test.csv +0 -0
  252. /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/cifar_small_train.csv +0 -0
  253. /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_700.jpg +0 -0
  254. /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_701.jpg +0 -0
  255. /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_702.jpg +0 -0
  256. /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_703.jpg +0 -0
  257. /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_704.jpg +0 -0
  258. /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_705.jpg +0 -0
  259. /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_706.jpg +0 -0
  260. /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_707.jpg +0 -0
  261. /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_708.jpg +0 -0
  262. /clarifai/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_709.jpg +0 -0
  263. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/__init__.py +0 -0
  264. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/1420783.jpg +0 -0
  265. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/3287885.jpg +0 -0
  266. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/3617075.jpg +0 -0
  267. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/38052.jpg +0 -0
  268. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/39147.jpg +0 -0
  269. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/139558.jpg +0 -0
  270. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/1636096.jpg +0 -0
  271. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/2480925.jpg +0 -0
  272. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/3385808.jpg +0 -0
  273. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/3647386.jpg +0 -0
  274. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/1826869.jpg +0 -0
  275. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/2243245.jpg +0 -0
  276. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/259212.jpg +0 -0
  277. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/2842688.jpg +0 -0
  278. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/3035414.jpg +0 -0
  279. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/1545393.jpg +0 -0
  280. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/2427642.jpg +0 -0
  281. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/3520891.jpg +0 -0
  282. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/377566.jpg +0 -0
  283. /clarifai/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/503504.jpg +0 -0
  284. /clarifai/{data_upload/examples/image_detection → datasets/upload/examples/text_classification}/__init__.py +0 -0
  285. /clarifai/{data_upload/examples/image_detection/voc → datasets/upload/examples/text_classification/imdb_dataset}/__init__.py +0 -0
  286. /clarifai/{data_upload → datasets/upload}/examples/text_classification/imdb_dataset/test.csv +0 -0
  287. /clarifai/{data_upload → datasets/upload}/examples/text_classification/imdb_dataset/train.csv +0 -0
  288. /clarifai/{data_upload/examples/image_segmentation → datasets/upload/loaders}/__init__.py +0 -0
  289. /clarifai/{data_upload/examples/image_segmentation/coco → utils}/__init__.py +0 -0
  290. {clarifai-9.7.1.dist-info → clarifai-9.7.2.dist-info}/WHEEL +0 -0
  291. {clarifai-9.7.1.dist-info → clarifai-9.7.2.dist-info}/entry_points.txt +0 -0
  292. {clarifai-9.7.1.dist-info → clarifai-9.7.2.dist-info}/top_level.txt +0 -0
  293. /clarifai/data_upload/examples/text_classification/__init__.py → /clarifai_utils/cli.py +0 -0
  294. {clarifai/data_upload/examples/text_classification/imdb_dataset → clarifai_utils/datasets}/__init__.py +0 -0
  295. {clarifai/listing → clarifai_utils/datasets/upload}/__init__.py +0 -0
  296. {clarifai/runners → clarifai_utils/datasets/upload/examples/image_classification}/__init__.py +0 -0
  297. /clarifai_utils/{data_upload → datasets/upload/examples/image_classification/cifar10}/__init__.py +0 -0
  298. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/cifar_small_test.csv +0 -0
  299. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/cifar_small_train.csv +0 -0
  300. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_700.jpg +0 -0
  301. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_701.jpg +0 -0
  302. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_702.jpg +0 -0
  303. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_703.jpg +0 -0
  304. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_704.jpg +0 -0
  305. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_705.jpg +0 -0
  306. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_706.jpg +0 -0
  307. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_707.jpg +0 -0
  308. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_708.jpg +0 -0
  309. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/cifar10/images/test_batch_709.jpg +0 -0
  310. /clarifai_utils/{data_upload/datasets → datasets/upload/examples/image_classification/food-101}/__init__.py +0 -0
  311. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/1420783.jpg +0 -0
  312. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/3287885.jpg +0 -0
  313. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/3617075.jpg +0 -0
  314. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/38052.jpg +0 -0
  315. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/beignets/39147.jpg +0 -0
  316. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/139558.jpg +0 -0
  317. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/1636096.jpg +0 -0
  318. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/2480925.jpg +0 -0
  319. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/3385808.jpg +0 -0
  320. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/hamburger/3647386.jpg +0 -0
  321. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/1826869.jpg +0 -0
  322. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/2243245.jpg +0 -0
  323. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/259212.jpg +0 -0
  324. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/2842688.jpg +0 -0
  325. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/prime_rib/3035414.jpg +0 -0
  326. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/1545393.jpg +0 -0
  327. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/2427642.jpg +0 -0
  328. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/3520891.jpg +0 -0
  329. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/377566.jpg +0 -0
  330. /clarifai_utils/{data_upload → datasets/upload}/examples/image_classification/food-101/images/ramen/503504.jpg +0 -0
  331. /clarifai_utils/{data_upload/datasets/zoo → datasets/upload/examples/text_classification}/__init__.py +0 -0
  332. /clarifai_utils/{data_upload/examples/image_classification → datasets/upload/examples/text_classification/imdb_dataset}/__init__.py +0 -0
  333. /clarifai_utils/{data_upload → datasets/upload}/examples/text_classification/imdb_dataset/test.csv +0 -0
  334. /clarifai_utils/{data_upload → datasets/upload}/examples/text_classification/imdb_dataset/train.csv +0 -0
  335. /clarifai_utils/{data_upload/examples/image_classification/cifar10 → datasets/upload/loaders}/__init__.py +0 -0
  336. /clarifai_utils/{data_upload/examples/image_classification/food-101 → utils}/__init__.py +0 -0
@@ -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 COCODetectionDataset:
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.curdir, "data") # data storage directory
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 dataloader(self):
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
- #get annotations for each image id
106
- for _id in set(img_ids):
107
- annots = [] # bboxes
108
- class_names = []
109
- labels = [i for i in list(filter(lambda x: _id in cat_img_ids[x], cat_img_ids))]
110
- image_path = glob(self.extracted_coco_dirs[self.split]+"/"+\
111
- f"{str(_id).zfill(12)}*")[0]
112
-
113
- image_height, image_width = cv2.imread(image_path).shape[:2]
114
- for cat_id in labels:
115
- annot_ids = coco.getAnnIds(imgIds=_id, catIds=[cat_id])
116
- if len(annot_ids) > 0:
117
- img_annotations = coco.loadAnns(annot_ids)
118
- for ann in img_annotations:
119
- class_names.append(cat_id_map[cat_id])
120
- x_min = ann['bbox'][0] / image_width #left_col
121
- y_min = ann['bbox'][1] / image_height #top_row
122
- x_max = (ann['bbox'][0] + ann['bbox'][2]) / image_width #right_col
123
- y_max = (ann['bbox'][1] + ann['bbox'][3]) / image_height #bottom_row
124
- annots.append([x_min, y_min, x_max, y_max])
125
- else: # if no annotations for given image_id-cat_id pair
126
- continue
127
- assert len(class_names) == len(annots), f"Num classes must match num bbox annotations\
128
- for a single image. Found {len(class_names)} classes and {len(annots)} bboxes."
129
-
130
- yield VisualDetectionFeatures(image_path, class_names, annots, id=_id)
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))
@@ -2,10 +2,11 @@
2
2
 
3
3
  import os
4
4
 
5
- from clarifai.data_upload.datasets.features import VisualClassificationFeatures
5
+ from clarifai.datasets.upload.base import ClarifaiDataLoader
6
+ from ..features import VisualClassificationFeatures
6
7
 
7
8
 
8
- class ImageNetDataset:
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.curdir, "data") # data storage directory
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
- def dataloader(self):
23
- """
24
- Transform text data into clarifai proto compatible
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
- yield VisualClassificationFeatures(
47
- image_path=folder_path + "/" + _img, label=concept, id=None)
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 xviewDetectionDataset:
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.curdir, "data")
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
- """ remap xview classes 11-94 to 0-59 """
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
- """ remap classes to concept names """
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 dataloader(self):
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
- Transform xview object detection data into clarifai proto compatible
123
- format for upload.
124
- Returns:
125
- VisualDetectionFeatures type generator.
126
- """
127
- img_ids = list(self.all_data.keys())
128
-
129
- #get annotations for each image id
130
- for _id in img_ids:
131
- image_path = os.path.join(self.img_comp_dir, _id + ".tif")
132
- if not os.path.exists(image_path):
133
- print(f"Invalid Image path... {image_path}")
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
- image_size_MB = os.path.getsize(image_path) / 1048576 #Skip compressed image > 20MB
137
- if math.ceil(image_size_MB) > 20:
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
- image_height, image_width = cv2.imread(image_path).shape[:2]
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)