transform
data.transform.transform
End-to-end 데이터 변환을 지원하는 모듈입니다.
InspectionSizeResizer
InspectionSizeResizer(inspection_size_wh: Optional[ImageSizeType] = None, resizer: Optional[Resizer] = None)
Bases: ScaleResizer
원본 이미지가 inspection_size를 넘지 않도록 resize 했을 때의 image scale만큼 resize를 해주는 resizer를 생성하는 class 입니다.
inspection_size는 원본 이미지에 대해 적용하지만, 실제 연산은 ROI가 먼저 계산되기 때문에, 원본 이미지가 inspection_size를 넘지 않도록 resize 했을 때의 image scale을 미리 계산해두고, 해당 scale만큼 resize를 하는 resizer를 생성하여 계산합니다.
Source code in SaigeToolkit/data/transform/resize.py
set_scale_from_data
Source code in SaigeToolkit/data/transform/resize.py
StackedResizerHandler
StackedResizerHandler(resizer_list: List[Optional[Resizer]])
같은 image에 대해 여러번의 resize가 연속적으로 적용될 때, 여러개의 resize를 하나로 묶어서 최종 target size로 한번에 resize를 해주는 class입니다.
Source code in SaigeToolkit/data/transform/resize.py
is_empty
instance-attribute
__call__
__call__(return_revert_params: bool = False, ignore_round: bool = False, **data) -> Union[Dict, Tuple[Dict, Dict]]
Source code in SaigeToolkit/data/transform/resize.py
ROIHandler
ROI 기능을 수행합니다. 이미지에 대한 ROI 좌표를 계산해 크롭하고, 크롭된 이미지에 blind_mask를 적용해 마스크 영역의 픽셀 값을 0으로 치환합니다.
Source code in SaigeToolkit/data/transform/roi/roi_handler.py
roi_calculator_types
class-attribute
instance-attribute
roi_calculator_types = {'simple': RelativeBoxROI, 'advanced': PixelIntensityROI, 'auto': AutoRelativeBoxROI}
set
set(mode: str, blind_mask: Union[None, ndarray, str], image_only: bool = False, discard_outer_polygons: bool = False, det_blind_mask_threshold: float = 0.5, **kwargs)
Source code in SaigeToolkit/data/transform/roi/roi_handler.py
apply_crop
apply_crop(image: Union[Image, ndarray, List[Union[Image, ndarray]]], return_revert_params: bool = False, warmup: bool = False, **data) -> Union[Dict, Tuple[Dict, Dict]]
Source code in SaigeToolkit/data/transform/roi/roi_handler.py
apply_mask
Source code in SaigeToolkit/data/transform/roi/roi_handler.py
__call__
__call__(return_revert_params: bool = False, warmup: bool = False, **data) -> Union[Dict, Tuple[Dict, Dict]]
Source code in SaigeToolkit/data/transform/roi/roi_handler.py
_check_polygon_within_box
Source code in SaigeToolkit/data/transform/roi/roi_handler.py
ImageLoader
여러 형태의 데이터를 입력으로 받아, 전처리 과정을 거쳐 PIL Image 혹은 np.ndarray 로 return 합니다. 현재 지원하는 데이터는 다음과 같습니다. - 데이터 타입: [image path, np.ndarray, PIL Image] - color: ["RGB", "Gray"] - bit: [8, 16]
입력으로 받은 데이터에 따른 출력값은 다음과 같습니다. | image path | np.ndarray | PIL | RGB; 8 | PIL(RGB;8) | PIL(RGB;8) | PIL(RGB;8) | RGB;16 | PIL(RGB;8) | PIL(RGB;8) | - | Gray; 8 | PIL(L;8) | PIL(L;8) | PIL(L;8) | Gray;16 | PIL(L;8) | PIL(L;8) | PIL(L;8) |
Note1
PIL은 RGB;16을 지원하지 않습니다. 따라서 PIL(RGB;16)은 입력으로 들어올 수 없습니다.
Note2
PIL은 "I;16" 모드로 Gray;16을 지원하지만, PIL 내부의 convert 함수를 써서 Gray;8로 변환시 값이 overflow 나는 issue가 있습니다.
Note3
이미지는 기본적으로 np.ndarray로 로드되며, PIL.Image.Image로 로드하려면 to_numpy=False를 세팅하세요.
Note4
image_mode는 "RGB", "L" 중 하나를 지원하며, multipage (이미지 리스트) 인 경우 각 페이지의 모드를 리스트로 입력하세요.
예시: 1, 3번째 페이지는 RGB 이고 2번째 페이지는 L 인 경우 image_mode = ["RGB", "L", "RGB"]
Source code in SaigeToolkit/data/transform/image_load.py
__call__
call_method
make [PIL Image or np.ndarray] from PIL.Image, np.ndarray, or path string
Parameters:
-
image(Union[Image, ndarray, str, List]) –PIL.Image, array, path string or list of it.
Returns:
-
Dict(Dict) –{ "image": Union[PIL.Image.Image, np.ndarray, List[PIL.Image.Image], List[np.ndarray]], **input_dict, }
Source code in SaigeToolkit/data/transform/image_load.py
load
Source code in SaigeToolkit/data/transform/image_load.py
load_from_pil
Source code in SaigeToolkit/data/transform/image_load.py
load_from_array
Source code in SaigeToolkit/data/transform/image_load.py
load_from_path
Loading function using PIL.Image library. This function is introduced because {exif_transpose} must be processed. {exif_transpose} fix rotated image binary data using {EXIF} information. Without {exif_transpose}, network would accidently learn randomly rotated image data.
Parameters:
-
path(str) –path to image file
Returns:
-
Union[Image, ndarray]–Union[Image.Image, np.ndarray]: image
Source code in SaigeToolkit/data/transform/image_load.py
_load_from_plain_file_path
staticmethod
Loading function using PIL.Image library. This function is introduced because {exif_transpose} must be processed. {exif_transpose} fix rotated image binary data using {EXIF} information. Without {exif_transpose}, network would accidently learn randomly rotated image data.
Parameters:
-
path(str) –path to image file
Returns:
-
Image–Image.Image: image
Source code in SaigeToolkit/data/transform/image_load.py
_load_from_encrypted_file_path
staticmethod
Loading function using PIL.Image library and decrypting encrypted image file.
Parameters:
-
path(str) –encrypted image file path
Returns:
-
Image–Image.Image: decrypted image
Source code in SaigeToolkit/data/transform/image_load.py
_convert_16_to_8
staticmethod
이미지 픽셀당 비트수를 16에서 8로 변화합니다. 입출력 데이터 타입이 같습니다. (pil로 받으면 pil을 ndarray로 받을 시 ndarray를 출력합니다.)
Source code in SaigeToolkit/data/transform/image_load.py
_is_16bit
staticmethod
Source code in SaigeToolkit/data/transform/image_load.py
OversizedImageHandling
Bases: Enum
Transform
Transform(image_mode: Union[str, List[str]] = 'RGB', inspection_size_wh: Optional[ImageSizeType] = None, roi: Optional[Dict] = None, resize: Optional[Dict] = None, augmentation: Optional[Dict] = None, roi_mask_first: bool = True, oversized_image_handling: str = 'resize_to_fit', skip_round_resize_if_undersized: bool = False)
Source code in SaigeToolkit/data/transform/transform.py
base_resizer
instance-attribute
base_resizer = build_resizer(**resize) if resize is not None else None
inspection_size_resizer
instance-attribute
inspection_size_resizer: Optional[InspectionSizeResizer] = None
skip_round_resize_if_undersized
instance-attribute
Operation
_set_inspection_size_resizer_and_stacked_resizer_handler
inspection_size_wh와 oversized_image_handling에 따라서 inspection_size_resizer와 stacked_resizer_handler 설정합니다.
Source code in SaigeToolkit/data/transform/transform.py
__call__
data Dict에 transform을 적용합니다.
Parameters:
-
data(Dict) –data Dictionary
-
warmup(bool, default:False) –InferenceHandler warmup시에 사용하는 파라미터 입니다. True일 경우, 현재 transform을 적용했을 때 나올 수 있는 가장 큰 image size로 transform을 적용합니다. Transform operation 중 ROI의 경우 input image에 따라 output size가 매번 바뀔 수 있기 때문에 해당 옵션이 추가되었습니다. Defaults to False.
Returns:
-
Dict(Dict) –transform이 적용된 데이터 Dict입니다.
Source code in SaigeToolkit/data/transform/transform.py
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 | |
get_resize_scale
classmethod
before_transform_image_size -> after_transform_input_size가 되기 위한 scale을 구합니다. before_transform_image_size * scale = after_transform_input_size
Parameters:
-
transform_params(Dict) –transform시에 저장해둔 parameter 입니다.
Returns:
-
List[float]–List[float]: before_transform_image_size * scale = after_transform_input_size인 scale scale: [scale_width, scale_height]
Source code in SaigeToolkit/data/transform/transform.py
_get_next_revert_operation
staticmethod
_get_next_revert_operation(transform_params: Dict) -> Optional[Operation]
다음으로 할 revert operation을 가져옵니다. operation_stack에서 operation이 제거되지는 않습니다.
Parameters:
-
transform_params(Dict) –transform시에 저장해둔 parameter 입니다.
Returns:
-
Optional[Operation]–Optional[Operation]: 남아있는 revert operation이 있으면 operation을 없으면 None을 반환합니다.
Source code in SaigeToolkit/data/transform/transform.py
revert
classmethod
revert(data: Dict, transform_params: Dict, operation: Optional[Operation] = None) -> Dict
summary
Parameters:
-
data(Dict) –revert operation을 적용할 data dictionary입니다. data는 다음과 같은 구조를 지닙니다. { "key1": { "data" (Union[np.ndarray, torch.Tensor, List[Dict]]): 실제 data입니다. "data_type" (str): 해당 data의 type 입니다. 현재 ["array", "objects"]를 지원합니다. }, "key2": { "data" (Union[np.ndarray, torch.Tensor, List[Dict]]): 실제 data입니다. "data_type" (str): 해당 data의 type 입니다. 현재 ["array", "objects"]를 지원합니다. }, ... }
-
transform_params(Dict) –transform시에 저장해둔 parameter 입니다.
-
operation(Optional[Operation], default:None) –transform에서 revert가 가능한 operation 입니다. Enum class인 Transform.Operation에 있는 항목들을 지원합니다. operation이 None이 아닐 시, 해당 operation 까지 revert를 적용하고, None일 시, 그 다음 revert operation을 적용합니다. Defaults to None.
Raises:
-
RevertOperationNotFoundError–args로 넣은 operation이 남은 revert operation 중에 없을 때 에러를 발생합니다.
Returns:
-
Dict(Dict) –revert operation이 적용된 data dictionary 입니다. 구조는 Args의 data와 같습니다.
Source code in SaigeToolkit/data/transform/transform.py
_revert
classmethod
Source code in SaigeToolkit/data/transform/transform.py
_revert_resize
staticmethod
_revert_resize(data: Optional[Union[Tensor, ndarray, List[Dict]]], revert_params: Optional[Dict], data_type: str) -> Union[Tensor, ndarray, List[Dict]]
Source code in SaigeToolkit/data/transform/transform.py
_revert_roi
staticmethod
_revert_roi(data: Optional[Union[Tensor, ndarray, List[Dict]]], revert_params: Optional[Dict], data_type: str) -> Union[Tensor, ndarray, List[Dict]]
Source code in SaigeToolkit/data/transform/transform.py
is_oversized
staticmethod
InspectionSize 연산에서 resize 되었는지 여부를 판단
Source code in SaigeToolkit/data/transform/transform.py
build_augmentation
build_augmentation(config: Dict) -> Augmentation
Source code in SaigeToolkit/data/transform/augmentation/builder.py
validate_inspection_size_wh
validate_inspection_size_wh(inspection_size_wh: ImageSizeType) -> None
inspection_size_wh가 유효한지 확인합니다. inspection_size_wh는 (width, height)로 모두 1 이상의 int여야 합니다.
유효하지 않을 경우, error를 발생시킵니다.
Parameters:
-
inspection_size_wh(Optional[ImageSizeType]) –검사할 inspection_size_wh.
Raises:
-
InspectionSizeTypeError–맞지 않는 타입일 경우 발생합니다.
-
InspectionSizeValueError–값이 1 이상이 아닐 경우 발생합니다.
Source code in SaigeToolkit/data/transform/parameter_validation.py
resize_polygon
resize_polygon(polygons: PolygonType, image_size: Sequence[int], tw: int, th: int) -> PolygonType
Resize polygon from (w, h) to (tw, th)
Source code in SaigeToolkit/data/transform/polygon_function.py
translate_polygon
translate_polygon(polygons: PolygonType, offset: Sequence[int]) -> PolygonType
Translate polyfon from [(x1, y1), ... ] to [(x1 - x_offset), (y1 - y_offset), ...]
Source code in SaigeToolkit/data/transform/polygon_function.py
build_resizer
build_resizer(**kwargs) -> Resizer
Source code in SaigeToolkit/data/transform/resize.py
read_image_size
read_image_size(image: Union[Image, Tensor, ndarray]) -> ImageSizeType
image size: (W, H)
Source code in SaigeToolkit/data/transform/image_function.py
resize_array
resize_array(array: Union[Tensor, ndarray], target_size: ImageSizeType, resampling: str = 'nearest') -> Union[Tensor, ndarray]
[HW, BHW]의 array를 resize합니다.
Parameters:
-
array(Union[Tensor, ndarray]) –array data [HW, BHW]
-
target_size(ImageSizeType) –[W, H]
-
resampling(str, default:'nearest') –resampling method. Defaults to "nearest".
Returns:
-
Union[Tensor, ndarray]–Union[torch.Tensor, np.ndarray]: resized array
Source code in SaigeToolkit/data/transform/image_function.py
add_constant_margin_array
add_constant_margin_array(array: Union[Tensor, ndarray], left: int, top: int, right: int, bottom: int, value: Union[float, int]) -> Union[Tensor, ndarray]
array에 left, top, right, bottom 만큼 constant value로 padding 합니다.
Parameters:
-
array(Union[Tensor, ndarray]) –array data [HW, BHW]
-
left(int) –array의 왼쪽 padding size 입니다.
-
top(int) –array의 위쪽 padding size 입니다.
-
right(int) –array의 오른쪽 padding size 입니다.
-
bottom(int) –array의 아래쪽 padding size 입니다.
-
value(Union[float, int]) –padding된 영역에 들어갈 value 입니다.