[Coursera/IBM course #3] TensorFlow for Image Processing

2025. 5. 24. 12:48·🥇 certification logbook
728x90
반응형

 

 

 

 

 

[IBM AI course #3] Deep Learning & Neural Networks with Keras

 

Advanced CNNs in Keras

CNN은 시각 데이터를 처리하는 딥러닝 구조로, convolutional, pooling, fully connected layer로 구성됨.

Convolutional Layer: 이미지에서 특징 추출

Pooling Layer: 특징 맵 크기 감소 → 계산량 줄이기

Fully Connected Layer: 최종 분류 작업 수행

 

기본 CNN 모델 구성

Conv2D → MaxPooling → Conv2D → MaxPooling → Flatten → Dense → Output

 

 

Data Augmentation Techniques

목적

모델의 일반화 능력 향상, 과적합(overfitting) 방지, 제한된 데이터셋을 다양하게 활용 가능

 

방식

회전, 이동, 뒤집기, 스케일링, 노이즈 추가 등.

+

Feature-wise normalization: 전체 데이터셋 평균/표준편차로 정규화

sample-wise normalization: 샘플별 평균/표준편차로 정규화

커스텀 함수 적용

 

from tensorflow.keras.preprocessing.image import ImageDataGenerator
import numpy as np

# 사용자 정의 전처리 함수 예시 (예: 무작위 노이즈 추가)
def add_random_noise(image):
    noise = np.random.normal(loc=0.0, scale=25.0, size=image.shape)  # 평균 0, 표준편차 25
    noisy_image = image + noise
    return np.clip(noisy_image, 0, 255)  # 픽셀 범위를 0~255로 제한

datagen = ImageDataGenerator(
    rotation_range=40,                   # 무작위 회전
    width_shift_range=0.2,               # 가로 이동 비율. 너비의 20%만큼 이동할 수 있다는 뜻
    height_shift_range=0.2,              # 세로 이동 비율. 너비의 20%만큼 이동할 수 있다는 뜻
    shear_range=0.2,                     # 전단 변형 (형태 비스듬하게 기울여 왜곡)
    zoom_range=0.2,                      # 확대/축소
    horizontal_flip=True,                # 수평 반전

    fill_mode='nearest',                 # 빈 공간 채우는 방식
                                         # 'nearest': 가장 가까운 픽셀 복사
                                         # 'constant': 지정 값으로 채움 (예: cval=0이면 검정)

    featurewise_center=True,             # 전체 데이터 평균을 0으로 정규화 (fit 필요)
    featurewise_std_normalization=True,  # 전체 데이터 표준편차로 정규화 (fit 필요)
    samplewise_center=True,              # 각 이미지 평균을 0으로
    samplewise_std_normalization=True,   # 각 이미지 표준편차로 나눔

    preprocessing_function=add_random_noise # 사용자 정의 전처리 함수
                                            # 이미지가 배치에 들어가기 전 이 함수가 실행됨
)

 

 

Transfer Learning in Keras

전이 학습은 기존 대규모 데이터셋에서 학습된 모델을 새로운 과제에 재사용하는 방법을 말함

예: ImageNet에서 학습된 VGG16 모델 → 고양이/개 분류 문제에 적용

 

단계

  1. 사전학습 모델 불러오기 (top layer 제거) → 내가 원하는 구조로 출력하기 위해
  2. 커스텀 Dense layer 추가
  3. Conv base 고정 (freeze) → 이미 다른 데이터셋(예: ImageNet)에서 잘 학습된 가중치를 그대로 유지하기 위해
  4. 모델 컴파일 및 학습

장점

훈련 시간 단축, 적은 데이터로도 높은 성능, 학습된 일반화된 feature 활용 가능

 

Fine-tuning

상위 Conv layer 일부를 다시 학습하여 성능 향상 가능.

 

 

Using Pre-trained Models

사전학습 모델을 feature extractor로 사용하는 방법 (예: VGG16, ResNet).

재학습 없이 특징 추출만 수행 → 클러스터링, 시각화 등에 활용.

Fine-tuning 병행 시 성능 향상 가능.

 

단계

  1. 사전학습 모델 로딩
  2. top layer 제거
  3. 중간 layer로부터 feature 추출
  4. Dense layer 추가 → 분류 수행

장점

빠른 구현, 적은 계산 자원, 소량 데이터 활용 가능.

from tensorflow.keras.applications import VGG16
from tensorflow.keras.models import Model, Sequential
from tensorflow.keras.layers import Flatten, Dense, Dropout
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import Adam

# 1. Preprocessing
train_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
    'path_to_train_folder',         # 예: './data/train'
    target_size=(224, 224),
    batch_size=32,
    class_mode='binary'             # 'categorical' 다중 클래스인 경우
)

# 2. Load pretrained VGG16 without top layer (FC layer 제거)
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) # include_top=False: VGG16의 마지막 FC 계층 제거

# 3. Freeze base model
# Feature Extractor 방식 : 모든 레이어를 freeze (가중치 학습 안 함)
for layer in base_model.layers:
    layer.trainable = False 
# Transfer Learning (Fine-Tuning) 방식 :일부 레이어만 freeze (일부 학습)
for layer in base_model.layers[:-4]:
    layer.trainable = False  
   
# 4. Add custom classifier on top
model = Sequential([
    base_model,
    Flatten(),
    Dense(256, activation='relu'),
    Dropout(0.5),
    Dense(1, activation='sigmoid')  # 이진 분류
])

# 5. Compile model
model.compile(optimizer=Adam(learning_rate=0.0001),
              loss='binary_crossentropy',
              metrics=['accuracy'])

# 6. Train the model
model.fit(train_generator, epochs=10)

 

 

TensorFlow for Image Processing

이미지 처리 개요 및 TensorFlow로 구현하는 방법

TensorFlow의 이미지 처리 기능 : 이미지 분류, 데이터 증강 등 다양한 이미지 조작 가능

 

장점

고수준 API로 복잡한 작업을 쉽게 구현

다양한 사전학습 모델 제공

확장성, 커뮤니티 지원

 

기본 이미지 처리 흐름

  1. 이미지 로딩 및 리사이징
  2. NumPy 배열로 변환
  3. 배치 차원 추가

+ 데이터 증강 (rotation, shift, zoom 등)

 

 

✔ 전이 학습(Transfer Learning)을 효과적으로 구현하기 위한 팁

더보기

1. 적절한 사전 학습 모델 선택하기

내 작업과 유사한 데이터셋으로 학습된 모델을 선택하세요. (예: 이미지 관련 작업에는 VGG16, ResNet, InceptionV3 같은 모델이 효과적)

모델 아키텍처가 문제에 잘 맞는지 확인하세요.

2. 초기 레이어는 고정(Freeze)하기

처음에는 사전 학습 모델의 초기 레이어를 고정하여 기존에 학습된 특성을 유지하세요.

특히 데이터셋이 작거나 기존 학습 데이터와 유사한 경우 유리합니다.

3. 후반부 레이어 미세 조정(Fine-tuning)하기

훈련이 어느 정도 진행된 후, 깊은 레이어부터 점차적으로 고정 해제하며 미세 조정을 하세요.

후반부 레이어는 작업 특화 특징을 학습하므로, 새 데이터셋에 적응하는 데 도움이 됩니다.

4. 학습률 조절하기

미세 조정 시에는 낮은 학습률을 사용하세요.

높은 학습률은 기존에 학습된 정보를 망가뜨릴 수 있어 성능이 저하될 수 있습니다.

5. 데이터 증강 사용하기

특히 이미지 작업에서는 회전, 이동, 확대 등 데이터 증강 기법을 활용하세요.

이는 과적합을 줄이고 모델의 일반화 성능을 높이는 데 효과적입니다.

6. 도메인 적응(Domain Adaptation) 고려하기

사전 학습 모델의 도메인과 현재 작업의 도메인이 크게 다를 경우, 도메인 적응 기법을 적용하면 도움이 됩니다.

출처 데이터와 대상 데이터의 차이를 줄이면 성능이 향상됩니다.

 

 

Introducing Transpose Convolution

CNN 활용 분야

image generation (GANs..)

Super-resolution(초해상도)

Semantic Segmentation (의미론적 분할)

 

Transpose convolution

Transpose convolution(Deconvolution라고도 불림)은 up-sampling 작업에 사용. 일반적인 Convolution의 역 연산을 의미.

 

방식

입력 사이에 0 삽입 → Convolution 수행 → 출력 크기 증가

⇒ 원래의 공간 정보 유지하면서 고해상도 생성

 

 

주의사항

Checkerboard artifact 발생 가능 (체스판 무늬 같은 이상한 패턴이 생성되는 현상 → 커널이 이미지에 고르게 겹치지 않아서 생기는 현상)

→ 해결 방법: Bilinear up-sampling 후 Regular convolution 적용

 

model = Sequential([
    UpSampling2D(size=(2, 2)),       # 2배 확대
    Conv2D(64, (3, 3), padding='same', activation='relu')  # 일반 합성곱
]

# UpSampling2D: 이미지를 2배로 확대 (예: 64x64 → 128x128)
# Conv2D: 확대된 이미지에 필터를 적용해 품질을 개선함

 

UpSampling2D vs. Conv2DTranspose

상황 추천 방법
단순 업샘플만 필요할 때 UpSampling2D + Conv2D
복원된 이미지 품질이 중요할 때 Conv2DTranspose (단, checkerboard 주의)
GAN, VAE decoder처럼 학습 기반 복원이 필요할 때 Conv2DTranspose
728x90
반응형

'🥇 certification logbook' 카테고리의 다른 글

[Coursera/IBM course #3] 강화학습(Reinforcement Learning)  (1) 2025.06.04
[Coursera/IBM course #3] Advanced Keras Techniques  (2) 2025.06.01
[Coursera/IBM course #3] Unsupervised Learning in Keras  (1) 2025.05.31
[Coursera/IBM course #3] Transformers in Keras  (2) 2025.05.28
[Coursera/IBM course #3] TensorFlow 2.x  (1) 2025.05.21
[Coursera/IBM course #3] Advanced Keras  (0) 2025.05.21
[Coursera/IBM] Deep Learning & Neural Networks with Keras 코스 소개  (2) 2025.05.18
[Coursera/IBM course #2] Using Pretrained Models & Fine-Tuning  (0) 2025.05.18
'🥇 certification logbook' 카테고리의 다른 글
  • [Coursera/IBM course #3] Unsupervised Learning in Keras
  • [Coursera/IBM course #3] Transformers in Keras
  • [Coursera/IBM course #3] TensorFlow 2.x
  • [Coursera/IBM course #3] Advanced Keras
이소야
이소야
✔ 공부 기록 ٩(๑•̀o•́๑)و
  • 이소야
    I study SO
    이소야
    ✔ 공부 기록 ٩(๑•̀o•́๑)و
  • 전체
    오늘
    어제
    • 분류 전체보기 (214) N
      • 🤖 ai logbook (39)
      • 💻 developers logbook (1)
      • 🥇 certification logbook (64) N
      • ⚖️ legal logbook (108)
      • ⚡ electronics logbook (1)
      • 🌍 english logbook (0)
      • 🎁 etc (1)
  • 최근 글

  • 인기 글

  • 태그

    인공지능 입문
    근로기준법
    certificate
    기본권의기초이론
    ADsP
    법학과
    형법
    민법
    deeplearning
    머신러닝
    데이터사이언스 입문
    온라인 강의 추천
    Python
    자격증
    Coursera
    방통대
    IBM
    빅데이터분석기사
    datascience
    데이터분석준전문가
  • hELLO· Designed By정상우.v4.10.3
이소야
[Coursera/IBM course #3] TensorFlow for Image Processing
상단으로

티스토리툴바