1. Preview
Object Detection - Deep Learning 기반으로 발전했다.
Object detection competition에서의 성능 지표를 보면 2013년을 기점으로해서 70% 후반까지의 비약적인 발전(AlexNet)을 했다.
PASCAL VOC: image detection을 위한 dataset으로 classification, object detection, segmentation 평가 알고리즘을 구축하거나 평가하는데 매우 유명한 데이터 셋이다.
- Annotations : JPEGImages에 담겨있는 이미지 oject detection을 위한 정답 데이터.
- ImageSets : 특정 클래스가 어떤 이미지에 있는지 등에 대한 정보를 포함하는 폴더
- JPEGImages : object dectection을 위한 입력 데이터. 이미지 파일이 모여있습니다
- SegmentationClass : Semantic segmentation을 학습하기위한 label 이미지들
- SegmentationObject : Instance segmentation을 학습하기위한 label 이미지들
2. Localization, Detection, Segmentation
- Classification : 이미지를 Cnn Conv 연산을 통한 피쳐맵의 특성을 기반으로 해서 무엇인가에 대한 분류를 하는 것.
- Localization : 단 하나의 Object 위치를 Bounding box로 지정하여 찾음
- Object Detection : 여러 개의 Object들에 대한 위치를 Bonding box로 지정하여 찾음.
- Segmentation : Detection보다 더 발전된 형태로 Pixel 레벨 Detection 수행
먼저 Localization이라는게 있다. 하나의 Object가 하나의 이미지에 있는 형태를 localization이라고 한다. 하나가 있다고 가정하기 때문에 Object detection보다 detection하는데 덜 어렵다.
그러나 Object detection은 하나의 이미지 안에 여러 object가 있다. 여러개의 Object를 하나의 이미지에서 바운딩박스로 detect 하는 것이 Object detection이다.
그리고 픽셀 단위로 나눠서 object를 classification 하는 것이 segmentation이다.
세가지의 공통점은 Object의 위치를 찾아내는 것이다.
차이점: Localization & Detection 은 해당 object의 위치를 bounding box로 찾고, bounding box 내 오브젝트를 판별하는 것이다.
Bounding box regression (Bounding box가 어딨는지 좌표값을 예측하고 Object에 fit 하도록 좌표를 조정),
Classification(Bounding box안에 있는 건 무엇인가?) 두개의 문제를 같이 해결하는 것이다.
3. Object Localization
3-1) Object localization 개요
classification과 유사한 절차
- 원본 이미지 >> Feature Extractor >> Feature Map >> FC Layer >> Soft max Class score
Feature Extractor
- VGG(백본)에 이미지 입력
- 이미지에서 중요한 feature 뽑아냄
Feature Map
- 사이즈 감소: 7 * 7
- 채널 수 증가: 512
- 추상화된 이미지
- 대상 학습(image-lable mapping)
FC Layer
- dense layer
- fully connected layer
Softmax Class score
- car vs. dog vs. cat
- 확률 계산 >> 점수(scoring)
Annotation 파일
- bounding box에 대한 좌표값
Object Localization
- Feature Map의 결과 (Bounding Box Regression 포함)
Backbone(Feature Extractor : 중요한 피쳐를 뽑아내서 피쳐맵을 만듦)을 통해서 피쳐맵을 만들고
Fully Connected layer를 통해 Softmax를 거쳐서 학습이 된다.
Classification 과정과 별개로,
Object Localization은 Bounding Box Regression layer가 따로 있다.
Annotation 파일에 바운딩박스에 대한 좌표 값
Classification 후의 피쳐맵에서 어떤 특성이 나온다면 Bounding Box Regression layer을 적용해라.
3-2) Object localization - Bounding box 학습
원본 이미지부터 학습을 반복하여 가중치를 업데이트 하고,
Bounding box의 예측 오류를 점점 줄여나가는 방향으로 Bounding box를 만든다.
여러 이미지와 Bounding box 좌표로 학습한다.
3-3) 여러 이미지와 Bounding box 좌표로 학습
Feature가 있다면 바운딩 박스로 바로 맵핑을 할 수 있게 된다.
3-4) Object localization 예측 결과
car일 확률이 나오고 Bounding box의 좌표를 보여준다.
3-5) 이미지의 어느 위치에서 Object를 찾아야 하는가?
여러개의 Object를 검출해야 한다.
- 이미지의 어느 위치에서 Object를 찾아야 하는가? 예측을 엉뚱하게 하는 경우가 있다.
- Bounding box만 무지성으로 넣으면 예측을 하기 힘들다.
- object localization을 그대로 적용하면 정확도 감소
- 여러 개의 Object로 인한 혼동
- 여러 개의 Object로 인한 혼동
- Object가 있을 법한 위치를 먼저 알려주는 것이 중요하다!
- Region Proposal 학습 필요
- 그리고 나서 Region Proposal에 해당되는 Object에 대해서 또 예측을 해주어야 한다.
4. Object Detection
4-1) Object detection history
2012년 이후로 AlexNet 과 같은 딥러닝 기반 프레임워크을 쓰고, 그 첫 산물이 바로 RCNN이다.
이 중에서도 One stage detection, Two stage detection 이 있다.
주로 One stage 방식에는 YOLO Series와 Retina-Net, SSD, EfficientDet 등이 있으며,
Two stage 방식에는 RCNN Series와 SPPNet 등이 있다.
Two stage detection : Region Proposal과 Classification이 순차적으로 이루어진다.
이미지 안에서 객체가 있을 법한 영역(ROI)을 Bounding Box로 대략적으로 찾는다. 이를 Region Proposal이라 하는데, 이후에는 후보 영역을 바탕으로 Classification(Bbox Regression + Multi-Class Classification)을 진행하여 객체를 검출한다.
Selective search, Region proposal network와 같은 알고리즘을 및 네트워크를 통해 object가 있을만한 영역을 우선 뽑아낸다.
이 영역을 RoI (Region of Interest)라고 하며, 이런 영역들을 우선 뽑아내고 나면 각 영역들을 convolution network를 통해 Multi-Class classification, Bbox regression(localization)을 수행한다.
따라서, 이러한 과정을 통해 One-stage Detector 방식에 비해 시간은 소요되지만, 보다 좋은 성능의 결과를 도출하고 있다.
대표적인 Region Proposal 방식으로는 Selective Search와 Edge Boxes 방식이 있다.
Selective Search: Region의 색, 질감, 강도 등을 갖는 인접 pixel을 찾아서 물체가 있을 법한 Box나 영역을 찾아낸다
즉, 이미지 전체를 Convolution 하지 않고 위의 사진에서 초록색 영역만 가지고 검사하도록 하여 더 효율적으로 처리한다
Sliding Window: 검출하고자 하는 입력 이미지에 정해진 크기의 Bounding Box를 만들어 방향을 이동하면서 물체가 있을 법한 box나 영역을 추출하는 것이다. 모든 영역을 탐색해야 하기 때문에 시간이 많이 소모되어 비효율적이기에 Region Proposal 방식으로 대체됐다.
One stage detection: Region Proposal과 Classification이 동시에 CNN을 통해 이루어진다.
Feature Extraction에 해당하는 Convolution Layers에서 위의 두 가지가 동시에 이루어진다.
RoI영역을 먼저 추출하지 않고 전체 image에 대해서 convolution network로 Multi-Class Classification, Bbox regression을 수행한다.
당연히 특정 object 하나만 담고있는 RoI에서 Multi-Class Classification, Bbox regression을 수행하는 것보다 여러 noise 즉, 여러 object가 섞여있는 전체 image에서 이를 수행하는게 더 정확도는 떨어지지만 간단하고 쉬운만큼 속도가 빠르다는 장점이 있다.
One-stage Detector에서는 ROI 영역을 추출하는 것이 아니라 Anchor Box라는 개념을 사용한다.
미리 정의된 형태를 가진 Bounding Box 수를 'Anchor Boxes'라고 말한다. Anchor Box는 K-Means 알고리즘에 의한 데이터로부터 생성된다. 사전에 크기와 비율이 모두 결정되어 있는 Box를 전제로, 학습을 통해서 이 박스의 위치나 크기를 세부 조정하여 객체를 탐지한다.
Anchor Box를 사용하면 모든 잠재적 위치에서 별도의 예측을 계산하는 Sliding Window로 이미지를 스캔할 필요가 없다.
각각의 Anchor는 각기 다른 크기와 형태의 객체를 탐지하도록 설계되어 있다. 그림을 보면 한 장소에 3개의 Anchor가 있는데, Anchor Box와 유사한 크기의 개체를 탐지하여 이미지의 피쳐(Feature) 맵에서 오프셋을 최적화한다.
Offset: 예측된 Bounding Box의 위치 좌표
점점 진화하면서 성능과 시간을 잡는 방향으로 간다.
2-Stage Object Detector | 1-stage Object Detector |
Regional Proposal과 Classification 을 순차적으로 진행하여 객체 검출 | 영역 추출에 대한 좌표와 이미지 피처를 CNN을 통해 한번에 학습하여 결과를 도출 |
1-stage에 비해 높은 검출 성능 | 2-stage에 비해 낮은 검출 성능 |
1-stage에 비해 속도가 느림 | 2-stage에 비해 속도가 빠름 |
→ 정확성은 높으나 속도로 인해 실시간 객체탐지가 어려움 | → 실시간 객체 탐지 가능 |
대표 모델 : R-CNN / Fast R-CNN / Faster R-CNN | 대표 모델 : RetinaNet, SSD, EfficientDet, YOLO |
- YOLO v1 : 수행 시간에만 집착해서 성능 별로 안좋다.
- SSD : 수행시간도 빠르고 성능도 좀 더 나아졌다.
- YOLO v2 : SSD 보다 수행 시간을 단축시키고 성능은 비슷한 정도
- RetinaNet : 당시에 나온 FasterRCNN보다 더 높은 예측성을 가졌지만 실시간으로 쓰기엔 아쉬움
- YOLO v3 : RetinaNet에 맞먹는 예측성능과 빠른 시간
- EfficientDet : 예측 성능 향상, 시간도 욜로보다 쫌더 빨라짐
- YOLO v4 v5 등이 나오게 된다.
4-2) Object detection의 주요 구성 요소
1.Region Proposal(영역 추정) : Object가 있을만한 위치(RoI)를 미리 알려준다
2. Deep Learning network 구성
- Feature Extraction(Backbone)
- Feature Pyramid Network, FPN(Neck)
- Network Prediction(Head)
3. 기타 요소
- IOU
- NMS
- mAP
- Anchor Box
4-3) 일반적인 Object detection 모델 구조
Backbone : Feature Extractor 역할
Neck : 작은 object들에 대한 정보를 체계화 → Backbone 처리를 용이하게
FPN(Feature Pyramid Network)은 Backbone과 Head 사이에 위치하는 Neck 부분으로 볼 수 있으며, 모든 객체 탐지 아키텍처에서 사용되는 것은 아니다. FPN은 특히 멀티스케일 특징을 사용하여 다양한 크기의 객체를 탐지할 수 있도록 설계된 구조이다.
FPN은 입력 이미지의 Feature Map에서 서로 다른 스케일의 정보를 통합하여, 작은 객체부터 큰 객체까지 다양한 크기의 객체를 탐지할 수 있는 향상된 Feature Map을 생성한다.
초기의 R-CNN이나 Fast R-CNN과 같은 모델들은 FPN을 사용하지 않는다. FPN은 나중에 등장한 개선된 모델들, 특히 다양한 크기의 객체를 효과적으로 탐지하기 위해 설계된 모델들에서 더 자주 볼 수 있다. FPN은 Faster R-CNN이나 Mask R-CNN과 같은 후속 모델들에서 중요한 구성 요소로 자리 잡았다.
Head : Classification과 Bbox Regression을 한다.
Multi-Class Classification: 각 ROI가 어떤 클래스에 속하는지 결정한다. 예를 들어, 고양이, 개, 자동차 등의 클래스가 될 수 있다.
Bounding Box Regression: 각 ROI의 위치를 조정하여 객체를 둘러싸는 상자(Bounding Box)를 더 정확하게 만든다. 이는 객체의 실제 위치와 크기를 더 잘 반영하도록 조정하는 과정이다.
4-4) Object detection Architecture
Feature Extractor Network
- VGG, ResNet 등이 있음
- 보통 ImageNet Dataset 기반으로 pretrained 됨.
- Image Classification 에서 자주 쓰이는 CNN 모델
- CNN 구조는 Feature Extractor와 Classifier로 구성됨
- Feature Extractor : 최적의 Feature를 추출
- Classifier : 최적의 Feature 추출을 위해서 최적의 weight 값을 계산
Region Proposal
- Object가 있을만한 위치를 계산 (Selective Search)
- 있을 수도 있고, 없을 수도 있음 (RPN에 포함)
Object Detection Network
- 보통 Pascal VOC/MS-COCO 데이터 세트 기반으로 pretrained 됨.
- Feature Map을 기반으로 Object Detection 수행
- 별도의 네트워크
- bounding box, Object Scale, classification, FCN, multi-scale 등 계산
4-5) Object detection의 난제
Classification, Regression을 동시에 하기 어려운 이유
- 두 layer가 각각 필요
- 두 항목 모두에 최적화된 loss 함수 필요 (loss 설정의 어려움)
- 이미지에서 여러 개의 물체를 분류함과 동시에 위치도 찾아야 한다
다양한 크기의 여러가지 유형의 Object가 섞여있다
- 만들어지는 Feature map에 대해서 Detect를 수행하는데, Feature map은 원본 이미지 크기보다 더 작다.
- 여기서 Feature를 뽑아서 Detect를 하는게 쉽지가 않다.
Detect 시간
- 성능을 높게하면 수행시간이 떨어지고, 수행시간을 빨리하면 성능이 떨어지고, 딜레마이다.
명확하지 않은 이미지
- Object가 명확하지 않은 경우가 많다.
- 전체 이미지에서 back ground가 비중이 더 커서 Object를 찾기가 힘들다.
데이터셋의 부족
- 훈련 가능한 데이터셋 부족
- MS Coco dataset 80개
- Google Open Image 500개
- 데이터셋 생성의 어려움
- 생성 시, annotation 필요
- bounding box
5. Sliding Window vs Region Proposal
Object Detection의 어려움
- binding box regression 학습만으로는 inference가 어렵다
- 비슷한 object가 너무 많다.
- 유사한 feature들이 많다
5-1) Sliding Window 방식
Windows를 왼쪽 상단에서 오른쪽 하단까지 이동시키면서 detect하는 방식
특정 영역에서의 특성을 학습된 feature와 매칭됨
Object Detection의 초기 기법으로 활용됨
1. 수행 시간이 오래 걸리고 검출 성능이 상대적으로 낮다
- 여러 형태의 window와 여러 scale을 가진 이미지 스캔해서 검출
- Object가 없는 영역도 무조건 슬라이딩해야 한다.
2. 영역 추정 기법의 등장으로 활용도 감소
- but Object Detection 발전을 위한 기술적 토대 제공
3. 슬라이딩 윈도우의 두 가지 방법 : Window 안에 object가 다 들어가 있지 않을 수 없다.
- 다양한 형태의 Window를 각각 sliding 시키는 방식 - 서로 다른 anchor box의 유형으로 발전
- Window Scale은 고정하고 scale을 변경한 여러 이미지를 사용하는 방식 - SSD(여러 사이즈의 feature map으로 추출) >> FPN
- 두 방법을 혼합해서 사용하기도 한다
이미지 스케일 조정에 따른 여러 크기의 Object detection
너무 이미지를 줄이다 보면 윈도우 안에 들어오는 오브젝트들이 많아지게 되는 이슈가 있다.
5-2) Region proposal(영역 추정) 방식
목표 : "Object가 있을만한 후보 영역을 찾자"
말그대로 Object가 있을만한 후보 영역을 추정하는 방식이다.
Sliding window는 하나하나 다 찾아보기 때문에 이와 다르다.
Region proposal은 경계선에 대한 유형이 다름을 보고 판단하는 방법이다.
대표적인 Region proposal 중 하나가 Selective search 이다.
후보 바운딩 박스를 선택을 하고 최종 후보인 박스를 선정을 한다.
5-3) Selective search
1. 빠른 detection과 높은 recall 예측 성능을 동시에 만족하는 알고리즘
- 딥러닝 알고리즘과 통합되는 과정에서 시간 소요
2. 색상, 무늬(Texture), 크기, 형태에 따라 유사한 Region
- 계층적 그룹핑 방법으로 계산
- + edge(경계) detect
3. 최초에는 Pixel Intensity에 기반한 graph-based segment 기법을 따름
- Segmentation: 픽셀 단위, 매우 촘촘함
- Over Segmentation 수행
- 각각의 Object들이 1개의 개별 영역에 담길 수 있도록 많은 수의 초기 영역 생성
4. 본 이미지 >> 최초 Segmentation(Over Segmentation) >> 후보 Objects
Selective search는 별도의 알고리즘이다.
Edge detect (경계선을 기준으로 차이를 보는 것)
초기에는 촘촘하게 찾아낸다.
픽셀 레벨로 촘촘하게 작업을 하고(Segmentation이라고 함) Boolean Masking을 씌운다. 같은 영역인지 아닌지를 판단한다.
그런데 Masking만 봐서는 너무 많다. 빠져나가는 Object가 없게 하기 위해서 조금 Over 하게 한다.
거기에 맞는 후보 Object를 선택 한다.
5-4) Selective search의 수행 프로세스
- 개별 Segment된 모든 부분들을 Bounding box로 만들어서 Region Proposal 리스트로 추가
- 색상, 무늬, 크기, 형태에 따라 유사도가 비슷한 Segment들을 그룹핑
- 두 과정을 계속 반복 하면서 Region Proposal을 수행