|
|
@ -24,21 +24,25 @@
|
|
|
|
#include "minddata/dataset/engine/datasetops/source/cifar_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/source/cifar_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/source/image_folder_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/source/image_folder_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/source/mnist_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/source/mnist_op.h"
|
|
|
|
|
|
|
|
#include "minddata/dataset/engine/datasetops/source/voc_op.h"
|
|
|
|
// Dataset operator headers (in alphabetical order)
|
|
|
|
// Dataset operator headers (in alphabetical order)
|
|
|
|
#include "minddata/dataset/engine/datasetops/batch_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/batch_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/map_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/map_op.h"
|
|
|
|
|
|
|
|
#include "minddata/dataset/engine/datasetops/project_op.h"
|
|
|
|
|
|
|
|
#include "minddata/dataset/engine/datasetops/rename_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/repeat_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/repeat_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/shuffle_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/shuffle_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/skip_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/skip_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/project_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/take_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/zip_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/zip_op.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/rename_op.h"
|
|
|
|
|
|
|
|
// Sampler headers (in alphabetical order)
|
|
|
|
// Sampler headers (in alphabetical order)
|
|
|
|
#include "minddata/dataset/engine/datasetops/source/sampler/sampler.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/source/sampler/sampler.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/source/sampler/random_sampler.h"
|
|
|
|
#include "minddata/dataset/engine/datasetops/source/sampler/random_sampler.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "minddata/dataset/core/config_manager.h"
|
|
|
|
#include "minddata/dataset/core/config_manager.h"
|
|
|
|
#include "minddata/dataset/util/random.h"
|
|
|
|
#include "minddata/dataset/util/random.h"
|
|
|
|
|
|
|
|
#include "minddata/dataset/util/path.h"
|
|
|
|
|
|
|
|
|
|
|
|
namespace mindspore {
|
|
|
|
namespace mindspore {
|
|
|
|
namespace dataset {
|
|
|
|
namespace dataset {
|
|
|
@ -123,6 +127,16 @@ std::shared_ptr<MnistDataset> Mnist(std::string dataset_dir, std::shared_ptr<Sam
|
|
|
|
return ds->ValidateParams() ? ds : nullptr;
|
|
|
|
return ds->ValidateParams() ? ds : nullptr;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Function to create a VOCDataset.
|
|
|
|
|
|
|
|
std::shared_ptr<VOCDataset> VOC(const std::string &dataset_dir, const std::string &task, const std::string &mode,
|
|
|
|
|
|
|
|
const std::map<std::string, int32_t> &class_index, bool decode,
|
|
|
|
|
|
|
|
std::shared_ptr<SamplerObj> sampler) {
|
|
|
|
|
|
|
|
auto ds = std::make_shared<VOCDataset>(dataset_dir, task, mode, class_index, decode, sampler);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Call derived class validation method.
|
|
|
|
|
|
|
|
return ds->ValidateParams() ? ds : nullptr;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// FUNCTIONS TO CREATE DATASETS FOR DATASET OPS
|
|
|
|
// FUNCTIONS TO CREATE DATASETS FOR DATASET OPS
|
|
|
|
// (In alphabetical order)
|
|
|
|
// (In alphabetical order)
|
|
|
|
|
|
|
|
|
|
|
@ -232,6 +246,26 @@ std::shared_ptr<SkipDataset> Dataset::Skip(int32_t count) {
|
|
|
|
return ds;
|
|
|
|
return ds;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Function to create a TakeDataset.
|
|
|
|
|
|
|
|
std::shared_ptr<Dataset> Dataset::Take(int32_t count) {
|
|
|
|
|
|
|
|
// If count is greater than the number of element in dataset or equal to -1,
|
|
|
|
|
|
|
|
// all the element in dataset will be taken
|
|
|
|
|
|
|
|
if (count == -1) {
|
|
|
|
|
|
|
|
return shared_from_this();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
auto ds = std::make_shared<TakeDataset>(count);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Call derived class validation method.
|
|
|
|
|
|
|
|
if (!ds->ValidateParams()) {
|
|
|
|
|
|
|
|
return nullptr;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ds->children.push_back(shared_from_this());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return ds;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Function to create a Zip dataset
|
|
|
|
// Function to create a Zip dataset
|
|
|
|
std::shared_ptr<ZipDataset> Dataset::Zip(const std::vector<std::shared_ptr<Dataset>> &datasets) {
|
|
|
|
std::shared_ptr<ZipDataset> Dataset::Zip(const std::vector<std::shared_ptr<Dataset>> &datasets) {
|
|
|
|
// Default values
|
|
|
|
// Default values
|
|
|
@ -392,6 +426,71 @@ std::vector<std::shared_ptr<DatasetOp>> MnistDataset::Build() {
|
|
|
|
return node_ops;
|
|
|
|
return node_ops;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Constructor for VOCDataset
|
|
|
|
|
|
|
|
VOCDataset::VOCDataset(const std::string &dataset_dir, const std::string &task, const std::string &mode,
|
|
|
|
|
|
|
|
const std::map<std::string, int32_t> &class_index, bool decode,
|
|
|
|
|
|
|
|
std::shared_ptr<SamplerObj> sampler)
|
|
|
|
|
|
|
|
: dataset_dir_(dataset_dir),
|
|
|
|
|
|
|
|
task_(task),
|
|
|
|
|
|
|
|
mode_(mode),
|
|
|
|
|
|
|
|
class_index_(class_index),
|
|
|
|
|
|
|
|
decode_(decode),
|
|
|
|
|
|
|
|
sampler_(sampler) {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool VOCDataset::ValidateParams() {
|
|
|
|
|
|
|
|
Path dir(dataset_dir_);
|
|
|
|
|
|
|
|
if (!dir.IsDirectory()) {
|
|
|
|
|
|
|
|
MS_LOG(ERROR) << "Invalid dataset path or no dataset path is specified.";
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (task_ == "Segmentation") {
|
|
|
|
|
|
|
|
if (!class_index_.empty()) {
|
|
|
|
|
|
|
|
MS_LOG(ERROR) << "class_indexing is invalid in Segmentation task.";
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
Path imagesets_file = dir / "ImageSets" / "Segmentation" / mode_ + ".txt";
|
|
|
|
|
|
|
|
if (!imagesets_file.Exists()) {
|
|
|
|
|
|
|
|
MS_LOG(ERROR) << "[Segmentation] imagesets_file is invalid or not exist";
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else if (task_ == "Detection") {
|
|
|
|
|
|
|
|
Path imagesets_file = dir / "ImageSets" / "Main" / mode_ + ".txt";
|
|
|
|
|
|
|
|
if (!imagesets_file.Exists()) {
|
|
|
|
|
|
|
|
MS_LOG(ERROR) << "[Detection] imagesets_file is invalid or not exist.";
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
MS_LOG(ERROR) << "Invalid task: " << task_;
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Function to build VOCDataset
|
|
|
|
|
|
|
|
std::vector<std::shared_ptr<DatasetOp>> VOCDataset::Build() {
|
|
|
|
|
|
|
|
// A vector containing shared pointer to the Dataset Ops that this object will create
|
|
|
|
|
|
|
|
std::vector<std::shared_ptr<DatasetOp>> node_ops;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// If user does not specify Sampler, create a default sampler based on the shuffle variable.
|
|
|
|
|
|
|
|
if (sampler_ == nullptr) {
|
|
|
|
|
|
|
|
sampler_ = CreateDefaultSampler();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<VOCOp::Builder> builder = std::make_shared<VOCOp::Builder>();
|
|
|
|
|
|
|
|
(void)builder->SetDir(dataset_dir_);
|
|
|
|
|
|
|
|
(void)builder->SetTask(task_);
|
|
|
|
|
|
|
|
(void)builder->SetMode(mode_);
|
|
|
|
|
|
|
|
(void)builder->SetNumWorkers(num_workers_);
|
|
|
|
|
|
|
|
(void)builder->SetSampler(std::move(sampler_->Build()));
|
|
|
|
|
|
|
|
(void)builder->SetDecode(decode_);
|
|
|
|
|
|
|
|
(void)builder->SetClassIndex(class_index_);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<VOCOp> op;
|
|
|
|
|
|
|
|
RETURN_EMPTY_IF_ERROR(builder->Build(&op));
|
|
|
|
|
|
|
|
node_ops.push_back(op);
|
|
|
|
|
|
|
|
return node_ops;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// DERIVED DATASET CLASSES LEAF-NODE DATASETS
|
|
|
|
// DERIVED DATASET CLASSES LEAF-NODE DATASETS
|
|
|
|
// (In alphabetical order)
|
|
|
|
// (In alphabetical order)
|
|
|
|
|
|
|
|
|
|
|
@ -580,6 +679,28 @@ bool SkipDataset::ValidateParams() {
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Constructor for TakeDataset
|
|
|
|
|
|
|
|
TakeDataset::TakeDataset(int32_t count) : take_count_(count) {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Function to build the TakeOp
|
|
|
|
|
|
|
|
std::vector<std::shared_ptr<DatasetOp>> TakeDataset::Build() {
|
|
|
|
|
|
|
|
// A vector containing shared pointer to the Dataset Ops that this object will create
|
|
|
|
|
|
|
|
std::vector<std::shared_ptr<DatasetOp>> node_ops;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
node_ops.push_back(std::make_shared<TakeOp>(take_count_, connector_que_size_));
|
|
|
|
|
|
|
|
return node_ops;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Function to validate the parameters for TakeDataset
|
|
|
|
|
|
|
|
bool TakeDataset::ValidateParams() {
|
|
|
|
|
|
|
|
if (take_count_ < -1) {
|
|
|
|
|
|
|
|
MS_LOG(ERROR) << "Take: Invalid input, take_count: " << take_count_;
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Function to build ZipOp
|
|
|
|
// Function to build ZipOp
|
|
|
|
ZipDataset::ZipDataset() {}
|
|
|
|
ZipDataset::ZipDataset() {}
|
|
|
|
|
|
|
|
|
|
|
|