Object Detection Model 소개
Date:
Object Detection
- 응용 분야가 많아 많은 스타트업에서 시도하고 있음
- 산업가치가 크기 때문에 관심을 많이 받고 있음
Object Detection 이란
- Semantic Sementation과 Class를 구별하는 건 동일
- Object Detection은 동일 Class에서도 객체를 구별할 수 있음
- 같은 사람,자동차 Class여도 객체를 구별할 수 있음
- Object Detection은 Classification과 Box localization를 합친 문제라고 생각할 수 있음
과거 Object Detection 방법
Gradient-based detector
- 경계선 특징을 Modeling하여 학습하여 사람의 실루엣을 찾아냄
Selective Search
- 만약 Sliding window 방식으로 후보군을 추출하게 되면 너무 많은 후보군이 생겨, 문제가 발생할 수 있음
- 이 문제를 해결하기 위해 Selective Search 방식이 도입됨
- 처음 여러개의 bounding box로 over Segmentation을 진행
- 그 다음 색이나, 질감, Gradient분포가 비슷한 부분들을 merge시키는 작업을 진행(이때 비슷한 부분을 추출하는 방법을 미리 정해줘야함)
- 확률이 큰 Segmentation에 타이트한 바운딩 박스를 그려 object 후보군을 만듬
Object Detection의 구분
- Object Detection은 크게 Two Stage, One Stage detection 방식으로 구분됨
- Two Stage 방식 : 1)Object가 있을 위치를 제안해주는 Stage, 2)Object를 Detection Stage
- 장점 : Object에대한 정확한 위치를 확인하여 분류할 수 있음
- 단점 : Object 위치를 제안하기 위한 Process가 진행되어 One Stage 방식에 비해 속도가 느림
- 관련 모델 : RCNN, SPPNet, Fast RCNN, Faster RCNN
- One Stage 방식 : Object에 대한 위치를 default된 영역에서 추출, 1) Object Detection Stage
- 장점 : Two Stage 방식에 비해 처리 속도가 기하급수적으로 빨라짐
- 단점 : Two Stage 방식에 비해 정확도가 떨어짐 -> 현재는 더 빠르고 정확해짐
- 관련 모델 : YOLO, SSD, RetinaNet
Two-Stage Detection
R-CNN(Region-based CNN)_Detection, Localization
알고리즘 흐름
- Input으로 들어온 이미지에서 2k정도의 후보 영역(Region proposal)을 뽑아냄 -> Selective Search 알고리즘
- 후보 영역을 잘라내어 CNN Input의 고정된 크기로 Warping
- CNN 분류모델(AlexNet)을 활용하여 feature를 뽑음
+) pre-trained된 AlexNet + fine tune(Object Detection용 데이터 셋 사용)
- CNN을 통해 나온 feature map을 사용하여 벡터를 추출하고 클래스 별로 SVM Classifier 학습, regressor를 통한 Bounding Box Regression을 진행한다.
+) 2k의 bounding box는 SVM 이후 클래스별 확률값을 갖게 된다. 2k의 bounding box을 모두 사용하는 것이 아닌 Score 값이 가장 큰 Bounding box만을 사용하기 위해 Non-Maximum Suppression 알고리즘을 사용하여 박스 하나를 추출해 낸다. 이때 알고리즘 내부에서 IoU(Intersection over Union)를 활용하여 두 bounding box의 교집합을 합집합으로 나눠준 값을 기준으로 bounding box를 추출해낸다.
+) Bounding Box Regression을 사용하는 이유는 Selective Search를 통해 찾은 박스 위치가 부정확하기 때문에 모델의 성능을 높이기 위해 박스 위치를 교정하기 위해 사용한다. 박스의 위치를 조절하는 과정은 박스의 좌표 및 너비 높이를 조정하는 함수의 가중치를 곱하며 선형 회귀 학습을 시키기 때문에 Regression이 함께 들어가 있다.
🔎 RCNN 학습
- CNN : AlexNet을 FineTuning 하여 사용
- fine Tuning시 Dataset 구성
- IoU > 0.5 : Positive Samples
- IoU < 0.5 : Negative Samples
- 한 Batch당 Positive Samples 32, Negative Samples 96
- Linear SVM Dataset 구성
- Ground Truth : Positive Samples
- IoU < 0.3 : Negative Samples
- 한 Batch당 Positive Samples 32, Negative Samples 96
- Hard Negative mining 기법 활용
- Hard Negative : False Positive
- 배경으로 예측하기 어려운 Sample들을 다음번에 Negative samples로 강제로 편입시킴, 모델이 구분하기 어려운 Sample를 강제로 추가시켜 보완시키는 방법
- BBox Regressor
- Dataset 구성 : IoU > 0.6 : Positive Samples
- Loss function : MSE Loss
🚨 RCNN의 단점
- 2000개의 crop image를 다시 처리해야하기 때문에 1장의 이미지 구분 시 시간이 오래 걸림(59s/image on CPU)
- Crop image를 뽑은 후 warping으로 인한 image의 특징이 변경됨
+) CNN를 하기 위해서는 FC layer의 size를 맞추기 위해서 input image의 크기를 맞춰줘야함
- 여러번의 학습단계가 필요함(fine-tuning(FC layer), SVM training, Bounding Box Regression)
SPP-Net(Spatial Pyramid Pooling)
💡 Localization 작업을 CNN 이후로 옮겨, CNN 계산에 들어가는 시간을 단축
🔎 CNN이후로 옮겼을 때의 문제점 → SPP로 해결함
- CNN 이후로 Localization을 진행할 경우 FC Layer로 입력시 input size가 달라지는 문제가 발생(RCNN에서는 Warping으로 진행)
- FC layer input size를 맞추기 위해 SPP 기법 도입
알고리즘 흐름
- input image를 CNN 진행하여 feature map을 뽑음(R-CNN에서는 Selective Search를 통한 2k개의 후보영역 wrapping 하여 CNN 진행)
- crop된 feature를 SPP하는 작업을 진행
+) SPP(Spatial Pyramid Pooling) : pooling시 여러 kernel size를 활용하여 max pooling 진행하여 FC Layer의 input size를 맞춰줌, 여러 사이즈(1x1,2x2,3x3,6x6, 논문에서 사용한 사이즈)의 pooling영역을 지정해 둬서 사용하는데 이 부분를 pyramid라고 불림
+) 여기서 bin
이라는 용어가 나오는데, bin
이란 한 번의 max pooling의 연산으로 발생한 하나의 값을 bin이라고 함, 만약 64x64x256사이즈의 feature를 4x4 maxpooling을 하면 bin의 사이즈는 16x16x256가 됨
-
생성된
bin
를 flatten 하게 만들어 Classification 진행함R-CNN : ① image input → ② extract crop image(RoI) → ③ resize crop image(wrapping) → ④ CNN → ⑤ Classify
SPP-Net : ① image input → ② CNN → ③ SPP → ④ Classify
🚨 SPP-Net의 단점
- SPPNet도 결국은 여러개의 tensor를 뽑아내서 하나의 벡터로 만들고 다시 분류하는 작업 필요하기 때문에 시간이 오래걸림
- 여러번의 학습단계가 필요함(fine-tuning(FC layer), SVM training, Bounding Box Regression)
Fast R-CNN
💡 RoI Pooling으로 Crop image feature를 Neural Network 안으로 끌어드림
알고리즘 흐름
- input image를 CNN 진행하여 feature map을 뽑음(SPPNet과 동일함)
- Selective Search 알고리즘을 통한 RoI(Region of Interest) 지정
RoI Pooling
을 진행 고정된 크기의 feature vector 얻음
+) SPP에서 1개의 pyramid Layer를 사용하여 Feature Vector를 구하는 방식과 비슷함
feature vector
를 fully connected layer에 통과시킨 후 2개의 브랜치로 나눠줌- 하나의 브랜치는 softmax를 통해 RoI Classification 진행
- 남은 하나의 브랜치는 bouding box regression을 통해서 selective search로 찾은 박스의 위치를 조정
Multi Task loss
를 활용하여 bounding box의 위치 loss와 Classification loss를 한번에 처리해줌
+) 기존엔 FC Layer까지만 학습하여 사용했었는데, CNN의 fine-tuning 까지 가능해졌음
+) Multi Task Loss
- feature vector를 통해 얻은 Classifier와 bounding box regression의 loss를 통해 back propagation하여 전체 모델을 학습
- classificaiton loss와 bounding box regression을 적절하게 엮어주는 것이
multi task loss
- Loss Function
- Classification : Cross Entropy
- BB Regressor : Smooth L1
- Dataset 구성
- IoU > 0.5 : Positive Samples
- 0.1 < IoU < 0.5 : Negative samples
- Batch : Positive samples 25%, negative samples 75%
- Hierarchical sampling
- 한 배치에 한 이미지의 RoI만 포함 -> 배치 안에서 메모리 공유가능하여 효율성 증가
- 기존 RCNN의 경우 전체 이미지에 존재하는 RoI를 전부 저장해 사용 -> 메모리 공유 어려움
수식
-> bounding box regression loss에서 사용된 Smooth 수식은 아래와 같다
- 예측 값과 라벨 값의 차가 1보다 작으면 0.5x^2 (L2 distance)
-
예측 값과 라벨 값의 차가 1보다 클 경우 x -0.5 (L1 distance) - 저자들이 실험중 라벨 값과 지나치게 차이가 많이나는 Outlier예측 값이 나왔을 경우 L2 distance로 계산하면 Gradient가 exploding되는 현상이 관찰되어 거리가 커지면 L1 distance로 custom 해줌
RoI Pooling
- RCNN과 동일하게 Selective Search 방식으로 image BBOX 정보를 추출함
- 하지만 Image에서 crop하는 것이 아닌 CNN 이후 Feature map에서 ROI를 진행함
- 그러면서 BBOX에 대한 정보도 Feature map에 project 시켜서 사용하게됨
🚨 Fast R-CNN의 단점
- Selective search를 이용하여 결국은 2000개의 region를 무작위로 뽑아서 학습하게됨
- R-CNN과 동일하게 Multi-stage pipline 형태가 유지됨
Faster R-CNN
💡 Selective Search 방식을 RPN을 통해 RoI를 학습시키는 방법으로 Network 안으로 끌어들임(2K image → 0.8k image)
+) 첫 End-to-End 방식의 Object detection 모델
+) Selective Search은 CPU내에서 돌기 때문에 GPU로 돌리기 위한 시도
알고리즘 흐름
- image를 받으면 CNN을 통해 Feature를 추출
- 1번과 동시에
RPN(Region proposal Network)
을 통해 객체가 있을 만한 곳의 위치를 제안함
+) RPN(Region proposal Network)의 동작 원리는 sliding window 방식으로 돌면서 미리 선정한 anchor box
를 그려 그 안에 1)object가 있는지 예측값과, 2) bbox(bounding box)의 위치정보를 함께 전달함
+) anchor box
: anchor box에 의해서 여러개의 bbox가 생성되었을때, 모든 Box를 사용하게 될 경우 너무 많은 bbox가 생성되기 때문에, 이 숫자를 줄여주기 위해 NMS 기법을 사용함
+) NMS(Non-Max Suppression) : 비슷한 bbox를 제거하는 알고리즘으로 특정 Threshold 값으로 IoU 값이 나오는 bbox는 지워주는 작업을 진행함
- RPN을 통해 얻은 영역을 RoI Pooling을 진행
- FC layer를 거쳐 Softmax를 통해 Classification loss를 구함
- FC layer를 거쳐 Box Offset Regressor loss를 구함
- 두 Loss로 RPN과 CNN, FC layer를 학습시킴
+) Train의 경우 anchor box
(Bounding Box)와 GT(Ground Truth) 사이에 IoU를 진행해 loss를 구하고 이 값으로 train 진행함
+) loss 함수는 아래와 같이 bbox와 classification 두 가지 영역의 loss 합으로 계산함
RPN Loss 함수
- RPN 단계에서 classification과 regressor학습을 위해 앵커박스를 positive/negative samples 구분
- 데이터셋 구성
- IoU > 0.7 or highest IoU with GT: positive samples
- IoU < 0.3: negative samples
- Otherwise : 학습데이터로 사용 X
**Fast RCNN Loss 함수 **
- Loss 함수 : Fast RCNN과 동일
- 데이터셋 구성
- IoU > 0.5: positive samples → 32개
- IoU < 0.5: negative samples → 96개
- 128개의 samples로 mini-bath 구성
Further Question
-
Q : 두 가지 분류기로 class 예측 부분과 bbox의 예측 좌표값을 따로 예측하는데 어떻게 Class 예측은 어떻게 GT에서 정답 위치를 가져올 수 있을까?
-
A : 예측된 bbox를 GT에 매칭 시켜 IoU를 통해 위치에 대한 pixel별 label를 얻어 올 수 있음
R-CNN vs Fast R-CNN vs Faster R-CNN
One-Stage Detection
YOLO(You Only Look Once)
💡 하나의 신경망으로 Bounding Box과 Class 확률 예측까지 한번에 이루어짐
+) Class 확률의 경우는 Bounding Box와 GT의 IoU로 계산함
특징
- Faster R-CNN보다 7배가량 속도가 빠름 -> 실시간으로 Object Detection이 가능함
- Real Time으로 처리하나, 정확도는 약간 떨어짐(Real-time Object Detection)
- 훈련단계에서 Image 전체를 한번에 읽어 학습하기 때문에 Background에 대한 구분이 Two Stage 구조에 비해 잘됨
알고리즘 흐름
- Image를 특정 Grid로 나누어 줌(논문에서는 7x7 grid로 진행)
- Network 진행을 하면 2가지 Feature 영역으로 반환
+) 첫 번째 Feature 영역 : 각 Grid 별로 Bounding Box의 예측 좌표와 그에 대한 예측 Object Score값을 반환
+) 두 번쨰 Feature 영역 : Grid 별로 Class의 확률 계산 -> 기존 classfication과 동일한 방식으로 grid 하나에 대한 확률을 나타냄
+)예측하는 BBox를 구하기 위해서 Non-Max Suppression 방식으로 Score가 높은 이미지를 추려냄
- 두 Feature 값 두개를 받아 우선적으로 Score가 높은 BBox를 추려내는 작업 진행(Non Maximum Suppression)
- 3번에서 예측한 BBox의 좌표 정보와 label 정보로 Loss를 산출하여 Training 진행
+) Multi Task Loss function
Further Question
-
Q : VOLO 영상에서는 동일 class도 여러개 인식하던데, 위에 설명을 생각해보면 NMS로 인해 Class별로 하나의 bbox만 그려지게 될것같은데, 뭐가 다를까요?
-
A : VOLO v1에서 관련 문제가 있어서, 추후 version을 update하면서 개선함
SSD(Single Shot MulitBox Detector)
- YOLO에서 정확성과 속도 두 마리 토끼를 모두 잡은 모델
- YOLO의 단점은 그리드별로 BBOX 예측으로 인한 그리드 크기보다 작은 물체를 잡기 어려웠음
- Conv의 마지막 feature만 사용하기 떄문에 Coarse 한 정보만 남게 되어 정확도 떨어짐
Model에 따른 성능 비교
📌reference
- boostcourse AI tech
- Robot Sapiens
- 공부하려고 만든 블로그
- 갈아먹는 머신러닝
- 귀퉁이 서재
- CURG YOLO
- YOLO 교육 자료
- 약초의 숲
💡 수정 필요한 내용은 댓글이나 메일로 알려주시면 감사하겠습니다!💡
댓글