일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- 자연어처리
- map
- 딥러닝
- 크롤러
- 회귀
- Computer Vision
- mnist
- 코딩애플
- RNN
- 지정헌혈
- 인공지능
- 파이썬
- 플러터
- 데이터분석
- Regression
- 크롤링
- Flutter
- 머신러닝
- filtering
- AI
- 42서울
- CV
- 모델
- 피플
- pytorch
- 유데미
- 앱개발
- 42경산
- 선형대수학
- 선형회귀
- Today
- Total
David의 개발 이야기!
Object Detection 에 대해 알아보자! 본문
이미지 내에서 사물을 인식하는 방법에는 다양한 유형이 존재한다.
1. Object Detection 과 Localization에 대한 설명
Object Detection 은 다수의 사물이 존재하는 상황에서 각 사물의 위치와 클래스를 찾는 작업을 말한다.
- 사물이 여러 개일 수 있는 상황에서 "각 사물마다" (Classification + Localization)을 같이 한다.
- 직관적으로 생각해보면, 사물이 있는 위치를 모두 찾고, 그걸 개별적으로 CNN을 돌려서 분류하면 되지 않을까?
-> 이 방식이 2-Stage 방식 (1) 사물이 있는 위치를 찾고 (2) 각 사물을 분류하자.
Localization 은, Object Detection 의 하위호환 개념으로, 사물의 위치를 찾는 작업이다.
locatlization 문제는, regression 문제와 같다고 생각하면 되는데,
(왼쪽, 위, 오른쪽, 아래) 이렇게 4개의 scalar 를 regression 하거나, center point (x, y) 와 height, width 를 regression하는 문제다.
출처 : https://medium.com/zylapp/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852
2. 2-Stage 방식과, 1-Stage 방식 비교해보기
1. 2-Stage Detector
물체의 위치를 찾는 (1) Localization 과 (2) Classifiacation 문제를 순차적으로 해결
task1 을 예측한뒤에, 해당 예측된 위치(물체가 있을 것 같은 위치)에 대해서만 명시적으로 분류(task2)를 수행하는 방식이다.
2. 1-Stage Detector
물체의 위치를 찾는 문제와, 분류 문제를 한번에 해결합니다
일단 feature map 에 대해서, "물체가 있든 없든" 일단 예상되는 위치에 대해서 분류를 일단 수행하고, 나중에 task1의 예측결과를 고려하여(물체가 있는 곳) 결합해 최종결과를 도출하는 방식이다.
[추가로 알아야하는 사항]
1. CNN은 기본적으로 공간적인 정보를 출력레벨에서도 어느정도 유지하는 경향이 있다. 따라서, 위치 정보 예측(localization)에서도 매우 유용하다. -> CNN 같은 경우, 추출된 feature map 도 마찬가지로 "공간적인 정보를 가지고 있다고 본다"
2. 기본적으로 최신 object detection 모듈은, 다 multi-task learning 방식을 사용
=> 하나의 feature map을 뽑은 뒤에, 이 feature map 을 (1) 사물 위치 (2) 사물 분류를 동시에 수행
3. 초기 object detection 연구에서 1-stage 방식은 다소 minor 했음 -> 정확도가 떨어졌기 때문 & 직관적이지 않음
3. 2-Stage 방식 심화
https://www.arxiv-vanity.com/papers/1908.03673/
1. R-CNN
selective search 는 뒤에서 더 설명할 예정 => open CV의 라이브러리라고 생각하면 된다.
뉴럴네트워크가 아니고, CPU 기반으로 동작하는 완전히 개별적인 라이브러리다.
=> 그러다보니, 시간도 엄청 오래 걸리고, 역전파로 학습하는 방식도 불가하다.
=> 사물이 "있을 법한 위치를 찾는 알고리즘"
2. Fast R-CNN
: CNN을 거치더라도, 위치에 대한 정보가 기본적으로 남아있음을 사용하는 방식
가정 : 입력단에서, 왼쪽 위에 존재하는 사물은, feature maps에서도 왼쪽 위에서의 activation 값이 높을 것이다.
=> 그럼에도, selective search가 여전히 사용됨 -> bottleneck 현상이 있고, CPU기반이라, 너무 느리고, 역전파 불가
3. Faster R-CNN
그러면, Selective Search 자체를 없애고 해보자 아이디어
위치 예측도, CNN으로 하자! => RPN(Region Proposal Network) 를 사용
=> selective search 를 대신하는 GPU 기반의 방법
=> GPU를 사용하고, CNN을 쓰는 거니까 결과적으로 end-to-end 로 학습가능하다.
=> 이 Faster R-CNN이 SOTA(State-of-the-art) 성능이다.
=> 아무튼 Faster R-CNN도 RPN 이후에 나온 각 feature에 대해서 feature map (위치 정보를 담은) 에 대하여 "개별적으로" FC 레이어를 태워야 한다.
=>어쨌든"위치정보"에대한예측결과가있어야만동작하는방식 -> 느리다
(2020년 이후라면) 그냥 딥러닝을 공부한 사람이면, 당연히 모든 게 GPU로 돌아가는 게 일반적이라고 느낄 것
하지만, 당시 2015년도만 해도 selective search 같은 것을 제거하는 것이 그렇게 일반적이지 않았음
=> 우리한테 만약에 이 문제 풀라고하면 아마 처음부터 faster r-cnn과 같은 접근을 하지 않을까 싶음.
3. Region Proposals : 물체가 있을 법한 위치 찾기
1. Sliding Window
- 이미지의 다양한 형태의 window 를 슬라이딩하며 물체가 존재하는지 확인하는 방식
- 너무 많은 영역에 대해서 확인해야한다는 단점이 있음
2. Selective Search
- 인접한 영역(region)끼리 유사성을 측정해, 큰 영역으로 차례대로 통합해 나가는 방식
4. Object Detection 정확도 측정 방법
1) 물체가 있는지 없는지 여부를 정확하게 예측할 수 있는가(localization)
- ground-truth(정답) bounding box와 예측 결과가 얼마나 겹치는가(IoU) 로 각각 T/F로 판단 가능
2) 해당 사물이 어떤 클래스인지 정확히 카테고리를 예측했는가(classification)
- 보통 분류 문제면, accuracy 로 판단 가능
1. Precision(정밀도)와 recall(재현율)
precision은 모델이 True라고 예측한 것 중 정답이 True 인 비율을 의미
recall 은 실제 정답이 True 인것 중에서, 모델이 True라고 예측한 것을 의미
=> 이 두값을 종합해서 알고리즘을 평가하기 위한 것이 Average Precision
2. Average Precision
아직 이해중
3. Intersection over Union (IoU)
IoU 란 두 바운딩 박스가 겹치는 비율을 의미한다.
- 성능평가 예시: mAP@0.5 는 정답과 예측의 IoU가 50% 이상일때, 정답으로 판정하겠다는 의미
- NMS 계산 예시 : 같은 클래스(class)끼리, IoU가 50%이상일때, 낮은 confidence의 box를 제거
4. NMS(Non Maximum Suppression)
- 객체 검출(object detection)에서는 하나의 인스턴스(instance)에 하나의 bounding box가 적용되어야한다.
- 따라서, 여러개의 bounding box가 겹쳐 있는 경우에, 하나로 합치는 방법이 필요하다.
NMS (Non-Maximum Suppresion) -> 제일 크지 않으면 압축해버린다. -> 큰 것만 남기겠다.
=>모델은(1)각사물마다(2)클래스예측
=> 근데, (1)에서 "각 사물"을 어떻게 구분하느냐?
하나의 instance에 대해서는 하나의 bounding box만 부여해야 함
=> 하나의 "사람 개체"에는 하나의 bounding box만 부여해야 함
=> 한 이미지에 철수와 영희가 같이 나온다면,
=> 철수에는 1개의 bounding box, 영희에도 1개의 bounding box가 있어야 함.
=> 만약 철수를 가리키는 boudning box가 3~4개라면, 이를 1개로 줄여주는 것이 필요.
'컴퓨터비전' 카테고리의 다른 글
[CV Lecture 05] Edge Detection (0) | 2023.11.29 |
---|---|
[CV Lecture 04] Image - Resizing (0) | 2023.11.29 |
[CV Lecture 03] Linear Filtering (0) | 2023.11.29 |
[CV Lecture 02] Point Processing (0) | 2023.11.29 |
[CV Lecture01] Computer Vision 에 대한 개요 (0) | 2023.11.29 |