빅데이터 QAQC_3기/빅데이터 QAQC_3기 TIL

TIL_260128

usungusung 2026. 1. 8. 20:48

Today I learned

 

 

1. 멀티모달 복습문제

1) 신경망의 기본식: Y = WX + B

 

  • W (가중치): 입력 X의 중요도를 조절
  • B (편향): 출력의 기준점을 이동
  • 둘 다 **역전파(Backpropagation)**로 손실을 최소화하도록 학습됨
  • 학습 대상은 W + B

2) 활성화 함수(Activation Function)가 필요한 이유

  • 활성화 함수가 없으면 아무리 깊어도 선형 모델
  • 비선형성을 부여하여 복잡한 패턴을 학습 가능하게 하기 위해 활성화 함수 필요
    • 비선형 함수(ReLU, Sigmoid 등)**가 있어야 복잡한 패턴 학습 가능

3) ReLU의 단점: Dead ReLU

입력이 0 이하일 때 기울기가 0이 되어 뉴런이 업데이트되지 않을 수 있다

 

  • ReLU(x) = max(0, x)
  • x ≤ 0 → 출력 0, 기울기 0
  • 한 번 죽은 뉴런은 영원히 학습 안 됨

4) 손실함수 – 회귀(Regression)

 

  • 회귀 = 연속값 예측
  • MSE: 큰 오차에 민감
  • MAE: 이상치에 강함

5) 손실함수 – 이진 분류(Binary Classification)

Binary Cross Entropy(BCE)

 

  • 출력이 확률(0~1)일 때 BCE가 이론적으로 적합
  • 로지스틱 회귀, 시그모이드 출력과 궁합이 좋음

6) 학습률(Learning Rate)이 너무 클 때

최적점 근처에서 발산/진동하여 수렴이 어려울 수 있다

 

  • 너무 작음 → 학습 느림
  • 너무 큼 → 최적점을 넘어가며 발산

 

7) 전이학습(Transfer Learning)의 장점

사전학습된 특징을 활용해 적은 데이터에서도 빠르게 성능을 낼 수 있다!

 

  • 대규모 데이터로 학습된 Feature(엣지, 패턴) 재사용
  • 특히 이미지·자연어에서 효과 큼

 

 

 

 

 

 

import tensorflow as tf
from tensorflow.keras import layers, models

# 1) 모델 정의

model = models.Sequential([
    # TODO: Input layer (28, 28, 1)
    # Input shape is now defined in the first Conv2D layer

    # Conv Block 1 (32 filters)
    # Conv2D -> ReLU -> MaxPooling2D
    layers.Conv2D(32, (3,3), padding="same", input_shape=(28, 28, 1)),
    layers.ReLU(),
    layers.MaxPooling2D((2,2)),

    # Conv Block 2 (64 filters)
    # Conv2D -> ReLU -> MaxPooling2D
    layers.Conv2D(64, (3,3), padding="same"),
    layers.ReLU(),
    layers.MaxPooling2D((2,2)),

    # Conv Block 3 (128 filters)
    # Conv2D -> ReLU -> MaxPooling2D
    layers.Conv2D(128, (3,3), padding="same"),
    layers.ReLU(),
    layers.MaxPooling2D((2,2)),

    # Flatten
    layers.Flatten(),
    layers.Dense(128, activation="relu"),
    layers.Dense(1, activation="sigmoid")
    ])

# 2) 컴파일
model.compile(
    optimizer="adam",
    loss="binary_crossentropy",
    metrics=["accuracy"]
)

#3) 요약 출력
model.summary()

사전학습된 특징을 활용해 적은 데이터에서도 빠르게 성능을 낼 수 있

 

 

더보기

결과는 아래에용

Model: "sequential"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type)                    ┃ Output Shape           ┃       Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d (Conv2D)                 │ (None, 28, 28, 32)     │           320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ re_lu (ReLU)                    │ (None, 28, 28, 32)     │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d (MaxPooling2D)    │ (None, 14, 14, 32)     │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_1 (Conv2D)               │ (None, 14, 14, 64)     │        18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ re_lu_1 (ReLU)                  │ (None, 14, 14, 64)     │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_1 (MaxPooling2D)  │ (None, 7, 7, 64)       │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_2 (Conv2D)               │ (None, 7, 7, 128)      │        73,856 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ re_lu_2 (ReLU)                  │ (None, 7, 7, 128)      │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_2 (MaxPooling2D)  │ (None, 3, 3, 128)      │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten (Flatten)               │ (None, 1152)           │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense (Dense)                   │ (None, 128)            │       147,584 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_1 (Dense)                 │ (None, 1)              │           129 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
 Total params: 240,385 (939.00 KB)
 Trainable params: 240,385 (939.00 KB)
 Non-trainable params: 0 (0.00 B)

 


2. [라이브세션] 멀티모달 3회차

 

Objection Detection 특징

  • 전처리
  • 특징 추출
  • 분류

 

R-CNN 계열(2-stage) vs YOLO(1-stage) 비교

  • 기존의 CNN 계열 이미지 딥러닝 모델
  • R-CNN: 객체 탐지 분야에서 처음으로 CNN을 적용한 모델
  • 주요 아이디어
  • 이미지럴 영역 제안을 통해 여러개의 작은 후보로 만듦
  • 후보 각각을 CNN에 입력하여 특징을 추출
  • 추출된 특징 벡터를 분류기(SVM)에 입력하여 객체를 분류
  • Bounding Box Regression을 통해 위치 보정
  • - Region Proposal+CNN = 객체 탐지

잘 사용하지는 않아요

 

 

YOLO(You Only Look Once)

  • CNN에서 개선된 모델
  • one-shot 분류기
  • 이미지를 한번만 호출, 동시에 각 영역 가중치를 부여
  • 실시간 영상에 특화됨
  • ㅇㅣ미지 입력 및 CNN 처리하여 특징 추출 및 정보 생성
  • Bounding Box 및 클래스 예측을 통해 객체 위치 및 클래스 예측
  • Non-Maximum Suppression(NMS)를 통해 중복된 박스 제거 및 최종 객체를 결정

 

R-CNN VS YOLO

항목 R-CNN 계열 YOLO
구조 Region Proposal 단계 + CNN 탐지 단계(2-stage) 단일 CNN 구조(1-stage)
Region Proposal Selective Search 사용 → 매우 느림 Region Proposal 단계 없음
복잡도 Region Proposal 단계와 CNN 단계에서 연산 반복 → 연산량 증가 CNN Forward Pass 한 번에 해결
속도 매우 느림 → 실시간 탐지 불가 매우 빠름 → 실시간 탐지 가능 (FPS > 30)
성능 높은 정확도 정확도는 조금 떨어짐 (하지만 속도는 빠름)
활용 분야 정밀한 객체 탐지 ( 의료) 실시간 탐지 (영상)

 

 

YOLO

  • 바운딩 박스: 최종 객체 검출영역
  • 객체가 존재하는 위치를 나타낸 직사각형 상자
  • x,y,w,h 값으로 경계 상자를 예측
  • x,y: 경계 상자의 중심 좌표
  • w,h: 경계 상자의 너비와 높이

 

ROI(Region of Interest)

  • 분석하고자 하는 특정 영역
  • 이미지에서 전체가 아닌 특정 부분만 선택해 처리할 때 사용

 

IOU(Intersection over Union)

  • 예측한 Bounding Box와 실제 객체의 Bounding Box 간 겹치는 정도를 나타내는 지표

 

  • 객체 검출을 할 때 객체에 대한 정보를 가지는 bounding box와 Box의 IoU를 통해 임계값이 0.5 이상이면 일치하는 객체로 판단하는 작업 진행
  • 임계값이 높을수록 정답과 일치함을 의미
  • 기준 임계값을 너무 높게 하면 검출율이 낮아짐 -> 적당한 임계값 설정이 중요

 

NMS: Non Maximum Suppresesion

  • YOLO는 같은 객체에 대해 여러개의 Bounding Box를 출력할 수 있음
  • NMS는 겹치는 박스 중 신뢰도가 가장 높은 것만 선택하고 나머지는 제거

 

 

YOLO 구조 살펴보기

이렇게만 생겼다 아는 정도만 되도 되는 수준... 라이브러리로 불러오면 사실 끝임

 

  • 입력 이미지 448 x 448 x 3 (RGB) 크기에 맞춰 변환한 뒤, CNN에 입력합니다.
  • 이미지를 7x7 크기의 그리드 셀로 나눔 (총 49개 셀)
  • 각 그리드셀에서 다음 정보를 출력→ 총 30개 :
    • Bounding Box 2개 → 각 Box당 5개 값 (x, y, w, h, c)
    • 클래스 확률 (20개) → VOC 데이터셋 기준 클래스 수

 

각 그리드 셀은 최대 두개의 Bounding Box를 예측

설명
x,y 그리드 셀 내에서 Bounding Box의 중심 좌표
w,h 전체 이미지 기준 Bounding Box의 너비 및 높이
c Bounding Box의 신뢰도 (Confidence), 객체가 있을 확률

그리드셀에서 존재하는 20개 클래스 예측 확률

  • 각 그리드 셀은 20개의 클래스 확률을 출력
  • 클래스 예측 예시:
    • 개 (Dog) → 0.8
    • 자전거 (Cat) → 0.1
    • 자동차 (Car) → 0.05

 

 

OpenCV 실습

 

 

3. 최종프로젝트

데이터 결합 flow chart 작성

데이터 결합 방향 확정

이상치 탐지 확정

 

'빅데이터 QAQC_3기 > 빅데이터 QAQC_3기 TIL' 카테고리의 다른 글

TIL_260112  (1) 2026.01.12
TIL_260109  (1) 2026.01.09
TIL_260107  (0) 2026.01.07
TIL_260106  (0) 2026.01.06
TIL_260105  (0) 2026.01.05