[Computer Vision] R-CNN vs Fast R-CNN vs YOLO
R-CNN vs Fast R-CNN vs YOLO
포스트 난이도: HOO_Senior
# Object detection algorithms
현재 기준으로 Object detection의 세 가지 주요 알고리즘을 뽑으라고 한다면 R-CNN, Fast R-CNN 그리고 YOLO를 말할 수 있다. 사실상 Object detection에 있어서 가장 많이 사용되고 있으며 그중에서도 개인적으로 가장 선호하는 YOLO의 경우는 v8 버전이 새롭게 나오면서 그동안의 문제점으로 이야기해 온 작은 사이즈의 그리드 구분이 점차적으로 해결되고 있다. 그럼에도 우리는 Object detection을 다룰 때 세 가지 알고리즘을 모두 다 고려하여 머신러닝을 돌리고 있다. 그 이유인즉슨 각 알고리즘의 장단점이 각기 다르기 때문이다. 그렇기에 우리는 상황에 맞는 알고리즘을 선택하여 적용할 수 있어야 하며, 각기 다른 알고리즘을 유연하게 다루기 위해서는 각자의 특징과 조정하는 방법에 대해서도 익히고 있어야 한다.
# R-CNN, Fast R-CNN, YOLO
Object detection 대표하는 알고리즘들의 장단점들을 간단하게 비교해보도록 해보자. 우선 R-CNN을 보면 이름에서부터 알 수 있듯이 Convolutional neural network (CNN)을 사용해서 적은 수의 정규화된 가중치를 활용해서 사물을 인식하는 방식을 활용한다. 이러한 방식 자체가 동물의 시각 조직을 참고해서 만들어진 알고리즘이니 참으로 신기할 따름이다. 아무튼 CNN을 사용해서 작은 구조까지도 detection이 가능하다는 건 좋으나 사실상 많은 뉴런과 각 뉴런에 대한 수많은 가중치가 필요하다 보니 ML과정에서 오랜 시간과 비용이 소모될 수밖에 없다. 예를 들어 이미지당 200개 이상의 지역을 분류해야 하고 각 테스트 이미지당 약 47초의 시간이 소요되는데 이를 실시간으로 구현하기가 어렵다. 마지막으로 R-CNN은 고정된 알고리즘이다 보니 잘못된 Region of proposals (RoP)이 발생할 수 있다는 문제점도 가지고 있다. 그래서 우리는 이러한 현실적인 문제를 고려하여 dropout과 같은 여러 가지 방법을 사용하지만 상대적으로 오랜 시간이 걸린다는 건 어쩔 수가 없다.
이를 보완해서 나온게 바로 Fast R-CNN이다. Convolutional neural network (CNN)를 사용한다는 점에서 R-CNN과 유사해 보이지만 region of proposals (RoP)하는 과정에서 CNN에 RoP를 적용하기보다는 입력 이미지를 CNN에 넣어 convolutional feature map을 생성해 낸다. 따라서 생선 된 convolutional feature map에서 우리는 RoP를 적용하고 RoI pooling layer를 통해서 reshape 하는 과정을 거쳐 효율성을 증대시킨다. 실제로 R-CNN과 Faster R-CNN을 비교해 보면 차이가 극명하게 나타나는데, 연구 자료에 따라서 많으면 10배까지도 학습시간의 차이가 나타나기도 한다. 참고로 글쓴이는 그 정도까지의 차이는 못 느꼈지만 그래도 확실히 Faster R-CNN을 활용할 수 있는 조건이라면 R-CNN보다 시간 측면에서 많이 단축할 수 있는 건 사실이었다. 여기서 문제는 우리 모두 알고 있듯이 병목 현상이 발생한다는 것이다. Fast R-CNN과 Faster R-CNN 모두 R-CNN보다 학습에 있어서 빠르다는 장점을 가지고 있지만 RoP에 대해서 Bottle neck 현상이 발생할 수 있다는 점에서 단점을 가지고 있다.
YOLO는 You only look once라는 의미를 가지고 있는 object detection의 알고리즘이다. 사실 컴퓨터쟁이들의 약자이고 대중적으로는 아마 You only live once로 많이 알려져 있다. 실제로 YOLO 약자를 물어본 다른 대학원생에게 You only look once라고 이야기했더니 대화가 더이상 이어지지 않았던 적이 있었다. 아무튼 본론으로 돌아와서 YOLO의 경우는 단일 convolutional neural network를 사용하며 MxM 그리드로 분할하여 각 개수에 맞는 bounding boxes들을 가져와 비교 분석을 한다. 따라서 R-CNN 방식과는 다소 다르게 학습이 이루어지기 때문에 학습되는 속도가 초당 45 프레임 정도로 정말 빠른 편이다. 다만 속도가 빠르다는 것은 작은 물체를 처리하는 데 있어 한계점이 있다는 걸 나타내기도 한다. 그리드 방식으로 bounding boxes를 구성하여 detection이 이루어지다 보니 작은 사물에 대한 인식이 명확하지 않고 특징을 구분하기 어려운 비슷한 물체의 경우에도 인식이 완벽히 이루어지지 않는다는 단점을 가지고 있다. 물론 글쓴이가 YOLO를 좋아하는 이유 중 하나는 이러한 문제점에 대해서 지속적인 업데이트가 이루어지고 있기 때문에 점차적으로 사물 인식의 정확도가 높아질 것으로 본다.