독학/[책] 딥러닝 실습

[혼공학습단 14기 혼만딥🧠] 혼자 만들면서 공부하는 딥러닝 week4

최연재 2025. 7. 23. 20:12

📝 기본 숙제

Ch.03(03-1, 03-2) MobileNet 또는 EfficientNet으로 이미지 분류하고 예측 결과 화면 캡처하기

MobileNet

 

📘 추가 숙제

Ch.03(03-3) 텐서플로 허브에서 모델을 불러오는 코드와 실행 결과 설명하기
import tf_keras as keras
from tf_keras import layers
import tensorflow_hub as hub

hub_efficientb0 = keras.Sequential([
    layers.Input(shape=(224, 224, 3)),
    layers.Rescaling(1.0 / 255.0),
    hub.KerasLayer("https://www.kaggle.com/models/tensorflow/efficientnet/frameworks/TensorFlow2/variations/b0-classification/versions/1")
])

 

  • Input: 입력 이미지 형태를 지정 
  • Rescaling: 이미지를 0~1 범위로 정규화
  • hub.KerasLayer(...): TensorFlow Hub에서 원하는 모델을 가져옴.

위 코드로 모델을 불러온 뒤에는 아래처럼 사용하는 것이 가능합니다.

 

 

 

 

🗂️ 내용 정리

Chap03-1 이미지 분류 모델의 효율성 최적화하기

1. ResNet의 확장 모델 - DenseNet

1) DenseNet

- ResNet 모델의 아이디어를 확장한 모델로, 정보를 전달하는 방식에 차이가 있음.

- ResNet : 잔차 연결을 사용해 기존 층을 건너뛰어 마지막 합성곱 출력에 입력을 더함

- DenseNet : 이전 층의 모든 출력을 현재 층의 입력으로 사용 ; 밀집 연결 (dense connectivity)

  • 밀집 블록(dense block)을 통해 그레이디언트 소실 문제를 해결

 

2) DenseNet 모델 준비하기

- 밀집 블록에서는 이전 밀집 블록의 출력을 모두 사용

- 밀집 블록 만들기

- 전환 블록 : 특성 맵의 너비와 높이, 채널을 줄여줌

- 전환 블록 만들기

 

3) DenseNet 모델 만들기

 

4) DenseNet 모델로 강아지 사진 분류하기

(1) 사진 준비

(2) 이미지 전처리

 

(3) 예측 수행

 

 

2. 모바일 환경(경량) 모델 - MobileNet

1) MobileNet

- DenseNet 모델들의 경우 용량이 큼 ➡️ 합성곱 신경망은 파라미터의 개수가 작을수록 실행속도가 빠르고 시스템 자원을 덜 소모함.

-  MobileNet은 핵심 구성 요소인 깊이별 합성곱층이라는 방식으로 용량 문제를 해결함.

  • 일반 합성곱
    • 모든 채널을 동시에 처리하는 필터를 적용하여 각 채널 간의 상호작용을 만들어냄
    • 입력의 채널 개수와 필터의 깊이가 같음. 
    • 입력 채널의 개수는 출력 채널의 개수에 영향을 주지 못하고, 필터의 개수가 출력의 채널 개수를 결정
  • 깊이별 합성곱
    • 각 채널마다 합성곱이 따로 수행되는 필터를 사용하여 각 채널의 특성을 독립적으로 추출
    • 필터의 깊이가 1이고 각 필터가 서로 다른 채널에 적용
    • 입력 채널의 개수 == 출력 채널의 개수
    • Xception 모델에서 처음 도입 -> DepthwiseConv2D 클래스로 제공

2) MobileNet 모델 준비하기

- 깊이별 분리 합성곱 블록(depthwise separable convolution block)을 반복적으로 쌓아서 구성

- 깊이별 분리 합성곱 블록 만들기

 

3) MobileNet 모델 만들기

4) MobileNet 모델로 강아지 사진 분류하기

 

Chap03-2 이미지 분류 모델의 성능 최적화하기

1. 가장 높은 성능을 내는 모델 - EfficientNet

1) 역 잔차 블록

- 팽창 ➡️ 압축 순서를 거침

cf) ResNet 모델의 잔차 블록

  • 1 × 1 합성곱층으로 입력의 채널을 압축 ➡️ 3 × 3 합성곱을 수행하고 다시 1 × 1 합성곱으로 채널을 팽창

- 1  × 1 합성곱으로 채널을 팽창시킨다고 가정했을 때 팽창된 특성 맵에 일반 합성곱을 적용하면 파라미터의 개수가 크게 증가 ➡️ 깊이별  분리 합성곱을 이용하여 부담을 줄임.

- MobileNetV2는 역 잔차 블록을 이용해 MobileNet보다 신경망의 파라미터 개수를 줄임.

- MobileNetV3에서는 역 잔차 블록에 SE 블록을 추가

 

2) SE 블록

- 각 채널을 하나의 값으로 압축해 채널에 대한 가중치를 학습한 다음, 이 가중치를 다시 원본 채널에 곱하여 채널의 중요도를 조정하는 역할을 수행

- 가중치를 학습하여 중요도가 높은 채널은 더 강조, 상대적으로 그렇지 않은 채널은 억제

- SE 블록을 통해 모델의 연산량을 크게 늘리지 않으면서도 신경망의 성능을 크게 향상 가능

- EfficientNet의 역 잔차 블록이 MobileNetV3과 다른 점

  • 렐루 함수 대신 스위시 함수를 활성화 함수로 사용
  • 블록의 마지막 스킵 연결을 더하기 전에 드롭아웃층을 적옹
    • 역 잔차 블록에서 드롭아웃은 특성 맵의 전체 값을 제거
    • 확률적 깊이(stochastic depth) : 층이 많아질수록 그레이디언트 소실로 인해 신경망을 훈련하기 어려워지는 문제를 해결

3) 새로운 활성화 함수 - 스위시 (swish)

- 렐루와 비슷한 형태를 띠지만, 렐루보다는 부드럽고 유연하게 입력값을 처리해 신경망의 성능 향상에 큰 도움을 줌

- 하드 스위시 함수(hard swish function)   MobileNetV3는 스위시 함수를 적용할 때 시그모이드 함수 대신 계산이 좀 더 쉬운 하드시그모이드 함수를 사용 

 

 

 

 

4) 성능과 효율을 동시에 잡는 방법 - 복합 스케일링

- AutoML

  • 주어진 문제에 맞는 최적의 신경망 모델(머신러닝)을 만들기 위해 데이터 준비, 모델 선택, 전처리 등의 여러 단계를 자동으로 수행하는 기술
  • EfficientNet과 MobileNetV3 연구에 사용

- MobileNetV3

  • NAS(Network Architecture Search) 방법을 사용하여 전체적인 구조 결정
  • NetAdapt 알고리즘을 사용해 층의 필터 수를 찾음

- EfficientNet

  • AutoML 기술을 이용해 작은 크기의 신경망을 만든 다음 깊이와 너비, 해상도를 복합적으로 늘려 신경망의 성능을 높이는 복합 스케일링(compound scaling) 방식을 처음으로 제안

 

2. Efficient 모델 만들기

1) 역 잔차 블록 만들기

 

2)   Efficient 모델 만들기

역 잔차 블록 매개변수 준비하기
역 잔차 블록 그룹 반복하기

 

3. Efficient 모델로 강아지 사진 분류하기

 

Chap03-3 전이 학습으로 피스타치오 이미지 분류하기

1. 텐서플로 허브로 강아지 사진 분류하기

 

 

💭 느낀 점

이번 주차 분량에도 새롭게 배워가는 모델이 많았습니다. 텐서플로 허브도 처음 사용해봐서 신기했습니다.