늦깎이 공대생의 인공지능 연구실
YOLO로 이해하는 이미지 객체 감지(1) - Object Detection 본문
딥러닝 기반 인공지능 알고리즘의 등장으로 2021년 현재 다양한 분야에서 인공지능이 적용되어 활용되고 있는 시대가 되었습니다. 특히 이미지에서 원하는 정보를 찾기 위한 Vision 분야에서 인공지능의 발전은 실로 놀라울 정도의 속도로 발전하고 있지요. 아마도 실제 눈으로 결과를 쉽게 확인할 수 있어 발전되는 모습이 눈에 확연히 드러나기 때문에 더욱 그렇게 느껴지는 것일지도 모릅니다.
이번 포스팅에서는 이미지의 객체 감지(Object Detection)의 등장 배경 및 개요에 대해 다루고자 합니다. 그리고 객체 감지 알고리즘 YOLO의 원리를 통해 객체 감지 인공지능 기술에 대해 설명드리도록 하겠습니다.
이미지로부터 정보를 얻기 위한 방법 - Computer Vision(컴퓨터 비전)
컴퓨터 과학자들이 인공지능을 구현하기 위해 각종 방법들을 시도하게 됩니다. 가장 궁국적인 연구 방향은 다음과 같은 질문에서 비롯됩니다.
과연 사람은 어떠한 방식으로 주변 정보를 인식할까?
사람들이 무언가를 판단하기 위해 자신의 주변에서 감지하는 정보를 통해 생각을 하는 과정을 거칩니다. 이 때 사람이 얻는 주요 감각으로 시각, 청각, 후각, 촉각, 미각등이 있는데요 그 중 가장 압도적인 감각은 시각이라 할 수 있겠습니다.
우리의 눈으로 들어오는 시각 정보는 상당히 많은 정보를 담기고 있다는 사실은 컴퓨터의 관점에서도 상당히 합당한 의미를 가지고 있습니다. 같은 러닝타임의 데이터가 있을 때 3분짜리 UHD급 영상 파일이 같은 재생길이의 음악 파일보다 용량이 압도적으로 큰 차이가 있음에서 이러한 차이를 알 수 있습니다.
자율주행 센서로서 카메라가 Radar나 LiDAR 센서에 비해 갖고 있는 가장 큰 장점으로 단 한장의 사진만으로도 많은 양의 정보를 가지고 있다는 것이지요. 그러나 사용되는 알고리즘 모델에 따라 처리 속도로 인해 초창기 자율주행 기술로는 카메라 이미지 기반의 데이터 처리가 용량이 상당하여 실시간성을 요구하는 자율주행 자동차에 있어 매리트가 없었습니다. 그러나 GPU의 발전과 더불어 카메라 기반의 이미지 객체 감지 성능이 점차 향상중이기 때문에 머지 않은 미래에는 자율주행 자동차에서도 충분히 활용이 가능할 정도로 기술이 발전해 있을 것으로 보입니다.
이러한 방식으로 이미지 정보를 컴퓨터로 연산하여 유의미한 정보를 얻어내는 것이 컴퓨터 비전(Computer Vision)의 궁국적인 목표라 할 수 있습니다. 이러한 컴퓨터 비전의 기초는 보통 대학 학부 수준에서 기초적인 내용들을 다룹니다. 아마도 요즘같이 딥러닝 기반의 객체 감지 알고리즘이 발전한 지금은 학부생들도 딥러닝에 대해 배울 수 있는 기회가 있을 겁니다.
기계 학습(Maching Learning)
사람들은 이미지 데이터를 통해 어떻게 물체의 정보를 알아낼 수 있을까요? 아래의 사진을 볼까요?
사람의 눈으로 단번에 개와 고양이가 있음을 알 수 있습니다. 그렇다면 사람들은 사진을 통해 어떻게 개와 고양이임을 알아낼 수 있었을까요? 저의 경우 두 동물의 귀와 전체적인 체형을 통해 개와 고양이를 알아낼 수 있었습니다. 사람들이 이미지에서 특징을 찾아내고 이를 통해 이미지의 정보를 파악하는 것이라 할 수 있습니다.
과연 컴퓨터는 이들을 어떠한 방식으로 분석할 수 있을까요?
기계학습(Machine Learning)은 사람이 이미지의 객체에 대해 분석한 특성들을 학습하고 이를 기반으로 특정 이미지가 주어졌을 때 학습된 특성을 가지고 주어진 이미지의 객체 정보를 판단하는 기술입니다.
기계학습을 직관적으로 이해할 수 있는 방법으로 스팸메일 분류기가 있습니다. 예를 들어 스팸메일에서 자주 등장하는 패턴의 단어들을 등록하면 분류기는 관련 단어가 들어가있는 메일을 '스팸'으로 분류하게 됩니다. 이 때 분류를 위해 사용된 각 단어들을 기계학습의 특성(Feature)이라 할 수 있겠습니다. 이러한 특성들을 가지고 주어진 데이터를 분류하는 것이 기계학습의 핵심인 것이지요.
그렇다면 이미지는 어떻게 분류할 수 있을까요? 고양이의 이미지를 기계학습으로 분류하기 위해 사람들은 기계학습으로 어떻게 특성들을 학습시킬 수 있을까요?
이미지를 특성으로서 기계학습에 학습시키기기엔 스팸메일의 '단어'처럼 특성을 수식처럼 명료하게 정의할 수 없어 추상적인 개념이 될 수 밖에 없습니다. 과연 이미지에서 특성을 어떻게 기계학습으로 학습시킬 수 있을까요?
인공신경망(Artificial Neural Network)
앞에서 설명하였듯이 사람들은 분명 개와 고양이라는 동물의 특성을 알고 이를 보고 판단할 수 있습니다. 그러한 판단을 할 수 있는 가장 분명한 이유는 컴퓨터와 달리 사람의 뇌구조가 개와 고양이를 분류할 수 있도록 설계된 구조로 되어 있는 것은 아닌가 하는 추측으로부터 시작됩니다.
인공지능을 연구하던 학자들은 컴퓨터가 사람처럼 지적인 판단을 하기 위해 어떠한 방법이 있을지에 대해 고민하게 되었습니다. 계산과 같은 분야에서는 컴퓨터가 사람보다 단순 연산에서는 매우 우월적인 성능을 보이지만 어떻게 사람은 지적인 능력에서 컴퓨터보다 뛰어날수 있을까? 이러한 고민을 하던 학자들은 기발한 아이디어를 떠오르게 됩니다.
그렇다면 컴퓨터도 사람이 생각하는 구조처럼 만들면 되지 않을까?
학자들은 고민 끝에 컴퓨터에서 인간이 생각하는 뇌의 구조를 컴퓨터에서 그대로 모방하고자 하였습니다. 사람의 뇌는 수많은 뉴런(Neuron)들의 모임으로 구성되어 있는데 이러한 뉴런들의 동작 원리를 프로그래밍으로 비슷하게 구현하였고 이를 인공신경망(Artificial Neural Network)라는 명칭으로 일컬어지고 있습니다.
인공신경망의 개념이 처음으로 도입된 것은 1943년도였습니다. 인공신경망의 연산 자체가 상당히 많은 편에 속하기 때문에 그 당시 컴퓨터의 성능은 오늘날 우리가 사용하는 스마트폰과는 비교조차 안될 정도였으니 연구의 발전이 더디던 1969년 즈음 인공지능의 겨울이 찾아오게 되면서 한동안 인공신경망은 학자들로부터 관심이 멀어진 이론이었습니다.
그러나 2000년대에 오면서 컴퓨터의 성능은 비약적으로 발전하였고 인공신경망 기반의 알고리즘 또한 많은 발전을 이루면서 인공신경망 기반 인공지능 기술은 GPU의 발전 속도와 함께 오늘날의 인공지능의 대세가 되었습니다.
합성곱 신경망(Convolutional Neural Networks)
인공신경망의 발전으로 인공지능의 성능은 상당한 발전이 이루어집니다. 특히 비전 분야에서 비약적인 발전을 보이게 되었는데 과연 인공신경망은 이미지를 어떠한 방식으로 사람처럼 볼 수 있게 된 것일까요?
이러한 기술이 가능하게 된 것은 합성곱 신경망(CNN) 덕분이라 할 수 있습니다. CNN은 이미지로부터 특정한 부분에 대해 Kernel이라는 필터를 사용하여 커널을 이미지의 일부분에 비교한 후 결과값을 해당 칸에서의 대표값으로 나타냅니다. 아래의 예제에서는 Kernel의 부분에 대응하는 입력값에 1로 표시된 부분들에 대한 모든 합으로 나타내고 있습니다. 실제 Kernel의 계산 방법은 다양하며 Kernel의 계산 방식에 따라 성능이 좌우됩니다.
위의 방식으로 CNN은 여러 개의 Kernel을 통해 하나의 이미지로부터 여러개의 결과값을 얻어내고 여러 계층의 CNN 레이어가 있을 경우 해당 계층의 갯수만큼 계산을 반복합니다. 이렇게 계산된 신경망들을 최종 단계에서 해당 사진의 물체가 무엇인지 맞추는 식으로 이미지의 객체 정보를 추론합니다.
역전파(Back Propagation)
지금까지 인공신경망이 어떻게 이미지를 인지할 수 있는지에 대해 설명드렸습니다. 여기까지 쭈욱 읽어보신 여러분들께서는 다음과 같은 질문을 하시리라 예상해봅니다.
그렇다면 인공신경망은 어떻게 이미지의 정보를 학습할 수 있을까요? 인공신경망이 사람처럼 판단하고 학습할 수 있는 핵심 기술로서 역전파(Back Propagation) 방식을 사용합니다.
역전파란 말 그대로 인공신경망이 이미지로부터 객체의 정보를 인지하는 과정의 반대 방향으로 일어나는 것으로 인공신경망의 결과값(Output)과 실제 값인 Label 값과의 차이를 좁혀서 이를 결과값 부분에서부터 역으로 신경망의 가중치 값들을 변경하는 방식입니다.
쉽게 말해 어린 아이에게 '고양이'라는 동물을 가르쳐주기 위해 동물들이 그려진 책을 보여주면서 해당 동물이 고양이인지 아닌지를 선생님이 가르쳐주다 보면 어느덧 아이가 고양이를 맞출 수 있을 정도로 학습이 되어있는 것처럼 말이지요!
역전파에 대해 구체적으로 이해하기 위해서는 상당히 많은 수학적인 지식이 필요합니다. 역전파에 대해 자세히 설명하고 있는 영상을 통해 어떠한 방식으로 학습이 이루어지는지 이해하셨으면 합니다.
객체 감지(Objection Detection)
객체 감지(Object Detection)이란, 이미지 안의 객체를 단순히 구분하는 것에서 그치지 않고 이미지 내의 해당 객체의 위치까지 표시하는 알고리즘을 말합니다. 여기서 더 발전하여 객체에 대한 인스턴스 분할(Instance Segmentation)까지 하여 해당 객체만을 Mask로 표시하여 나타낼 수도 있습니다.
오늘날 객체 감지 알고리즘에 활용되는 인공지능 모델들은 해당 작업을 수행하기 위해 2가지 과정을 거치는데 사진에서 객체의 위치를 추정하는 지역화(Localization)를 한 후 해당 위치에 있는 객체가 무엇인지 확인하는 과정인 분류(Classification) 과정을 통해 객체 감지(Object Detection)을 수행합니다.
여기서 2가지 과정을 어떻게 처리하느냐에 따라서 알고리즘이 구별되는데 지역화를 수행한 다음 분류가 이루어지는 모델을 Two-stage 모델이라 하며 지역화와 분류를 동시에 수행하는 모델을 One-stage 모델로 분류합니다. 분류 속도로는 단 한번의 수행으로 지역화와 분류가 같이 이루어지는 One-stage 모델이 빠른 편에 속하고 Two-stage 모델의 경우 속도보다 정확도에 중점을 두는 경향이 있습니다.
여기서 설명드리고자 하는 YOLO의 경우 One-stage 방식으로서 객체의 위치와 속성을 동시에 찾는 방식을 사용합니다. 아래의 그림과 같이 바운딩박스와 객체의 속성을 동시에 찾은 후 이를 토대로 결과값을 표시하는 것으로 알고리즘이 수행되고 있음을 직접 확인하실 수 있습니다.
지금까지 객체 감지 알고리즘에 대한 간단한 설명을 해드렸습니다. 제가 설명드렸던 것보다 좀 더 자세한 내용을 알고 싶으신 분들께서는 아래의 참고자료를 보시면 많은 도움이 되실것입니다!
다음 포스팅에서는 YOLO 알고리즘의 간결한 역사와 발전 과정에 대하여 다루어보겠습니다.
https://eair.tistory.com/41?category=0
참고자료:
http://www.secmem.org/blog/2021/06/20/Object_Detection/
https://live.lge.co.kr/live_with_ai_01/
http://www.aistudy.com/physiology/brain/%EB%87%8C%EC%97%B0%EA%B5%AC.htm