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_random_crop.py 22 kB

5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. # Copyright 2019 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. """
  16. Testing RandomCrop op in DE
  17. """
  18. import numpy as np
  19. import mindspore.dataset.transforms.py_transforms
  20. import mindspore.dataset.vision.c_transforms as c_vision
  21. import mindspore.dataset.vision.py_transforms as py_vision
  22. import mindspore.dataset.vision.utils as mode
  23. import mindspore.dataset as ds
  24. from mindspore import log as logger
  25. from util import save_and_check_md5, visualize_list, config_get_set_seed, \
  26. config_get_set_num_parallel_workers
  27. GENERATE_GOLDEN = False
  28. DATA_DIR = ["../data/dataset/test_tf_file_3_images/train-0000-of-0001.data"]
  29. SCHEMA_DIR = "../data/dataset/test_tf_file_3_images/datasetSchema.json"
  30. def test_random_crop_op_c(plot=False):
  31. """
  32. Test RandomCrop Op in c transforms
  33. """
  34. logger.info("test_random_crop_op_c")
  35. # First dataset
  36. data1 = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  37. random_crop_op = c_vision.RandomCrop([512, 512], [200, 200, 200, 200])
  38. decode_op = c_vision.Decode()
  39. data1 = data1.map(operations=decode_op, input_columns=["image"])
  40. data1 = data1.map(operations=random_crop_op, input_columns=["image"])
  41. # Second dataset
  42. data2 = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  43. data2 = data2.map(operations=decode_op, input_columns=["image"])
  44. image_cropped = []
  45. image = []
  46. for item1, item2 in zip(data1.create_dict_iterator(num_epochs=1), data2.create_dict_iterator(num_epochs=1)):
  47. image1 = item1["image"]
  48. image2 = item2["image"]
  49. image_cropped.append(image1)
  50. image.append(image2)
  51. if plot:
  52. visualize_list(image, image_cropped)
  53. def test_random_crop_op_py(plot=False):
  54. """
  55. Test RandomCrop op in py transforms
  56. """
  57. logger.info("test_random_crop_op_py")
  58. # First dataset
  59. data1 = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  60. transforms1 = [
  61. py_vision.Decode(),
  62. py_vision.RandomCrop([512, 512], [200, 200, 200, 200]),
  63. py_vision.ToTensor()
  64. ]
  65. transform1 = mindspore.dataset.transforms.py_transforms.Compose(transforms1)
  66. data1 = data1.map(operations=transform1, input_columns=["image"])
  67. # Second dataset
  68. # Second dataset for comparison
  69. data2 = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  70. transforms2 = [
  71. py_vision.Decode(),
  72. py_vision.ToTensor()
  73. ]
  74. transform2 = mindspore.dataset.transforms.py_transforms.Compose(transforms2)
  75. data2 = data2.map(operations=transform2, input_columns=["image"])
  76. crop_images = []
  77. original_images = []
  78. for item1, item2 in zip(data1.create_dict_iterator(num_epochs=1), data2.create_dict_iterator(num_epochs=1)):
  79. crop = (item1["image"].transpose(1, 2, 0) * 255).astype(np.uint8)
  80. original = (item2["image"].transpose(1, 2, 0) * 255).astype(np.uint8)
  81. crop_images.append(crop)
  82. original_images.append(original)
  83. if plot:
  84. visualize_list(original_images, crop_images)
  85. def test_random_crop_01_c():
  86. """
  87. Test RandomCrop op with c_transforms: size is a single integer, expected to pass
  88. """
  89. logger.info("test_random_crop_01_c")
  90. original_seed = config_get_set_seed(0)
  91. original_num_parallel_workers = config_get_set_num_parallel_workers(1)
  92. # Generate dataset
  93. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  94. # Note: If size is an int, a square crop of size (size, size) is returned.
  95. random_crop_op = c_vision.RandomCrop(512)
  96. decode_op = c_vision.Decode()
  97. data = data.map(operations=decode_op, input_columns=["image"])
  98. data = data.map(operations=random_crop_op, input_columns=["image"])
  99. filename = "random_crop_01_c_result.npz"
  100. save_and_check_md5(data, filename, generate_golden=GENERATE_GOLDEN)
  101. # Restore config setting
  102. ds.config.set_seed(original_seed)
  103. ds.config.set_num_parallel_workers(original_num_parallel_workers)
  104. def test_random_crop_01_py():
  105. """
  106. Test RandomCrop op with py_transforms: size is a single integer, expected to pass
  107. """
  108. logger.info("test_random_crop_01_py")
  109. original_seed = config_get_set_seed(0)
  110. original_num_parallel_workers = config_get_set_num_parallel_workers(1)
  111. # Generate dataset
  112. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  113. # Note: If size is an int, a square crop of size (size, size) is returned.
  114. transforms = [
  115. py_vision.Decode(),
  116. py_vision.RandomCrop(512),
  117. py_vision.ToTensor()
  118. ]
  119. transform = mindspore.dataset.transforms.py_transforms.Compose(transforms)
  120. data = data.map(operations=transform, input_columns=["image"])
  121. filename = "random_crop_01_py_result.npz"
  122. save_and_check_md5(data, filename, generate_golden=GENERATE_GOLDEN)
  123. # Restore config setting
  124. ds.config.set_seed(original_seed)
  125. ds.config.set_num_parallel_workers(original_num_parallel_workers)
  126. def test_random_crop_02_c():
  127. """
  128. Test RandomCrop op with c_transforms: size is a list/tuple with length 2, expected to pass
  129. """
  130. logger.info("test_random_crop_02_c")
  131. original_seed = config_get_set_seed(0)
  132. original_num_parallel_workers = config_get_set_num_parallel_workers(1)
  133. # Generate dataset
  134. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  135. # Note: If size is a sequence of length 2, it should be (height, width).
  136. random_crop_op = c_vision.RandomCrop([512, 375])
  137. decode_op = c_vision.Decode()
  138. data = data.map(operations=decode_op, input_columns=["image"])
  139. data = data.map(operations=random_crop_op, input_columns=["image"])
  140. filename = "random_crop_02_c_result.npz"
  141. save_and_check_md5(data, filename, generate_golden=GENERATE_GOLDEN)
  142. # Restore config setting
  143. ds.config.set_seed(original_seed)
  144. ds.config.set_num_parallel_workers(original_num_parallel_workers)
  145. def test_random_crop_02_py():
  146. """
  147. Test RandomCrop op with py_transforms: size is a list/tuple with length 2, expected to pass
  148. """
  149. logger.info("test_random_crop_02_py")
  150. original_seed = config_get_set_seed(0)
  151. original_num_parallel_workers = config_get_set_num_parallel_workers(1)
  152. # Generate dataset
  153. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  154. # Note: If size is a sequence of length 2, it should be (height, width).
  155. transforms = [
  156. py_vision.Decode(),
  157. py_vision.RandomCrop([512, 375]),
  158. py_vision.ToTensor()
  159. ]
  160. transform = mindspore.dataset.transforms.py_transforms.Compose(transforms)
  161. data = data.map(operations=transform, input_columns=["image"])
  162. filename = "random_crop_02_py_result.npz"
  163. save_and_check_md5(data, filename, generate_golden=GENERATE_GOLDEN)
  164. # Restore config setting
  165. ds.config.set_seed(original_seed)
  166. ds.config.set_num_parallel_workers(original_num_parallel_workers)
  167. def test_random_crop_03_c():
  168. """
  169. Test RandomCrop op with c_transforms: input image size == crop size, expected to pass
  170. """
  171. logger.info("test_random_crop_03_c")
  172. original_seed = config_get_set_seed(0)
  173. original_num_parallel_workers = config_get_set_num_parallel_workers(1)
  174. # Generate dataset
  175. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  176. # Note: The size of the image is 4032*2268
  177. random_crop_op = c_vision.RandomCrop([2268, 4032])
  178. decode_op = c_vision.Decode()
  179. data = data.map(operations=decode_op, input_columns=["image"])
  180. data = data.map(operations=random_crop_op, input_columns=["image"])
  181. filename = "random_crop_03_c_result.npz"
  182. save_and_check_md5(data, filename, generate_golden=GENERATE_GOLDEN)
  183. # Restore config setting
  184. ds.config.set_seed(original_seed)
  185. ds.config.set_num_parallel_workers(original_num_parallel_workers)
  186. def test_random_crop_03_py():
  187. """
  188. Test RandomCrop op with py_transforms: input image size == crop size, expected to pass
  189. """
  190. logger.info("test_random_crop_03_py")
  191. original_seed = config_get_set_seed(0)
  192. original_num_parallel_workers = config_get_set_num_parallel_workers(1)
  193. # Generate dataset
  194. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  195. # Note: The size of the image is 4032*2268
  196. transforms = [
  197. py_vision.Decode(),
  198. py_vision.RandomCrop([2268, 4032]),
  199. py_vision.ToTensor()
  200. ]
  201. transform = mindspore.dataset.transforms.py_transforms.Compose(transforms)
  202. data = data.map(operations=transform, input_columns=["image"])
  203. filename = "random_crop_03_py_result.npz"
  204. save_and_check_md5(data, filename, generate_golden=GENERATE_GOLDEN)
  205. # Restore config setting
  206. ds.config.set_seed(original_seed)
  207. ds.config.set_num_parallel_workers(original_num_parallel_workers)
  208. def test_random_crop_04_c():
  209. """
  210. Test RandomCrop op with c_transforms: input image size < crop size, expected to fail
  211. """
  212. logger.info("test_random_crop_04_c")
  213. # Generate dataset
  214. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  215. # Note: The size of the image is 4032*2268
  216. random_crop_op = c_vision.RandomCrop([2268, 4033])
  217. decode_op = c_vision.Decode()
  218. data = data.map(operations=decode_op, input_columns=["image"])
  219. data = data.map(operations=random_crop_op, input_columns=["image"])
  220. try:
  221. data.create_dict_iterator(num_epochs=1).get_next()
  222. except RuntimeError as e:
  223. logger.info("Got an exception in DE: {}".format(str(e)))
  224. assert "Crop size is greater than the image dim" in str(e)
  225. def test_random_crop_04_py():
  226. """
  227. Test RandomCrop op with py_transforms:
  228. input image size < crop size, expected to fail
  229. """
  230. logger.info("test_random_crop_04_py")
  231. # Generate dataset
  232. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  233. # Note: The size of the image is 4032*2268
  234. transforms = [
  235. py_vision.Decode(),
  236. py_vision.RandomCrop([2268, 4033]),
  237. py_vision.ToTensor()
  238. ]
  239. transform = mindspore.dataset.transforms.py_transforms.Compose(transforms)
  240. data = data.map(operations=transform, input_columns=["image"])
  241. try:
  242. data.create_dict_iterator(num_epochs=1).get_next()
  243. except RuntimeError as e:
  244. logger.info("Got an exception in DE: {}".format(str(e)))
  245. assert "Crop size" in str(e)
  246. def test_random_crop_05_c():
  247. """
  248. Test RandomCrop op with c_transforms:
  249. input image size < crop size but pad_if_needed is enabled,
  250. expected to pass
  251. """
  252. logger.info("test_random_crop_05_c")
  253. original_seed = config_get_set_seed(0)
  254. original_num_parallel_workers = config_get_set_num_parallel_workers(1)
  255. # Generate dataset
  256. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  257. # Note: The size of the image is 4032*2268
  258. random_crop_op = c_vision.RandomCrop([2268, 4033], [200, 200, 200, 200], pad_if_needed=True)
  259. decode_op = c_vision.Decode()
  260. data = data.map(operations=decode_op, input_columns=["image"])
  261. data = data.map(operations=random_crop_op, input_columns=["image"])
  262. filename = "random_crop_05_c_result.npz"
  263. save_and_check_md5(data, filename, generate_golden=GENERATE_GOLDEN)
  264. # Restore config setting
  265. ds.config.set_seed(original_seed)
  266. ds.config.set_num_parallel_workers(original_num_parallel_workers)
  267. def test_random_crop_05_py():
  268. """
  269. Test RandomCrop op with py_transforms:
  270. input image size < crop size but pad_if_needed is enabled,
  271. expected to pass
  272. """
  273. logger.info("test_random_crop_05_py")
  274. original_seed = config_get_set_seed(0)
  275. original_num_parallel_workers = config_get_set_num_parallel_workers(1)
  276. # Generate dataset
  277. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  278. # Note: The size of the image is 4032*2268
  279. transforms = [
  280. py_vision.Decode(),
  281. py_vision.RandomCrop([2268, 4033], [200, 200, 200, 200], pad_if_needed=True),
  282. py_vision.ToTensor()
  283. ]
  284. transform = mindspore.dataset.transforms.py_transforms.Compose(transforms)
  285. data = data.map(operations=transform, input_columns=["image"])
  286. filename = "random_crop_05_py_result.npz"
  287. save_and_check_md5(data, filename, generate_golden=GENERATE_GOLDEN)
  288. # Restore config setting
  289. ds.config.set_seed(original_seed)
  290. ds.config.set_num_parallel_workers(original_num_parallel_workers)
  291. def test_random_crop_06_c():
  292. """
  293. Test RandomCrop op with c_transforms:
  294. invalid size, expected to raise TypeError
  295. """
  296. logger.info("test_random_crop_06_c")
  297. # Generate dataset
  298. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  299. try:
  300. # Note: if size is neither an int nor a list of length 2, an exception will raise
  301. random_crop_op = c_vision.RandomCrop([512, 512, 375])
  302. decode_op = c_vision.Decode()
  303. data = data.map(operations=decode_op, input_columns=["image"])
  304. data = data.map(operations=random_crop_op, input_columns=["image"])
  305. except TypeError as e:
  306. logger.info("Got an exception in DE: {}".format(str(e)))
  307. assert "Size should be a single integer" in str(e)
  308. def test_random_crop_06_py():
  309. """
  310. Test RandomCrop op with py_transforms:
  311. invalid size, expected to raise TypeError
  312. """
  313. logger.info("test_random_crop_06_py")
  314. # Generate dataset
  315. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  316. try:
  317. # Note: if size is neither an int nor a list of length 2, an exception will raise
  318. transforms = [
  319. py_vision.Decode(),
  320. py_vision.RandomCrop([512, 512, 375]),
  321. py_vision.ToTensor()
  322. ]
  323. transform = mindspore.dataset.transforms.py_transforms.Compose(transforms)
  324. data = data.map(operations=transform, input_columns=["image"])
  325. except TypeError as e:
  326. logger.info("Got an exception in DE: {}".format(str(e)))
  327. assert "Size should be a single integer" in str(e)
  328. def test_random_crop_07_c():
  329. """
  330. Test RandomCrop op with c_transforms:
  331. padding_mode is Border.CONSTANT and fill_value is 255 (White),
  332. expected to pass
  333. """
  334. logger.info("test_random_crop_07_c")
  335. original_seed = config_get_set_seed(0)
  336. original_num_parallel_workers = config_get_set_num_parallel_workers(1)
  337. # Generate dataset
  338. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  339. # Note: The padding_mode is default as Border.CONSTANT and set filling color to be white.
  340. random_crop_op = c_vision.RandomCrop(512, [200, 200, 200, 200], fill_value=(255, 255, 255))
  341. decode_op = c_vision.Decode()
  342. data = data.map(operations=decode_op, input_columns=["image"])
  343. data = data.map(operations=random_crop_op, input_columns=["image"])
  344. filename = "random_crop_07_c_result.npz"
  345. save_and_check_md5(data, filename, generate_golden=GENERATE_GOLDEN)
  346. # Restore config setting
  347. ds.config.set_seed(original_seed)
  348. ds.config.set_num_parallel_workers(original_num_parallel_workers)
  349. def test_random_crop_07_py():
  350. """
  351. Test RandomCrop op with py_transforms:
  352. padding_mode is Border.CONSTANT and fill_value is 255 (White),
  353. expected to pass
  354. """
  355. logger.info("test_random_crop_07_py")
  356. original_seed = config_get_set_seed(0)
  357. original_num_parallel_workers = config_get_set_num_parallel_workers(1)
  358. # Generate dataset
  359. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  360. # Note: The padding_mode is default as Border.CONSTANT and set filling color to be white.
  361. transforms = [
  362. py_vision.Decode(),
  363. py_vision.RandomCrop(512, [200, 200, 200, 200], fill_value=(255, 255, 255)),
  364. py_vision.ToTensor()
  365. ]
  366. transform = mindspore.dataset.transforms.py_transforms.Compose(transforms)
  367. data = data.map(operations=transform, input_columns=["image"])
  368. filename = "random_crop_07_py_result.npz"
  369. save_and_check_md5(data, filename, generate_golden=GENERATE_GOLDEN)
  370. # Restore config setting
  371. ds.config.set_seed(original_seed)
  372. ds.config.set_num_parallel_workers(original_num_parallel_workers)
  373. def test_random_crop_08_c():
  374. """
  375. Test RandomCrop op with c_transforms: padding_mode is Border.EDGE,
  376. expected to pass
  377. """
  378. logger.info("test_random_crop_08_c")
  379. original_seed = config_get_set_seed(0)
  380. original_num_parallel_workers = config_get_set_num_parallel_workers(1)
  381. # Generate dataset
  382. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  383. # Note: The padding_mode is Border.EDGE.
  384. random_crop_op = c_vision.RandomCrop(512, [200, 200, 200, 200], padding_mode=mode.Border.EDGE)
  385. decode_op = c_vision.Decode()
  386. data = data.map(operations=decode_op, input_columns=["image"])
  387. data = data.map(operations=random_crop_op, input_columns=["image"])
  388. filename = "random_crop_08_c_result.npz"
  389. save_and_check_md5(data, filename, generate_golden=GENERATE_GOLDEN)
  390. # Restore config setting
  391. ds.config.set_seed(original_seed)
  392. ds.config.set_num_parallel_workers(original_num_parallel_workers)
  393. def test_random_crop_08_py():
  394. """
  395. Test RandomCrop op with py_transforms: padding_mode is Border.EDGE,
  396. expected to pass
  397. """
  398. logger.info("test_random_crop_08_py")
  399. original_seed = config_get_set_seed(0)
  400. original_num_parallel_workers = config_get_set_num_parallel_workers(1)
  401. # Generate dataset
  402. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  403. # Note: The padding_mode is Border.EDGE.
  404. transforms = [
  405. py_vision.Decode(),
  406. py_vision.RandomCrop(512, [200, 200, 200, 200], padding_mode=mode.Border.EDGE),
  407. py_vision.ToTensor()
  408. ]
  409. transform = mindspore.dataset.transforms.py_transforms.Compose(transforms)
  410. data = data.map(operations=transform, input_columns=["image"])
  411. filename = "random_crop_08_py_result.npz"
  412. save_and_check_md5(data, filename, generate_golden=GENERATE_GOLDEN)
  413. # Restore config setting
  414. ds.config.set_seed(original_seed)
  415. ds.config.set_num_parallel_workers(original_num_parallel_workers)
  416. def test_random_crop_09():
  417. """
  418. Test RandomCrop op: invalid type of input image (not PIL), expected to raise TypeError
  419. """
  420. logger.info("test_random_crop_09")
  421. # Generate dataset
  422. data = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  423. transforms = [
  424. py_vision.Decode(),
  425. py_vision.ToTensor(),
  426. # Note: if input is not PIL image, TypeError will raise
  427. py_vision.RandomCrop(512)
  428. ]
  429. transform = mindspore.dataset.transforms.py_transforms.Compose(transforms)
  430. data = data.map(operations=transform, input_columns=["image"])
  431. try:
  432. data.create_dict_iterator(num_epochs=1).get_next()
  433. except RuntimeError as e:
  434. logger.info("Got an exception in DE: {}".format(str(e)))
  435. assert "should be PIL image" in str(e)
  436. def test_random_crop_comp(plot=False):
  437. """
  438. Test RandomCrop and compare between python and c image augmentation
  439. """
  440. logger.info("Test RandomCrop with c_transform and py_transform comparison")
  441. cropped_size = 512
  442. # First dataset
  443. data1 = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  444. random_crop_op = c_vision.RandomCrop(cropped_size)
  445. decode_op = c_vision.Decode()
  446. data1 = data1.map(operations=decode_op, input_columns=["image"])
  447. data1 = data1.map(operations=random_crop_op, input_columns=["image"])
  448. # Second dataset
  449. data2 = ds.TFRecordDataset(DATA_DIR, SCHEMA_DIR, columns_list=["image"], shuffle=False)
  450. transforms = [
  451. py_vision.Decode(),
  452. py_vision.RandomCrop(cropped_size),
  453. py_vision.ToTensor()
  454. ]
  455. transform = mindspore.dataset.transforms.py_transforms.Compose(transforms)
  456. data2 = data2.map(operations=transform, input_columns=["image"])
  457. image_c_cropped = []
  458. image_py_cropped = []
  459. for item1, item2 in zip(data1.create_dict_iterator(num_epochs=1), data2.create_dict_iterator(num_epochs=1)):
  460. c_image = item1["image"]
  461. py_image = (item2["image"].transpose(1, 2, 0) * 255).astype(np.uint8)
  462. image_c_cropped.append(c_image)
  463. image_py_cropped.append(py_image)
  464. if plot:
  465. visualize_list(image_c_cropped, image_py_cropped, visualize_mode=2)
  466. if __name__ == "__main__":
  467. test_random_crop_01_c()
  468. test_random_crop_02_c()
  469. test_random_crop_03_c()
  470. test_random_crop_04_c()
  471. test_random_crop_05_c()
  472. test_random_crop_06_c()
  473. test_random_crop_07_c()
  474. test_random_crop_08_c()
  475. test_random_crop_01_py()
  476. test_random_crop_02_py()
  477. test_random_crop_03_py()
  478. test_random_crop_04_py()
  479. test_random_crop_05_py()
  480. test_random_crop_06_py()
  481. test_random_crop_07_py()
  482. test_random_crop_08_py()
  483. test_random_crop_09()
  484. test_random_crop_op_c(True)
  485. test_random_crop_op_py(True)
  486. test_random_crop_comp(True)