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