CNN Applications
Object detection
object(classification)+region(regression) -> 각 object의 사각범위와 label을 구하는 task
Computer vision tasks
입력->원하는 출력->새로운 네트워크 구조 설계
Image classification
이미지 입력->softmax->클래스 확률, 예측-실제 정답 CE loss로 비교
Semantic segmentation
픽셀 단위로 클래스 분류-> CE loss로 픽셀 단위 정답과 예측간 손실 계산, IoU(교집합/합집합)로 학습(but IoU가 미분 불가능하기에 보통 IoU 베이스 soft IoU나 dice 사용)
자율주행, 의학이미지, 위성사진 등
하지만 이 semantic segmentation의 문제는, 학습을 시키기 위해서는 각 픽셀별로 라벨링된 이미지가 존재해야 한다는 것이다.
그래서 첫 아이디어는 Sliding Window를 생각해보았다. 하지만.. 그건 모든 박스를 다 봐야 하기에.. 너무 비효율적이었다.
따라서 FCN을 도입해본다. 이는 효율성을 향상시킨다. 이미지 전체에 대해 예측하는 방식이다.
하지만 FCN이 그렇듯.. 당연 비용이 많이 든다. 그래서 layer들을 downsampling했다가 upsampling하는 방식으로 바꿨다.
U-Net (for semantic segmentation)
down-up 과정이 U자로 보인다고 해서 U-Net이다. 인코더에서는 feature map size를 계속 줄이고, 디코더는 그 반대이다.
그리고 대응되는 feature map을 잇는 것을 skip architecture라 한다.
Object Detection
이건 그냥 물체가 있는지를 탐지하는 것이다.
대표적으로 YOLO가 쓰인다. You Only Look Once.
이는 실시간으로 객체를 탐지하는 모델이다. feature map을 NxN grid로 나누고, 각 셀에서 bounding box와 cls 확률을 예측한다.
YOLO의 출력 형식은 SxSx(Bx5 + C)로 되는데, 여기서 S:grid size, B:#boxes per cell, 5:x,y,w,h,P, C:#cls 이다.
YOLO loss
localization error와 classification error를 동일시하는 것은 이상적이지 않다.
localization은 중요하지만 학습이 느리기에 더 큰 가중치가 필요하고, classification error는 비교적 잘 학습되기에 기본 가중치로도 충분하다. 따라서 보통 gamma_coord를 5로 설정한다.
또한 웬만해서는 객체가 없는 셀이 객체가 있는 셀보다 많을 것인데, 이 셀들에 대해 confidence loss를 동일한 비중으로 학습한다면 객체가 없는 셀에 대한 학습이 과도하게 많아져서, 모델이 '웬만하면 없다'고 예측하는 쪽으로 편향되게 한다. 따라서 obj가 없는 셀들에 대한 값인 gamma_noobj를 0.5로 설정하는 것이다.
YOLO는 박스의 확률을 MSE, IoU loss로 평가하고, 객체의 확률을 CE loss로 평가한다.
Segmentation은 픽셀당 클래스 예측을 CE loss로 평가한다.
NMS(Non maximum suppression)
이건 일단 박스를 많이 만들어 놓고, 중복되는 박스를 confidence score 기준으로 제거해서 높은 IoU를 가지는 박스 중 하나만 선택하는 것이다.
Sequential Data
이는 '순서가 중요한' 데이터이다. 텍스트, 음성, 시계열, 패턴, 주가, 생물학적 데이터 등.. 자연어는 one-hot 또는 word vector로 나타낼 수 있다.
Seq 처리 요건은, 시간 의존성 모델링과 가변 길이 데이터 처리 가능성이다.
전자는 이전의 입력이 다른 것에 영향을 미치기에 그 정보를 저장하여 모델링해야 하는 것이다.
후자는 입력 길이가 결정되지 않은 데이터를 처리 가능해야 하며, 입력 길이에 비례하여 모델의 크기가 변화하면 안되며, 출력 길이가 고정되지 않은 경우도 처리 가능해야 하는 것이다.
RNN
이는 자연어 처리, 순차적 데이터 처리, 음성 인식 및 시계열 예측 같은 순차적 데이터 처리에 특화된 신경망이다.
여기서는 다음 단계에서 이전 정보를 활용할 수 있다.
Hidden state : 이전까지의 정보를 저장하고 활용하는 곳. 입력이 수신될 때마다 업데이트됨.
Recurrent structure : 동일한 가중치를 공유하는 셀들이 연결되고, 이전의 hidden state와 현재 입력으로부터 새로운 hidden state와 출력이 계산됨.
Variable-length input processing : 가변 길이 입력 처리 기능
RNN Hidden state update
현시점의 입력 x_t와 이전 hidden state를 f에 넣어 새로운 hidden state 탄생
RNN output generation
마지막 hidden state를 f에 통과하여 output 생성
여기서 중요한 것은, 항상 같은 함수와 같은 파라미터가 매 시점마다 적용된다는 것이다.
간단하게.. Vanilla RNN은 아래와 같다.
이건 그냥 one-to-one일 때만 쓰이는 애다.
one2many : Image Captioning, 이미지를 보고 내용을 생성하는 것.
many2one : video action prediction 비디오의 한 장면을 보고 이게 어떤 액션인지
many2many : 비디오 captioning
many2many(우) : Video classification on frame level
Seq2Seq : Many2one + one2many
예를 들어 character-level language model이 있는데,
얘는 학습시킬 때 일단 exam seq를 넣어주고 (ex. "hello"), 이후 test시 하나의 문자만 넣어주고 auto regression 한다.
BPTT(Backpropagation Through Time)
시간축을 따라 오차 역전파를 계산하는 것이다.
Truncated BPTT
이는 일정 시간 간격으로 잘라 학습하는 것이다.
이런식으로 말이다. 학습-back-학습-back-학습-back 순서이다.
예시.
이미지 캡셔닝(CNN으로 이미지 특징 추출 후 RNN으로 설명 생성)
음성인식
RNN 장단점
good : 가변 길이 입력 처리 가능, 이론상 긴 거리 정보도 반영 가능, 모델 크기 일정
bad : 계산 느림, 장기 의존성 학습 어려움
'AI > 딥러닝' 카테고리의 다른 글
RNN and Transformer (3) | 2025.06.19 |
---|---|
Pruning and Quantization (3) | 2025.06.19 |
CNN (1) | 2025.06.18 |
Numerical Stability, Optimization (1) | 2025.04.24 |
Regularization (1) | 2025.04.24 |