Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 머신러닝
- 통계
- ADsP
- 이것이 코딩테스트다
- IRIS
- Python
- 딥러닝
- 자격증
- sklearn
- 회귀분석
- pytorch
- 태블로
- matplotlib
- tableau
- r
- SQLD
- 데이터분석준전문가
- ML
- pandas
- Deep Learning Specialization
- 데이터 분석
- Google ML Bootcamp
- 파이썬
- scikit learn
- 이코테
- 데이터 전처리
- 시각화
- SQL
- 데이터분석
- 코딩테스트
Archives
- Today
- Total
함께하는 데이터 분석
[Python] IMAGE(2D data) AUGMENTATION 본문
안녕하세요!
오늘은 이미지 증강(Image Augmentation)을
python을 통해 구현해보겠습니다.
Image Augmentation은 몇 개의 이미지를 활용하여
이미지에 여러 가지 변화를 주어 데이터의 양을 증가시키는 것입니다.
장점은 데이터 다양성 향상과 모델 성능 향상 등이 있습니다.
그렇다면 python에서 살펴볼까요?
라이브러리 불러오기
import numpy as np
from matplotlib.pyplot import imshow, subplots, title
from PIL import Image
from torchvision import transforms
import albumentations
import random
이미지 불러오고 그리기
img = Image.open('경로/image1.jpg')
imgArray = np.array(img) # 이미지 분석을 위해 배열 전환
imgArray.shape
>>> (400, 400, 3)
imshow(Image.fromarray(imgArray))
이미지 증강
fig, ax = subplots(2, 2, figsize=(9, 9))
loader_transform1 = transforms.ColorJitter(brightness=2)
loader_transform2 = transforms.ColorJitter(contrast=2)
loader_transform3 = transforms.ColorJitter(saturation=2)
loader_transform4 = transforms.ColorJitter(hue=0.3)
img_aug1 = loader_transform1(img)
img_aug2 = loader_transform2(img)
img_aug3 = loader_transform3(img)
img_aug4 = loader_transform4(img)
ax[0, 0].imshow(img_aug1)
ax[0, 1].imshow(img_aug2)
ax[1, 0].imshow(img_aug3)
ax[1, 1].imshow(img_aug4)
torchvision을 이용하여 밝기, 대비, 채도, 색상을 조절하여
4개의 이미지를 생성했습니다.
transform1 = albumentations.HorizontalFlip(p=0.5)
imshow(transform1(image=imgArray)['image'])
1/2의 확률로 좌우반전을 해준 이미지입니다.
transform2 = albumentations.ShiftScaleRotate(p=0.5)
imshow(transform2(image=imgArray)['image'])
1/2 확률로 돌리거나 이동해준 이미지입니다.
fig, ax = subplots(6, 6, figsize=(12, 12))
transform1 = albumentations.HorizontalFlip(p=0.5)
transform2 = albumentations.ShiftScaleRotate(p=0.5)
loader_transform = transforms.ColorJitter(brightness=2, contrast=2, saturation=2, hue=0.2)
for i in range(6):
for j in range(6):
newimg = transform1(image=imgArray)['image']
newimg = transform2(image=newimg)['image']
newimg = loader_transform(Image.fromarray(newimg))
ax[i, j].imshow(newimg)
Random erase
fig, ax = subplots(3, 3, figsize=(12, 12))
for i in range(3):
for j in range(3):
imgArray_aug = np.array(Image.open("경로/image1.jpg"))
indx1 = random.sample(range(400),2)
indx2 = random.sample(range(400),2)
length = (np.max(indx1)-np.min(indx1))*(np.max(indx2)-np.min(indx2))*3
imgArray_aug[np.min(indx1):np.max(indx1), np.min(indx2):np.max(indx2), range(3)] = np.random.choice(256, length, replace=True).reshape(((np.max(indx1)-np.min(indx1)),(np.max(indx2)-np.min(indx2)),3))
ax[i, j].imshow(Image.fromarray(imgArray_aug))
Mix up
imgArray1 = np.array(Image.open("경로/image1.jpg"))
imgArray2 = np.array(Image.open("경로/image2.jpg"))
imshow(Image.fromarray(imgArray1))
label1 = [1,0]
imshow(Image.fromarray(imgArray2))
label2 = [0,1]
img1을 [1,0], img2를 [0,1]로 설정했습니다.
import tensorflow as tf
def sample_beta_distribution(size, concentration_0=0.2, concentration_1=0.2):
gamma_1_sample = tf.random.gamma(shape=[size], alpha=concentration_1)
gamma_2_sample = tf.random.gamma(shape=[size], alpha=concentration_0)
return gamma_1_sample / (gamma_1_sample + gamma_2_sample)
L = sample_beta_distribution(1, 0.5, 0.5)
new_label = (label1*L) + (label2*(1-L))
new_image = (imgArray1*L) + (imgArray2*(1-L))
new_image = np.array(new_image, np.uint8)
imshow(Image.fromarray(new_image))
title(str(new_label))
베타분포를 이용하여 생성해 준 결과
img1을 0.43, img2를 0.56 정도로 Mix up 시켜준 것을 알 수 있습니다.
Copyright
- 비어플 빅데이터 학회
'학회 세션 > 비어플' 카테고리의 다른 글
[R] 로지스틱 회귀 & LDA (0) | 2022.03.26 |
---|---|
[Classification] LDA(선형 판별분석) (0) | 2022.03.26 |
[R] 데이터 불균형 해소 (0) | 2022.03.20 |
데이터 불균형 해소 (0) | 2022.03.20 |
[R] 선형회귀를 이용한 회귀분석 (0) | 2022.03.12 |