You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_datasets_coco.py 12 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. # Copyright 2020 Huawei Technologies Co., Ltd
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. #
  7. # http://www.apache.org/licenses/LICENSE-2.0
  8. #
  9. # Unless required by applicable law or agreed to in writing, software
  10. # distributed under the License is distributed on an "AS IS" BASIS,
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. # See the License for the specific language governing permissions and
  13. # limitations under the License.
  14. # ==============================================================================
  15. import numpy as np
  16. import mindspore.dataset as ds
  17. import mindspore.dataset.transforms.vision.c_transforms as vision
  18. DATA_DIR = "../data/dataset/testCOCO/train/"
  19. ANNOTATION_FILE = "../data/dataset/testCOCO/annotations/train.json"
  20. KEYPOINT_FILE = "../data/dataset/testCOCO/annotations/key_point.json"
  21. PANOPTIC_FILE = "../data/dataset/testCOCO/annotations/panoptic.json"
  22. INVALID_FILE = "../data/dataset/testCOCO/annotations/invalid.json"
  23. LACKOFIMAGE_FILE = "../data/dataset/testCOCO/annotations/lack_of_images.json"
  24. INVALID_CATEGORY_ID_FILE = "../data/dataset/testCOCO/annotations/invalid_category_id.json"
  25. def test_coco_detection():
  26. data1 = ds.CocoDataset(DATA_DIR, annotation_file=ANNOTATION_FILE, task="Detection",
  27. decode=True, shuffle=False)
  28. num_iter = 0
  29. image_shape = []
  30. bbox = []
  31. category_id = []
  32. for data in data1.create_dict_iterator():
  33. image_shape.append(data["image"].shape)
  34. bbox.append(data["bbox"])
  35. category_id.append(data["category_id"])
  36. num_iter += 1
  37. assert num_iter == 6
  38. assert image_shape[0] == (2268, 4032, 3)
  39. assert image_shape[1] == (561, 595, 3)
  40. assert image_shape[2] == (607, 585, 3)
  41. assert image_shape[3] == (642, 675, 3)
  42. assert image_shape[4] == (2268, 4032, 3)
  43. assert image_shape[5] == (2268, 4032, 3)
  44. assert np.array_equal(np.array([[10., 10., 10., 10.], [70., 70., 70., 70.]]), bbox[0])
  45. assert np.array_equal(np.array([[20., 20., 20., 20.], [80., 80., 80.0, 80.]]), bbox[1])
  46. assert np.array_equal(np.array([[30.0, 30.0, 30.0, 30.]]), bbox[2])
  47. assert np.array_equal(np.array([[40., 40., 40., 40.]]), bbox[3])
  48. assert np.array_equal(np.array([[50., 50., 50., 50.]]), bbox[4])
  49. assert np.array_equal(np.array([[60., 60., 60., 60.]]), bbox[5])
  50. assert np.array_equal(np.array([[1], [7]]), category_id[0])
  51. assert np.array_equal(np.array([[2], [8]]), category_id[1])
  52. assert np.array_equal(np.array([[3]]), category_id[2])
  53. assert np.array_equal(np.array([[4]]), category_id[3])
  54. assert np.array_equal(np.array([[5]]), category_id[4])
  55. assert np.array_equal(np.array([[6]]), category_id[5])
  56. def test_coco_stuff():
  57. data1 = ds.CocoDataset(DATA_DIR, annotation_file=ANNOTATION_FILE, task="Stuff",
  58. decode=True, shuffle=False)
  59. num_iter = 0
  60. image_shape = []
  61. segmentation = []
  62. iscrowd = []
  63. for data in data1.create_dict_iterator():
  64. image_shape.append(data["image"].shape)
  65. segmentation.append(data["segmentation"])
  66. iscrowd.append(data["iscrowd"])
  67. num_iter += 1
  68. assert num_iter == 6
  69. assert image_shape[0] == (2268, 4032, 3)
  70. assert image_shape[1] == (561, 595, 3)
  71. assert image_shape[2] == (607, 585, 3)
  72. assert image_shape[3] == (642, 675, 3)
  73. assert image_shape[4] == (2268, 4032, 3)
  74. assert image_shape[5] == (2268, 4032, 3)
  75. assert np.array_equal(np.array([[10., 12., 13., 14., 15., 16., 17., 18., 19., 20.],
  76. [70., 72., 73., 74., 75., -1., -1., -1., -1., -1.]]),
  77. segmentation[0])
  78. assert np.array_equal(np.array([[0], [0]]), iscrowd[0])
  79. assert np.array_equal(np.array([[20.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0],
  80. [10.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, -1.0]]),
  81. segmentation[1])
  82. assert np.array_equal(np.array([[0], [1]]), iscrowd[1])
  83. assert np.array_equal(np.array([[40., 42., 43., 44., 45., 46., 47., 48., 49., 40., 41., 42.]]), segmentation[2])
  84. assert np.array_equal(np.array([[0]]), iscrowd[2])
  85. assert np.array_equal(np.array([[50., 52., 53., 54., 55., 56., 57., 58., 59., 60., 61., 62., 63.]]),
  86. segmentation[3])
  87. assert np.array_equal(np.array([[0]]), iscrowd[3])
  88. assert np.array_equal(np.array([[60., 62., 63., 64., 65., 66., 67., 68., 69., 70., 71., 72., 73., 74.]]),
  89. segmentation[4])
  90. assert np.array_equal(np.array([[0]]), iscrowd[4])
  91. assert np.array_equal(np.array([[60., 62., 63., 64., 65., 66., 67.], [68., 69., 70., 71., 72., 73., 74.]]),
  92. segmentation[5])
  93. assert np.array_equal(np.array([[0]]), iscrowd[5])
  94. def test_coco_keypoint():
  95. data1 = ds.CocoDataset(DATA_DIR, annotation_file=KEYPOINT_FILE, task="Keypoint",
  96. decode=True, shuffle=False)
  97. num_iter = 0
  98. image_shape = []
  99. keypoints = []
  100. num_keypoints = []
  101. for data in data1.create_dict_iterator():
  102. image_shape.append(data["image"].shape)
  103. keypoints.append(data["keypoints"])
  104. num_keypoints.append(data["num_keypoints"])
  105. num_iter += 1
  106. assert num_iter == 2
  107. assert image_shape[0] == (2268, 4032, 3)
  108. assert image_shape[1] == (561, 595, 3)
  109. assert np.array_equal(np.array([[368., 61., 1., 369., 52., 2., 0., 0., 0., 382., 48., 2., 0., 0., 0., 368., 84., 2.,
  110. 435., 81., 2., 362., 125., 2., 446., 125., 2., 360., 153., 2., 0., 0., 0., 397.,
  111. 167., 1., 439., 166., 1., 369., 193., 2., 461., 234., 2., 361., 246., 2., 474.,
  112. 287., 2.]]), keypoints[0])
  113. assert np.array_equal(np.array([[14]]), num_keypoints[0])
  114. assert np.array_equal(np.array([[244., 139., 2., 0., 0., 0., 226., 118., 2., 0., 0., 0., 154., 159., 2., 143., 261.,
  115. 2., 135., 312., 2., 271., 423., 2., 184., 530., 2., 261., 280., 2., 347., 592., 2.,
  116. 0., 0., 0., 123., 596., 2., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]),
  117. keypoints[1])
  118. assert np.array_equal(np.array([[10]]), num_keypoints[1])
  119. def test_coco_panoptic():
  120. data1 = ds.CocoDataset(DATA_DIR, annotation_file=PANOPTIC_FILE, task="Panoptic", decode=True, shuffle=False)
  121. num_iter = 0
  122. image_shape = []
  123. bbox = []
  124. category_id = []
  125. iscrowd = []
  126. area = []
  127. for data in data1.create_dict_iterator():
  128. image_shape.append(data["image"].shape)
  129. bbox.append(data["bbox"])
  130. category_id.append(data["category_id"])
  131. iscrowd.append(data["iscrowd"])
  132. area.append(data["area"])
  133. num_iter += 1
  134. assert num_iter == 2
  135. assert image_shape[0] == (2268, 4032, 3)
  136. assert np.array_equal(np.array([[472, 173, 36, 48], [340, 22, 154, 301], [486, 183, 30, 35]]), bbox[0])
  137. assert np.array_equal(np.array([[1], [1], [2]]), category_id[0])
  138. assert np.array_equal(np.array([[0], [0], [0]]), iscrowd[0])
  139. assert np.array_equal(np.array([[705], [14062], [626]]), area[0])
  140. assert image_shape[1] == (642, 675, 3)
  141. assert np.array_equal(np.array([[103, 133, 229, 422], [243, 175, 93, 164]]), bbox[1])
  142. assert np.array_equal(np.array([[1], [3]]), category_id[1])
  143. assert np.array_equal(np.array([[0], [0]]), iscrowd[1])
  144. assert np.array_equal(np.array([[43102], [6079]]), area[1])
  145. def test_coco_detection_classindex():
  146. data1 = ds.CocoDataset(DATA_DIR, annotation_file=ANNOTATION_FILE, task="Detection", decode=True)
  147. class_index = data1.get_class_indexing()
  148. assert class_index == {'person': [1], 'bicycle': [2], 'car': [3], 'cat': [4], 'dog': [5], 'monkey': [6],
  149. 'bag': [7], 'orange': [8]}
  150. num_iter = 0
  151. for _ in data1.__iter__():
  152. num_iter += 1
  153. assert num_iter == 6
  154. def test_coco_panootic_classindex():
  155. data1 = ds.CocoDataset(DATA_DIR, annotation_file=PANOPTIC_FILE, task="Panoptic", decode=True)
  156. class_index = data1.get_class_indexing()
  157. assert class_index == {'person': [1, 1], 'bicycle': [2, 1], 'car': [3, 1]}
  158. num_iter = 0
  159. for _ in data1.__iter__():
  160. num_iter += 1
  161. assert num_iter == 2
  162. def test_coco_case_0():
  163. data1 = ds.CocoDataset(DATA_DIR, annotation_file=ANNOTATION_FILE, task="Detection", decode=True)
  164. data1 = data1.shuffle(10)
  165. data1 = data1.batch(3, pad_info={})
  166. num_iter = 0
  167. for _ in data1.create_dict_iterator():
  168. num_iter += 1
  169. assert num_iter == 2
  170. def test_coco_case_1():
  171. data1 = ds.CocoDataset(DATA_DIR, annotation_file=ANNOTATION_FILE, task="Detection", decode=True)
  172. sizes = [0.5, 0.5]
  173. randomize = False
  174. dataset1, dataset2 = data1.split(sizes=sizes, randomize=randomize)
  175. num_iter = 0
  176. for _ in dataset1.create_dict_iterator():
  177. num_iter += 1
  178. assert num_iter == 3
  179. num_iter = 0
  180. for _ in dataset2.create_dict_iterator():
  181. num_iter += 1
  182. assert num_iter == 3
  183. def test_coco_case_2():
  184. data1 = ds.CocoDataset(DATA_DIR, annotation_file=ANNOTATION_FILE, task="Detection", decode=True)
  185. resize_op = vision.Resize((224, 224))
  186. data1 = data1.map(input_columns=["image"], operations=resize_op)
  187. data1 = data1.repeat(4)
  188. num_iter = 0
  189. for _ in data1.__iter__():
  190. num_iter += 1
  191. assert num_iter == 24
  192. def test_coco_case_exception():
  193. try:
  194. data1 = ds.CocoDataset("path_not_exist/", annotation_file=ANNOTATION_FILE, task="Detection")
  195. for _ in data1.__iter__():
  196. pass
  197. assert False
  198. except ValueError as e:
  199. assert "does not exist or permission denied" in str(e)
  200. try:
  201. data1 = ds.CocoDataset(DATA_DIR, annotation_file="./file_not_exist", task="Detection")
  202. for _ in data1.__iter__():
  203. pass
  204. assert False
  205. except ValueError as e:
  206. assert "does not exist or permission denied" in str(e)
  207. try:
  208. data1 = ds.CocoDataset(DATA_DIR, annotation_file=ANNOTATION_FILE, task="Invalid task")
  209. for _ in data1.__iter__():
  210. pass
  211. assert False
  212. except ValueError as e:
  213. assert "Invalid task type" in str(e)
  214. try:
  215. data1 = ds.CocoDataset(DATA_DIR, annotation_file=LACKOFIMAGE_FILE, task="Detection")
  216. for _ in data1.__iter__():
  217. pass
  218. assert False
  219. except RuntimeError as e:
  220. assert "Invalid node found in json" in str(e)
  221. try:
  222. data1 = ds.CocoDataset(DATA_DIR, annotation_file=INVALID_CATEGORY_ID_FILE, task="Detection")
  223. for _ in data1.__iter__():
  224. pass
  225. assert False
  226. except RuntimeError as e:
  227. assert "category_id can't find in categories" in str(e)
  228. try:
  229. data1 = ds.CocoDataset(DATA_DIR, annotation_file=INVALID_FILE, task="Detection")
  230. for _ in data1.__iter__():
  231. pass
  232. assert False
  233. except RuntimeError as e:
  234. assert "json.exception.parse_error" in str(e)
  235. try:
  236. sampler = ds.PKSampler(3)
  237. data1 = ds.CocoDataset(DATA_DIR, annotation_file=INVALID_FILE, task="Detection", sampler=sampler)
  238. for _ in data1.__iter__():
  239. pass
  240. assert False
  241. except ValueError as e:
  242. assert "CocoDataset doesn't support PKSampler" in str(e)
  243. if __name__ == '__main__':
  244. test_coco_detection()
  245. test_coco_stuff()
  246. test_coco_keypoint()
  247. test_coco_panoptic()
  248. test_coco_detection_classindex()
  249. test_coco_panootic_classindex()
  250. test_coco_case_0()
  251. test_coco_case_1()
  252. test_coco_case_2()
  253. test_coco_case_exception()