관리 메뉴

애독자's 공부방

[혼만딥] 4주차 _ 혼자 만들면서 공부하는 딥러닝 본문

머신러닝+딥러닝/혼공학습단 14기

[혼만딥] 4주차 _ 혼자 만들면서 공부하는 딥러닝

애독자 2025. 7. 22. 00:44
728x90

혼공단 - 혼만딥, 혼자 만들면서 공부하는 딥러닝

 

 

■ 시작에 앞서..

이번 주 숙제를 마무리하면 드디어 여름 방학이 시작됩니다. 나이든 직장인이라 방학을 겪어본 지 너무 오래되었는데, 혼공단을 진행하며 다시금 이 설렘을 느낄 수 있어 기쁩니다. 이른 방학을 맞이하기 위해 숙제를 서둘러 마쳤는데요.. 아이들과 함께 박물관이라도 다녀올 계획이지만, 요즘 '케데헌' 덕분에 인기가 많아져 쾌적한 관람은 어려울 듯합니다. 혹시 족장님께서도 보셨는지 모르겠네요? 저는 출퇴근길에 OST를 즐겨 듣고, 아이들과도 틈틈이 관련 영상을 시청하며 즐기고 있습니다. 그나저나, 마침 집중 호우가 그치고 이번 주부터 더워진다고 하니, 모두 건강 조심하시기 바랍니다.

 

 

 

■ 공부한 내용

# 진도 기본 숙제(필수) 추가 숙제(선택)
4주차
(7/21 ~ 7/27)
Chapter 03 Ch.03(03-1, 03-2) MobileNet 또는 EfficientNet으로 이미지 분류하고 예측 결과 화면 캡처하기 Ch.03(03-3) 텐서플로 허브에서 모델을 불러오는 코드와 실행 결과 설명하기

 

 

 

 

□ Chapter 03. 고급 CNN 모델과 전이 학습으로 이미지 분류하기
▷ 03-1. 이미지 분류 모델의 효율성 최적화하기

 1. DenseNet: 잔차 연결을 사용한 밀집 블록과 특성 맵의 크기를 줄이는 전환 블록을 반복적으로 쌓아 구성

  • 밀집 블록의 잔차 연결은 입력과 출력을 연결하여, 앞쪽에 있는 밀집 블록의 출력을 뒤쪽 밀집 블록으로 모두 전달
  • 기본적인 DenseNet은 밀집 블록을 각각 6개, 12개, 24개, 16개를 쌓으며, 그 사이에 전환 블록을 배치

 2. MoblieNet: 모바일 환경에 적합하도록 고안된 신경망

  • 모델의 파라미터 개수를 줄이기 위해 일반 합성곱 대신 깊이별 합성곱을 사용
  • 특성 맵의 깊이를 늘리기 위해 점별 합성곱을 사용한 깊이별 분리 합성곱 블록을 이용
  • 버전2: 깊이별 분리 합성곱 블록을 확장한 역 잔차 블록 사용 / 버전 3: 역 잔차 블록에 SE 블록을 추가해 성능 향상

 3. 깊이별 합성곱층:  캐라스를 만든 프랑소와 숄레가 Xception 모델에서 처음 소개한 층으로 일반적인 합성곱층보다 모델의 파라미터를 크게 감소

  • 입력 채널마다 서로 다른 합성곱 필터가 적용되기에 깊이가 1이며, 필터 개수는 입력 채널의 개수에 따라 자동으로 결정

 

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

 1. EfficientNet: MobileNet에서 제안한 역 잔차 블록에 스위시 활성화 함수를 적용하고, 확률적 깊이 알고리즘을 도입하여 보다 깊은 층을 쌓을 수 있도록 구성. 또한 모델의 성능과 신경망의 깊이, 너비, 해상도 사이의 관계를 연구하여 복합 스케일링 기법을 제안

  • 역 잔차 블록: 일반적인 잔차 블록과는 달리, 특성 맵의 크기를 크게 늘린 후 다시 압축하는 패턴을 보유
    • 늘어난 채널에 효과적으로 대응하기 위해 깊이별 분리 합성곱을 사용하며, 3x3 깊이별 합성곱층과 1x1 합성곱층으로 구성
  • SE 블록: 특성 맵의 채널에 부여할 가중치를 학습하는 모듈로, 이를 통해 모델의 어떤 채널이 중요한지 학습 가능
    • 트랜스포머의 어텐션 가중치와 비슷한 역할로 EnfficientNet에도 사용
  • 스위시 함수: 렐루 함수와 그래프 모양이 비슷하지만 신경망의 성능을 높이는데 도움을 줌  → 계산: x∙σ(x)
    • 시그모이드 함수(σ(x))의 계산을 피하기 위해 ReLU6 함수를 대신 사용하기도 하며, 합성곱 신경망을 비롯한 트랜스포머 기반의 대규모 언어 모델에서도 널리 사용

 

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

 1. 텐서플로 허브:  사전 훈련된 모델을 제공하는 저장소이자 라이브러리로, 최근 텐서플로 허브의 모델 저장소 역할이 캐글로 이전되어 라이브러리만 유지

  • 이를 사용하면 간편하게 캐글에 공개된 모델을 케라스 모델이나 층으로 통합 가능

 2. 허깅페이스:  트랜스포머 기반의 자연어 처리 모델을 공유하는 플랫폼으로 시작하여, 모델을 쉽게 사용할 수 있는 transformers 라이브러리를 공개하면서 대표적인 자연어 처리 분야의 모델 허브로 변화

  • 현재는 자연어 처리뿐만 아니라 컴퓨터 비전을 포함한 머신러닝 분야의 전반에 걸쳐 다양한 모델과 도구를 제공

 3. 전이 학습: 당면한 문제에 사전 훈련된 모델을 적용하는 매우 유용한 기법으로, 컴퓨터 비전 분야에서 널리 사용

  • 캐라스에서 사전 훈련된 모델의 분류층을 제외한 베이스 모델을 임포트한 다음, 현재 문제에 잘 맞는 분류층을 추가. 이후 베이스 모델의 가중치를 동결하고 주어진 데이터셋으로 모델을 훈련  → 이미지넷 데이터셋에서 훈련된 베이스 모델의 특성을 추출하는 성능을 활용한 높은 수준의 이미지 분류 모델 확보

 

 

 

■ 기본 숙제

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

  - MobileNet 및 EfficientNet 모델을 활용하여 강아지/고양이 이미지를 분류했습니다. 처음에 이미지 전처리 없이 진행했을 때는 MobileNet의 오분류가 많았지만 정확히 전처리한 다음에는 MobileNet이 제공된 샘플 이미지에 대해 더 정확한 분류 성능을 보였습니다. 이는 MobileNet이 경량화에 초점을 맞추면서도, 올바른 입력만 주어지면 기본적인 이미지 분류 작업을 더 효율적으로 수행할 수 있다는 것을 보여줬습니다.

  • EfficientNet이 오히려 tabby를 Egyptian_cat으로 분류했던 점은 모델이 너무 세밀한 특징에 집중하다보니, 특정 특징을 너무 강하게 연결 지어서 미묘한 차이를 구분하는 데 실수가 생긴 것 같습니다. 더 똑독해지려고 세부적인 것을 너무 많이 학습하다보니, 오히려 일반적인 것을 특정한 것으로 착각했을 겁니다. 물론 tabby도 확률은 낮지만 목록에는 있었습니다.

 

 

 

■ 추가 숙제(선택)

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

  - 책에 텐서플로 허브와 허깅페이스에서 각각 모델을 불러오는 코드와 설명이 이미 나와있어서, 저는 이 둘을 비교해봤습니다.

  • 텐서플로 허브와 허깅페이스에서 모델(EfficientNet B0)을 불러오기 비교
    • 텐서플로 허브: hub 패키지에 있는 KerasLayer 클래스에 b0-classification의 경로를 전달하면, 텐서플로 모델을 저장하는 SavedModel 포멧을 읽어 케라스층으로 반환
    • 허깅페이스: pipeline() 함수를 사용하기 위해 수행하려는 작업(이미지 분류)을 task 매개변수에 지정하고, 사용할 모델 이름을 지정
No. 특징 코드 1: TensorFlow Hub 코드 2: Hugging Face
1 라이브러리 tensorflow_hub, tf_keras transformers
2 핵심 함수 hub.KerasLayer() pipeline()
3 모델 출처 TensorFlow Hub (Google) / Kaggle Models 저장소 Hugging Face Model Hub
4 추상화 수준
(핵심 정보만 표시)
중간: 모델을 Keras 레이어로 통합, 전처리 과정 직접 구성 높음: pipeline이 전 과정(전처리, 예측, 후처리) 자동 처리
5 전처리 layers.Rescaling(1.0 / 255.0)와 같이 명시적으로 정의. 모델에 따라 다른 preprocess_input 함수 필요 pipeline이 내부적으로 모델에 맞는 전처리를 자동으로 수행. 사용자가 신경 쓸 부분이 적음
6 사용 목적 . 기존 Keras 모델에 특정 기능을 추가할 때
. TensorFlow/Keras 생태계 내에서 유연하게 모델을 조합할 때
. 전처리 과정을 직접 제어해야 할 때
. 다양한 딥러닝 태스크를 빠르고 쉽게 실행하고 싶을 때
. 복잡한 전처리/후처리 과정을 신경 쓰고 싶지 않을 때
. 최신 연구 모델들을 빠르게 적용하고 싶을 때
7 장점 . Keras 모델에 통합하기 용이
. 전처리 및 모델 커스터마이징에 더 큰 유연성 제공
. 압도적인 사용 편의성
. 다양한 태스크와 수많은 사전 학습 모델 지원
. 코드가 매우 간결함
8 단점 . 전처리 과정을 사용자가 직접 관리해야 함
. transformers만큼 다양한 태스크를 pipeline처럼 편리하게 제공하지는 않음
. 모델 내부 구조에 대한 세부적인 제어가 제한될 수 있음
. 특정 커스터마이징을 위해서는 pipeline보다 하위 API를 사용해야 함

 

# 코드 1: TensorFlow Hub
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")
])

 

# 코드 2: Hugging Face
from transformers import pipeline
pipe = pipeline(task='image-classification', device=0, model='google/efficientnet-b0')

 

728x90