이미지 증강

2024. 7. 18. 10:49·빅데이터 분석가 양성과정/Python - 딥러닝
  • 정답지를 가지고 학습을 하는 딥러닝 및 머신러닝 알고리즘은 지도 학습(Supervised Learning)으로 분류됨
  • 지도 학습에 있어서, 알고리즘의 성능을 향상시키기 위해선 수많은 정답지를 지닌 데이터가 존재해야만 함
  • 하지만 현실에서는 학습에 사용할 데이터가 매우 적은 상황이 많음
  • 이 때 데이터셋을 증강시켜주는 이미지 증강(Image Augmentation) 기법을 사용할 수 있음

 

  • 이미지 증강 기법은 원본 이미지를 회전시키거나(rotate), 뒤집거나(flip), 자른다(cut)
  • 데이터의 증가로 인해 모델의 학습이 더 잘될 수밖에 없음
  • 이미지를 자르거나 섞는 방법으로 만들어진 새로운 이미지는 모델의 과적합(Overfitting)을 막아주는 중요한 역할을 함
  • 또한 이미지 증강은 오직 학습 데이터셋에만 적용하는 것임

    
python
train_datagen = ImageDataGenerator(rescale=1./255,
horizontal_flip=True,
width_shift_range=0.1,
height_shift_range=0.1,
rotation_range=5,
shear_range=0.7,
zoom_range=1.2,
vertical_flip=True,
fill_mode='nearest')
  • rescale : 주어진 이미지의 크기를 바꾸어 줌
  • horizontal_flip, vertical_flip : 주어진 이미지를 수평 또는 수직으로 뒤집음
  • zoom_range : 정해진 범위 안에서 축소 또는 확대함
  • width_shift, height_shift : 정해진 범위 안에서 그림을 수평 또는 수직으로 랜덤하게 평행 이동시킴
  • rotation_rang : 정해진 각도만큼 이미지를 회전시킴
  • shear_range : 좌표 하나를 고정시키고 다른 몇 개의 좌표를 이동시키는 변환을 함
  • fill_mode : 이미지를 축소 또는 회전하거나 이동할 때 생기는 빈 공간을 어떻게 채울지 결정함
    (nearest 옵션을 선택하면 가장 비슷한 색으로 채워짐)

 

실습 : MRI 뇌 사진을 통한 치매 환자 예측

  • MRI 뇌 사진을 보고 치매 환자의 뇌인지, 일반인의 뇌인지를 컨볼루션 신경망을 통해 예측해볼 것
  • 이미지에 대한 증강 기법을 적용해볼 것

 

 


    
python
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation, Dropout, Flatten, Conv2D, MaxPooling2D
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras import optimizers
import numpy as np
import matplotlib.pyplot as plt
# 깃허브에 준비된 데이터를 가져옵니다.
!git clone https://github.com/taehojo/data-ch20.git
# 학습셋의 변형을 설정하는 부분입니다.
train_datagen = ImageDataGenerator(rescale=1./255, # 주어진 이미지의 크기를 설정합니다.
horizontal_flip=True, # 수평 대칭 이미지를 50% 확률로 만들어 추가합니다.
width_shift_range=0.1, # 전체 크기의 15% 범위에서 좌우로 이동합니다.
height_shift_range=0.1, # 마찬가지로 위, 아래로 이동합니다.
#rotation_range=5, # 정해진 각도만큼 회전시킵니다.
#shear_range=0.7, # 좌표 하나를 고정시키고 나머지를 이동시킵니다.
#zoom_range=1.2, # 확대 또는 축소시킵니다.
#vertical_flip=True, # 수직 대칭 이미지를 만듭니다.
#fill_mode='nearest' # 빈 공간을 채우는 방법입니다. nearest 옵션은 가장 비슷한 색으로 채우게 됩니다.
)
train_generator = train_datagen.flow_from_directory(
'./data-ch20/train', # 학습셋이 있는 폴더의 위치입니다.
target_size=(150, 150),
batch_size=5,
class_mode='binary')
# 테스트셋은 이미지 부풀리기 과정을 진행하지 않습니다.
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory(
'./data-ch20/test', # 테스트셋이 있는 폴더의 위치입니다.
target_size=(150, 150),
batch_size=5,
class_mode='binary')
# 앞서 배운 CNN 모델을 만들어 적용해 보겠습니다.
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(150,150,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.summary()

 


    
python
# 모델 실행의 옵션을 설정합니다.
model.compile(loss='binary_crossentropy', optimizer=optimizers.Adam(learning_rate=0.0002), metrics=['accuracy'])
# 학습의 조기 중단을 설정합니다.
early_stopping_callback = EarlyStopping(monitor='val_loss', patience=5)
# 모델을 실행합니다
history = model.fit(
train_generator,
epochs=100,
validation_data=test_generator,
validation_steps=10,
callbacks=[early_stopping_callback])

 


    
python
# 검증셋과 학습셋의 오차를 저장합니다.
y_vloss = history.history['val_loss']
y_loss = history.history['loss']
# 그래프로 표현해 봅니다.
x_len = np.arange(len(y_loss))
plt.plot(x_len, y_vloss, marker='.', c="red", label='Testset_loss')
plt.plot(x_len, y_loss, marker='.', c="blue", label='Trainset_loss')
# 그래프에 그리드를 주고 레이블을 표시하겠습니다.
plt.legend(loc='upper right')
plt.grid()
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()

'빅데이터 분석가 양성과정 > Python - 딥러닝' 카테고리의 다른 글

설명가능한 딥러닝 모델  (3) 2024.07.18
전이 학습  (0) 2024.07.18
오토인코더  (0) 2024.07.18
비지도학습 신경망(GAN)  (1) 2024.07.18
순환신경망_재정리 및 추가  (1) 2024.07.18
'빅데이터 분석가 양성과정/Python - 딥러닝' 카테고리의 다른 글
  • 설명가능한 딥러닝 모델
  • 전이 학습
  • 오토인코더
  • 비지도학습 신경망(GAN)
분석가 황규진
분석가 황규진
공공기관 위험평가관련 부서에서 근무하고 있습니다.
HGJ's Insight공공기관 위험평가관련 부서에서 근무하고 있습니다.
글쓰기 관리
분석가 황규진
HGJ's Insight
홈
|
로그인
  • 전체 글 567
    • 개인 활동(일상) 3
      • 독서 2
      • 근황 공유 1
    • 개인 활동(공부) 53
      • Tableau Bootcamp 10
      • 금융 공부 9
      • 직무 공부 22
      • 강의 12
    • 개인프로젝트 4
      • 신용카드 연체 평가 모델 0
      • 대출 승인 여부 예측 모델 4
    • 자격증 7
      • 빅데이터분석기사 1
      • 정보처리기사 1
      • 경영정보시각화 1
      • SQL개발자(SQLD) 1
      • 데이터 분석 준전문가(ADsP) 1
      • 통계적품질관리(SPC) 1
      • AICE Associate 1
    • 코드 정리 11
      • 코드 정리 - Tistory 8
      • 코드 정리 - Python 3
    • 코딩테스트연습 116
      • SQL_프로그래머스 116
    • 취업사관학교 9기 199
      • 모닝스쿨 54
      • 스스로 모닝스쿨 125
      • 직무 스터디 20
      • 반성과 다짐 0
    • 빅데이터 분석가 양성과정 173
      • Python 88
      • Python - 머신러닝 26
      • Python - 딥러닝 31
      • PyQt 4
      • JavaScript 10
      • MySQL 13
      • Node.js 1
hELLO· Designed By정상우.v4.6.1
분석가 황규진
이미지 증강
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.