dataset
Module diagram
classDiagram
class dataset {
}
class base_dataset {
}
class builder {
}
class platform_reader {
}
class saige_vision_reader {
}
class srproj_dataset {
}
class srproj_reader {
}
dataset --> builder
builder --> base_dataset
builder --> srproj_dataset
srproj_dataset --> base_dataset
srproj_dataset --> srproj_reader
data.dataset
커스텀 데이터셋 구현과 각종 데이터 로드 메서드를 제공합니다.
모든 데이터셋 구현은 SaigeDataset 클래스를 상속받아야 합니다.
SaigeDataset
SaigeDataset(crop: Optional[dict] = None, transform: Optional[dict] = None, collate: Optional[Callable[[List[dict]], dict]] = None, device: device = torch.device('cpu'), **neglect: dict)
Bases: Dataset
Saige's basic dataset class.
Attributes:
-
crop_fn(Optional[Callable[[dict], List[dict]]) –function cropping image data into image patch data.
-
transform(Type[Transform]) –transform class for transforming to a single image data.
-
to_tensor(Callable[[Union[Image.Image, np.ndarray], torch.Tensor]) –data returning as Tensor type
-
n_patch(int) –number of patches when crop_fn is used.
-
collate_function(Callable[[List[dict]], dict]) –function list of data collating into one batch data
initializing Saige base dataset.
Parameters:
-
crop(Optional[dict], default:None) –config for crop function. Defaults to None.
-
transform(Optional[dict], default:None) –config for transforming to a single raw data
-
collate(Optional[Callable[[List[dict]], dict]], default:None) –list of data collating into one batch data. if None, torch.utils basic collate function would be used. Defaults to None.
-
device(device, default:device('cpu')) –gpu device
Source code in SaigeToolkit/data/dataset/base_dataset.py
collate_function
instance-attribute
__len__
data_on_memory
To store data in RAM memory (faster data loading),
put all loaded data ( use self.load_raw_data() ) in list self.data_on_memory.
Or define self.data_on_memory as empty list to load data from filesystem everytime.
Source code in SaigeToolkit/data/dataset/base_dataset.py
stack_data_on_memory
Stack all data on RAM memory for quick-loading purpose. output would be saved on class attribute.
Returns:
-
List[dict]–List[dict]: Entire data list-dict.
Source code in SaigeToolkit/data/dataset/base_dataset.py
load_raw_data
load_image
Source code in SaigeToolkit/data/dataset/base_dataset.py
load_label
abstractmethod
__getitem__
dataset default getitem function. data is first loaded, then processed as following order: resize, augmentation, transform to torch.Tensor. data could be loaded from file_system (load_raw_data) or RAM memory (data_on_memory).
Parameters:
-
index(int) –data item index.
Returns:
-
Union[dict, List[dict]]–Union[dict, List[dict]]: single data, or cropped data list when crop_fn exists.
Source code in SaigeToolkit/data/dataset/base_dataset.py
process_data
data processing after raw loading.
- resize: Resize Image and Label
- btw_resize_aug: Dummy function for user customization
- augmentation: Process augmentation defined in util/augmentation
- btw_aug_transform: Dummy function for user customization
- to_tensor: Transform data to torch tensor
Parameters:
-
data(dict) –raw data dict
Returns:
-
dict(dict) –processed data dict
Source code in SaigeToolkit/data/dataset/base_dataset.py
to_tensor
to_tensor items in data into torch.Tensor (if convertible)
Parameters:
-
data(dict, default:{}) –raw data dict
Returns:
-
dict(dict) –tensorized data dict
Source code in SaigeToolkit/data/dataset/base_dataset.py
resize_collate
Example collate function with resizing items.
Parameters:
-
batch(List[dict]) –list of data dicts
Returns:
-
dict(dict) –resized-and-collated data dict
Source code in SaigeToolkit/data/dataset/base_dataset.py
padding_collate
Example collate function with padding items.
Parameters:
-
batch(List[dict]) –list of data dicts
Returns:
-
dict(dict) –padded-and-collated data dict
Source code in SaigeToolkit/data/dataset/base_dataset.py
calculate_patch_number
When crop_fn is activated, calculate number of text patches.
Parameters:
-
files(Optional[List[dict]], default:None) –list of meta data dict. if None, calculate patch_number from self.files attribute. Defaults to None.
Returns:
-
int(int) –number of patches in meta data list
files
Source code in SaigeToolkit/data/dataset/base_dataset.py
build_dataset
build_dataset(_target_, **cfg_dataset: dict) -> SaigeDataset
build dataset from config["dataset"]
Parameters:
-
cfg_dataset(dict, default:{}) –config dict for building dataset
Returns:
-
SaigeDataset(SaigeDataset) –dataset object
Source code in SaigeToolkit/data/dataset/builder.py
base_dataset
모든 데이터셋 구현에 사용되는 기본 클래스를 정의합니다.
DummyAttribute
ABCMeta
Bases: ABCMeta
"abstract_attribute" from:\ https://stackoverflow.com/questions/23831510/abstract-attribute-not-property/50381071#50381071
__call__
Source code in SaigeToolkit/data/dataset/base_dataset.py
SaigeDataset
SaigeDataset(crop: Optional[dict] = None, transform: Optional[dict] = None, collate: Optional[Callable[[List[dict]], dict]] = None, device: device = torch.device('cpu'), **neglect: dict)
Bases: Dataset
Saige's basic dataset class.
Attributes:
-
crop_fn(Optional[Callable[[dict], List[dict]]) –function cropping image data into image patch data.
-
transform(Type[Transform]) –transform class for transforming to a single image data.
-
to_tensor(Callable[[Union[Image.Image, np.ndarray], torch.Tensor]) –data returning as Tensor type
-
n_patch(int) –number of patches when crop_fn is used.
-
collate_function(Callable[[List[dict]], dict]) –function list of data collating into one batch data
initializing Saige base dataset.
Parameters:
-
crop(Optional[dict], default:None) –config for crop function. Defaults to None.
-
transform(Optional[dict], default:None) –config for transforming to a single raw data
-
collate(Optional[Callable[[List[dict]], dict]], default:None) –list of data collating into one batch data. if None, torch.utils basic collate function would be used. Defaults to None.
-
device(device, default:device('cpu')) –gpu device
Source code in SaigeToolkit/data/dataset/base_dataset.py
collate_function
instance-attribute
__len__
data_on_memory
To store data in RAM memory (faster data loading),
put all loaded data ( use self.load_raw_data() ) in list self.data_on_memory.
Or define self.data_on_memory as empty list to load data from filesystem everytime.
Source code in SaigeToolkit/data/dataset/base_dataset.py
stack_data_on_memory
Stack all data on RAM memory for quick-loading purpose. output would be saved on class attribute.
Returns:
-
List[dict]–List[dict]: Entire data list-dict.
Source code in SaigeToolkit/data/dataset/base_dataset.py
load_raw_data
load_image
Source code in SaigeToolkit/data/dataset/base_dataset.py
load_label
abstractmethod
__getitem__
dataset default getitem function. data is first loaded, then processed as following order: resize, augmentation, transform to torch.Tensor. data could be loaded from file_system (load_raw_data) or RAM memory (data_on_memory).
Parameters:
-
index(int) –data item index.
Returns:
-
Union[dict, List[dict]]–Union[dict, List[dict]]: single data, or cropped data list when crop_fn exists.
Source code in SaigeToolkit/data/dataset/base_dataset.py
process_data
data processing after raw loading.
- resize: Resize Image and Label
- btw_resize_aug: Dummy function for user customization
- augmentation: Process augmentation defined in util/augmentation
- btw_aug_transform: Dummy function for user customization
- to_tensor: Transform data to torch tensor
Parameters:
-
data(dict) –raw data dict
Returns:
-
dict(dict) –processed data dict
Source code in SaigeToolkit/data/dataset/base_dataset.py
to_tensor
to_tensor items in data into torch.Tensor (if convertible)
Parameters:
-
data(dict, default:{}) –raw data dict
Returns:
-
dict(dict) –tensorized data dict
Source code in SaigeToolkit/data/dataset/base_dataset.py
resize_collate
Example collate function with resizing items.
Parameters:
-
batch(List[dict]) –list of data dicts
Returns:
-
dict(dict) –resized-and-collated data dict
Source code in SaigeToolkit/data/dataset/base_dataset.py
padding_collate
Example collate function with padding items.
Parameters:
-
batch(List[dict]) –list of data dicts
Returns:
-
dict(dict) –padded-and-collated data dict
Source code in SaigeToolkit/data/dataset/base_dataset.py
calculate_patch_number
When crop_fn is activated, calculate number of text patches.
Parameters:
-
files(Optional[List[dict]], default:None) –list of meta data dict. if None, calculate patch_number from self.files attribute. Defaults to None.
Returns:
-
int(int) –number of patches in meta data list
files
Source code in SaigeToolkit/data/dataset/base_dataset.py
builder
build_dataset
build_dataset(_target_, **cfg_dataset: dict) -> SaigeDataset
build dataset from config["dataset"]
Parameters:
-
cfg_dataset(dict, default:{}) –config dict for building dataset
Returns:
-
SaigeDataset(SaigeDataset) –dataset object
Source code in SaigeToolkit/data/dataset/builder.py
platform_reader
request_vision_projects
Data platform으로부터 project 정보들을 가져옵니다.
Parameters:
-
ip(str) –API서버에 접근하기 위한 IP 주소입니다.
-
port(int) –API서버에 접근하기 위한 PORT 번호입니다.
-
project_ids(list) –project 정보를 가져오기 위한 project_id의 list입니다.
Returns:
-
List[dict]–List[dict]: project 정보를 dict형태로 저장한 list를 반환합니다.
[ { "project_id": int, "class_info": List[str], "dataset": { "train_images": { "{image_id}": { "path": str, "width": int, "height": int, "client": str, # Dataset metadata "end_user": str, # Dataset metadata "domain": str, # Dataset metadata "class_index": int, # CLS only have this key "labels" : [ # DET, SEG only have this key { "class_index": int, "bounding_box": List[int], # DET only have this key "contours": List[List[int]] # SEG only have this key }, ..., # times number of labels ] }, ..., # times number of images }, "validation_images": {...}, "Not split: {...} } }, ..., # times number of projects ]
Source code in SaigeToolkit/data/dataset/platform_reader.py
saige_vision_reader
load_labels
Source code in SaigeToolkit/data/dataset/saige_vision_reader.py
load_label_cls
load_label_iad
load_label_det
박스 별 dict를 concat 되어있는 bboxes, labels, scores로 변환합니다.
Source code in SaigeToolkit/data/dataset/saige_vision_reader.py
load_label_seg
Source code in SaigeToolkit/data/dataset/saige_vision_reader.py
load_label_ocr
Source code in SaigeToolkit/data/dataset/saige_vision_reader.py
srproj_dataset
SrprojDataset
SrprojDataset(code: Union[str, List[Union[str, dict]]], mode: Optional[str] = None, two_class: bool = False, split: str = 'Training', preload_data_on_memory: bool = False, srproj_params: Optional[dict] = None, **cfg_dataset: dict)
Bases: SaigeDataset
Dataset class with building data from srproj file. Basic structure of dataset class is defined in SaigeDataset. SrprojDataset class only defines data loading from srproj file.
Attributes:
-
files(List[dict]) –meta_data dict list from srproj file.
-
n_classes(int) –number of classes of data. fix to 2 if two_class mode is on.
-
classes(List[str]) –list of class names for each class index. meta_data: only contains information about
how to load data -
n_patch(int) –number of patches when crop_fn is used.
-
data_on_memory(List[dict]) –list of loaded data dicts if
preload_data_on_memoryis activated
initializing SrprojDataset
Parameters:
-
code(Union[str, List[Union[str, dict]]]) –dataset code(s) with srproj params. 여러 srproj를 사용하는 경우, 각 srproj_param을 dictionary 형태로 추가할 수 있습니다. 이 경우, "srproj_params" 파라미터를 각자의 srproj_param으로 업데이트 하여 사용합니다.
-
mode(Optional[str], default:None) –data label type. Defaults to None.
-
two_class(bool, default:False) –two_class mode selector. Defaults to False.
-
split(str, default:'Training') –["Training", "Validation"]. Defaults to "Training".
-
preload_data_on_memory(bool, default:False) –whether pre-load all data and save on RAM memory. Defaults to False.
-
srproj_params(dict, default:None) –read_srproj함수에 전달하는 추가적인 파라미터들 입니다. 현재는 이미지 경로 핸들링을 위한 파라미터들이 있으며, 지속적으로 추가될 수 있습니다. -
cfg_dataset(dict, default:{}) –config dicts for mother class
Source code in SaigeToolkit/data/dataset/srproj_dataset.py
data_on_memory
instance-attribute
load_label
load label data from file-system
Parameters:
-
file(dict) –meta data dict
Returns:
-
dict(dict) –label data as dict
Source code in SaigeToolkit/data/dataset/srproj_dataset.py
srproj_reader
path_interpreter
data path interpreter
Parameters:
-
code(str) –dataset code (rule: {domain}-{source}-{category}) (ex) sample dataset for cls: "test_directory-sample-cls")
Raises:
-
RuntimeError–invalid classifier keys (code) for srproj code.
-
Exception–wrong type of input code
Returns:
-
Tuple[str, str, str, str]–Tuple[str, str, str, str]: absolute path for dataset, domain, source, category
Source code in SaigeToolkit/data/dataset/srproj_reader.py
read_srproj
read_srproj(code: str, split: str, two_class: bool = False, mode: Optional[str] = None, use_absolute_path: bool = False, srproj_image_directory: Optional[str] = None, system_image_directory: Optional[str] = None, get_class_colors: bool = False, skip_problematic_files: bool = False) -> Tuple[List[Dict], int, Union[List[str], List[Dict]]]
read srproj dataset from file-system.
Parameters:
-
code(str) –dataset code.
-
split(str) –split dataset, "Training" or "Validation".
-
two_class(bool, default:False) –load data as two class mode (ex) normal <-> abnormal)
-
mode(Optional[str], default:None) –select data label type.
-
use_absolute_path(bool, default:False) –use the image path in srproj as is.
-
srproj_image_directory(Optional[str], default:None) –srproj 파일에 작성된 이미지 경로를 현재 시스템 상의 이미지 경로로 변환하기 위해 치환해야 하는 이미지 폴더 경로. None이면 SaigeDatabase 규칙 사용.
-
system_image_directory(Optional[str], default:None) –코드가 구동되는 시스템 상의 이미지 폴더 경로. None이면 SaigeDatabase 규칙 사용.
-
get_class_colors(bool)–srproj에 정의된 각 클래스의 color를 받을지 여부. True이면
-
skip_problematic_files(bool)–srproj 파일에 작성된 이미지 경로로부터 이미지들을 읽을 때, 해당 파라미터가 True 라면, 파일이 실제 존재하지 않거나, 읽다가 문제가 발생할 경우 해당 파일을 제외하고 나머지 파일을 계속 읽음. 만약, False라면 Error를 raise 함.
Returns:
-
Tuple[List[Dict], int, Union[List[str], List[Dict]]]–Tuple[List[Dict], int, Union[List[str], List[Dict]]]: list of meta data dicts, number of classes, and list of class names or dict
Note
.sproj 파일에는 각 이미지들의 경로와 라벨 정보 등이 포함되어 있습니다.
이때 이미지 경로는 해당 파일을 생성한 PC 기준의 절대 경로로 작성되어 있기 때문에, 현재 이 코드가 실행되는 시스템에서의 경로로 변환해 주어야 합니다.
현재 이미지 경로 변환 옵션은 3가지가 존재합니다.
1. sproj를 생성한 PC에서 코드를 실행하는 경우,
use_absolute_path= True로 세팅하면 srproj에 작성된 이미지 경로를 그대로 사용합니다.
2. 이미지와 srproj가 SaigeDatabase 룰에 맞게 구성된 경우,
이미지는 images 폴더에 하위에 있고 (root/images/.../xxx.png)
srproj는 images 폴더보다 한 단계 아래 경로에 있어야 합니다 (root/projects/xxx.srproj)
이때는srproj_image_directory= None,system_image_directory= None 으로 설정합니다.
3. 이미지와 srproj가 SaigeDatabase 룰을 따르지 않는 경우,srproj_image_directory와system_image_directory`를 설정하면
srproj에 작성된 이미지 경로를 다음 규칙으로 변환합니다:
{srproj_image_directory}/.../xxx.png -> {system_image_directory}/.../xxx.png
Source code in SaigeToolkit/data/dataset/srproj_reader.py
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 | |
check_label
check all data label is valid. If any data is corrupted, pop out from meta data list.
Parameters:
-
files(List[Dict]) –meta data list to be checked
-
mode(str) –label data type
Returns:
-
List[Dict]–List[Dict]: cleaned meta data list
Source code in SaigeToolkit/data/dataset/srproj_reader.py
load_srproj_label
load single data dict from srproj meta data.
Parameters:
-
file(Dict) –single meta data dict
-
use_crop_fn(bool, default:False) –Whether to use the crop function. Defaults to False.
Raises:
-
NotImplementedError–only four modes are available. ["Classification", "Detection", "Segmentation", "OpticalCharacterRecognition"]
Returns:
-
Dict(Dict) –label data as dict
Source code in SaigeToolkit/data/dataset/srproj_reader.py
load_label_cls
load_label_det
load detection label
Parameters:
-
file(Dict) –meta data for detection label
Returns:
-
Dict(Dict) –
Source code in SaigeToolkit/data/dataset/srproj_reader.py
load_label_seg
load segmentation label
Parameters:
-
file(Dict) –meta data for segmentation label
-
return_polygon(bool, default:True) –whether return polygon data. Defaults to True.
-
mask_to_pil(bool, default:False) –whether return mask as PIL.Image. Defaults to False.
Returns:
-
Dict(Dict) –segmentation label data dict
Source code in SaigeToolkit/data/dataset/srproj_reader.py
load_label_ocr
load ocr label
Parameters:
-
file(Dict) –meta data for ocr label
Returns:
-
Dict(Dict) –ocr label data dict
Source code in SaigeToolkit/data/dataset/srproj_reader.py
_refine_kie_labels
Source code in SaigeToolkit/data/dataset/srproj_reader.py
merge_srproj_classes
Source code in SaigeToolkit/data/dataset/srproj_reader.py
convert_srproj_class_color_to_rgb
srproj의 각 클래스 색 코드를 rgb 값으로 변환합니다.