🚴‍♂️
TIL
  • MAIN
  • : TIL?
  • : WIL
  • : Plan
  • : Retrospective
    • 21Y
      • Wait a moment!
      • 9M 2W
      • 9M1W
      • 8M4W
      • 8M3W
      • 8M2W
      • 8M1W
      • 7M4W
      • 7M3W
      • 7M2W
      • 7M1W
      • 6M5W
      • 1H
    • 새사람 되기 프로젝트
      • 2회차
      • 1회차
  • TIL : ML
    • Paper Analysis
      • BERT
      • Transformer
    • Boostcamp 2st
      • [S]Data Viz
        • (4-3) Seaborn 심화
        • (4-2) Seaborn 기초
        • (4-1) Seaborn 소개
        • (3-4) More Tips
        • (3-3) Facet 사용하기
        • (3-2) Color 사용하기
        • (3-1) Text 사용하기
        • (2-3) Scatter Plot 사용하기
        • (2-2) Line Plot 사용하기
        • (2-1) Bar Plot 사용하기
        • (1-3) Python과 Matplotlib
        • (1-2) 시각화의 요소
        • (1-1) Welcome to Visualization (OT)
      • [P]MRC
        • (2강) Extraction-based MRC
        • (1강) MRC Intro & Python Basics
      • [P]KLUE
        • (5강) BERT 기반 단일 문장 분류 모델 학습
        • (4강) 한국어 BERT 언어 모델 학습
        • [NLP] 문장 내 개체간 관계 추출
        • (3강) BERT 언어모델 소개
        • (2강) 자연어의 전처리
        • (1강) 인공지능과 자연어 처리
      • [U]Stage-CV
      • [U]Stage-NLP
        • 7W Retrospective
        • (10강) Advanced Self-supervised Pre-training Models
        • (09강) Self-supervised Pre-training Models
        • (08강) Transformer (2)
        • (07강) Transformer (1)
        • 6W Retrospective
        • (06강) Beam Search and BLEU score
        • (05강) Sequence to Sequence with Attention
        • (04강) LSTM and GRU
        • (03강) Recurrent Neural Network and Language Modeling
        • (02강) Word Embedding
        • (01강) Intro to NLP, Bag-of-Words
        • [필수 과제 4] Preprocessing for NMT Model
        • [필수 과제 3] Subword-level Language Model
        • [필수 과제2] RNN-based Language Model
        • [선택 과제] BERT Fine-tuning with transformers
        • [필수 과제] Data Preprocessing
      • Mask Wear Image Classification
        • 5W Retrospective
        • Report_Level1_6
        • Performance | Review
        • DAY 11 : HardVoting | MultiLabelClassification
        • DAY 10 : Cutmix
        • DAY 9 : Loss Function
        • DAY 8 : Baseline
        • DAY 7 : Class Imbalance | Stratification
        • DAY 6 : Error Fix
        • DAY 5 : Facenet | Save
        • DAY 4 : VIT | F1_Loss | LrScheduler
        • DAY 3 : DataSet/Lodaer | EfficientNet
        • DAY 2 : Labeling
        • DAY 1 : EDA
        • 2_EDA Analysis
      • [P]Stage-1
        • 4W Retrospective
        • (10강) Experiment Toolkits & Tips
        • (9강) Ensemble
        • (8강) Training & Inference 2
        • (7강) Training & Inference 1
        • (6강) Model 2
        • (5강) Model 1
        • (4강) Data Generation
        • (3강) Dataset
        • (2강) Image Classification & EDA
        • (1강) Competition with AI Stages!
      • [U]Stage-3
        • 3W Retrospective
        • PyTorch
          • (10강) PyTorch Troubleshooting
          • (09강) Hyperparameter Tuning
          • (08강) Multi-GPU 학습
          • (07강) Monitoring tools for PyTorch
          • (06강) 모델 불러오기
          • (05강) Dataset & Dataloader
          • (04강) AutoGrad & Optimizer
          • (03강) PyTorch 프로젝트 구조 이해하기
          • (02강) PyTorch Basics
          • (01강) Introduction to PyTorch
      • [U]Stage-2
        • 2W Retrospective
        • DL Basic
          • (10강) Generative Models 2
          • (09강) Generative Models 1
          • (08강) Sequential Models - Transformer
          • (07강) Sequential Models - RNN
          • (06강) Computer Vision Applications
          • (05강) Modern CNN - 1x1 convolution의 중요성
          • (04강) Convolution은 무엇인가?
          • (03강) Optimization
          • (02강) 뉴럴 네트워크 - MLP (Multi-Layer Perceptron)
          • (01강) 딥러닝 기본 용어 설명 - Historical Review
        • Assignment
          • [필수 과제] Multi-headed Attention Assignment
          • [필수 과제] LSTM Assignment
          • [필수 과제] CNN Assignment
          • [필수 과제] Optimization Assignment
          • [필수 과제] MLP Assignment
      • [U]Stage-1
        • 1W Retrospective
        • AI Math
          • (AI Math 10강) RNN 첫걸음
          • (AI Math 9강) CNN 첫걸음
          • (AI Math 8강) 베이즈 통계학 맛보기
          • (AI Math 7강) 통계학 맛보기
          • (AI Math 6강) 확률론 맛보기
          • (AI Math 5강) 딥러닝 학습방법 이해하기
          • (AI Math 4강) 경사하강법 - 매운맛
          • (AI Math 3강) 경사하강법 - 순한맛
          • (AI Math 2강) 행렬이 뭐예요?
          • (AI Math 1강) 벡터가 뭐예요?
        • Python
          • (Python 7-2강) pandas II
          • (Python 7-1강) pandas I
          • (Python 6강) numpy
          • (Python 5-2강) Python data handling
          • (Python 5-1강) File / Exception / Log Handling
          • (Python 4-2강) Module and Project
          • (Python 4-1강) Python Object Oriented Programming
          • (Python 3-2강) Pythonic code
          • (Python 3-1강) Python Data Structure
          • (Python 2-4강) String and advanced function concept
          • (Python 2-3강) Conditionals and Loops
          • (Python 2-2강) Function and Console I/O
          • (Python 2-1강) Variables
          • (Python 1-3강) 파이썬 코딩 환경
          • (Python 1-2강) 파이썬 개요
          • (Python 1-1강) Basic computer class for newbies
        • Assignment
          • [선택 과제 3] Maximum Likelihood Estimate
          • [선택 과제 2] Backpropagation
          • [선택 과제 1] Gradient Descent
          • [필수 과제 5] Morsecode
          • [필수 과제 4] Baseball
          • [필수 과제 3] Text Processing 2
          • [필수 과제 2] Text Processing 1
          • [필수 과제 1] Basic Math
    • 딥러닝 CNN 완벽 가이드 - Fundamental 편
      • 종합 실습 2 - 캐글 Plant Pathology(나무잎 병 진단) 경연 대회
      • 종합 실습 1 - 120종의 Dog Breed Identification 모델 최적화
      • 사전 훈련 모델의 미세 조정 학습과 다양한 Learning Rate Scheduler의 적용
      • Advanced CNN 모델 파헤치기 - ResNet 상세와 EfficientNet 개요
      • Advanced CNN 모델 파헤치기 - AlexNet, VGGNet, GoogLeNet
      • Albumentation을 이용한 Augmentation기법과 Keras Sequence 활용하기
      • 사전 훈련 CNN 모델의 활용과 Keras Generator 메커니즘 이해
      • 데이터 증강의 이해 - Keras ImageDataGenerator 활용
      • CNN 모델 구현 및 성능 향상 기본 기법 적용하기
    • AI School 1st
    • 현업 실무자에게 배우는 Kaggle 머신러닝 입문
    • 파이썬 딥러닝 파이토치
  • TIL : Python & Math
    • Do It! 장고+부트스트랩: 파이썬 웹개발의 정석
      • Relations - 다대다 관계
      • Relations - 다대일 관계
      • 템플릿 파일 모듈화 하기
      • TDD (Test Driven Development)
      • template tags & 조건문
      • 정적 파일(static files) & 미디어 파일(media files)
      • FBV (Function Based View)와 CBV (Class Based View)
      • Django 입문하기
      • 부트스트랩
      • 프론트엔드 기초다지기 (HTML, CSS, JS)
      • 들어가기 + 환경설정
    • Algorithm
      • Programmers
        • Level1
          • 소수 만들기
          • 숫자 문자열과 영단어
          • 자연수 뒤집어 배열로 만들기
          • 정수 내림차순으로 배치하기
          • 정수 제곱근 판별
          • 제일 작은 수 제거하기
          • 직사각형 별찍기
          • 짝수와 홀수
          • 체육복
          • 최대공약수와 최소공배수
          • 콜라츠 추측
          • 크레인 인형뽑기 게임
          • 키패드 누르기
          • 평균 구하기
          • 폰켓몬
          • 하샤드 수
          • 핸드폰 번호 가리기
          • 행렬의 덧셈
        • Level2
          • 숫자의 표현
          • 순위 검색
          • 수식 최대화
          • 소수 찾기
          • 소수 만들기
          • 삼각 달팽이
          • 문자열 압축
          • 메뉴 리뉴얼
          • 더 맵게
          • 땅따먹기
          • 멀쩡한 사각형
          • 괄호 회전하기
          • 괄호 변환
          • 구명보트
          • 기능 개발
          • 뉴스 클러스터링
          • 다리를 지나는 트럭
          • 다음 큰 숫자
          • 게임 맵 최단거리
          • 거리두기 확인하기
          • 가장 큰 정사각형 찾기
          • H-Index
          • JadenCase 문자열 만들기
          • N개의 최소공배수
          • N진수 게임
          • 가장 큰 수
          • 124 나라의 숫자
          • 2개 이하로 다른 비트
          • [3차] 파일명 정렬
          • [3차] 압축
          • 줄 서는 방법
          • [3차] 방금 그곡
          • 거리두기 확인하기
        • Level3
          • 매칭 점수
          • 외벽 점검
          • 기지국 설치
          • 숫자 게임
          • 110 옮기기
          • 광고 제거
          • 길 찾기 게임
          • 셔틀버스
          • 단속카메라
          • 표 편집
          • N-Queen
          • 징검다리 건너기
          • 최고의 집합
          • 합승 택시 요금
          • 거스름돈
          • 하노이의 탑
          • 멀리 뛰기
          • 모두 0으로 만들기
        • Level4
    • Head First Python
    • 데이터 분석을 위한 SQL
    • 단 두 장의 문서로 데이터 분석과 시각화 뽀개기
    • Linear Algebra(Khan Academy)
    • 인공지능을 위한 선형대수
    • Statistics110
  • TIL : etc
    • [따배런] Kubernetes
    • [따배런] Docker
      • 2. 도커 설치 실습 1 - 학습편(준비물/실습 유형 소개)
      • 1. 컨테이너와 도커의 이해 - 컨테이너를 쓰는이유 / 일반프로그램과 컨테이너프로그램의 차이점
      • 0. 드디어 찾아온 Docker 강의! 왕초보에서 도커 마스터로 - OT
    • CoinTrading
      • [가상 화폐 자동 매매 프로그램] 백테스팅 : 간단한 테스팅
    • Gatsby
      • 01 깃북 포기 선언
  • TIL : Project
    • Mask Wear Image Classification
    • Project. GARIGO
  • 2021 TIL
    • CHANGED
    • JUN
      • 30 Wed
      • 29 Tue
      • 28 Mon
      • 27 Sun
      • 26 Sat
      • 25 Fri
      • 24 Thu
      • 23 Wed
      • 22 Tue
      • 21 Mon
      • 20 Sun
      • 19 Sat
      • 18 Fri
      • 17 Thu
      • 16 Wed
      • 15 Tue
      • 14 Mon
      • 13 Sun
      • 12 Sat
      • 11 Fri
      • 10 Thu
      • 9 Wed
      • 8 Tue
      • 7 Mon
      • 6 Sun
      • 5 Sat
      • 4 Fri
      • 3 Thu
      • 2 Wed
      • 1 Tue
    • MAY
      • 31 Mon
      • 30 Sun
      • 29 Sat
      • 28 Fri
      • 27 Thu
      • 26 Wed
      • 25 Tue
      • 24 Mon
      • 23 Sun
      • 22 Sat
      • 21 Fri
      • 20 Thu
      • 19 Wed
      • 18 Tue
      • 17 Mon
      • 16 Sun
      • 15 Sat
      • 14 Fri
      • 13 Thu
      • 12 Wed
      • 11 Tue
      • 10 Mon
      • 9 Sun
      • 8 Sat
      • 7 Fri
      • 6 Thu
      • 5 Wed
      • 4 Tue
      • 3 Mon
      • 2 Sun
      • 1 Sat
    • APR
      • 30 Fri
      • 29 Thu
      • 28 Wed
      • 27 Tue
      • 26 Mon
      • 25 Sun
      • 24 Sat
      • 23 Fri
      • 22 Thu
      • 21 Wed
      • 20 Tue
      • 19 Mon
      • 18 Sun
      • 17 Sat
      • 16 Fri
      • 15 Thu
      • 14 Wed
      • 13 Tue
      • 12 Mon
      • 11 Sun
      • 10 Sat
      • 9 Fri
      • 8 Thu
      • 7 Wed
      • 6 Tue
      • 5 Mon
      • 4 Sun
      • 3 Sat
      • 2 Fri
      • 1 Thu
    • MAR
      • 31 Wed
      • 30 Tue
      • 29 Mon
      • 28 Sun
      • 27 Sat
      • 26 Fri
      • 25 Thu
      • 24 Wed
      • 23 Tue
      • 22 Mon
      • 21 Sun
      • 20 Sat
      • 19 Fri
      • 18 Thu
      • 17 Wed
      • 16 Tue
      • 15 Mon
      • 14 Sun
      • 13 Sat
      • 12 Fri
      • 11 Thu
      • 10 Wed
      • 9 Tue
      • 8 Mon
      • 7 Sun
      • 6 Sat
      • 5 Fri
      • 4 Thu
      • 3 Wed
      • 2 Tue
      • 1 Mon
    • FEB
      • 28 Sun
      • 27 Sat
      • 26 Fri
      • 25 Thu
      • 24 Wed
      • 23 Tue
      • 22 Mon
      • 21 Sun
      • 20 Sat
      • 19 Fri
      • 18 Thu
      • 17 Wed
      • 16 Tue
      • 15 Mon
      • 14 Sun
      • 13 Sat
      • 12 Fri
      • 11 Thu
      • 10 Wed
      • 9 Tue
      • 8 Mon
      • 7 Sun
      • 6 Sat
      • 5 Fri
      • 4 Thu
      • 3 Wed
      • 2 Tue
      • 1 Mon
    • JAN
      • 31 Sun
      • 30 Sat
      • 29 Fri
      • 28 Thu
      • 27 Wed
      • 26 Tue
      • 25 Mon
      • 24 Sun
      • 23 Sat
      • 22 Fri
      • 21 Thu
      • 20 Wed
      • 19 Tue
      • 18 Mon
      • 17 Sun
      • 16 Sat
      • 15 Fri
      • 14 Thu
      • 13 Wed
      • 12 Tue
      • 11 Mon
      • 10 Sun
      • 9 Sat
      • 8 Fri
      • 7 Thu
      • 6 Wed
      • 5 Tue
      • 4 Mon
      • 3 Sun
      • 2 Sat
      • 1 Fri
  • 2020 TIL
    • DEC
      • 31 Thu
      • 30 Wed
      • 29 Tue
      • 28 Mon
      • 27 Sun
      • 26 Sat
      • 25 Fri
      • 24 Thu
      • 23 Wed
      • 22 Tue
      • 21 Mon
      • 20 Sun
      • 19 Sat
      • 18 Fri
      • 17 Thu
      • 16 Wed
      • 15 Tue
      • 14 Mon
      • 13 Sun
      • 12 Sat
      • 11 Fri
      • 10 Thu
      • 9 Wed
      • 8 Tue
      • 7 Mon
      • 6 Sun
      • 5 Sat
      • 4 Fri
      • 3 Tue
      • 2 Wed
      • 1 Tue
    • NOV
      • 30 Mon
Powered by GitBook
On this page
  • 데이터 증강(Data Augmentation)의 이해
  • Keras의 ImageDataGenerator 특징
  • ImageDataGenerator로 Augmentation 적용 - 01
  • ImageDataGenerator로 Augmentation 적용 - 02
  • CIFAR10 데이터 셋에 Augmentation 적용 후 모델 성능 비교 - 01
  • CIFAR10 데이터 셋에 Augmentation 적용 후 모델 성능 비교 - 02

Was this helpful?

  1. TIL : ML
  2. 딥러닝 CNN 완벽 가이드 - Fundamental 편

데이터 증강의 이해 - Keras ImageDataGenerator 활용

210728

데이터 증강(Data Augmentation)의 이해

데이터 증강 개요

CNN 모델의 성능을 높이고 오버피팅을 극복할 수 있는 가장 좋은 방법

  • 다양한 유형의 학습 이미지 데이터의 양 을 늘리는 것임

  • 이미지 데이터는 데이터 양을 늘리기 쉽지 않음

Data Augmentation은 학습 시에 원본 이미지에 다양한 변형을 가해서 학습 이미지 데이터를 늘리는 것과 유사한 효과를 발휘하고자 하는 것

원본 학습 이미지의 개수를 늘리는 것이 아니라, 학습 시 마다 개별 원본 이미지를 변형해서 학습을 수행하는 것

  • 6만개의 이미지를 10번의 변형을 통해 60만개의 이미지를 생성하는 것이 아니다

  • 6만개의 이미지를 10번의 변형을 거쳐 각 Iteration 마다 다르게 입력하는 것

Augmentation 유형

공간 레벨 변형

  • Flip : 대칭 변환(상하좌우)

  • Crop : 특정 영역 확대

  • Affine : 회전, 수평이동, 크기변환, 압축

픽셀 레벨 변형

  • 밝기 변환, 채도 변환, 명도 변환, 그레이 스케일, 혼합 등

대표적으로 Keras ImageDataGenerator 가 Augmentation을 지원한다.

  • 장점

    • 매우 쉽게 Aug. 가능

  • 단점

    • 제한적인 변환 기능

    • 속도가 느림

    • 임의로 적용되기 때문에 각 기능별로 변환 확률을 정할 수 없음

  • 그 외에도 다음과 같은 것들이 있다.

  • Albumentations , ImgAug

    • 다양한 Aug. 기법 제공 및 적용 확률 제공

    • Object Detection이나 Segmentation도 같이 변환

    • 케라스 파이프라인 통합을 위한 별도의 작업이 필요하다

  • Tensorflow Image Libarary

    • 다양한 Image API 기능 제공. OpenCV나 scikit-image같은 기능을 많이 제공하려고 함

    • 빠른 Aug. 속도

    • tf.dataset과 쉽게 통합되고 Keras Layer와 결합되면 GPU 사용 가능

    • 다양한 Aug 기능이 없고, 입력 데이터 타입이 Numpy가 아니라 Tensor 여야 되서 불편함이 있음

Keras의 ImageDataGenerator 특징

ImageDataGenerator 특징

  • Keras 내에서 쉽게 Aug. 가능

  • 그렇지만 Aug. 기능이 제한적이다. 그러나 기본적인 기능만으로도 효율적이게 적용 가능

  • 개별적으로 이미지 변환을 적용하기가 어렵고 시간도 상대적으로 오래 걸린다.

  • Preprocessing과 fit()이 밀접하게 연결하여 적용된다.

메커니즘

  1. 이미지 파일

  2. ImageDataGenerator

    • 다양한 Aug. 설정

    • rescale 설정

    • 기타 Preprocessing 설정

  3. Iterator

    • Batch 크기 만큼 데이터 할당

  4. Model

    • Iterator 옵션 설정

Aug 유형 중 ZCAWhitening은 버그로 인해 사용에 유의해야 한다

  • 보통 사용 지양

ImageDataGenerator로 Augmentation 적용 - 01

from tensorflow.keras.preprocessing.image import ImageDataGenerator

data_generator = ImageDataGenerator(horizontal_flip=True)

image_batch = np.expand_dims(image, axis=0)
print('image_batch shape:', image_batch.shape)

data_generator.fit(image_batch)
data_gen_iter = data_generator.flow(image_batch)

aug_image_batch = next(data_gen_iter)

aug_image = np.squeeze(aug_image_batch)
print('aug_image shape:', aug_image.shape)

aug_image = aug_image.astype('int')
show_image(aug_image)
  • 3 : Horizontal Flip(좌우 반전)을 적용. horizontal_flip=True을 적용했지만 반드시 변환하는 것은 아님. Random하게 원본 데이터를 유지하거나 변환 결정. 따라서 실제 실행해보면 반전이 된 이미지가 출력될수도, 원본 이미지가 출력될 수도 있다.

  • 5 : ImageDataGenerator는 여러개의 image를 입력으로 받음. 따라서 3차원이 아니라 batch를 포함한 4차원 array를 입력받음. np.expand_dims()로 차원 증가.

  • 8 : ImageDataGenerator 적용. fit()후 flow()로 image batch를 넣어주어야 함. fit()은 이후에 batch normalization을 하기위해 필요한 과정이고 필수적인 파이프라인 요소는 아니다. 또, flow()는 파이프라인을 구성하는 단계이지 실제로 실행하는 것이 아니다. 실행은 다음 코드

  • 11 : ImageDataGenerator를 동작하기 위해서는 next()등으로 iteration을 호출해야한다

  • 13 : 반환된 데이터는 batch까지 포함된 4차원 array이므로 다시 3차원 image array로 변환.

  • 16 : 반환된 pixel값은 float임. 이를 다시 int형으로 변경 후, 이미지 시각화

# 빈공간을 가장 가까운 곳의 픽셀값으로 채움. 
data_generator = ImageDataGenerator(width_shift_range=0.4, fill_mode='nearest')
show_aug_image_batch(image, data_generator, n_images=4)

# 빈공간 만큼의 영역을 근처 공간으로 채움. 
data_generator = ImageDataGenerator(width_shift_range=0.4, fill_mode='reflect')
show_aug_image_batch(image, data_generator, n_images=4)

# 빈공간을 이동으로 잘려나간 이미지로 채움
data_generator = ImageDataGenerator(width_shift_range=0.4, fill_mode='wrap')
show_aug_image_batch(image, data_generator, n_images=4)

# 특정 픽셀값으로 채움. 이때 특정 픽셀값은 cval 값으로 채움
data_generator = ImageDataGenerator(width_shift_range=0.4, fill_mode='constant', cval=0)
show_aug_image_batch(image, data_generator, n_images=4)
  • shift Aug. 를 적용할 때는 4가지 fill_mode가 있다. 기본적으로 nearest 로 설정되어 있다.

    • nearest : 가장 가까운 곳의 픽셀값으로 채우기

    • reflect : 잘린 만큼 대칭해서 채우기

    • wrap : 잘린 만큼 반대쪽에서 채우기

    • constant : 잘린 만큼 특정 픽셀값(cval)으로 채우기

  • 다음 결과를 보면 이해가 쉽다

ImageDataGenerator로 Augmentation 적용 - 02

shift 뿐만 아니라, rotation 역시 fill_mode로 채워진다. (default는 nearest) 왜냐하면, 90도, 180도가 아닌이상 45, 60도의 회전에서는 빈공간이 생기기 때문이다. Zoom(=Scale) 도 마찬가지!

Scale과 Crop의 차이?

  • Scale은 비율을 유지하면서 확대하고

  • Crop은 특정 영역을 자른다음에 원본 크기로 리사이즈 하는 것

Shear

일정 각도로 이미지를 늘이기

Brightness_range

  • 부동 소수점값이 입력 된다. 범위로 입력해야 한다.

  • 0에 가까울수록 원본 이미지보다 어둡고 1보다 커질수록 원본 이미지보다 밝다

Channel Shift

  • 기존 픽셀값의 평균값을 변환한다

ZCA Whitening

  • 백색 노이즈와 관련된 변환

Normalization

  • featurewise_center = True이면 RGB 각 픽셀값에서 개별 채널들의 평균 픽셀값을 빼서 평균이 0이 되게 한다

  • featurewise_std_normalization = True 이면 RGB 각 픽셀값에서 개별 채널들의 표준 편차값으로 나눈다

  • rescale = 255.0 으로 하면 0~1 사이의 값이 되도록 모든 픽셀값은 255로 나눈다

  • 이 때 rescale과 featurewise옵션은 같이 안쓰는 것이 좋다.

CIFAR10 데이터 셋에 Augmentation 적용 후 모델 성능 비교 - 01

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_generator = ImageDataGenerator(
    #rotation_range=20,
    #zoom_range=(0.7, 0.9),
    horizontal_flip=True,
    #vertical_flip=True,
    rescale=1/255.0
)
valid_generator = ImageDataGenerator(rescale=1/255.0)

flow_tr_gen = train_generator.flow(tr_images, tr_oh_labels, batch_size=BATCH_SIZE, shuffle=True)
flow_val_gen = valid_generator.flow(val_images, val_oh_labels, batch_size=BATCH_SIZE, shuffle=False)
  • 기존에 model.fit 에서 하던 작업들을 generator.flow 에서 하게 된다.

    • val 데이터와 test 데이터는 셔플이나 Aug.를 할 필요가 없다.

'''
history = model.fit(x=tr_images, y=tr_oh_labels, batch_size=32, epochs=30, shuffle=True,
                    validation_data=(val_images, val_oh_labels),  
                    callbacks=[rlr_cb, ely_cb] )
'''
# steps 횟수를 구하기 위해 학습 데이터의 건수와 검증 데이터의 건수를 구함. steps = ceil(학습 데이터 건수/BATCH_SIZE)
tr_data_len = tr_images.shape[0]
val_data_len = val_images.shape[0]
history = model.fit(flow_tr_gen, epochs=40, 
                    steps_per_epoch=int(np.ceil(tr_data_len/BATCH_SIZE)),
                    validation_data=flow_val_gen, 
                    validation_steps=int(np.ceil(val_data_len/BATCH_SIZE)),
                    callbacks=[rlr_cb, ely_cb])
  • 전에는 주석과 같이 인자를 할당했었음. 제너레이터를 사용후에는 모델의 인자로 바로 제너레이터를 할당

    • 기존에는 x = 형태로 입력되었다.

    • 지금도 x 에 할당된 것이 맞고 shift + tab을 눌러보면 x에는 여러 타입의 인자가 들어올 수 있다는 것을 알 수 있다

  • steps_per_epoch : 필수적인 요소는 아니다. 쓰지 않더라도 알아서 계산. data length // batch_size 만큼

    • validation_steps 도 마찬가지

CIFAR10 데이터 셋에 Augmentation 적용 후 모델 성능 비교 - 02

Augmentation을 적용하니 train 데이터의 accuracy와 valid 데이터의 acc, 그리고 test 데이터의 acc간격이 작아졌다.

그러나, 원본 이미지 상황에 맞지 않거나 과도한 Aug.은 오히려 성능을 저하시킴

  • 왜냐하면 Zoom 같은 경우는 확대 및 축소를 하면 object의 특징을 잃을 수 있다.

    • 예를 들면, 가운데에 위치한 자동차의 경우 확대를 했을 때 자동차의 창문 같은 것들이 없어질 수 있다.

    • 또한, 확대를 할 경우 이미지의 선명도가 떨어진다.

  • 또 시간이 더 걸리게 된다.

    • Aug. 를 적용하면 CPU와 GPU의 동기화가 잘 이루어지지않는다.

    • 단순히 Aug가 오래걸려서 그런것이 아님

Previous사전 훈련 CNN 모델의 활용과 Keras Generator 메커니즘 이해NextCNN 모델 구현 및 성능 향상 기본 기법 적용하기

Last updated 3 years ago

Was this helpful?