CS231n 11강. Detection and Segmentation
Stanfoard CS231n 2017 11강을 요약한 글입니다. Object Detection, Segmentation, Localization, Classification 등의 개념에 대해 나옵니다
Computer Vision Tasks
Semantic Segmentation
- No objects, just pixels
- Input : Image
- Output : decision of a category for every pixel(픽셀별로 어떤 카테고리에 속하는지 알려줌)
- 픽셀이 어떤 것을 나타내는지 알려주지만, 개별에 대해선 분류할 수 없음(2개 이상의 물체를 같은 것으로 인식) 추후 instance segmentation에서 이 문제를 해결할 예정입니다
- Semantic Segmentation은 classification을 통해 진행될 수 있습니다.
- Sliding Window Approach
- 잘려진 patch마다 어떤 class인지 유추
- 이 방법은 computation이 비싼 방법이고 중복되는 patch 사이에서 공유된 feature를 재사용하지 않습니다
- Fully Convolutional
- 3x3 filter를 사용해 이미지 크기를 유지하며 convolution에 넣음
- 한번에 모든 픽셀을 예측할 수 있도록 설계
- Output : \(C \times H \times W\)의 Tensor
- 그러나 원본 이미지를 그대로 convolution하는 것은 비싼 연산
- Fully Convolutional with downsampling and upsampling
- max pooling 또는 strided convolution을 통해 downsampling
- unpooling을 통해 upsampling
Upsampling
- 1) Unpooling
- pooling의 반대 작업으로, unpooling 지역의 receptive field의 값을 복제
- we duplicate receptive filed of unpooling region
- 하지만 우측처럼 나머지 값이 0일 경우는 Bed of Nails(무척 괴롭다)
- max pooling을 할 때 max인 값을 기억했다가 Max Unpooling할 때 사용. 해당 위치 말고는 모두 0으로 채워넣음
- fixed function
- 2) Transpose Convolution
- 딥러닝에서 사용되는 여러 유형의 Convolution 소개 참고
- Up-sampling with Transposed Convolution 이 글도 좋습니다
- Convolution Operation은 input values와 output values 사이에 공간 연결성을 가지고 있습니다. 3x3 kernel을 사용한다면, 9개의 values가(kernel) 1개의 value(output, 문지른 후의 결과물)와 연결됩니다. 따라서 many to one 관계라고 볼 수 있습니다
- Transposed Convolution은 1개의 value를 9개의 values로 변경합니다. 이것은 one to many 관계라고 볼 수 있습니다
- 필터의 값 사이에 0을 넣은 매트릭스를 Transpose한 후, 곱해줍니다
- Others names
- Deconvolution (bad)
- Upconvolution
- Fractionally strided convolution
- Backward strided convolution
Classification + Localization
- Single Object
- what the category is, where is that object in the image?
- Output : Bounding Box(around the region of label), label
- localization은 regression 문제!
- Multi Task Loss를 계산
- 처음부터 학습하기 어려울 수 있으니, ImageNet의 pretrain 모델을 사용하기도 합니다(Transfer Learning)
Aside: Human Pose Estimation
- Pose Estimation에도 활용할 수 있음. Image를 넣으면 14개의 join position이 나옴
Object Detection
- Computer Vision의 핵심 Task
- Multiple Object
- Output : Bounding Box(around the region of label), label
- 딥러닝을 활용한 이후부터 점점 성능이 좋아지고 있음
- Localization과의 차이점은 동일한 종류의 물체가 여러 개 있다면 Object Detection은 모두 잡음(Localization은 1개로 취급)
- Sliding Window Approach
- 다른 모양의 crop에서 물체인지 배경인지 분류
- 거대하고 많은 crop이 필요한데, 이게 비싼 연산
- Region Proposals
- Selective Search 방법으로 물체가 있을만한 Region을 1000~2000개 생성
- CPU에서 연산
R-CNN
- 문제점
Fast R-CNN
- ConvNet을 통해 나온 feature map에서 RoIs를 찾음
- RoI Pooling
- Fully Connected Layer는 Fixed size input이 필요한데, RoI Pooling이 작업을 수행
- Fast R-CNN은 여전히 Bottleneck을 보유
Faster R-CNN
- RPN(Region Proposal Network)을 추가해서 성능 개선
- Output : Object 유무, Object Proposal
- Faster R-CNN 논문 리뷰 참고
Detection without Proposals: YOLO / SSD
- 해당 논문을 꼭 보는 것이 좋을듯! CS231 설명은 너무 빈약
- 박진우님 YOLO 분석
Aside: Object Detection + Captioning = Dense Captioning
- region에 대한 예측보다 region에 대한 캡션을 작성하려고 함
- Faster R-CNN처럼 보임(region proposal stage, bounding box, processing per region)
- 그러나 실제론 각각의 region에 대한 캡션을 예측하는 RNN 모델
- 특정 문제로부터 배운 것을 다른 Task에 적용할 수 있음(Multi Task)
Instance Segmentation
- Object Detection에서 Bounding Box 대신 Segmentation
Mask R-CNN
Reference
- Stanfoard CS231n 2017
- 이진원님의 PR-012: Faster R-CNN
- 딥러닝에서 사용되는 여러 유형의 Convolution 소개
- Up-sampling with Transposed Convolution
- Faster R-CNN 논문 리뷰
카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)
PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다
이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)