[혼만딥] 3주차 - VGGNet/ResNet으로 강아지/고양이 이미지 분류하기

dev·2025년 7월 20일
0

혼만딥

목록 보기
3/7
post-thumbnail

📚 혼공학습단

📖 혼자 만들면서 공부하는 딥러닝

강아지/고양이 이미지 분류 실습

예측 결과 - VGGNet

예측 결과 - ResNet

VGGNet 모델 구조

  • VGG16 모델 시각화

  • 모델 코드
import keras
from keras import layers

vggnet = keras.Sequential()

# 입력 형태 정의: 224x224 크기의 RGB(3채널) 이미지
vggnet.add(layers.Input(shape=(224, 224, 3)))

for n_filters in [64, 128]:
  # 각 블록 내 Conv2D 레이어 2개 추가
  for _ in range(2):
    # filters: 현재 블록의 필터 수 (이미지에서 특징을 추출하는 필터)
    # kernel_size: 3x3 크기 필터(커널) 사용
    # padding: 입력 이미지 크기 유지를 위한 패딩 추가
    # activation: ReLU 활성화 함수 사용
    vggnet.add(layers.Conv2D(filters=n_filters, kernel_size=3,
                             padding='same', activation='relu'))
  # 2개의 Conv2D 레이어 후 Max Pooling 레이어 추가
  # pool_size: 2x2 영역에서 가장 큰 값을 선택해 이미지 크기를 절반으로 줄임
  vggnet.add(layers.MaxPooling2D(pool_size=2))

for n_filters in [256, 512, 512]:
  # 각 블록 내 Conv2D 레이어 3개 추가
  for _ in range(3):
    vggnet.add(layers.Conv2D(filters=n_filters, kernel_size=3,
                             padding='same', activation='relu'))
  vggnet.add(layers.MaxPooling2D(pool_size=2))

# 컨볼루션 블록을 거쳐 추출된 2D 특징 맵을 1차원 벡터로 평탄화
vggnet.add(layers.Flatten())

# 완전 연결 레이어 1
# units: 뉴런 4096개
vggnet.add(layers.Dense(units=4096, activation='relu'))

# 완전 연결 레이어 2
vggnet.add(layers.Dense(units=4096, activation='relu'))

# 최종 출력 레이어
# units: 뉴런 1000개 (=ImageNet 데이터셋 클래스 1000개 분류 목적)
# activation: Softmax 활성화 함수를 사용해 각 클래스에 대한 예측 확률 출력
vggnet.add(layers.Dense(units=1000, activation='softmax'))

0개의 댓글