일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 프로그래머스 레벨1
- 프로그래머스
- Cannot connect to the Docker daemon at unix
- 프로그래머스 레벨2
- 카카오코딩테스트
- 파이썬 양과늑대
- 프로그래머스 양과늑대
- 파이썬 재귀함수
- 도커오류
- 도커연결오류
- 네이버 부스트캠프
- 라이브러리란?
- 파이썬 프로그래머스
- 프로그래머스LEVEL1
- 부스트캠프
- 카카오 파이썬
- level1
- 카카오코테
- 코딩테스트
- 프레임워크란?
- 카카오 코딩테스트
- 부캠
- 파이썬
- 파이썬 카카오코딩테스트
- 부스트캠프 회고
- 프로그래머스 파이썬
- docker시작하기
- 부스트캠프AITech
- 양과늑대
- 프로그래머스 레벨3
- Today
- Total
코린이의 공부일기
[Boost camp] 2 Stage Detectors 본문
2 Stage Detectors
1. R-CNN
-입력 이미지로부터 후보영역들을 선정 (Sliding window , Selective Search)
-뽑힌 이미지들을 고정된 사이즈로 변경하여(Semantic vector) Classification하는 방식
그렇다면 Sliding Window가 무엇일까 ?
왼쪽의 Window가 이미지를 sliding하여 뽑아낸다 -> 무수히 많은 후보영역이 나온다.(대부분은 배경)
-> 그래서 Sliding window는 잘 사용하지 않음
*그래서 Selective Search을 많이 사용한다
그렇다면 Selective Search란 무엇일까?
색감, 질감, 모양과 같은 이미지의 특징들을 갖고 후보영역들을 나눠 통합하는 방식으로 후보영역을 셀렉한다.
Pipeline 1 - 입력 이미지 받기
-1. Selective Search을 통해 약 2000개의 ROI(Region of interest)을 추출
-2. ROI의 크기를 조절해 모두 동일한 사이즈로(Wrapping) 변경(CNN의 마지막인 FC layer의 입력 사이즈가 고정이므로 이 과정을 수행해야한다)
Pipeline 2 - 분류 진행
SVM
ROI을 통해나온 2000개의 이미지들을 Class(C+1)개와 Confidence score을 도출
Bounding Box Regression
Selective Search을 통해서 러프하게 나온 후보영역의 위치를 미세조정을하여 정갈하게 맞추는 작업
(Bounding box을 Ground truth box에 맞추는 작업)
즉
Bounding box의 중심점을 Ground truth box중심점에 맞추어주는 δ(델타)
Width, height을 Ground truth box의 Width와 height δ(델타)
을 훈련시켜주는 것
Summary
-R-CNN의 한계점
1. 2000개의 Region을 각각 CNN통과 -> 연산량이 너무 많음, 시간이 오래걸림
2. 강제 Warping(사이즈의 크기차이가 많이 나는 이미지들을 강제로 고정사이즈로 맞춤), 성능 하락 가능성
3. CNN, SVM classifier, bounding box regressor 을 모두 따로 학습함
4, End to End 라고 볼 수 없다.
그래서 이 후 연구들은 R-CNN의 한계점을 보안하려는 방향으로 이루어졌다.
한계점 1,2를 보안한 Spatial Pyramid Pooling
R-CNN에서는 input image을 바로 Warpping 했다면, SPP-Net은
먼저 Conv-layer을 지나고 ROI을 뽑아내고 spatial pyramid pooling을 통해 사이즈를 맞추는 방식이다.
Spatial Pyramid Pooling_Overall Architecture
그렇다면 Spatial pyramid pooling은 무엇일까?
ROI을 통해 얻은 여러 사이즈의 이미지들을 뽑아내고 Target Feautre map의 사이즈를 정해준다.
Ex(위 그림 왼쪽부터 4X4 ,2X2, 1X1 feature map)
조금 더 자세히 설명하자면,
위 그림처럼 Input image을 binning(비닝) 작업을 통해서 2X2 pyramid size을 맞추어 줄 수 있다.
-> R-CNN의 1,2 번 단점을 해결
Fast R-CNN
-Overall Architecture
-> 이 전과 다르게 Spatial pyramid pooling이 아닌 ROI pooling을 시행한다.
2000개의 image로 부터 ROI을 뽑아내고 뽑힌 ROI을 Conv을 통해 나온 Feature map에 Projection을 진행한다.
그렇다면 ROI pooling은 무엇일까?
먼저 ROI Projection을 알아보자면,
왼쪽에서 오른쪽으로 Feature map이 1/10만큼 줄었다면, Selective search을 통해 나온 ROI 사이즈도 1/10으로 축소해 Projection을 진행한다.
그렇다면 ROI pooling과 Spatial pyramid pooling의 차이점은 무엇일까?
ROI pooling은 Spatial pyramid pooling과 방식은 완전히 똑같지만, spatial pyramid pooling은 여러가지 크기로 추출한다면 ROI pooling은 사이즈 7X7만 이용한다.
ROI pooling와 Fully connected layer 이후, Softmax Classifier와 Bounding box regressor 을 시행한다
=> 클래스 개수 C+1개(클래스 + 배경)
-Hierarchical sampling
R-CNN의 경우 이미지에 존재하는 2000개의 이미지 ROI을 전부 저장해 사용한다.
이전 R-CNN에서는 한 배치에 서로 다른 이미지의 ROI가 포함된다
BUT
Fast-RCNN 같은 경우에는 한 배치에 한 이미지의 ROI만을 포함해 연산과 메모리를 공유할 수 있는 장점이 있다
-> R-CNN의 단점 3번 해결
그러나 완벽한 End-toEnd 구조라고 볼 수가 없다.
그래서 나온 모델이 Faster R-CNN이다
Faster R-CNN
-Fast R-CNN에서는 Selective Search을 사용했다면 Faster R-CNN은 RPN(neural network)을 도입했다.
그렇다면 Faster-RCNN은 후보들을 뽑아낼까?
각 셀마다 scale을 다르게 둘 뿐 아니라 세로 또는 가로 마다 비율을 다르게 두고 N개의 Anchor box을 둔다.
->객체 사이즈에 대응하도록 Anchor box 크기를 가변적으로 둘 수 있다.
그렇기 때문에 우리는 Anchor box에 객체가 들어있는지 그리고 객체에 맞게 Anchor box크기를 미세조정할 필요가 있다. -> RPN network
Region Proposal Network(RPN)
RPN은 anchor box가 객체를 포함하는지 안하는지 확인 +anchor box 비율조정 (9개로 고정)
이 두 가지 과정을 조금 더 자세하게 보자면, (중요!)
첫 번째 CNN은 object인지 아닌지 (2가지) 9개의 anchor box
-> 18개가 나오는 것 !(객체인지 / 아닌지 Score을 예측)
두 번째 CNN은 각 anchor box별로 중심점의 좌표(x,y),W,H와 9개의 anchor box
-> 36개가 나오는 것
Pipeline 총 정리
input data는 backbone을 통해 feature map이 나오며 feature map에서 각 sell마다 9개의 anchor box을 select한다.
-> 64X64X9(anchor box)X4(x,y,w,h)
무수히 많이 나온 anchor box 중 RPN을 통해 불필요한 것 을 제외시킨다
즉
Classification prediction을 통해 Score값을 도출(Score값이 크면 클수록 목포객체일 확률이 높음)
그 다음 Top score n개를 뽑아내 미세조정(Box prediction)을 진행한다.
-> ROI resion을 n개를 도출
추가적으로 NMS는 무엇일까?
5개의 Box을 지정해 Class score을 지정하고 제일 높은 score인 bb1을 기준으로 IoU score을 도출한다.
이전에 정한 Threshold는 0.7이기 때문에 bb1과 bb2는 거의 같다고 두기 때문에 bb2의 class score는 결국 0이 된다,
NMS 알고리즘은 유사한 box을 제거하는 알고리즘이라고 할 수 있다.
이제 RPN network의 Training하는 방식에 대해 알아보자
RPN 단계에서 classification과 regressor학습을 위해 anchor box을 positive/ negative samples로 구분
Dataset의 구성
* IoU>0.7 or highest ioU with GT:positive samples
* IoU<0.3 :negative samples(배경으로 정의)
Otherwise:학습데이터로 사용하지 않는다.
Loss function
Cross entropy(classification loss) + MSE loss (regression loss)
regression loss에서 Pi*은 object의 유무를 나타내는 지표로 객체가 포함되어있을 땐 1 아닐 땐 0으로 positive anchor box에 한해서 계산을 진행한다.
Faster R-CNN Training 하는 방식은 어떨까?
*Region proposal 이후 Fast RCNN 학습을 위해 positive/negative samples 로 구분
*Dataset의 구성
*IoU>0.5:positive samples -> 32개
*IoU<0.5:negative samples -> 96개
*128개의 samples 로 mini-batch 구성
Summary
*anchor box부분은 정말 중요! 꼭 이해하기
'BOOST CAMP_정리' 카테고리의 다른 글
semantic segmentation 대회에서 사용하는 방법 (0) | 2021.10.26 |
---|---|
[Boost Camp]MMDetection & Detectron2 (0) | 2021.09.29 |
[Boost Camp] 09_24 특강 (0) | 2021.09.24 |
[Boost camp] 09_23 특강 (0) | 2021.09.23 |
[Boost Camp] U stage_ Conditional generative model (0) | 2021.09.15 |