<CNN>
https://post-blog.insilicogen.com/blog/346
https://m.blog.naver.com/luvwithcat/222148953574
https://m.blog.naver.com/luvwithcat/222148953574
<Image Classification과 Object Detection의 차이>
Image Classification: 하나의 이미지에서 하나의 클래스 탐지
Object Detection: 하나의 이미지에서 여러 개의 클래스 탐지
-> Object Detection에는 많은 localization이 필요하다(위치 + 분류)
https://bigdata-analyst.tistory.com/269
<문제 1: object detection 시 CNN의 localization>
<문제 2: 라벨링된 데이터 부족으로 대규모 CNN 훈련이 힘듦>
<문제 1 해결법: region proposal>
1. regression -> 잘 동작 X
2. sliding window -> input image는 receptive fields (195 195 pixels)과 strides (32 32 pixels)를 가져 정확한 localization 어렵 + 계산량과 속도 문제
3. region proposal
-region proposal
region: object가 있을 가능성이 높은 곳
object가 있을 영역 내에서만 object를 찾는다.
R-CNN에서는 selective search 방법을 사용
sliding window
https://developer-lionhong.tistory.com/35
selective search
수많은 영역 생성 -> 알고리즘에 따라 유사도가 높은 것들을 하나의 영역으로 합친다 -> 반복
https://developer-lionhong.tistory.com/31
<문제 2 해결법: CNN training>
supervised pre-training과 domain-specific fine-tunning을 CNN에 수행하자
- supervised pre-training
Caffe CNN library를 사용하여 ILSVRC2012 classification 데이터셋을 pre-training
- domain specific fine tunning
warped region proposals만 사용하여 CNN 파라미터의 확률적 경사 하강법(SGD) 실행
Pre-trained CNN을 Domain-specific CNN으로 바꿈
ImageNet-specific 1000-way classification layer -> 무작위로 초기화된 N+1개의 classification layer(object class N + background class 1)
IoU: ground-truth box와 겹치는 것에 따라
region proposal IoU >= 0.5면 positive
region proposal IoU < 0.5면 negative
SGD learning rate: 0.001 (초기화를 방해하지 않도록 초기 pre-training rate의 1/10)
SGD batch size: 128(32개의 positive + 96개의 backgroud. positive가 negative에 비해 적기 때문에 1:3비율로)
-Object category classifiers(SVM training?)
positive negative 판단 시
object와 부분적으로 겹치는 region에 label을 지정하는 방법 -> IoU overlap threshold 사용
overlap threshold: 0.3(그리드서치로 찾음)
IoU overlap threshold < 0.3면 negative로 판단
각 클래스 ground-truth box일 때 positive 판단
0.3 IoU 이상 겹치지만 ground truth가 아니면 무시
각 class마다 linear SVM optimize
hard negative mining method: negative인데 positive라고 오분류할 것 같은 이미지를 캐오는 거
R-CNN: region proposals + CNN
<R-CNN의 과정>
1. Extract region proposals
input image에 대해 category-independent한 2000개의 region proposals생성
2. Wraped region
각 region을 warping하여 fixed size(227x227)만든다(CNN과 호환되도록)
3. Compute CNN Features(Feature Extraction)
CNN(5개의 convolution layers와 2개의 fully connected layers)으로
각 fixed size proposals에 대한 fixed length feature vector(4096차원)을 생성
4. Classify regions
category-specific한 선형 SVMs를 이용하여 region 분류(class에 해당할 확률 값을 가진다)
features matrix(4096차원의 feature vecotr 2000개 합침)는 일반적으로 2000X4096
SVM weight matrix는 4096XN으로 N은 여기서 클래스의 수를 의미한다
-> 분류를 하면 region proposals에 대한 클래스 별 확률값이 나온다(2000XN)
+ Bounding Box Regression
ground truth와 CNN을 통해 나온 bounding box의 차이를 구해서 ground truth에 맞춰주는 것
region proposal이 더 잘 되도록 한다
test: R CNN이 object detection 하는 과정
1. Extract 2000 region proposals + Wraped region
2. Compute CNN Features(Feature Extraction)
3. SVM으로 각 feature vector의 점수 계산
4. 하나의 object 위치를 표현하는 여러 개의 bounding box가 존재하기 때문에
NMS를 적용하여 svm으로 나온 class에 해당할 확률과 bounding box끼리 IoU를 통해 bounding box 제거
(NMS. non-maximum suppression)
Confidence threshold 이하의 Confidence score를 가지는 bounding box는 제거 -> Confidence score을 기준으로 bounding box 내림차순 정렬 -> bounding box끼리 IoU를 보고 IoU threshold를 기준보다 크면(겹치면) 제거, 기준보다 작으면(안 겹치면) 남겨둠 -> 반복