What is Computer Vision?
컴퓨터 비전은 기계의 시각에 해당하는 부분을 연구하는 컴퓨터 과학의 최신 연구 분야이다. 인간의 시각이 할 수 있는 몇 가지 일을 수행하는 자율적인 시스템을 만드는 것을 목표로 한다.
컴퓨터 비전에는 Image, Semantic segmentation, Object detection & segmentation, Panoptic Segmentation이 있다.
Image Classification
전세계의 모든 데이터를 갖고 있다면 KNN을 사용해서 Classifiy를 해도 되지만 검색의 시간, 데이터의 용량이 O(n) 만큼 사용되기 때문에 이는 매우 비효율적이다. 이에 대한 대안으로 Neural Network를 사용해 보자!
Fully Connected Network는 모든 픽셀들을 서로 다른 가중치로 내적하는 과정을 거친다. 하지만 이러한 과정은 평균 이미지 밖에 표현이 되지 않고, cropped image와 같은 경우에 학습이 안된다는 단점이 있다. CNN을 사용함으로서 이를 해결할 수 있다.
AlexNet
VGGNet
신경망이 더 깊을 수록 복잡한 관계 학습이 가능하게 된다. 그렇게 되면 신경망을 무작정 깊게 쌓아도 될까??
깊은 신경망일수록 최적화하기가 어려워진다.
[네트워크를 깊게 쌓기 위한 모델들]
GoogLeNet
Inception Module의 구조를 제한했음. 하나의 레이어에 여러 측면으로 activation을 관찰한다. 깊이 확장이 아닌 수평 확장함. 하지만 이렇게 되면 계산 복잡도가 매우 높아지기 때문에 (1 X 1) convolution을 사용하여 메모리 사이즈와 계산에 이득을 가져오게함.
1X1 Convolution 장점
Auxiliary classifiers를 중간에 사용하여 Back Propagation이 사라지는 것을 막는다. 중간의 결과값으로 loss를 구하는 과정을 거치기 때문에 결과적으로 처음 시작 과정까지 loss가 전달된다. Auxiliary classifier는 학습 도중에만 사용이되고 실제 테스트 과정에서는 빠진다.
ResNet
최초로 더 깊은 레이어를 쌓을 수록 더 좋은 성능이 나오는 것을 증명한 논문이다. 논문의 주요 내용은 네트워크의 레이어가 성능에 중요점이라는 것이다.
이전에는 레이어가 깊으면 파라미터가 많아져 오버피팅이 심해질 것이라고 예상했다. 하지만 아래의 사진을 보면 20-layer보다 56-layer의 정확도가 낮은걸 봐서는 오버피팅이 설명되지 않는다. 이는 Degradation problem이라고 하며 최적화 문제로 인해 56-layer가 학습이 안된것이다.
위 문제를 해결하기 위한 방법은 "Residual learning"이다.
(입력이 들어오고 출력이 나오면 입력을 출력에 더한다. (제약조건:입력과 출력의 차원이 같아야된다) F(x)는 입력과 결과값의 차이만 학습한다. -> 왜 좋냐? 가정을 세우고 해봤더니 잘됬다...!)
기존의 네트워크를 H(x)라고 할때, F(x) = H(x) - x로 네트워크를 변형시켜 F(x)+x를 H(x)에 근사하도록 학습하는 것이다. 이렇게 되면 레이어에 대해서 입력과 출력의 차이에 대해서 degradation problem을 해결 할 수 있다는 것이다. 이런 개념을 사용한 것이 "Shortcut connection"이다. Shortcut으로 gradient vanishing을 막을 수 있다.
ResNet의 전체적인 구조
DenseNet
채널 축으로 concatenate함. 바로 직전 블록 뿐만 아니라 이전의 레이어과 연결함으로서 이전의 특징들을 참조해서 더 복잡한 학습이 용이하도록 도와준다.
SENet
Activation간의 관계가 더 명확하게 할 수 있도록 채널간의 관계를 모델링, 중요도를 파악해서 attention하는 구조. Squeeze 단계에서 avearage pooling을 통해 각 채널의 분포를 구함. Excitation에서는 채널간의 연관성을 고려해 attention score를 구함. 입력 attention하고 weight을 rescale함
EfficientNet
Width, Depth, Resolution scaling을 적절한 비율로 합쳐서 고안한 모델.
Deformable Convolution
기존 CNN 모델은 고정된 구조만을 사용했지만 Deformable Conv는 좀 더 유연한 영역에서 특징을 추출하는 방법을 제안한다.
Offset을 계산하는 conv layer와 offset 정보를 받아 conv 연산을 수행해 output feture map을 생성한다.
Fully Convolution Networks (FCN)
Image Classification은 출력층이 Fully-connected layer로 구성되어있다. 네트워크의 입력층에서 중간까지 ConvNet을 이용하여 영상의 특징들을 추출하고 출력층에서 fc를 통해 분류한다. 반면 Semantic Segmenation에서 fc를 사용하게 되면 이미지의 위치 정보, 입력 이미지의 크기 고정의 한계가 있다. 이를 보완하기위해 fc를 Conv-layer로 대체한다.
Semantic 모델이 가능해지지만 이러면 굉장히 작은 output이 나오게 된다 (stride와 pooling으로 인해 해상도가 낮아지지만 receptive field가 매우 커져서 좋음). Output을 원래 입력 사이즈로 맞추기 위해 Upsampling을 시도한다.
그렇다면 Upsampling을 통해 해상도를 복구할 수 있을까??? Network에서 Low level은 지역적이고 자세한 정보가 있는 반면, High level은 의미론적인 정보를 갖고있다. 두 특징들을 합치면 어떨까?? 중간 단계의 특징들을 합치면 더 좋은 결과가 나옴! (Skip Connections)
Upsampling
Receptive field를 최대한 키우고 나서, 원래의 입력 사이즈를 맞추기 위해 Upsampling을 사용한다.
U-Net
DeepLab
CRF : 후처리로 사용되는 툴
Dilated(Atrous) Convolution : Weight 사이를 한칸씩 건더 뛰어 더 넓은 영역을 고려함
Instance Segmentation : 같은 클래스라도 객체가 다르면 구분
Panoptic Segmentation : Instance + 배경 정보 + 알파
Object Detection
Gradient-based Detector(HOG)
Selective Search
Two-stage detector
R-CNN
Fast R-CNN
Bounding Box regression : 예측하는 박스가 ground truth와 유사하도록 학습
Faster R-CNN
Single-stage detector
정확도를 포기하고 속도를 확보해서 real time detection. ROI pooling을 사용하지 않고 곧 바로 box regression, classification을 수행함
You Only look once (YOLO)
Input image를 SxS(마지막 layer의 해상도) grid로 나누고, 각 그리드에 4개의 좌표와 confidence score를 예측하고 결과에 따라 class score를 예측한다.
Single Shot MultiBox Detector (SSD)
Multi scale object를 더 잘 처리하기 위해서 중간 feature map을 각 해상도에 적절한 bounding box를 출력할 수 있도록 한다.
RetinaNet
Focal loss의 효과를 입증하기 위해 간단한 dense dector 모델. Single stage detector의 단점인 class 불균형 문제를 해결.
DETR
Transformer를 object detection에 활용한 사례