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 |

