Line data Source code
1 : // SPDX-License-Identifier: Apache-2.0 2 : /** 3 : * Copyright (C) 2020 Parichay Kapoor <pk.kapoor@samsung.com> 4 : * 5 : * @file dataset.h 6 : * @date 14 October 2020 7 : * @see https://github.com/nnstreamer/nntrainer 8 : * @author Jijoong Moon <jijoong.moon@samsung.com> 9 : * @author Parichay Kapoor <pk.kapoor@samsung.com> 10 : * @bug No known bugs except for NYI items 11 : * @brief This is dataset interface for c++ API 12 : * 13 : * @note This is experimental API and not stable. 14 : */ 15 : 16 : #ifndef __ML_TRAIN_DATASET_H__ 17 : #define __ML_TRAIN_DATASET_H__ 18 : 19 : #if __cplusplus >= MIN_CPP_VERSION 20 : 21 : #include <functional> 22 : #include <memory> 23 : #include <string> 24 : #include <vector> 25 : 26 : #include <common.h> 27 : 28 : namespace ml { 29 : namespace train { 30 : 31 : /** 32 : * @brief Dataset generator callback type declaration 33 : */ 34 : typedef std::function<std::remove_pointer<ml_train_datagen_cb>::type> 35 : datagen_cb; 36 : 37 : /** 38 : * @brief Enumeration for dataset type 39 : */ 40 : enum class DatasetType { 41 : GENERATOR, /** Dataset with generators */ 42 : FILE, /** Dataset with files */ 43 : DIR, /** Dataset with directory */ 44 : UNKNOWN /** Unknown dataset type */ 45 : }; 46 : 47 : /** 48 : * @brief Enumeration of data mode type 49 : */ 50 : enum class DatasetModeType { 51 : MODE_TRAIN = ML_TRAIN_DATASET_MODE_TRAIN, /** data for training */ 52 : MODE_VALID = ML_TRAIN_DATASET_MODE_VALID, /** data for validation */ 53 : MODE_TEST = ML_TRAIN_DATASET_MODE_TEST, /** data for test */ 54 : MODE_UNKNOWN /** data not known */ 55 : }; 56 : 57 : /** 58 : * @class Dataset for class for input data 59 : * @brief Dataset for read and manage data 60 : */ 61 122 : class Dataset { 62 : public: 63 : /** 64 : * @brief Destructor 65 : */ 66 122 : virtual ~Dataset() = default; 67 : 68 : /** 69 : * @brief set property 70 : * @param[in] values values of property 71 : * @details Properties (values) is in the format - 72 : * { std::string property_name, std::string property_val, ...} 73 : */ 74 : virtual void setProperty(const std::vector<std::string> &values) = 0; 75 : }; 76 : 77 : /** 78 : * @brief Create a Dataset object with given arguements 79 : * 80 : * @param type dataset type 81 : * @param properties property representations 82 : * @return std::unique_ptr<Dataset> created dataset 83 : */ 84 : std::unique_ptr<Dataset> 85 : createDataset(DatasetType type, 86 : const std::vector<std::string> &properties = {}); 87 : 88 : /** 89 : * @brief Create a Dataset object 90 : * 91 : * @param type dataset type 92 : * @param path path to a file or folder 93 : * @param properties property representations 94 : * @return std::unique_ptr<Dataset> created dataset 95 : */ 96 : std::unique_ptr<Dataset> 97 : createDataset(DatasetType type, const char *path, 98 : const std::vector<std::string> &properties = {}); 99 : 100 : /** 101 : * @brief Create a Dataset object 102 : * 103 : * @param type dataset type 104 : * @param cb callback 105 : * @param user_data user data 106 : * @param properties property representations 107 : * @return std::unique_ptr<Dataset> created dataset 108 : */ 109 : std::unique_ptr<Dataset> 110 : createDataset(DatasetType type, datagen_cb cb, void *user_data = nullptr, 111 : const std::vector<std::string> &properties = {}); 112 : } // namespace train 113 : } // namespace ml 114 : 115 : #else 116 : #error "CPP versions c++17 or over are only supported" 117 : #endif // __cpluscplus 118 : #endif // __ML_TRAIN_DATASET_H__