Models History
R-CNN류 : R-CNN (2013) --> Fast R-CNN (2015) --> Faster R-CNN (2015) --> Mask R-CNN (2017)
YOLO 류 : YOLO v1 (2016) --> YOLO v2 (2017) --> YOLO v3 (2018) --> EfficientDet (2019) --> YOLO v4 (2020)
Object Detection Model
- input : image
- output : boundary boxes info + class label on the boxes
- bbox1 : (x1, y1, h1, w1, cls1-dog)
- x1, y1 : box의 중심 좌표
- h1, w1 : box의 height, width
- cls1-dog : 출력 카테고리 중 가장 큰 값으로 예측한 결과값
R-CNN : Regions with CNN features
Input image : 이미지 입력
Extract Region proposals : selective saerch algorithm사용.. 이미지를 평균 2000개 정도의 박스로 분류 이것만으로는 안묶이는 경우가 많으므로 박스를 많이 만들어주어야함
Compute CNN features : All of resized RoI images are forwarded to CNN.. 사이즈 압축 및 네트워크 통과.. 이 과정에서 computation cost가 엄청나다
Classify regions : SVM to classify whether the box has object or not. If the box has an object, classify which object it is. 압축된 이미지들이 네트워크를 거쳐서 각 이미지 하나하나에 대한 분류 작업 진행- 물체의 존재 여부에 관한 이진 분류를 진행한다. 0-1사이의 값으로 나타냄.
- threshold 값 이상인 추출결과에 대해서만 classification 을 진행했다.
- SVM을 사용한 이유 : AlexNet이 나온지 얼마 안된 시점이고 SVM의 성능이 꽤 뛰어나므로
R-CNN 문제점
- 이미지 하나 처리 시 47초가 소요되는데 총 2000개에 대한 처리가 필요하다. 시간이 너무 오래걸린다.
- Selective Search Algorithm과 SVM모두 딥러닝 알고리즘이 아니므로 학습되지 않는 알고리즘이다.
YOLO : You Only Look Once
딱 한번만 forward한다. 속도는 매우 빠르지만 성능은 조금 떨어진다. (Hight Spped / Comparative low mIoU)
실행되는 computer 사양에 따라 time speed에 차이가 발생한다.
논문에 성능평가 시에는 반드시 어떤 GPU를 사용했는지 기재해야함.
YOLO ver1
- GoogleLeNet모델을 활용해 이미지 encoding 과정을 거쳐 압축된 특징을 저장하고 있다.
- 마지막에 원본 이미지와 동일한 형태인 7730으로 변형시킨다.
- Max pooling 사용하지 않았으며 FCN 사용하여 5만이상을 4096으로 줄여서 가고 기존 network를 맨 앞에 붙였다.
- GoogleNet사용 부분 = Pre Trained = Transfer Learning
- resume 기능을 사용하지 않았다는 것은 PreTraining을 하지 않았다는 의미로 loss가 훨씬 위에서 시작됨.
- resume을 사용한다는 것은 preTraining을 사용하는 것으로 loss가 낮은 곳에서 시작되고 사용하지 않았을 때보다 훨씬 빠른 시일 내에 loss를 줄일 수 있다.
- 카테고리가 2개에서 4개로 늘어난다면 preTraining은 어떻게 사용될까..? strict옵션을 False로 설정한다. 혹은 윗부부을 잘라서 가져오고 나머지 뒷부분을 알아서 학습하는 방법으로 진행.
- Transfer Learning은 원하는만큼 가져다 쓸 수 있어서 자유도가 높다.
- Transfer Learning 부분을 freeze 즉 고정시키는 방법과 얼리지 않는 방법 두가지가 존재.
- freeze한다는 것은 학습 없이 그대로 사용
- freeze하지 않는다는 것은 weight값 없이 학습을 그대로 진행. freeze하는 것 보다 속도는 느리다.
- yolo는 속도가 중요하므로 freeze하여 사용.
- 요약 : 이미지 받아옴 > TransferLearning 단계에서 Freeze 실시하고 전혀 학습을 하지 않음. 속도는 바름 > 압축된 결과 저장 > 압축된 결과를 가지고 우리가 원하는 사물의 위치 좌표, 어떤 물체인지를 식별할 수 있는 학습 진행 > 7730이라는 직육면체 생성 > 직육면체에서 사물의 box 위치와 어떤 사물인지 판단해내야한다
- 성능을 높이기 위해서는 중간 convolution layer부분을 늘리면 된다. FCN을 사용한 부분은 늘리면 안됨. 속도는 다소 떨어질 수 있지만 넝능 향상에 보탬이 된다.
(x,y,w,h,c) - 채널 30개 중 처음 5개
- IoU가 너무 낮으면 boundary box가 그려지지 않음.
- IoU가 뛰어나다 해도 정답의 center가 있는 그리드에 boundary box의 중심점이 들어있어야 해당 boundary가 생성
- x, y : grid cell size 대비 비율
- w, h : 전체 이미지 대비 비율
- c: box quality = confidence score = 물체가 존재할 확률 p * IoU (0-1사이의 값으로 나타냄. 1에 가까울 수록 물체가 존재한다. threshold값 낮을수록 box 많이 그려지고 높을수록 box 적게 그려진다.
- p값은 정답 중심점의 grid cell내부에 예측 중심점이 존재하지 않으면 0이다. 결과적으로 p값이 존재할 수 있는 grid cell의 개수는 정답의 개수와 동일하다.
- 결과적으로 p와 IoU 값이 모두 커야 loss는 작고 boundary box가 그려진다.
물체가 하나인 경우 - 채널 30개 중 두 번째 5개
- 학습을 어느 정도 진행했는데 p 값이 살짝 벗어나 boundary box가 생성되지 않았다. 하필, 해당 image에 물체가 딱 하나일 경우??
- 이 상황을 방지하기 위해 box를 cell 당 2개씩 그린다. 채널 30개 중 두 번째 5개는 이에 관한 정보를 담고 있다.
- ex만약 7 * 7 = 49 개의 grid cell이면 총 98개의 박스가 생성
- c값이 크면 box가 두껍게 그려지고 작으면 box가 얇게 그려진다.
채널 30개 중 마지막 20개는 사물이 무엇인지에 대한 정보를 지니고 있다.
- 앞 10칸에서는 box안에 들어갈 물체의 존재 여부에 대한 정보를 다룬다. 정작 box안 물체가 무엇인지는 아직 알 수 없다.
- box안 물체가 무엇인지는 마지막 20칸의 정보를 통해 알 수 있다. 20칸이라는 의미는 YOLO dataset의 카테고리가 20개라는 의미이다.
- 20개의 값 중 가장 큰 확률값에 해당하는 인덱스가 박스 안 물체로 판단되어진다.
YOLO ver1 정리
- Fast speed (속도 매우 빠르다)
- Comparative low performance (성능은 다소 떨어진다)
- End to end training
- Low And Model : 대부분 정답을 맞추지만 종종 틀리는 것도 존재한다. Recall이 낮다.
- batch normalizaition : 나중에 추가
- 속도와 mAP을 동시에 살펴보며 성능을 파악한다.
- 성능은 다소 떨어지지만 속도는 빠르다.
YOLO ver1 문제
- 다시 3차원으로 reshape하지 않으므로 공간정보를 잃는다.
- no anchor --> version 2에서 해결 가능
- 상대적으로 낮은 recall을 보인다.
- dataset 카테고리가 20으로 매우 작다.
'AI' 카테고리의 다른 글
[Object Detection] YOLO ver.3 (0) | 2021.06.16 |
---|---|
[Object Detection] YOLO ver.2 (0) | 2021.06.15 |
Semantic Segmentation 코드 구현 (0) | 2021.06.12 |
Binary Classification (0) | 2021.06.11 |
Segmentation (0) | 2021.06.10 |