CS231n 수업은 스탠포트 대학교의 수업을 녹화한 것으로 컴퓨터 비전에 대한 많은 내용을 담고 있다. 앞으로 이 수업의 내용을 정리해서 올리도록 하겠다
컴퓨터 비전이란 무엇일까? 인터넷의 트래픽 중 80%의 지분이 바로 비디오 데이터이고, 이것은 사진 등의 다른 데이터들을 모두 제외한 것이다. 이렇게 인터넷의 데이터 대부분이 시각 데이터이므로 시각 데이터들을 잘 활용할 수 있는 알고리즘을 잘 개발하는 것이 매우 중요해졌다. 시각 데이터는 암흑물질(dark matter)이라고 불릴만큼 해석하기가 매우 까다롭다. (암흑 물질 : 우주 대부분의 질량을 차지하고 있는 물질) 이렇게 시각 데이터가 너무 많기 때문에 자동으로 시각데이터를 이해하고 분석하는 알고리즘을 개발하는 것이 중요해졌다.
컴퓨터 비전은 다양한 과학, 공학 분야들과 연결되어있고, 그 중심에 해당하며 물리학 등의 다른 학문까지 다뤄야할 수 있다. 광학, 이미지 구성, 이미지의 물리학적 형성 등을 이해하려면 물리학적인 현상들을 이해할 필요가 있기 때문이다. 동물의 뇌가 어떤 방식으로 시각정보를 물리적으로 보고 처리하는지 이해하기 위해서 생물학, 심리학 등까지 알아야할 수도 있다.
CS231n 첫 시간에 소개한 사람은 Fei-Fei Li 교수님의 Stanford Vision Lab의 박사 과정 학생인 Justin Johnson이다. 기계학습과 컴퓨터과학에 관련된 연구들을 진행하고 있고 신경과학과 인지과학에 관련된 분야도 연구한다고 한다.
관련된 다른 강의들은 위를 참고하자. 이번 CS231n 수업은 신경망(Neural Network), 특히 CNN과 관련된 세부 분야를 중점적으로 배우게 될 것이다. 첫 시간에는 오늘날의 CNN을 발전시킨 기존연구의 역사와 흐름을 이해하도록 한다.
computer vision의 역사를 알아보겠다. 5억 4천만년 전에 천만년이라는 아주 짧은 시기 동안에 생물의 종이 폭발적으로 늘어났다. 이것을 진화의 빅뱅이라고 부르고 수많은 이론 중 가장 설득력 있는 것은 최초의 눈이 생겨났다는 것이다. 볼 수 있다면 삶이 훨씬 더 능동적이게 되기 때문이다. 눈은 진화적 군비경쟁을 촉발시켰고 생물들은 하나의 종으로 살아남으려면 빠르게 진화해야만 했다. 현재는 비전이 거의 모든 동물, 특히 지능을 가진 동물들의 가장 큰 감각 체계로 발전했고, 인간은 대뇌 피질의 50% 가량의 뉴런이 시각처리에 관여하는 만큼 가장 중요하다.
이어서 인간이 만든 공학적 비전인 카메라의 역사에 대해 알아보겠다. 오늘날 우리가 알고 있는 초창기의 카메라는
1600년대 르네상스 시대의 카메라는 Obscura이다. 이 카메라는 핀홀 카메라 이론을 기반으로 했는데, Obscura는 생물학적으로 발전한 초기의 눈과 상당히 유사하다. 빛을 모아주는 구멍이 하나 있고, 카메라 뒤편의 평평한 면은 정보를 모으고, 이미지를 투영한다.
카메라는 점점 발전해갔고, 그동안 생물학자들은 비전의 매커니즘을 연구했다. 인간과 동물의 비전의 연구에 가장 영향력 있고 컴퓨터 비전에도 영감을 준 한 연구가 위의 1950/1960년대 전기생리학을 이용한 Hubel과 Wiesel의 연구이다.
포유류의 시각적 처리 메커니즘을 알기 위해 고양이의 뇌를 연구했다. 일차 시각 피질이 있는 고양이 두뇌 뒷면에 전극 몇 개를 꽂고, 어떤 자극을 줘야 일차 시각 피질의 뉴런들이 격렬하게 반응하는지 관찰했다.
그래서 일차 시각 피질에는 다양한 종류의 세포가 있다는 것을 알아냈고, 그 중 경계가 움직이면 이에 반응하는 세포들이 가장 중요하면서도 단순했다. 시각 처리가 처음에는 단순한 구조로 시작되며 그 정보가 통로를 거치면서 점점 복잡해진다는 것이 중요한 발견이고 computer vision의 시작을 이끌었다.
본격적인 컴퓨터 비전의 역사는 60년대 초반의 Block World라는 Larry Roberts의 연구로 시작된다.
이 연구에서는 우리 눈에 보이는 사물들을 기하학적 모양으로 단순화시켰고 우리 눈에 보이는 세상을 인식하고 그 모양을 재구성하는 것을 목표로 했다.
1966년에는 "The Summer Vision Project"라는 MIT 여름 프로젝트가 진행되었고, 시각 시스템의 전반을 구현하기 위해서 프로젝트 참가자들을 효율적으로 이용한다는, 대부분의 시각 체계를 구현해내려는 목표를 세운 것이다.
거의 이 프로젝트로 컴퓨터 비전이라는 분야가 불타올랐다고 할 수 있고, 아직 해야할 일이 많으며, 인공지능 분야에서 가장 중요하고 빠르게 성장하는 분야로 손꼽히고 있다.
또 주목해야 할 것은 1970년대의 David Marr의 연구이다. MIT의 비전 과학자였던 그는 70년대 후기에
비전이 무엇이고, 어떤 방향으로 컴퓨터 비전이 나아가야하고, 컴퓨터가 비전을 인식하게 하기 위해 어떤 방향으로 알고리즘을 개발해야하는지를 다룬 책을 발행했다.
우리가 눈으로 받아들인 이미지를 최종적인 full 3D 표현으로 만드려면 몇 단계의 과정을 거쳐야한다.
첫 단계는 Primal Sketch이고, 이 과정은 경계(edges), 막대(bars), 끝(ends), 가상의 선(virtual lines), 커브(curves), 경계(boundaries)가 표현되는 과정으로, 신경과학자들에게 영감을 받은 것들이다. Hubel과 Wiesel은 시각처리의 초기 단계가 경계와 같은 단순한 구조와 아주 밀접한 관계가 있다고 했다.
두번째 단계는 2.5-D sketch이고, 시각 장면을 구성하는 표현(surfaces) 정보, 깊이 정보, 레이어, 불연속 점과 같은 것들을 종합한다.
세번째 단계는 3D 화면이 본격적으로 나오는 것으로, 앞의 단계들을 모아서 surface and volumetric primitives 형태의 계층적으로 조직화된 최종적인 3D 모델을 만들 수 있다.
또다른 70년대의 연구를 보자. 장난감같은 단순한 블록 세계를 뛰어넘어서 실제 세계를 인식하고 표현할 수 있을지의 의문을 가진 것이다. 예전에는 데이터도 매우 적었고, 컴퓨터 보급, 속도 모두 열악했기 때문에 어떻게 대상을 인지하고 표현할지 막막했다. Stanford와 SRI에서 과학자들이 생각해낸 비슷한 아이디어는 "generalized cylinder"와 "pictorial structure"이다. 둘 다 "모든 객체는 단순한 기하학적 형태로 표현할 수 있다"는 생각이 기본이다.
"Generalized Cylinder"는 사람을 만들 때 원통 모양을 조합해서 만들 수 있다는 것이고, "pictorial structure"은 주요 부위와 관절로 표현할 수도 있다. 복잡한 객체를 단순한 모양과 기하학적인 구성으로 단순화시킨다는 점에서 이전에 제시했던 문제를 해결한다.
80년대의 David Lowe는 단순한 구조로 실제 세계를 재구성/인식하기 위해 또 고민했다. 위와 같이 면도기를 인식하기 위해서 면도기를 선(lines)과 경계(edges), 직선(straight lines), 그리고 이들의 조합으로 구성한 것이다.
이렇게 60, 70, 80년대에는 컴퓨터 비전으로 어떤 일을 할 수 있을까 고민을 많이 했다. 위의 방법들은 매우 획기적이긴 하지만 현실 세계에서 잘 동작하기에는 어려움이 있었다. 그렇기 때문에 우선 컴퓨터 비전 연구자들은 객체 인식이 너무 어렵다면 객체 분할부터 하기로 한다. 객체 분할(object segmentation)은 이미지의 각 픽셀을 의미 있는 방향으로 군집화하는 방법이다. 객체 분할은 이미지의 각 픽셀을 의미 있는 방향으로 군집화하는 방법이다. 위의 예시에서는 픽셀을 모아놔도 사람을 정확히 인식할 수 없을수도 있지만 배경인 픽셀과 사람이 속해있을지도 모르는 픽셀을 가려낼 수는 있다.
이것을 영상분할(image segmantation)이라고 하고, Berkley 대학의 Jitendra Malik 교수와 그의 제자인 Jianbo Shi의 연구인 Normalized Cut이다. 이 연구는 영상분할 문제를 해결하기 위해서 그래프 이론을 도입했다.
컴퓨터 비전에서 유난히 발전 속도가 빨랐던 분야인 Face Detection은 위의 사진처럼 "얼굴인식"을 하는 것이다. 인간에게 가장 중요한 부위 중 하나가 바로 얼굴이고, 사람들을 구분하는 가장 처음 척도인만큼 수요가 커진 것이다.
1999/2000년대에는 기계학습, 특히 통계적 기계학습이 점점 발전해가기 시작했고, "Support Vector Machine", "Boosting", "Graphical models", 초기 Neural Network 등이 나왔다. 그 중 가장 큰 기여를 한 연구는 2001년의 Paul Viola와 Michael Jones의 AdaBoost를 사용한 실시간 얼굴인식이다. 그 때 당시 컴퓨터가 매우 느렸지만, 거의 실시간으로 결과가 나왔고, 이에 이어 2006년에는 후지필름에서 실시간 얼굴인식을 지원하는 최초의 디지털카메라를 선보였다. 기초 과학 연구의 성과를 실제 응용 제품으로 가장 빠르게 전달한 사례로 실생활에서도 매우 필요로 한다는 것을 알 수 있다.
객체 인식을 더 잘 할 수 있도록 연구는 계속되었다. 90년대 후반부터 2010년도까지 많이 쓰였던 알고리즘은 "특징기반 객체인식 알고리즘"이었는데, 이 시절 나온 유명한 알고리즘이 David Lowe의 SIFT feature이다. 위의 예시의 정지 표시판에서 보자면 정지 표시판들을 서로 매칭하기는 카메라 앵글이 변할 수 있고, 겹치거나 화각, 빛, 객체 자체도 변할 수 있기 때문에 상당히 어렵다. 하지만 객체의 특징 중 일부는 다양한 변화에 좀 더 강인하고 불변하기 때문에 객체인식은 이런 중요한 특징들을 찾아내고 그 특징들을 다른 객체에 매칭시키는 것으로, 이미지 전체를 매칭하는 것보다 쉬워졌다.
이미지에 존재하는 특징을 이제 사용할 수 있게 되면서 더 나아가 장면 전체를 인식할 수 있게 되었다. 위의 예시인 Spatial Pyramid Matching은 우리가 특징들을 잘 뽑아낼 수만 있다면 그 특징들이 일종의 단서를 제공할 수 있다는 것으로, 이미지가 풍경인지, 부엌인지, 고속도로인지를 알 수 있는 것이다. 그래서 이미지 내의 여러 부분과 여러 해상도에서 추출한 특징을 하나의 특징 기술자로 표현하고 Support Vector Algorithm을 적용한다.
이렇게 여러 특징들을 잘 조합해려는 시도들 중 사람인식에 관련된 연구들도 많았다. 사람인식과 관련된 연구들은 어떻게 해야 사람의 몸을 현실적으로 모델링할 수 있을지에 관련된 연구이다. 그것이 "Histogram OF Gradients"와 "Deformable Part Models"이다. 점점 시간이 지날수록 인터넷과 디지털 카메라의 품질이 좋아지기 때문에 실험 데이터의 질도 좋아진다.
2000년대 초에는 컴퓨터 비전의 발전 방향을 객체인식으로 확립했다. 객체인식 기술의 발전 단계를 측정하기 위해 Benchmark Dataset을 모으는데, 그 중 하나가 PASCAL Visual Object Challenge(VOC)이다. 이 데이터셋에는 20개의 클래스가 있고 각 클래스당 수천 수만 개의 이미지들이 있으며 다양한 연구 집단의 알고리즘의 성능을 평가해서 얼마나 객체인식 기술이 발전했는지 확인할 수 있는 것이다.
이에서 더 나아가 Princeton과 Stanford에서는 Graphical Model, SVM, AdaBoost같은 기계학습 알고리즘들에 Overfitting 현상이 일어나는 것으로 판단되어 이 세상의 모든 객체들을 인식하기 위해서 더 노력했다. 그 원인은 시각 데이터가 너무 복잡하다는 것이었는데, 모델의 입력은 복잡한 고차원 데이터였고, 이로 인해 모델을 fit하려면 더 많은 파라미터가 필요해진 것이다. 학습 데이터가 부족하면 Overfitting이 더 빠르게 발생하고 일반화 능력이 떨어지는 것이다. 그래서 이 세상의 모든 것들을 인식하는 목표와 기계학습의 Overfitting을 해결하려는 목표가 있었다.
ImageNet 프로젝트는 위의 목표를 담아서 구할 수 있는 모든 이미지를 담은 가장 큰 데이터셋을 만드려고 한 것이다. ImageNet에서는 수십억 장의 인터넷 이미지를 다운받은 뒤 수천가지의 객체 클래스가 있는 WordNet이라는 Dictionary로 정리했다. Amazon Mechanical Turk에서 사용하는 Clever Crowd Engineering trick인데 이미지의 정렬, 정제, 레이블 등을 제공하는 플랫폼이다. 그래서 ImageNet에는 대략 15만 장에 달하는 이미지와 22만 가지의 클래스 카테고리를 보유할 수 있었다. 이 ImageNet을 사용해서 Benchmark를 하기 위해서 2009년부터 ILSVRC(ImageNet Large Scale Visual Recognition Challenge)라는 국제 규모의 대회를 주최하기 시작했다. 1000개의 객체에서 140만 개의 test set 이미지를 엄선했고, 이미지 분류 문제를 푸는 알고리즘들을 테스트하는 목적을 가지고 있다. 참가자들은 정답 후보를 총 5가지 고를 수 있었고, 5개 중 정답이 있으면 맞춘 것이다.
2010년도부터 2015년도까지의 결과는 위와 같고, x축은 연도를, y축은 오류율을 나타낸다. 오류율은 점점 낮아지다가 2012년도의 오류율은 사람보다 낮기에 이르렀다. 10% 가량 오류율을 확 낮춘 2012년의 방법은 Convolutional Neural Network(CNN)이다. CS231에서는 이 CNN을 한 학기동안 배울 것이고, CNN을 Deep Learning이라고 부르기도 한다.
우리의 CS231 수업에서는 중점적으로 Image Classification을 배운다. 그에서 더 나아가 Object Detection, Image Captioning까지 다룬다고 한다. Object Detection은 이미지에 무엇이 있는지 classifiaction하는 것에서 더 나아가서 그것이 어디에 있는지까지 알아내야 한다. Image Captioning은 이미지가 입력으로 주어지면 이미지를 묘사하는 적절한 문장을 생성해야 한다.
지난 몇 해간 ImageNet Challenge의 우승자들을 살펴보면 2011년의 Lin et al의 알고리즘은 계층적(hierarchical)이다. 특징들을 뽑고, 지역 불변 특징들을 계산하고, pooling을 거치는 여러 단계를 거쳐서 최종적인 특징 기술자를 Linear SVM에 태운다. edges를 뽑고 불변 특징의 개념이 있는 만큼 아직 계층적이다.
2012년에 Toronto의 Jeff Hinton 교수님의 연구실의 PhD였던 Alex Krizhevsky와 Ilya Sutskever는 7-layer Convolutional Neural Network를 만들어서 AlexNet 또는 Supervision이라고 불리고, LSVRC'12에서 좋은 성과를 기록했다.
이후에도 매번 Neural Network가 우승했고, 시간이 갈수록 점점 더 깊어져 2014년에는 GoogleNet, Oxford의 VGG가 19층이 있었고, 2015년의 MSRA의 Residual Network는 152개의 층을 가지게 되었다. 층이 많아지면 성능은 좋아지지만 GPU 메모리를 더 필요로 하는 문제점이 있다.
CNN이 2012년에 우승하긴 했지만 아주 오래 전부터 연구되어오긴 했다. 1998년에 Jan LeCun과 Bell Labs와의 공동 과제를 통해 숫자인식을 위해 CNN을 구축했고, 자필 수표 자동 판독과 우편주소 자동인식에 CNN을 적용하는 것을 목표로 했다. 이미지를 입력으로 받아서 숫자와 문자를 인식할 수 있는 CNN을 만들었고 2012년의 AlexNet의 구조와 유사하다. raw pixel을 입력받아 여러 convolutional layer을 거치고 sub-sampling과 fully connected layer까지 거친다.
예전부터 연구되어왔던 CNN이 최근에 더 관심을 받는 것은 여러 요인들이 있다. 무어의 법칙 때문에 컴퓨터의 계산속도가 매년 빨라져서 계산능력이 향상되었다. 또한, graphics processing units(GPU)도 발전했다. GPU는 아주 강력한 병렬처리가 가능해서 계산 집약적인 CNN 모델을 고속으로 처리하는 데 딱이다. 이렇게 계산이 더 많이 가능해서 연구자들이 더 많은 아키텍처를 연구할 수 있었고, 기존의 고전 알고리즘들의 크기만 키워도 더 나은 성능을 보이기도 했다고 한다. 그래서 연산량의 증가는 딥러닝의 역사에서 아주 중요한 요소이다.
데이터의 차이도 존재했는데 CNN 알고리즘이 잘 동작하려면 아주 많은 레이블이 매겨진 이미지가 필요하기 때문이다.
컴퓨터 비전은 실제 사람과 같은 능력까지 원한다. 단순히 사진을 보고 물체를 식별해내고 그 물체가 있는 위치에 사각형을 치는 것보다 사람들은 더 많은 일을 할 수 있다.
Semantic Segmentation 즉 Perceptual Grouping 같은 문제들이 해결 가능하다. 이미지 전체를 레이블링하는 것 대신 모든 픽셀 하나하나를 이해하는 것이다.
3D understanding은 실세계를 재구성하는 문제로 행동 인식, 증강현실, 가상현실 등을 다루려고 한다.
저스틴이 수행 중인 프로젝트의 일부인 Visual Genome이다. 실제 세상에서 복잡한 것들을 일부 포착해내려고 시도하고 있고, 이미지에 박스만 치는 것이 아니라 커다란 의미론적 그래프로 표현하는 것이다. 객체를 식별하는 것을 넘어서 그 장면에서의 객체 간의 관계, 객체의 성격, 행동 등을 나타낼 수 있다. 그래서 이런 방식을 이용한다면 실제 세상을 포착하는 것이 용이해지는 것이다.
Fei Fei 교수님이 칼텍에서 박사과정을 할 때 쓴 논문인데 임의의 사람들을 붙잡아서 위같은 사진을 아주 잠시 동안만 보여주고 어떤 사진인지 설명하라고 한 것인데, 오른쪽과 같이 긴 문장을 작성할 수 있었다고 한다. 즉, 인간은 이미지를 짧은 시간만 보더라도 이렇게 묘사할 수 있는 것이고, 시간이 더 주어지거나 외부 지식과 경험이 가미된다면 더 많은 정보를 나타낼 수 있다. 이렇게 이미지의 내용을 아주 풍부하고 깊게 이해하는 것은 컴퓨터 비전 분야가 진정으로 추구하는 방향이다.
또 다른 예를 보겠다. 이 사진이 웃긴 이유는 한 사람이 몸무게를 잴 때 뒤의 사람이 몰래 밟아서 무게가 더 나온 것에 놀라게했기 때문이다. 또한, 뒷 사람이 미국의 대통령이었고 존경받는 정치인이어야 할 Barack Obama이라는 사실도 동료에게 장난을 치지 않을 것 같아서 더 인상적인 것이다. 이렇게 이미지 한 장에 정말 많은 정보들이 담겨져 있고, 결국에 컴퓨터 비전 알고리즘이 이런 것까지 인식하기를 바란다.
컴퓨터 비전은 의학 진단, 자율주행, 로보틱스 등 더 많은 분야에 적용될 수 있고 결국에 인간의 지능을 이해하기 위한 여러 핵심 아이디어들을 집대성하는 일종의 실마리가 될 수도 있다.
위의 방법으로 컨텍을 할 수 있다고 한다.
'AI > CS231n Lectures' 카테고리의 다른 글
[CS231n] 11. Detection and Segmentation (0) | 2020.02.16 |
---|---|
[CS231n] 2. Image Classification (0) | 2020.01.31 |