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.

execute_test.cc 30 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. /**
  2. * Copyright 2020-2021 Huawei Technologies Co., Ltd
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #include "common/common.h"
  17. #include "include/api/types.h"
  18. #include "minddata/dataset/core/de_tensor.h"
  19. #include "minddata/dataset/include/dataset/audio.h"
  20. #include "minddata/dataset/include/dataset/execute.h"
  21. #include "minddata/dataset/include/dataset/transforms.h"
  22. #include "minddata/dataset/include/dataset/audio.h"
  23. #include "minddata/dataset/include/dataset/vision.h"
  24. #include "minddata/dataset/include/dataset/audio.h"
  25. #include "minddata/dataset/include/dataset/text.h"
  26. #include "utils/log_adapter.h"
  27. using namespace mindspore::dataset;
  28. using mindspore::LogStream;
  29. using mindspore::ExceptionType::NoExceptionType;
  30. using mindspore::MsLogLevel::INFO;
  31. class MindDataTestExecute : public UT::DatasetOpTesting {
  32. protected:
  33. };
  34. TEST_F(MindDataTestExecute, TestAllpassBiquadWithEager) {
  35. MS_LOG(INFO) << "Basic Function Test With Eager.";
  36. // Original waveform
  37. std::vector<float> labels = {
  38. 2.716064453125000000e-03, 6.347656250000000000e-03, 9.246826171875000000e-03, 1.089477539062500000e-02,
  39. 1.138305664062500000e-02, 1.156616210937500000e-02, 1.394653320312500000e-02, 1.550292968750000000e-02,
  40. 1.614379882812500000e-02, 1.840209960937500000e-02, 1.718139648437500000e-02, 1.599121093750000000e-02,
  41. 1.647949218750000000e-02, 1.510620117187500000e-02, 1.385498046875000000e-02, 1.345825195312500000e-02,
  42. 1.419067382812500000e-02, 1.284790039062500000e-02, 1.052856445312500000e-02, 9.368896484375000000e-03};
  43. std::shared_ptr<Tensor> input;
  44. ASSERT_OK(Tensor::CreateFromVector(labels, TensorShape({2, 10}), &input));
  45. auto input_02 = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input));
  46. std::shared_ptr<TensorTransform> allpass_biquad_01 = std::make_shared<audio::AllpassBiquad>(44100, 200);
  47. mindspore::dataset::Execute Transform01({allpass_biquad_01});
  48. // Filtered waveform by allpassbiquad
  49. Status s01 = Transform01(input_02, &input_02);
  50. EXPECT_TRUE(s01.IsOk());
  51. }
  52. TEST_F(MindDataTestExecute, TestAllpassBiquadWithWrongArg) {
  53. MS_LOG(INFO) << "Wrong Arg.";
  54. std::vector<double> labels = {
  55. 2.716064453125000000e-03, 6.347656250000000000e-03, 9.246826171875000000e-03, 1.089477539062500000e-02,
  56. 1.138305664062500000e-02, 1.156616210937500000e-02, 1.394653320312500000e-02, 1.550292968750000000e-02,
  57. 1.614379882812500000e-02, 1.840209960937500000e-02, 1.718139648437500000e-02, 1.599121093750000000e-02,
  58. 1.647949218750000000e-02, 1.510620117187500000e-02, 1.385498046875000000e-02, 1.345825195312500000e-02,
  59. 1.419067382812500000e-02, 1.284790039062500000e-02, 1.052856445312500000e-02, 9.368896484375000000e-03};
  60. std::shared_ptr<Tensor> input;
  61. ASSERT_OK(Tensor::CreateFromVector(labels, TensorShape({2, 10}), &input));
  62. auto input_02 = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input));
  63. // Check Q
  64. MS_LOG(INFO) << "Q is zero.";
  65. std::shared_ptr<TensorTransform> allpass_biquad_op = std::make_shared<audio::AllpassBiquad>(44100, 200, 0);
  66. mindspore::dataset::Execute Transform01({allpass_biquad_op});
  67. Status s01 = Transform01(input_02, &input_02);
  68. EXPECT_FALSE(s01.IsOk());
  69. }
  70. TEST_F(MindDataTestExecute, TestAdjustGammaEager1) {
  71. // 3-channel eager
  72. MS_LOG(INFO) << "3-channel image test";
  73. // Read images
  74. auto image = ReadFileToTensor("data/dataset/apple.jpg");
  75. // Transform params
  76. auto decode = vision::Decode();
  77. auto adjust_gamma_op = vision::AdjustGamma(0.1, 1.0);
  78. auto transform = Execute({decode, adjust_gamma_op});
  79. Status rc = transform(image, &image);
  80. EXPECT_EQ(rc, Status::OK());
  81. }
  82. TEST_F(MindDataTestExecute, TestAdjustGammaEager2) {
  83. // 1-channel eager
  84. MS_LOG(INFO) << "1-channel image test";
  85. auto m1 = ReadFileToTensor("data/dataset/apple.jpg");
  86. // Transform params
  87. auto decode = vision::Decode();
  88. auto rgb2gray = vision::RGB2GRAY();
  89. auto adjust_gamma_op = vision::AdjustGamma(0.1, 1.0);
  90. auto transform = Execute({decode, rgb2gray, adjust_gamma_op});
  91. Status rc = transform(m1, &m1);
  92. EXPECT_EQ(rc, Status::OK());
  93. }
  94. TEST_F(MindDataTestExecute, TestAmplitudeToDB) {
  95. MS_LOG(INFO) << "Basic Function Test With Eager.";
  96. // Original waveform
  97. std::vector<float> labels = {
  98. 2.716064453125000000e-03, 6.347656250000000000e-03, 9.246826171875000000e-03, 1.089477539062500000e-02,
  99. 1.138305664062500000e-02, 1.156616210937500000e-02, 1.394653320312500000e-02, 1.550292968750000000e-02,
  100. 1.614379882812500000e-02, 1.840209960937500000e-02, 1.718139648437500000e-02, 1.599121093750000000e-02,
  101. 1.647949218750000000e-02, 1.510620117187500000e-02, 1.385498046875000000e-02, 1.345825195312500000e-02,
  102. 1.419067382812500000e-02, 1.284790039062500000e-02, 1.052856445312500000e-02, 9.368896484375000000e-03,
  103. 1.419067382812500000e-02, 1.284790039062500000e-02, 1.052856445312500000e-02, 9.368896484375000000e-03};
  104. std::shared_ptr<Tensor> input;
  105. ASSERT_OK(Tensor::CreateFromVector(labels, TensorShape({2, 2, 2, 3}), &input));
  106. auto input_ms = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input));
  107. std::shared_ptr<TensorTransform> amplitude_to_db_op = std::make_shared<audio::AmplitudeToDB>();
  108. // apply amplitude_to_db
  109. mindspore::dataset::Execute trans({amplitude_to_db_op});
  110. Status status = trans(input_ms, &input_ms);
  111. EXPECT_TRUE(status.IsOk());
  112. }
  113. TEST_F(MindDataTestExecute, TestAmplitudeToDBWrongArgs) {
  114. MS_LOG(INFO) << "Wrong Arg.";
  115. // Original waveform
  116. std::vector<float> labels = {
  117. 2.716064453125000000e-03, 6.347656250000000000e-03, 9.246826171875000000e-03, 1.089477539062500000e-02,
  118. 1.138305664062500000e-02, 1.156616210937500000e-02, 1.394653320312500000e-02, 1.550292968750000000e-02,
  119. 1.614379882812500000e-02, 1.840209960937500000e-02, 1.718139648437500000e-02, 1.599121093750000000e-02,
  120. 1.647949218750000000e-02, 1.510620117187500000e-02, 1.385498046875000000e-02, 1.345825195312500000e-02,
  121. 1.419067382812500000e-02, 1.284790039062500000e-02, 1.052856445312500000e-02, 9.368896484375000000e-03};
  122. std::shared_ptr<Tensor> input;
  123. ASSERT_OK(Tensor::CreateFromVector(labels, TensorShape({2, 10}), &input));
  124. auto input_ms = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input));
  125. std::shared_ptr<TensorTransform> amplitude_to_db_op =
  126. std::make_shared<audio::AmplitudeToDB>(ScaleType::kPower, 1.0, -1e-10, 80.0);
  127. // apply amplitude_to_db
  128. mindspore::dataset::Execute trans({amplitude_to_db_op});
  129. Status status = trans(input_ms, &input_ms);
  130. EXPECT_FALSE(status.IsOk());
  131. }
  132. TEST_F(MindDataTestExecute, TestAmplitudeToDBWrongInput) {
  133. MS_LOG(INFO) << "Wrong Input.";
  134. // Original waveform
  135. std::vector<float> labels = {
  136. 2.716064453125000000e-03, 6.347656250000000000e-03, 9.246826171875000000e-03, 1.089477539062500000e-02,
  137. 1.138305664062500000e-02, 1.156616210937500000e-02, 1.394653320312500000e-02, 1.550292968750000000e-02,
  138. 1.614379882812500000e-02, 1.840209960937500000e-02, 1.718139648437500000e-02, 1.599121093750000000e-02,
  139. 1.647949218750000000e-02, 1.510620117187500000e-02, 1.385498046875000000e-02, 1.345825195312500000e-02,
  140. 1.419067382812500000e-02, 1.284790039062500000e-02, 1.052856445312500000e-02, 9.368896484375000000e-03};
  141. std::shared_ptr<Tensor> input;
  142. ASSERT_OK(Tensor::CreateFromVector(labels, TensorShape({20}), &input));
  143. auto input_ms = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input));
  144. std::shared_ptr<TensorTransform> amplitude_to_db_op = std::make_shared<audio::AmplitudeToDB>();
  145. // apply amplitude_to_db
  146. mindspore::dataset::Execute trans({amplitude_to_db_op});
  147. Status status = trans(input_ms, &input_ms);
  148. EXPECT_FALSE(status.IsOk());
  149. }
  150. TEST_F(MindDataTestExecute, TestComposeTransforms) {
  151. MS_LOG(INFO) << "Doing TestComposeTransforms.";
  152. // Read images
  153. auto image = ReadFileToTensor("data/dataset/apple.jpg");
  154. // Transform params
  155. std::shared_ptr<TensorTransform> decode = std::make_shared<vision::Decode>();
  156. std::shared_ptr<TensorTransform> center_crop(new vision::CenterCrop({30}));
  157. std::shared_ptr<TensorTransform> rescale = std::make_shared<vision::Rescale>(1. / 3, 0.5);
  158. auto transform = Execute({decode, center_crop, rescale});
  159. Status rc = transform(image, &image);
  160. EXPECT_EQ(rc, Status::OK());
  161. EXPECT_EQ(30, image.Shape()[0]);
  162. EXPECT_EQ(30, image.Shape()[1]);
  163. }
  164. TEST_F(MindDataTestExecute, TestCrop) {
  165. MS_LOG(INFO) << "Doing MindDataTestExecute-TestCrop.";
  166. // Read images
  167. auto image = ReadFileToTensor("data/dataset/apple.jpg");
  168. // Transform params
  169. auto decode = vision::Decode();
  170. auto crop = vision::Crop({10, 30}, {10, 15});
  171. auto transform = Execute({decode, crop});
  172. Status rc = transform(image, &image);
  173. EXPECT_EQ(rc, Status::OK());
  174. EXPECT_EQ(image.Shape()[0], 10);
  175. EXPECT_EQ(image.Shape()[1], 15);
  176. }
  177. TEST_F(MindDataTestExecute, TestTimeMasking) {
  178. MS_LOG(INFO) << "Doing TestTimeMasking.";
  179. std::shared_ptr<Tensor> input_tensor_;
  180. TensorShape s = TensorShape({2, 6});
  181. ASSERT_OK(Tensor::CreateFromVector(
  182. std::vector<float>({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f}), s, &input_tensor_));
  183. auto input_tensor = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input_tensor_));
  184. std::shared_ptr<TensorTransform> time_masking_op = std::make_shared<audio::TimeMasking>(true, 2);
  185. mindspore::dataset::Execute transform({time_masking_op});
  186. Status status = transform(input_tensor, &input_tensor);
  187. EXPECT_TRUE(status.IsOk());
  188. }
  189. TEST_F(MindDataTestExecute, TestTimeStretchEager) {
  190. MS_LOG(INFO) << "Doing test TimeStretchOp with custom param value. Eager.";
  191. std::shared_ptr<Tensor> input_tensor_;
  192. // op param
  193. int freq = 4;
  194. int hop_length = 20;
  195. float rate = 1.3;
  196. int frame_num = 10;
  197. // create tensor
  198. TensorShape s = TensorShape({2, freq, frame_num, 2});
  199. // init input vec
  200. std::vector<float> input_vec(2 * freq * frame_num * 2);
  201. for (int ind = 0; ind < input_vec.size(); ind++) {
  202. input_vec[ind] = std::rand() % (1000) / (1000.0f);
  203. }
  204. ASSERT_OK(Tensor::CreateFromVector(input_vec, s, &input_tensor_));
  205. auto input_ms = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input_tensor_));
  206. std::shared_ptr<TensorTransform> time_stretch_op = std::make_shared<audio::TimeStretch>(hop_length, freq, rate);
  207. // apply timestretch
  208. mindspore::dataset::Execute Transform({time_stretch_op});
  209. Status status = Transform(input_ms, &input_ms);
  210. EXPECT_TRUE(status.IsOk());
  211. }
  212. TEST_F(MindDataTestExecute, TestTimeStretchParamCheck1) {
  213. MS_LOG(INFO) << "Doing MindDataTestTimeStretch-TestTimeStretchParamCheck with invalid parameters.";
  214. // Create an input
  215. std::shared_ptr<Tensor> input_tensor_;
  216. std::shared_ptr<Tensor> output_tensor;
  217. TensorShape s = TensorShape({1, 4, 3, 2});
  218. ASSERT_OK(Tensor::CreateFromVector(
  219. std::vector<float>({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f,
  220. 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f}),
  221. s, &input_tensor_));
  222. auto input_ms = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input_tensor_));
  223. std::shared_ptr<TensorTransform> timestretch = std::make_shared<audio::TimeStretch>(4, 512, -2);
  224. mindspore::dataset::Execute Transform({timestretch});
  225. Status status = Transform(input_ms, &input_ms);
  226. EXPECT_FALSE(status.IsOk());
  227. }
  228. TEST_F(MindDataTestExecute, TestTimeStretchParamCheck2) {
  229. MS_LOG(INFO) << "Doing MindDataTestTimeStretch-TestTimeStretchParamCheck with invalid parameters.";
  230. // Create an input
  231. std::shared_ptr<Tensor> input_tensor_;
  232. std::shared_ptr<Tensor> output_tensor;
  233. TensorShape s = TensorShape({1, 4, 3, 2});
  234. ASSERT_OK(Tensor::CreateFromVector(
  235. std::vector<float>({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f,
  236. 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f}),
  237. s, &input_tensor_));
  238. auto input_ms = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input_tensor_));
  239. std::shared_ptr<TensorTransform> timestretch = std::make_shared<audio::TimeStretch>(4, -512, 2);
  240. mindspore::dataset::Execute Transform({timestretch});
  241. Status status = Transform(input_ms, &input_ms);
  242. EXPECT_FALSE(status.IsOk());
  243. }
  244. TEST_F(MindDataTestExecute, TestTransformInput1) {
  245. MS_LOG(INFO) << "Doing MindDataTestExecute-TestTransformInput1.";
  246. // Test Execute with transform op input using API constructors, with std::shared_ptr<TensorTransform pointers,
  247. // instantiated via mix of make_shared and new
  248. // Read images
  249. auto image = ReadFileToTensor("data/dataset/apple.jpg");
  250. // Define transform operations
  251. std::shared_ptr<TensorTransform> decode = std::make_shared<vision::Decode>();
  252. std::shared_ptr<TensorTransform> resize(new vision::Resize({224, 224}));
  253. std::shared_ptr<TensorTransform> normalize(
  254. new vision::Normalize({0.485 * 255, 0.456 * 255, 0.406 * 255}, {0.229 * 255, 0.224 * 255, 0.225 * 255}));
  255. std::shared_ptr<TensorTransform> hwc2chw = std::make_shared<vision::HWC2CHW>();
  256. mindspore::dataset::Execute Transform({decode, resize, normalize, hwc2chw});
  257. // Apply transform on image
  258. Status rc = Transform(image, &image);
  259. // Check image info
  260. ASSERT_TRUE(rc.IsOk());
  261. ASSERT_EQ(image.Shape().size(), 3);
  262. ASSERT_EQ(image.Shape()[0], 3);
  263. ASSERT_EQ(image.Shape()[1], 224);
  264. ASSERT_EQ(image.Shape()[2], 224);
  265. }
  266. TEST_F(MindDataTestExecute, TestTransformInput2) {
  267. MS_LOG(INFO) << "Doing MindDataTestExecute-TestTransformInput2.";
  268. // Test Execute with transform op input using API constructors, with std::shared_ptr<TensorTransform pointers,
  269. // instantiated via new
  270. // With this way of creating TensorTransforms, we don't need to explicitly delete the object created with the
  271. // "new" keyword. When the shared pointer goes out of scope the object destructor will be called.
  272. // Read image, construct MSTensor from dataset tensor
  273. std::shared_ptr<mindspore::dataset::Tensor> de_tensor;
  274. mindspore::dataset::Tensor::CreateFromFile("data/dataset/apple.jpg", &de_tensor);
  275. auto image = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(de_tensor));
  276. // Define transform operations
  277. std::shared_ptr<TensorTransform> decode(new vision::Decode());
  278. std::shared_ptr<TensorTransform> resize(new vision::Resize({224, 224}));
  279. std::shared_ptr<TensorTransform> normalize(
  280. new vision::Normalize({0.485 * 255, 0.456 * 255, 0.406 * 255}, {0.229 * 255, 0.224 * 255, 0.225 * 255}));
  281. std::shared_ptr<TensorTransform> hwc2chw(new vision::HWC2CHW());
  282. mindspore::dataset::Execute Transform({decode, resize, normalize, hwc2chw});
  283. // Apply transform on image
  284. Status rc = Transform(image, &image);
  285. // Check image info
  286. ASSERT_TRUE(rc.IsOk());
  287. ASSERT_EQ(image.Shape().size(), 3);
  288. ASSERT_EQ(image.Shape()[0], 3);
  289. ASSERT_EQ(image.Shape()[1], 224);
  290. ASSERT_EQ(image.Shape()[2], 224);
  291. }
  292. TEST_F(MindDataTestExecute, TestTransformInput3) {
  293. MS_LOG(INFO) << "Doing MindDataTestExecute-TestTransformInput3.";
  294. // Test Execute with transform op input using API constructors, with auto pointers
  295. // Read image, construct MSTensor from dataset tensor
  296. std::shared_ptr<mindspore::dataset::Tensor> de_tensor;
  297. mindspore::dataset::Tensor::CreateFromFile("data/dataset/apple.jpg", &de_tensor);
  298. auto image = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(de_tensor));
  299. // Define transform operations
  300. auto decode = vision::Decode();
  301. mindspore::dataset::Execute Transform1(decode);
  302. auto resize = vision::Resize({224, 224});
  303. mindspore::dataset::Execute Transform2(resize);
  304. // Apply transform on image
  305. Status rc;
  306. rc = Transform1(image, &image);
  307. ASSERT_TRUE(rc.IsOk());
  308. rc = Transform2(image, &image);
  309. ASSERT_TRUE(rc.IsOk());
  310. // Check image info
  311. ASSERT_EQ(image.Shape().size(), 3);
  312. ASSERT_EQ(image.Shape()[0], 224);
  313. ASSERT_EQ(image.Shape()[1], 224);
  314. ASSERT_EQ(image.Shape()[2], 3);
  315. }
  316. TEST_F(MindDataTestExecute, TestTransformInputSequential) {
  317. MS_LOG(INFO) << "Doing MindDataTestExecute-TestTransformInputSequential.";
  318. // Test Execute with transform op input using API constructors, with auto pointers;
  319. // Apply 2 transformations sequentially, including single non-vector Transform op input
  320. // Read image, construct MSTensor from dataset tensor
  321. std::shared_ptr<mindspore::dataset::Tensor> de_tensor;
  322. mindspore::dataset::Tensor::CreateFromFile("data/dataset/apple.jpg", &de_tensor);
  323. auto image = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(de_tensor));
  324. // Define transform#1 operations
  325. std::shared_ptr<TensorTransform> decode(new vision::Decode());
  326. std::shared_ptr<TensorTransform> resize(new vision::Resize({224, 224}));
  327. std::shared_ptr<TensorTransform> normalize(
  328. new vision::Normalize({0.485 * 255, 0.456 * 255, 0.406 * 255}, {0.229 * 255, 0.224 * 255, 0.225 * 255}));
  329. std::vector<std::shared_ptr<TensorTransform>> op_list = {decode, resize, normalize};
  330. mindspore::dataset::Execute Transform(op_list);
  331. // Apply transform#1 on image
  332. Status rc = Transform(image, &image);
  333. // Define transform#2 operations
  334. std::shared_ptr<TensorTransform> hwc2chw(new vision::HWC2CHW());
  335. mindspore::dataset::Execute Transform2(hwc2chw);
  336. // Apply transform#2 on image
  337. rc = Transform2(image, &image);
  338. // Check image info
  339. ASSERT_TRUE(rc.IsOk());
  340. ASSERT_EQ(image.Shape().size(), 3);
  341. ASSERT_EQ(image.Shape()[0], 3);
  342. ASSERT_EQ(image.Shape()[1], 224);
  343. ASSERT_EQ(image.Shape()[2], 224);
  344. }
  345. TEST_F(MindDataTestExecute, TestTransformDecodeResizeCenterCrop1) {
  346. MS_LOG(INFO) << "Doing MindDataTestExecute-TestTransformDecodeResizeCenterCrop1.";
  347. // Test Execute with Decode, Resize and CenterCrop transform ops input using API constructors, with shared pointers
  348. // Read image, construct MSTensor from dataset tensor
  349. std::shared_ptr<mindspore::dataset::Tensor> de_tensor;
  350. mindspore::dataset::Tensor::CreateFromFile("data/dataset/apple.jpg", &de_tensor);
  351. auto image = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(de_tensor));
  352. // Define transform operations
  353. std::vector<int32_t> resize_paras = {256, 256};
  354. std::vector<int32_t> crop_paras = {224, 224};
  355. std::shared_ptr<TensorTransform> decode(new vision::Decode());
  356. std::shared_ptr<TensorTransform> resize(new vision::Resize(resize_paras));
  357. std::shared_ptr<TensorTransform> centercrop(new vision::CenterCrop(crop_paras));
  358. std::shared_ptr<TensorTransform> hwc2chw(new vision::HWC2CHW());
  359. std::vector<std::shared_ptr<TensorTransform>> op_list = {decode, resize, centercrop, hwc2chw};
  360. mindspore::dataset::Execute Transform(op_list, MapTargetDevice::kCpu);
  361. // Apply transform on image
  362. Status rc = Transform(image, &image);
  363. // Check image info
  364. ASSERT_TRUE(rc.IsOk());
  365. ASSERT_EQ(image.Shape().size(), 3);
  366. ASSERT_EQ(image.Shape()[0], 3);
  367. ASSERT_EQ(image.Shape()[1], 224);
  368. ASSERT_EQ(image.Shape()[2], 224);
  369. }
  370. TEST_F(MindDataTestExecute, TestUniformAugment) {
  371. // Read images
  372. auto image = ReadFileToTensor("data/dataset/apple.jpg");
  373. std::vector<mindspore::MSTensor> image2;
  374. // Transform params
  375. std::shared_ptr<TensorTransform> decode = std::make_shared<vision::Decode>();
  376. std::shared_ptr<TensorTransform> resize_op(new vision::Resize({16, 16}));
  377. std::shared_ptr<TensorTransform> vertical = std::make_shared<vision::RandomVerticalFlip>();
  378. std::shared_ptr<TensorTransform> horizontal = std::make_shared<vision::RandomHorizontalFlip>();
  379. std::shared_ptr<TensorTransform> uniform_op(new vision::UniformAugment({resize_op, vertical, horizontal}, 3));
  380. auto transform1 = Execute({decode});
  381. Status rc = transform1(image, &image);
  382. ASSERT_TRUE(rc.IsOk());
  383. auto transform2 = Execute({uniform_op});
  384. rc = transform2({image}, &image2);
  385. ASSERT_TRUE(rc.IsOk());
  386. }
  387. TEST_F(MindDataTestExecute, TestBasicTokenizer) {
  388. std::shared_ptr<Tensor> de_tensor;
  389. Tensor::CreateScalar<std::string>("Welcome to China.", &de_tensor);
  390. auto txt = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(de_tensor));
  391. std::vector<mindspore::MSTensor> txt_result;
  392. // Transform params
  393. std::shared_ptr<TensorTransform> tokenizer =
  394. std::make_shared<text::BasicTokenizer>(false, false, NormalizeForm::kNone, false, true);
  395. // BasicTokenizer has 3 outputs so we need a vector to receive its result
  396. auto transform1 = Execute({tokenizer});
  397. Status rc = transform1({txt}, &txt_result);
  398. ASSERT_EQ(txt_result.size(), 3);
  399. ASSERT_TRUE(rc.IsOk());
  400. }
  401. TEST_F(MindDataTestExecute, TestRotate) {
  402. MS_LOG(INFO) << "Doing MindDataTestExecute-TestRotate.";
  403. // Read images
  404. auto image = ReadFileToTensor("data/dataset/apple.jpg");
  405. // Transform params
  406. auto decode = vision::Decode();
  407. auto rotate = vision::Rotate(10.5);
  408. auto transform = Execute({decode, rotate});
  409. Status rc = transform(image, &image);
  410. EXPECT_EQ(rc, Status::OK());
  411. }
  412. TEST_F(MindDataTestExecute, TestResizeWithBBox) {
  413. auto image = ReadFileToTensor("data/dataset/apple.jpg");
  414. std::shared_ptr<TensorTransform> decode_op = std::make_shared<vision::Decode>();
  415. std::shared_ptr<TensorTransform> resizewithbbox_op =
  416. std::make_shared<vision::ResizeWithBBox>(std::vector<int32_t>{250, 500});
  417. // Test Compute(Tensor, Tensor) method of ResizeWithBBox
  418. auto transform = Execute({decode_op, resizewithbbox_op});
  419. // Expect fail since Compute(Tensor, Tensor) is not a valid behaviour for this Op,
  420. // while Compute(TensorRow, TensorRow) is the correct one.
  421. Status rc = transform(image, &image);
  422. EXPECT_FALSE(rc.IsOk());
  423. }
  424. TEST_F(MindDataTestExecute, TestBandBiquadWithEager) {
  425. MS_LOG(INFO) << "Basic Function Test With Eager.";
  426. // Original waveform
  427. std::vector<float> labels = {
  428. 2.716064453125000000e-03, 6.347656250000000000e-03, 9.246826171875000000e-03, 1.089477539062500000e-02,
  429. 1.138305664062500000e-02, 1.156616210937500000e-02, 1.394653320312500000e-02, 1.550292968750000000e-02,
  430. 1.614379882812500000e-02, 1.840209960937500000e-02, 1.718139648437500000e-02, 1.599121093750000000e-02,
  431. 1.647949218750000000e-02, 1.510620117187500000e-02, 1.385498046875000000e-02, 1.345825195312500000e-02,
  432. 1.419067382812500000e-02, 1.284790039062500000e-02, 1.052856445312500000e-02, 9.368896484375000000e-03};
  433. std::shared_ptr<Tensor> input;
  434. ASSERT_OK(Tensor::CreateFromVector(labels, TensorShape({2, 10}), &input));
  435. auto input_02 = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input));
  436. std::shared_ptr<TensorTransform> band_biquad_01 = std::make_shared<audio::BandBiquad>(44100, 200);
  437. mindspore::dataset::Execute Transform01({band_biquad_01});
  438. // Filtered waveform by bandbiquad
  439. Status s01 = Transform01(input_02, &input_02);
  440. EXPECT_TRUE(s01.IsOk());
  441. }
  442. TEST_F(MindDataTestExecute, TestBandBiquadWithWrongArg) {
  443. MS_LOG(INFO) << "Wrong Arg.";
  444. std::vector<double> labels = {
  445. 2.716064453125000000e-03, 6.347656250000000000e-03, 9.246826171875000000e-03, 1.089477539062500000e-02,
  446. 1.138305664062500000e-02, 1.156616210937500000e-02, 1.394653320312500000e-02, 1.550292968750000000e-02,
  447. 1.614379882812500000e-02, 1.840209960937500000e-02, 1.718139648437500000e-02, 1.599121093750000000e-02,
  448. 1.647949218750000000e-02, 1.510620117187500000e-02, 1.385498046875000000e-02, 1.345825195312500000e-02,
  449. 1.419067382812500000e-02, 1.284790039062500000e-02, 1.052856445312500000e-02, 9.368896484375000000e-03};
  450. std::shared_ptr<Tensor> input;
  451. ASSERT_OK(Tensor::CreateFromVector(labels, TensorShape({2, 10}), &input));
  452. auto input_02 = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input));
  453. // Check Q
  454. MS_LOG(INFO) << "Q is zero.";
  455. std::shared_ptr<TensorTransform> band_biquad_op = std::make_shared<audio::BandBiquad>(44100, 200, 0);
  456. mindspore::dataset::Execute Transform01({band_biquad_op});
  457. Status s01 = Transform01(input_02, &input_02);
  458. EXPECT_FALSE(s01.IsOk());
  459. }
  460. TEST_F(MindDataTestExecute, TestBandpassBiquadWithEager) {
  461. MS_LOG(INFO) << "Basic Function Test With Eager.";
  462. // Original waveform
  463. std::vector<float> labels = {
  464. 2.716064453125000000e-03, 6.347656250000000000e-03, 9.246826171875000000e-03, 1.089477539062500000e-02,
  465. 1.138305664062500000e-02, 1.156616210937500000e-02, 1.394653320312500000e-02, 1.550292968750000000e-02,
  466. 1.614379882812500000e-02, 1.840209960937500000e-02, 1.718139648437500000e-02, 1.599121093750000000e-02,
  467. 1.647949218750000000e-02, 1.510620117187500000e-02, 1.385498046875000000e-02, 1.345825195312500000e-02,
  468. 1.419067382812500000e-02, 1.284790039062500000e-02, 1.052856445312500000e-02, 9.368896484375000000e-03};
  469. std::shared_ptr<Tensor> input;
  470. ASSERT_OK(Tensor::CreateFromVector(labels, TensorShape({2, 10}), &input));
  471. auto input_02 = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input));
  472. std::shared_ptr<TensorTransform> bandpass_biquad_01 = std::make_shared<audio::BandpassBiquad>(44100, 200);
  473. mindspore::dataset::Execute Transform01({bandpass_biquad_01});
  474. // Filtered waveform by bandpassbiquad
  475. Status s01 = Transform01(input_02, &input_02);
  476. EXPECT_TRUE(s01.IsOk());
  477. }
  478. TEST_F(MindDataTestExecute, TestBandpassBiquadWithWrongArg) {
  479. MS_LOG(INFO) << "Wrong Arg.";
  480. std::vector<double> labels = {
  481. 2.716064453125000000e-03, 6.347656250000000000e-03, 9.246826171875000000e-03, 1.089477539062500000e-02,
  482. 1.138305664062500000e-02, 1.156616210937500000e-02, 1.394653320312500000e-02, 1.550292968750000000e-02,
  483. 1.614379882812500000e-02, 1.840209960937500000e-02, 1.718139648437500000e-02, 1.599121093750000000e-02,
  484. 1.647949218750000000e-02, 1.510620117187500000e-02, 1.385498046875000000e-02, 1.345825195312500000e-02,
  485. 1.419067382812500000e-02, 1.284790039062500000e-02, 1.052856445312500000e-02, 9.368896484375000000e-03};
  486. std::shared_ptr<Tensor> input;
  487. ASSERT_OK(Tensor::CreateFromVector(labels, TensorShape({2, 10}), &input));
  488. auto input_02 = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input));
  489. // Check Q
  490. MS_LOG(INFO) << "Q is zero.";
  491. std::shared_ptr<TensorTransform> bandpass_biquad_op = std::make_shared<audio::BandpassBiquad>(44100, 200, 0);
  492. mindspore::dataset::Execute Transform01({bandpass_biquad_op});
  493. Status s01 = Transform01(input_02, &input_02);
  494. EXPECT_FALSE(s01.IsOk());
  495. }
  496. TEST_F(MindDataTestExecute, TestBandrejectBiquadWithEager) {
  497. MS_LOG(INFO) << "Basic Function Test With Eager.";
  498. // Original waveform
  499. std::vector<float> labels = {
  500. 2.716064453125000000e-03, 6.347656250000000000e-03, 9.246826171875000000e-03, 1.089477539062500000e-02,
  501. 1.138305664062500000e-02, 1.156616210937500000e-02, 1.394653320312500000e-02, 1.550292968750000000e-02,
  502. 1.614379882812500000e-02, 1.840209960937500000e-02, 1.718139648437500000e-02, 1.599121093750000000e-02,
  503. 1.647949218750000000e-02, 1.510620117187500000e-02, 1.385498046875000000e-02, 1.345825195312500000e-02,
  504. 1.419067382812500000e-02, 1.284790039062500000e-02, 1.052856445312500000e-02, 9.368896484375000000e-03};
  505. std::shared_ptr<Tensor> input;
  506. ASSERT_OK(Tensor::CreateFromVector(labels, TensorShape({2, 10}), &input));
  507. auto input_02 = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input));
  508. std::shared_ptr<TensorTransform> bandreject_biquad_01 = std::make_shared<audio::BandrejectBiquad>(44100, 200);
  509. mindspore::dataset::Execute Transform01({bandreject_biquad_01});
  510. // Filtered waveform by bandrejectbiquad
  511. Status s01 = Transform01(input_02, &input_02);
  512. EXPECT_TRUE(s01.IsOk());
  513. }
  514. TEST_F(MindDataTestExecute, TestBandrejectBiquadWithWrongArg) {
  515. MS_LOG(INFO) << "Wrong Arg.";
  516. std::vector<double> labels = {
  517. 2.716064453125000000e-03, 6.347656250000000000e-03, 9.246826171875000000e-03, 1.089477539062500000e-02,
  518. 1.138305664062500000e-02, 1.156616210937500000e-02, 1.394653320312500000e-02, 1.550292968750000000e-02,
  519. 1.614379882812500000e-02, 1.840209960937500000e-02, 1.718139648437500000e-02, 1.599121093750000000e-02,
  520. 1.647949218750000000e-02, 1.510620117187500000e-02, 1.385498046875000000e-02, 1.345825195312500000e-02,
  521. 1.419067382812500000e-02, 1.284790039062500000e-02, 1.052856445312500000e-02, 9.368896484375000000e-03};
  522. std::shared_ptr<Tensor> input;
  523. ASSERT_OK(Tensor::CreateFromVector(labels, TensorShape({2, 10}), &input));
  524. auto input_02 = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(input));
  525. // Check Q
  526. MS_LOG(INFO) << "Q is zero.";
  527. std::shared_ptr<TensorTransform> bandreject_biquad_op = std::make_shared<audio::BandrejectBiquad>(44100, 200, 0);
  528. mindspore::dataset::Execute Transform01({bandreject_biquad_op});
  529. Status s01 = Transform01(input_02, &input_02);
  530. EXPECT_FALSE(s01.IsOk());
  531. }
  532. TEST_F(MindDataTestExecute, TestAngleEager) {
  533. MS_LOG(INFO) << "Doing MindDataTestExecute-TestAngleEager";
  534. std::vector<double> origin = {1.143, 1.3123, 2.632, 2.554, -1.213, 1.3, 0.456, 3.563};
  535. TensorShape input_shape({4, 2});
  536. std::shared_ptr<Tensor> de_tensor;
  537. Tensor::CreateFromVector(origin, input_shape, &de_tensor);
  538. std::shared_ptr<TensorTransform> angle = std::make_shared<audio::Angle>();
  539. auto input = mindspore::MSTensor(std::make_shared<mindspore::dataset::DETensor>(de_tensor));
  540. mindspore::dataset::Execute Transform({angle});
  541. Status s = Transform(input, &input);
  542. ASSERT_TRUE(s.IsOk());
  543. }