반응형
Object Detection은 Classification과 bounding box를 더한것이다.
Object Detection 종류
- panoptic, instance segmentation은 instance또한 분류한다
Object Detector
- Single(One) Stage와 Two Stage Detector로 나누어져있다.
1.Two-Stage Detector
Selective Search
- 다양한 물체 후보군에 대해서 영역을 특정해서 제안해준다. (바운딩박스를 제안)
- 영상을 비슷한 색끼리 잘게 분할한다.
- 분할한 영역을 비슷한(색 혹은 그레디언트의 특징,분포등)영역끼리 묶고 합쳐주는것을 반복한다.
- 이 영역을 포함한 바운딩박스를 추출하여 사용한다.
1) R-CNN
- 영상으로 selective search와 같은 방법으로 region proposal을 2000개 이하로 구한다.
- 추출된 영역으로 wrapping을 한다.
- CNN에 넣어주고 카테고리를 나눈다.
- 3번의 feature extraction은 이미 학습된 cnn을 사용하고 맨 마지막부분의 classification은 고전적인 svm을 활용했다
- region proposal은 별도의 hand design된 selective search같은 알고리즘을 사용했기 때문에 학습을 통해서 성능향상의 한계가있다.
2) Fast R-CNN
- CNN을 거친 feature map을 추출한다. (W,H,C)
- ROI(Region of Interest) Projection은 물체의 후보 위치(바운딩박스)를 말해줌
- 한번 뽑아놓은 feature map을 여러번 재활용하기위해 ROI pooling을 사용
- roi에 해당하는 feature를 추출 -> 정해진 사이즈로 resampling이된다
- 더 정밀한 바운딩박스를 추출하기위해 boundingbox regressor를 하고, softmax를 한다.
- hand design된 알고리즘을 사용하기 때문에 성능을 높이는데에 한계가 존재함
3) Faster R-CNN
IOU (Intersection over Union)
- 두 영역의 교집합/두 영역의 합집합
Anchor boxes
- 바운딩 박스의 후보군
- 위의 문제점 처럼 hand design된 알고리즘을 Neural Network기반으로 대체했다
- 최초로 Neural Network로만 구성된 End-to-End모델이됨
- Selective Search를 대신해서 RPN(Region Proposal Network)를 사용
- sliding window방식으로 이미지를 탐색하여 미리 정의해놓은 k개의 anchorbox들을 고려한다
- 각 위치에서 256디멘젼의 feature 벡터를 추출하고 Object인지 아닌지를 나타내는 2k개의 classification score 미리 판별한다.
- k개의 바운딩박스를 정교하게 추출해주는 (regression하는) 4k개의 regression 아웃풋이 추출된다
- 왜 4개냐면 왼쪽위의 꼭짓점과 width height가 존재하기 때문이다
- k개의 anchorbox를 이미 정의해 놨는데 왜 다시하냐?
- 엄청 촘촘하면 문제가 되지않지만 계산량이 엄청 많아지기 때문에 적당한양의 대표적인 anchorbox를 만들고 regression으로 다시 접근하자!
Non-Maximum Supressions(NMS)
- 너무 많은 바운딩 박스가 생기기 때문에 효과적으로 필터링, 스크린 해주기위해서 사용
R-CNN요약
Single Stage Detector
- 정확도를 조금 포기하고, 속도를 살려서 realtime이 되도록 설계
- YOLO(You Only Look Once)
- input image를 S x S 그리드로 나눈다.
- 각 grid에 대해서 B개의 박스에 대해 4개의 위치좌표(더 정교하게끔 regression)와 1개의 confidence스코어를 예측한다
- 그거에 따른 class score를 따로 예측한다
- 각 위치의 바운딩박스 형태로 B개를 정해놓는다.
- NMS 알고리즘을 통해 나온것만 출력
구조
- 7x7해상도의 30channel의 결과가나온다
- 왜 30channel이냐면 boundingbox의 anchor를 2개사용했고 class는 20개의 class가 있었다.
- 그래서 5B(10) + C(20) = 30이된다
- 그리드를 SxS로 나눴는데 여기서는 7x7개의 그리드로 나눴기 때문에 해상도가 7x7이다.
- SSD (Single Shot Multibox Detector)
- 욜로는 맨 마지막에서만 prediction하기 때문에 localization 결과가 떨어진다. 이를 보안하기위해 나옴
- 멀티 스케일 오브젝트 디텍션을 더 잘 처리하기위해 중간 피쳐맵을 각 해상도에 적절한 바운딩박스를 추출할 수 있도록 만들었다.
- 각 feature map마다 해상도에 적절한 bounding box크기에 대한 결과들을 예측할 수 있도록 만들었다.
구조
- VGG 를 backbone으로 conv4 블럭의 중간피쳐맵의 출력부터 최종 결과를 출력하게 끔 calssifier를 붙였음
- 각 스케일마다 object detection결과를 출력하도록 설정을해서 다양한 scaled object detection에 대해서 더 잘 대응할수있도록 설계
- 클래스 수와 함께 4개의 coordinate 정보를 출력해야한다.
- 엄청 많은양의 anchor를 사용했지만 네트워크 구조가 단순해서 빠른 속도를 가질 수 있음
Two Stage Detector vs Single Stage Detector
focal loss
Cross entropy의 확장
A,B,C 세개의 아이템을 classification하게될 때 A의 이미지가 많아서 A는 잘 학습되었고 B랑 C는 잘 못맞추는 문제가 생기는데 이를 해결해주기위해 focal loss를 사용합니다
focal loss는 epoch를 돌릴때마다 내가 잘 맞춘거에 대해서는 로스값을 줄여서 backpropagation하고(더이상 학습이 잘 안돼도 상관없게끔) 못맞춘거에 대해서는 로스값을 더 높여서 backpropagation 하게됩니다
- Focal Loss
- Single Stage는 ROI pooling이 없다보니까 모든 영역에서의 loss가 계산이되고 일정 gradient가 발생한다
- 백그라운드를 보면 엄청 많은 영역과, 의미없는 데이터를 갖고 class imbalance 문제를 갖고있다.
- Retina net
FPN( Feature Pyramid Network)
- 이전에 배운 Unet과유사, low level의특징과 high level의 특징을 잘 사용하고 중간중간 피쳐를 다음쪽에 넘겨주고 더하기 오퍼레이션이 일어난다 concat이아닌 +로 fusion이된다.
- class head와 box head가 따로 구성돼서 classicification과 box regression을 dense하게 각 위치마다 수행한다.
- 이 구조를 retina net이라고 부름
최신 트렌드
- DETR
- transformer를 object detection에 적용한 사례
- 한개의 이미지에서 N개의 object가 발생할 수 있다는 것을 미리 정해두고 쿼리를 물어본다
- decoder를 거쳐 나온 값을 통해 class와 boundingbox를 찾을 수 있다
최근 박스표현 대신에 물체의 중심점을 찾는방법등이 연구중임
반응형
'부스트캠프 AI Tech 2기 > 2기 CV U-Stage' 카테고리의 다른 글
AutoGrad (0) | 2021.09.14 |
---|---|
CNN Visualization (0) | 2021.09.13 |
Semantic Segmentation (0) | 2021.09.09 |
CV의 DL 발전(2) (0) | 2021.09.07 |
Annotation Data Efficient Learning (0) | 2021.09.06 |