티스토리 뷰
이 사진을 가지고 python에서 albumentations을 사용하여 이미지를 바꿔보겠다.
Normalize
- 0 ~ 255사이인 pixel값을 "(img - mean * max_pixel_value) / (std * max_pixel_value)"의 공식을 이용하여 숫자를 작게 만든다.
장점
- 입력 값의 범위를 줄여, 학습에 빨리 수렴되도록 하고, 큰 입력값을 가진 특정 pixel의 특정 weight값이 커지는걸 방지
ColorJitter
class albumentations.augmentations.transforms.ColorJitter (brightness=0.2, contrast=0.2, saturation=0.2, hue=0.2, always_apply=False, p=0.5) - 최대값 or (최소, 최대)로 지정
brightness : 명도
contrast : 대비 ( 물체를 다른 물체와 배경과 구별할 수 있게 만들어 주는 시각적인 특성의 차이를 말한다. )
saturation : 채도
hue : 색상
always_apply : 항상 적용 여부 (p = 1과 같음)
p : 적용할 확률
이미지의 색상/명도/채도 랜덤으로 바꿔줌
RandomResizedCrop
albumentations.augmentations.crops.transforms.RandomResizedCrop (height, width, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=1, always_apply=False, p=1.0)
height : crop한 후 height size
width : crop한 후 width size
scale :
ratio :
interpolation : 보간법 알고리즘 flag (어떤 보간법을 사용할 것인가? https://albumentations.ai/docs/api_reference/augmentations/crops/transforms/ 참조)
RandomRotate90 & Resize
albumentations.augmentations.geometric.rotate.RandomRotate90
p: 실행 확률
90, 180,270,360도.... 회전시킨다. (43도, 78도 X 반드시 90도 각도)
위처럼 4가지 종류의 회전을 시켜줌
GaussNoise
var_limit : 노이즈 분산 범위
mean : 노이즈의 평균
per_channel : True > 노이즈가 각 채널에 독립적으로 샘플링 / False > 모든 채널에 대해 노이즈가 한 번 샘플링
가우시안 분포를 따르는 노이즈를 만들어서 입혀주는 역할
ISONoise
albumentations.augmentations.transforms.ISONoise (color_shift=(0.01, 0.05), intensity=(0.1, 0.5), always_apply=False, p=0.5)
color_shift : 색상 변화의 분산 범위
intensity : luminace noise와 색상 강도 제어
카메라 센서 노이즈
GaussianBlur
albumentations.augmentations.blur.transforms.GaussianBlur (blur_limit=(3, 7), sigma_limit=0, always_apply=False, p=0.5)
blur_limit : 커널 사이즈 설정 ( 홀수로 설정해야함)
sigma_limit : 커널 표준편차
가우시안 분포를 따르는 랜덤 커널 사이즈로 필터를 생성하여 블러처리
MotionBlur
albumentations.augmentations.blur.transforms.MotionBlur (blur_limit=7, allow_shifted=True, always_apply=False, p=0.5)
blur_limit : 최대 커널 사이즈
allow_shifted : true로 설정하면 이동되지 않은 커널만 생성되고, 그렇지 않으면 임의로 이동된 커널을 생성합니다. ( 무슨 차이가 있는지 모르겠음)
카메라가 흔들린것 처럼 블러처리
ImageCompression
albumentations.augmentations.transforms.ImageCompression (quality_lower=99, quality_upper=100, compression_type=<ImageCompressionType.JPEG: 0>, always_apply=False, p=0.5)
quality_lower : 최저값 (무슨의미일까? 10%까지 압축?)
quality_upper : 최대값
compression_type : 압축 타입
압축을 통해 화질을 낮춘다.
RandomFog
albumentations.augmentations.transforms.RandomFog (fog_coef_lower=0.3, fog_coef_upper=1, alpha_coef=0.08, always_apply=False, p=0.5)
fog_coef_lower : fog 크기 계수 최소값 ( 원모양 최소 크기)
fog_coef_upper : fog 크기 계수 최대값 ( 원모양 최대 크기)
alpha_coef : 안개 원의 투명성 정도
안개 효과를 부여(원이 커질 수록 사진이 뿌얘짐)
RandomGamma
albumentations.augmentations.transforms.RandomGamma (gamma_limit=(80, 120), eps=None, always_apply=False, p=0.5)
감마 : 감마값에 따라 같은 화면이라도 표현되는 밝기 톤의 차이가 느껴짐
gamma_limit : 감마의 범위 지정, 단일값 n을 지정시, (-n ~ n) , ( n1 , n2)처럼 범위를 지정할 수 있음
eps : 더이상 사용하지 않는 파라미터
RandomRain
albumentations.augmentations.transforms.RandomRain (slant_lower=-10, slant_upper=10, drop_length=20, drop_width=1, drop_color=(200, 200, 200), blur_value=7, brightness_coefficient=0.7, rain_type=None, always_apply=False, p=0.5)
slant_lower : 빗방울 각도 최소? ( 최대 -20까지) > 음수 일시 왼쪽으로 빗방울이 내림
slant_upper : 빗방울 각도 최대 (최대 20까지)
drop_length : 빗방울 길이
drop_width : 빗방울 넓이
drop_color : 빗방울 색상 (기본 흰색)
blur_value : 사진의 흐림 정도
brightness_coefficient : 밝기 계수
rain_type : [None, "drizzle", "heavy", "torrential"] 존재
RandomSnow
albumentations.augmentations.transforms.RandomSnow (snow_point_lower=0.1, snow_point_upper=0.3, brightness_coeff=2.5, always_apply=False, p=0.5)
snow_point_lower : 눈의 양 최소치
snow_point_upper : 눈의 양 최대치
brightness_coeff : 밝기 계수
RandomShadow
albumentations.augmentations.transforms.RandomShadow (shadow_roi=(0, 0.5, 1, 1), num_shadows_lower=1, num_shadows_upper=2, shadow_dimension=5, always_apply=False, p=0.5)
shadow_roi : 그림자 다각형을 놓을 위치 (x_min, y_min, x_max, y_max)
num_shadows_lower : 최소 다각형 수
num_shadows_upper : 최대 다각형 수
shadow_dimension : 다각형 그림자 변의 수
무작위로 만든 다각형 그림자가 이미지에 삽입
RandomSunFlare
albumentations.augmentations.transforms.RandomSunFlare (flare_roi=(0, 0, 1, 0.5), angle_lower=0, angle_upper=1, num_flare_circles_lower=6, num_flare_circles_upper=10, src_radius=400, src_color=(255, 255, 255), always_apply=False, p=0.5)
flare_roi: 태양 효과 위치
angle_lower : 태양 효과 기울기 최소치
angle_upper : 태양 효과 기울기 최대치
num_flare_circles_lower : 태양 효과의 최소 원의수
num_flare_circles_upper : 태양 효과의 최대 원의수
src_radius : 태양 효과 원 반지름(반경)
src_color : 태양 효과 색상
Flip
albumentations.augmentations.geometric.transforms.Flip
파라미터 존재 x
horizontally, vertically, horizontally+ vertically 세가지 중 하나를 선택하여 수행
GridDistortion
albumentations.augmentations.geometric.transforms.GridDistortion (num_steps=5, distort_limit=0.3, interpolation=1, border_mode=4, value=None, mask_value=None, normalized=False, always_apply=False, p=0.5)
num_steps : 그리드 cell의 갯수 (많을수록 왜곡이 심해짐)
distort_limit : 왜곡 제한 (값이 클수록 왜곡을 많이시킴)
interpolation : 보간방법 (cv2.INTER_NEAREST, cv2.INTER_LINEAR, cv2.INTER_CUBIC, cv2.INTER_AREA, cv2.INTER_LANCZOS4. Default: cv2.INTER_LINEAR.) 이런것들이 있다고 함
border_mode : 사진의 데두리 관련 작업 방법( cv2.BORDER_CONSTANT, cv2.BORDER_REPLICATE, cv2.BORDER_REFLECT, cv2.BORDER_WRAP, cv2.BORDER_REFLECT_101. Default: cv2.BORDER_REFLECT_101)
value : border_mode가 cv2.BORDER_CONSTANT일때 적용되는 패딩 값 (어떤 역할인지 모르겠음)
mask_value : border_mode가 cv2.BORDER_CONSTANT일때 적용되는 마스크 값 (어떤 역할인지 모르겠음)
normalized : True일시, 왜곡이 이미지 밖으로 나가지 않도록 정규화
Perspective
albumentations.augmentations.geometric.transforms.Perspective (scale=(0.05, 0.1), keep_size=True, pad_mode=0, pad_val=0, mask_pad_val=0, fit_output=False, interpolation=1, always_apply=False, p=0.5)
scale : 전체 이미지 모서리부터 임의 거리를 샘플링하는데 사용 ( 이것때문에 사진이 커지고 변동됨)
keep_size : 원래 image size 보존 여부 ( 이미지 size가 변경되기 때문)
pad_mode : 테두리 Opencv Border mode를 따름
pad_val : 테두리 값
mask_pad_val : 테두리 마스크 값
fit_output : True > 이미지 변환후, 기존 image size 안에 바뀐 이미지가 들어감 / False > 변환 이미지가 기존 이미지 사이즈 밖으로 넘어갈 수 있음
interpolation: 보간법. cv2를 따름
Affine
albumentations.augmentations.geometric.transforms.Affine (scale=None, translate_percent=None, translate_px=None, rotate=None, shear=None, interpolation=1, mask_interpolation=0, cval=0, cval_mask=0, mode=0, fit_output=False, keep_ratio=False, rotate_method='largest_box', always_apply=False, p=0.5)
Affine: 평행이동 , 스케일링, 전단, 회전을 이용한 변화
scale : 사진의 크기 조절 (zoom 의 역할) // (최소비율 , 최대비율)로 지정하여 사용가능 (음수 ~ 양수)
translate_percent : 사진 이동 비율 // (최소비율 , 최대비율)로 지정하여 사용가능
translate_px : 사진 이동 픽셀 // (최소 픽셀, 최대 픽셀)
rotate : 사진 회전 ( 최소 회전, 최대 회전)
shear : 사진 전단(기울임) (최소 기울임, 최대 기울임)
interpolation : 보간법, cv2를따름
mask_interpolation :
cval : 새로 만든 픽셀을 채울 때 사용할 상수 값 > 새로 만든 픽셀이란, 기울이거나 회전 등 이유로 새로 생긴 배경
cval_mask : mask에 사용할 상수값
mode : OpenCV border
fit_output : True : 새로 변경된 이미지가 기존 크기 안에 반드시 존재 / False : 밖으로 나갈 수 있음
keep_ratio : radom scale됐을때 원본비율 유지 여부
rotate_method : 공식 doc에는 존재하는 파라미터지만, albumentation 1.3.0에서는 존재하지 않는 파라미터
이외에도 많은 것들이 있으니 밑에 사이트에서 원하는 것을 찾아 사용하길..
'Pytorch' 카테고리의 다른 글
[Pytorch] torchtext vocab생성 (0) | 2023.01.31 |
---|---|
[pytorch] gpu가 cpu보다 느리거나 같을 때. (0) | 2023.01.09 |
[pytorch] LSTM 내부구조 이해하기 (0) | 2023.01.05 |
[pytorch] RNN 이해하기 (0) | 2023.01.04 |
[Pytorch] torch.tensor() Vs torch.Tensor() 차이 (0) | 2022.12.28 |
- Total
- Today
- Yesterday
- yolov11
- 도커
- python
- 디텍션
- DeepLearning
- 초보자
- 뜯어보기
- 티스토리챌린지
- github
- V11
- YOLOv8
- CNN
- docker
- GIT
- 이미지
- 백준
- GNN
- 오류
- 정리
- 욜로
- java
- 알고리즘
- 깃
- 어탠션
- 오블완
- 자바
- c3k2
- Tree
- 딥러닝
- YOLO
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |