분류랑 Detection은 엄연히 다른 주제에 대해 접근하고 있기 때문에 사용하고 있는 성능지표도 다릅니다. 그렇기 때문에 추후에 Detection 알고리즘을 정리하기에 앞써 필요한 몇가지를 정리하고 가는게 좋을 것 같다는 생각이 들었습니다.
이 글은 라쟈링가파 샨무갸마니의 컴퓨터 비전과 딥러닝이라는 책의 4단원의 내용과 앤드류 응 교수님의 C4W3L01 강의를 재구성 한 것입니다.
1. Classification vs Localization vs Detection
이미지 분류는 어떤 특정 이미지에 어떠한 라벨을 붙이는 겁니다.
이에 반해 어떠한 객체의 위치를 찾아야 하는 것이 Localization과 Detection 입니다. 이 둘의 차이는 이미지 내에서 단일 객체의 위치를 찾는 것인지 혹은 여러 객체의 위치를 찾는 것인지 입니다. 이때 어떠한 객체의 위치를 찾는 것은 주로 직사각형의 Bouding Box를 통해 표시 됩니다.
2. Detection 모델 평가 지표
분류 모델은 정답지가 존재합니다. 따라서 모델을 평가 할 때 해당 정답지와 얼마나 유사하게 모델이 예측을 했는지를 바탕으로 모델의 성능을 평가합니다. 하지만 Detection은 그렇게 평가를 하면 안되죠. 정답지라고 해도 그건 인간이 정답이라고 인위적으로 만든 네모 박스 이지 그것이 해당 위치를 픽셀단위로 정확히 표현한 것은 아니기 때문이죠.
이런 식으로 말이죠.
그렇기 때문에 좀 더 현실적인 성능 지표를 정의 할 필요가 있습니다.
1. IoU(Intersection over Union)
IoU는 실측값 면적과 예상 면적의 교차영역 및 전체영역의 비율입니다. 말이 어렵죠? 아래 예시를 보시죠.
이처럼 내가 예측한 영역과 실제 정답지의 합집합과 그들의 교집합의 비율로 정의되는 성능 지표입니다. 그럼 이것이 성능 지표로 성능을 할 수 있을 까요? 직관적으로 그럴 것 같지만 예시를 보시죠.
매우 그럴듯한 성능 지표이죠.
하지만 이것 만으로는 Detection의 성능을 모두 표현하기 어렵습니다. 예를 들어 이미지 내에 여러 객체에 대해 탐지를 해야한다면 IoU만으로는 성능을 평가하기 어렵죠. 왜냐하면 매 이미지 마다 나오는 객체의 갯수가 달라지니깐여. 그렇게 되면 매번 평가 지표의 갯수가 달라지는 문제점이 생기게 됩니다.
이 때문에 IoU와 더불어 사용하는 성능 지표가 mAP(mean Average Precision)입니다.
2. mAP(mean Average Precision)
mAP를 구하는 방식은 아래와 같습니다.
1. 내가 이미지 내에서 특정 클래스가 있다고 추측되는 Bounding Box를 N개를 구했다고 해봅시다.
2. 그러면 N개마다 IoU값이 있겠죠.
3. 그러면 IoU값이 임계값을 넘으면 참 아니면 거짓으로 라벨링을 해줍니다.
4. 그리고 N개마다 해당 클래스일 확률도 나오겠죠. 확률 값으로
이제 mAP를 구할 준비는 끝났습니다.
이를 이용하여 우리는 PR curve를 그리게 됩니다. 그리고 그 아래 면적을 가지고 우리는 AP를 구하게 됩니다.
이제 이를 클래스마다 구하고 이를 평균내면 mAP가 됩니다.
지금쯤이면 이놈 뭐라는 거야 라고 생각이 드실 수도 있습니다. 역시 설명에는 시각화만한게 없죠. 시각화를 해보겠습니다.
만약 어떤 이미지에 15개의 얼굴이 존재한다고 하죠.
이제 이러한 이미지를 바탕으로 우리가 어떠한 Detection과정을 거친다고 해보죠.
우리는 총 10개의 Bounding Box와 각각의 Box가 얼굴일 확률을 구할 수 있습니다. 아래처럼요.
자 여기서 우리가 만약에 confidence의 threshold를 90퍼 이상으로 정했다고 합시다. 그러면 Precision은 2/2가 되죠. 왜냐면 90퍼 이상이 되는 Detection들은 I랑 E인데 이들이 모두 TP니깐요. 하지만 Recall은 2/15가 됩니다. 이렇게 우리가 Precision만 가지고 성능을 평가하기는 위험합니다. 또한 Recall만 가지고 평가를 하기도 어렵죠. 그렇기 때문에 confidence의 threshold를 점점 늘려가면서 Precision과 Recall의 변화양상을 볼 필요가 있습니다.
이제 이 PR커브의 아래 면적을 구한것이 AP입니다.
그리고 이것을 각 클래스마다 구하고 평균을 낸 것이 mAP입니다.
3. Sliding window
앞에 포스팅한 글을 보면 RCNN은 ROI를 구하는 법을 Selective Search라는 방식을 사용하여 구했습니다. 못 보신 분들이 계시면
https://me-analyzingdata.tistory.com/4
이 글을 보시죠. 사실 보기만 해도 숨이 턱 막힙니다. 그럼 이렇게 말고 이미지 내의 구역을 어떻게 나눠야 할까요? 그에 대한 방안이 Sliding window입니다. 이는 이미지내에 그보다 작은 크기의 창을 이동하면서 해당 창에서 객체를 찾겠다는 거죠. 말로만 들으면 그럴듯 해보이죠? 하지만 이 방법은 다음과 같은 두가지의 문제점이 존재합니다.
1. Window랑 동일한 크기 혹은 그보다 작은 객체만 탐지해 낼 수 있다.
2. 우리가 Window를 움직이는 방식에 따라 누락되는 객체가 발생하게 됩니다. 모든 픽셀에 대해서 움직이기에는 Computing Cost가 높다.
그렇기 때문에 이를 해결하기 위해 두 가지의 개념이 존재하게 됩니다.
스케일-공간 개념
1번 문제를 해결하기 위해 나타난 것이 스케일-공간 개념이죠. 스케일-공간 개념은 다양한 크기의 이미지를 사용하자는 개념입니다. 단순히 원래 사이즈의 이미지를 사용하는 것이 아니라 보간법등을 사용하여 이미지의 크기를 조절해서 여러번 모델에 대입을 해보자는 것이죠. 그렇게 되면 지정한 Window보다 큰 객체라고 해도 전체 이미지가 줄어들면서 Window안에 들어오게 되서 탐지가 될 것이기 때문이죠.
하지만 이 방법은 계산상의 복잡성을 증가 시킵니다. 즉, 탐지를 하는데 오래 걸린다는 거죠. 정확도는 높아지게 되지만 이미지를 줄이는 방법을 여러개를 만들게 되면 그만큼 시간이 오래 걸릴겁니다. Image Detection는 Edge computer에서 계산 되어야 한다는 것을 생각하면 이 trade-off관계를 내 모델이 적용되는 상황에 맞춰서 이런것을 조절해야 할겁니다.
Convolution implementation of sliding window
28*28의 흑백 이미지가 있다고 가정합시다.
이제 이걸 CNN을 거치면서 폭과 높이는 줄어들게 만듭니다. 그렇게 해서 8 * 8 * 4의 이미지가 만들어 집니다. 이게 무슨 뜻이냐하면 28 * 28의 이미지를 8 * 8의 구역으로 축약해서 각각의 구역(총 64)개의 픽셀에 대해서만 살펴보면 되게 바뀐 것이지요. 즉, 원래는 784개의 픽셀에 대해서 일일이 조사를 해야하는 것이 64개에 대해서만 조사하면 되게 바뀐 것이지요.
자 이제까지 Detection 분야에 대한 기초 개념을 알아봤습니다. 쉬우듯 어렵네요. 여기까지 읽어주셔서 감사합니다. 다음은 Faster RCNN으로 찾아뵙도록 하죠.
'인공지능 > Computer Vision' 카테고리의 다른 글
R-CNN(Region with CNN features) (0) | 2021.01.30 |
---|