|
|
|
@ -13,49 +13,25 @@
|
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
|
* limitations under the License.
|
|
|
|
|
*/
|
|
|
|
|
#include <fstream>
|
|
|
|
|
#include <iostream>
|
|
|
|
|
#include <memory>
|
|
|
|
|
#include <vector>
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
|
|
#include "utils/log_adapter.h"
|
|
|
|
|
#include "utils/ms_utils.h"
|
|
|
|
|
#include "common/common.h"
|
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
|
#include "securec.h"
|
|
|
|
|
#include "minddata/dataset/include/datasets.h"
|
|
|
|
|
#include "minddata/dataset/include/status.h"
|
|
|
|
|
#include "minddata/dataset/include/transforms.h"
|
|
|
|
|
#include "minddata/dataset/include/iterator.h"
|
|
|
|
|
#include "minddata/dataset/core/constants.h"
|
|
|
|
|
#include "minddata/dataset/core/tensor_shape.h"
|
|
|
|
|
#include "minddata/dataset/core/tensor.h"
|
|
|
|
|
#include "minddata/dataset/include/samplers.h"
|
|
|
|
|
|
|
|
|
|
using namespace mindspore::dataset::api;
|
|
|
|
|
using mindspore::MsLogLevel::ERROR;
|
|
|
|
|
using mindspore::ExceptionType::NoExceptionType;
|
|
|
|
|
using mindspore::LogStream;
|
|
|
|
|
using mindspore::dataset::Tensor;
|
|
|
|
|
using mindspore::dataset::TensorShape;
|
|
|
|
|
using mindspore::dataset::TensorImpl;
|
|
|
|
|
using mindspore::dataset::DataType;
|
|
|
|
|
using mindspore::dataset::Status;
|
|
|
|
|
using mindspore::dataset::BorderType;
|
|
|
|
|
using mindspore::dataset::dsize_t;
|
|
|
|
|
|
|
|
|
|
class MindDataTestPipeline : public UT::DatasetOpTesting {
|
|
|
|
|
protected:
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
TEST_F(MindDataTestPipeline, TestCocoDetection) {
|
|
|
|
|
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestCocoDetection.";
|
|
|
|
|
TEST_F(MindDataTestPipeline, TestCocoDefault) {
|
|
|
|
|
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestCocoDefault.";
|
|
|
|
|
// Create a Coco Dataset
|
|
|
|
|
std::string folder_path = datasets_root_path_ + "/testCOCO/train";
|
|
|
|
|
std::string annotation_file = datasets_root_path_ + "/testCOCO/annotations/train.json";
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<Dataset> ds = Coco(folder_path, annotation_file, "Detection", false, SequentialSampler(0, 6));
|
|
|
|
|
std::shared_ptr<Dataset> ds = Coco(folder_path, annotation_file);
|
|
|
|
|
EXPECT_NE(ds, nullptr);
|
|
|
|
|
|
|
|
|
|
// Create an iterator over the result of the above dataset
|
|
|
|
@ -67,28 +43,14 @@ TEST_F(MindDataTestPipeline, TestCocoDetection) {
|
|
|
|
|
std::unordered_map<std::string, std::shared_ptr<Tensor>> row;
|
|
|
|
|
iter->GetNextRow(&row);
|
|
|
|
|
|
|
|
|
|
std::string expect_file[] = {"000000391895", "000000318219", "000000554625", "000000574769", "000000060623",
|
|
|
|
|
"000000309022"};
|
|
|
|
|
std::vector<std::vector<float>> expect_bbox_vector = {{10.0, 10.0, 10.0, 10.0, 70.0, 70.0, 70.0, 70.0},
|
|
|
|
|
{20.0, 20.0, 20.0, 20.0, 80.0, 80.0, 80.0, 80.0},
|
|
|
|
|
{30.0, 30.0, 30.0, 30.0}, {40.0, 40.0, 40.0, 40.0},
|
|
|
|
|
{50.0, 50.0, 50.0, 50.0}, {60.0, 60.0, 60.0, 60.0}};
|
|
|
|
|
std::vector<std::vector<uint32_t>> expect_catagoryid_list = {{1, 7}, {2, 8}, {3}, {4}, {5}, {6}};
|
|
|
|
|
uint64_t i = 0;
|
|
|
|
|
while (row.size() != 0) {
|
|
|
|
|
auto image = row["image"];
|
|
|
|
|
auto bbox = row["bbox"];
|
|
|
|
|
auto category_id = row["category_id"];
|
|
|
|
|
std::shared_ptr<Tensor> expect_image;
|
|
|
|
|
Tensor::CreateFromFile(folder_path + "/" + expect_file[i] + ".jpg", &expect_image);
|
|
|
|
|
EXPECT_EQ(*image, *expect_image);
|
|
|
|
|
std::shared_ptr<Tensor> expect_bbox;
|
|
|
|
|
dsize_t bbox_num = static_cast<dsize_t>(expect_bbox_vector[i].size() / 4);
|
|
|
|
|
Tensor::CreateFromVector(expect_bbox_vector[i], TensorShape({bbox_num, 4}), &expect_bbox);
|
|
|
|
|
EXPECT_EQ(*bbox, *expect_bbox);
|
|
|
|
|
std::shared_ptr<Tensor> expect_categoryid;
|
|
|
|
|
Tensor::CreateFromVector(expect_catagoryid_list[i], TensorShape({bbox_num, 1}), &expect_categoryid);
|
|
|
|
|
EXPECT_EQ(*category_id, *expect_categoryid);
|
|
|
|
|
MS_LOG(INFO) << "Tensor image shape: " << image->shape();
|
|
|
|
|
MS_LOG(INFO) << "Tensor bbox shape: " << bbox->shape();
|
|
|
|
|
MS_LOG(INFO) << "Tensor category_id shape: " << category_id->shape();
|
|
|
|
|
iter->GetNextRow(&row);
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
@ -99,13 +61,13 @@ TEST_F(MindDataTestPipeline, TestCocoDetection) {
|
|
|
|
|
iter->Stop();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(MindDataTestPipeline, TestCocoStuff) {
|
|
|
|
|
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestCocoStuff.";
|
|
|
|
|
TEST_F(MindDataTestPipeline, TestCocoDetection) {
|
|
|
|
|
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestCocoDetection.";
|
|
|
|
|
// Create a Coco Dataset
|
|
|
|
|
std::string folder_path = datasets_root_path_ + "/testCOCO/train";
|
|
|
|
|
std::string annotation_file = datasets_root_path_ + "/testCOCO/annotations/train.json";
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<Dataset> ds = Coco(folder_path, annotation_file, "Stuff", false, SequentialSampler(0, 6));
|
|
|
|
|
std::shared_ptr<Dataset> ds = Coco(folder_path, annotation_file, "Detection", false, SequentialSampler(0, 6));
|
|
|
|
|
EXPECT_NE(ds, nullptr);
|
|
|
|
|
|
|
|
|
|
// Create an iterator over the result of the above dataset
|
|
|
|
@ -119,27 +81,26 @@ TEST_F(MindDataTestPipeline, TestCocoStuff) {
|
|
|
|
|
|
|
|
|
|
std::string expect_file[] = {"000000391895", "000000318219", "000000554625", "000000574769", "000000060623",
|
|
|
|
|
"000000309022"};
|
|
|
|
|
std::vector<std::vector<float>> expect_segmentation_vector =
|
|
|
|
|
{{10.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0,
|
|
|
|
|
70.0, 72.0, 73.0, 74.0, 75.0, -1.0, -1.0, -1.0, -1.0, -1.0},
|
|
|
|
|
{20.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0,
|
|
|
|
|
10.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, -1.0},
|
|
|
|
|
{40.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 40.0, 41.0, 42.0},
|
|
|
|
|
{50.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0},
|
|
|
|
|
{60.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0},
|
|
|
|
|
{60.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0}};
|
|
|
|
|
std::vector<std::vector<dsize_t>> expect_size = {{2, 10}, {2, 11}, {1, 12}, {1, 13}, {1, 14}, {2, 7}};
|
|
|
|
|
std::vector<std::vector<float>> expect_bbox_vector = {{10.0, 10.0, 10.0, 10.0, 70.0, 70.0, 70.0, 70.0},
|
|
|
|
|
{20.0, 20.0, 20.0, 20.0, 80.0, 80.0, 80.0, 80.0},
|
|
|
|
|
{30.0, 30.0, 30.0, 30.0}, {40.0, 40.0, 40.0, 40.0},
|
|
|
|
|
{50.0, 50.0, 50.0, 50.0}, {60.0, 60.0, 60.0, 60.0}};
|
|
|
|
|
std::vector<std::vector<uint32_t>> expect_catagoryid_list = {{1, 7}, {2, 8}, {3}, {4}, {5}, {6}};
|
|
|
|
|
uint64_t i = 0;
|
|
|
|
|
while (row.size() != 0) {
|
|
|
|
|
auto image = row["image"];
|
|
|
|
|
auto segmentation = row["segmentation"];
|
|
|
|
|
auto iscrowd = row["iscrowd"];
|
|
|
|
|
auto bbox = row["bbox"];
|
|
|
|
|
auto category_id = row["category_id"];
|
|
|
|
|
std::shared_ptr<Tensor> expect_image;
|
|
|
|
|
Tensor::CreateFromFile(folder_path + "/" + expect_file[i] + ".jpg", &expect_image);
|
|
|
|
|
EXPECT_EQ(*image, *expect_image);
|
|
|
|
|
std::shared_ptr<Tensor> expect_segmentation;
|
|
|
|
|
Tensor::CreateFromVector(expect_segmentation_vector[i], TensorShape(expect_size[i]), &expect_segmentation);
|
|
|
|
|
EXPECT_EQ(*segmentation, *expect_segmentation);
|
|
|
|
|
std::shared_ptr<Tensor> expect_bbox;
|
|
|
|
|
dsize_t bbox_num = static_cast<dsize_t>(expect_bbox_vector[i].size() / 4);
|
|
|
|
|
Tensor::CreateFromVector(expect_bbox_vector[i], TensorShape({bbox_num, 4}), &expect_bbox);
|
|
|
|
|
EXPECT_EQ(*bbox, *expect_bbox);
|
|
|
|
|
std::shared_ptr<Tensor> expect_categoryid;
|
|
|
|
|
Tensor::CreateFromVector(expect_catagoryid_list[i], TensorShape({bbox_num, 1}), &expect_categoryid);
|
|
|
|
|
EXPECT_EQ(*category_id, *expect_categoryid);
|
|
|
|
|
iter->GetNextRow(&row);
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
@ -150,6 +111,24 @@ TEST_F(MindDataTestPipeline, TestCocoStuff) {
|
|
|
|
|
iter->Stop();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(MindDataTestPipeline, TestCocoException) {
|
|
|
|
|
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestCocoException.";
|
|
|
|
|
// Create a Coco Dataset
|
|
|
|
|
std::string folder_path = datasets_root_path_ + "/testCOCO/train";
|
|
|
|
|
std::string annotation_file = datasets_root_path_ + "/testCOCO/annotations/train.json";
|
|
|
|
|
std::string invalid_folder_path = "./NotExist";
|
|
|
|
|
std::string invalid_annotation_file = "./NotExistFile";
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<Dataset> ds = Coco(invalid_folder_path, annotation_file);
|
|
|
|
|
EXPECT_EQ(ds, nullptr);
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<Dataset> ds1 = Coco(folder_path, invalid_annotation_file);
|
|
|
|
|
EXPECT_EQ(ds1, nullptr);
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<Dataset> ds2 = Coco(folder_path, annotation_file, "valid_mode");
|
|
|
|
|
EXPECT_EQ(ds2, nullptr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(MindDataTestPipeline, TestCocoKeypoint) {
|
|
|
|
|
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestCocoKeypoint.";
|
|
|
|
|
// Create a Coco Dataset
|
|
|
|
@ -261,13 +240,13 @@ TEST_F(MindDataTestPipeline, TestCocoPanoptic) {
|
|
|
|
|
iter->Stop();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(MindDataTestPipeline, TestCocoDefault) {
|
|
|
|
|
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestCocoDetection.";
|
|
|
|
|
TEST_F(MindDataTestPipeline, TestCocoStuff) {
|
|
|
|
|
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestCocoStuff.";
|
|
|
|
|
// Create a Coco Dataset
|
|
|
|
|
std::string folder_path = datasets_root_path_ + "/testCOCO/train";
|
|
|
|
|
std::string annotation_file = datasets_root_path_ + "/testCOCO/annotations/train.json";
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<Dataset> ds = Coco(folder_path, annotation_file);
|
|
|
|
|
std::shared_ptr<Dataset> ds = Coco(folder_path, annotation_file, "Stuff", false, SequentialSampler(0, 6));
|
|
|
|
|
EXPECT_NE(ds, nullptr);
|
|
|
|
|
|
|
|
|
|
// Create an iterator over the result of the above dataset
|
|
|
|
@ -279,14 +258,29 @@ TEST_F(MindDataTestPipeline, TestCocoDefault) {
|
|
|
|
|
std::unordered_map<std::string, std::shared_ptr<Tensor>> row;
|
|
|
|
|
iter->GetNextRow(&row);
|
|
|
|
|
|
|
|
|
|
std::string expect_file[] = {"000000391895", "000000318219", "000000554625", "000000574769", "000000060623",
|
|
|
|
|
"000000309022"};
|
|
|
|
|
std::vector<std::vector<float>> expect_segmentation_vector =
|
|
|
|
|
{{10.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0,
|
|
|
|
|
70.0, 72.0, 73.0, 74.0, 75.0, -1.0, -1.0, -1.0, -1.0, -1.0},
|
|
|
|
|
{20.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0,
|
|
|
|
|
10.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, -1.0},
|
|
|
|
|
{40.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 40.0, 41.0, 42.0},
|
|
|
|
|
{50.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0},
|
|
|
|
|
{60.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0},
|
|
|
|
|
{60.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0}};
|
|
|
|
|
std::vector<std::vector<dsize_t>> expect_size = {{2, 10}, {2, 11}, {1, 12}, {1, 13}, {1, 14}, {2, 7}};
|
|
|
|
|
uint64_t i = 0;
|
|
|
|
|
while (row.size() != 0) {
|
|
|
|
|
auto image = row["image"];
|
|
|
|
|
auto bbox = row["bbox"];
|
|
|
|
|
auto category_id = row["category_id"];
|
|
|
|
|
MS_LOG(INFO) << "Tensor image shape: " << image->shape();
|
|
|
|
|
MS_LOG(INFO) << "Tensor bbox shape: " << bbox->shape();
|
|
|
|
|
MS_LOG(INFO) << "Tensor category_id shape: " << category_id->shape();
|
|
|
|
|
auto segmentation = row["segmentation"];
|
|
|
|
|
auto iscrowd = row["iscrowd"];
|
|
|
|
|
std::shared_ptr<Tensor> expect_image;
|
|
|
|
|
Tensor::CreateFromFile(folder_path + "/" + expect_file[i] + ".jpg", &expect_image);
|
|
|
|
|
EXPECT_EQ(*image, *expect_image);
|
|
|
|
|
std::shared_ptr<Tensor> expect_segmentation;
|
|
|
|
|
Tensor::CreateFromVector(expect_segmentation_vector[i], TensorShape(expect_size[i]), &expect_segmentation);
|
|
|
|
|
EXPECT_EQ(*segmentation, *expect_segmentation);
|
|
|
|
|
iter->GetNextRow(&row);
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
@ -296,21 +290,3 @@ TEST_F(MindDataTestPipeline, TestCocoDefault) {
|
|
|
|
|
// Manually terminate the pipeline
|
|
|
|
|
iter->Stop();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(MindDataTestPipeline, TestCocoException) {
|
|
|
|
|
MS_LOG(INFO) << "Doing MindDataTestPipeline-TestCocoDetection.";
|
|
|
|
|
// Create a Coco Dataset
|
|
|
|
|
std::string folder_path = datasets_root_path_ + "/testCOCO/train";
|
|
|
|
|
std::string annotation_file = datasets_root_path_ + "/testCOCO/annotations/train.json";
|
|
|
|
|
std::string invalid_folder_path = "./NotExist";
|
|
|
|
|
std::string invalid_annotation_file = "./NotExistFile";
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<Dataset> ds = Coco(invalid_folder_path, annotation_file);
|
|
|
|
|
EXPECT_EQ(ds, nullptr);
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<Dataset> ds1 = Coco(folder_path, invalid_annotation_file);
|
|
|
|
|
EXPECT_EQ(ds1, nullptr);
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<Dataset> ds2 = Coco(folder_path, annotation_file, "valid_mode");
|
|
|
|
|
EXPECT_EQ(ds2, nullptr);
|
|
|
|
|
}
|
|
|
|
|