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 31 kB

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