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

📘 추가 숙제
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. 텐서플로 허브로 강아지 사진 분류하기


💭 느낀 점
이번 주차 분량에도 새롭게 배워가는 모델이 많았습니다. 텐서플로 허브도 처음 사용해봐서 신기했습니다.
'독학 > [책] 딥러닝 실습' 카테고리의 다른 글
| [혼공학습단 14기 혼만딥🧠] 혼자 만들면서 공부하는 딥러닝 week6 (4) | 2025.08.13 |
|---|---|
| [혼공학습단 14기 혼만딥🧠] 혼자 만들면서 공부하는 딥러닝 week5 (3) | 2025.08.06 |
| [혼공학습단 14기 혼만딥🧠] 혼자 만들면서 공부하는 딥러닝 week3 (1) | 2025.07.15 |
| [혼공학습단 14기 혼만딥🧠] 혼자 만들면서 공부하는 딥러닝 week2 (0) | 2025.07.08 |
| [혼공학습단 14기 혼만딥🧠] 혼자 만들면서 공부하는 딥러닝 week1 (2) | 2025.07.01 |