7기

카메라 딥러닝 객체인식 [객체인식과 CNN]

KAU 2022. 2. 12. 17:01

작성자: 황태언

컴퓨터 비전의 주 목적은 이미지를 이해하는 것입니다. 픽셀로부터 정보를 추출하는 것이 목적입니다. 이것들은 객체 위치나 개수 등일 것입니다. 그에 따라 애플리케이션 분야는 많습니다. 객체 분류, 식별, 탐지 및 위치 측정, 객체 및 인스턴스 분할, 자세 추정, 동영상 분석, 장면 복원 등 상당하게 많은 분야가 있습니다.

 

객체인식이 무엇인가?

객체인식은 이미지 (비디오) 같은 영상 데이터 안에서 물체를 라벨링하고 인식하는 것을 의미합니다. (Classification + Localization 개념) 무조건 카메라에서 나오는 데이터는 아닙니다. (lidarpoint cloud data etc…) 이번 조사에서는 object detection 연구나 트렌드 위주로 설명하겠습니다.

자율주행을 위해서라면 object detection 과정은 정확도 만이 아니라 real-time으로 수행되는 것이 상당히 중요합니다. 그렇기에 객체 탐지에 yolo(you look only once)가 꾸준히 사용되는 이유도 여기에 있다고 생각합니다.

 

-       전통적인 접근법

카메라라고 하면 영상처리를 기반으로 detection 할 수 있습니다. 입력 이미지를 전처리하고, 관심 영역을 탐지한 후에 탐지된 개체를 분류하게 됩니다. 카메라 이미지 데이터는 픽셀 당 보통 discrete하게 r,g,b (8bit)으로 표현됩니다. 이 픽셀 데이터를 그레이 스케일 등으로 변환하는 등의 과정을 취하고 edge detection 같은 방법으로 도형을 검출하는 등의 방법이 있습니다.

또한 대표적인 예시로 2005년에 HOG detector [1]가 제안되었고 굉장히 유명한 알고리즘입니다. 딥러닝을 이용한 객체인식이 주된 내용이기 때문에 관련 설명은 생략하겠습니다.   

 

-       딥러닝 기반 접근법

하드웨어의 발전으로 인해서 learning 계열이 최근에 엄청나게 핫한 분야가 되고 있습니다. 최근 급격하게 발전하는 CV 분야도 최신 알고리즘은 거의 러닝 기반으로 하고 있습니다. 딥러닝 기반은 훈련을 통해 시각적 인지를 모델링 하기 때문에 대응 능력이 좋다는 등의 장점이 있습니다. 지난 딥러닝 기반 알고리즘은 주로 CNN(Convolution neural network)를 기반으로 이루어졌습니다. 아직 2022년의 유명 학회는 제대로 나오지 않았으므로 최근 2020년대의 동향을 보면 주로 자연어 처리에서 많이 사용되었던 transformerViT를 선두로 비전 분야 활용에도 많이 연구되고 있습니다. [2]  

-       Why CNN?

CNN이 사용되기 전 Fully connected layer가 사용되었을 때, 매개변수가 상당하게 많고 공간 추론의 부족성(실제 이미지 데이터는 가까운 픽셀 간 상관관계가 높습니다.) 등의 문제를 가지고 있었습니다. CNN은 기존 Fully Connected layer에 비해 밑과 같은 차별성을 가지게 됩니다.

1.     입출력 데이터의 기존 형상 유지

2.     공간 정보를 유지하면서 인접 이미지와의 특징을 효과적으로 인식

3.     많은 필터로 이미지 특징 추출 및 학습 가능

4.     Pooling layer

5.     파라미터 수 매우 줄일 수 있는 메리트

Etc...

CNN 초기 개발 버전인 LeNet 논문[3]의 사진을 인용하였습니다.

 

 

CNN에서 중요한 용어 간략 설명

CNN은 기본적으로 알 필요가 있기에 간단한 개념 설명을 하겠습니다. 다만, 딥러닝을 설명할 때 gradient descent나 기존 Fully connected에서 다룬 내용은 생략합니다.

1.     Convolution: 한글로 합성곱입니다. 하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 수학 연산자라고 위키에서 정의하고 있습니다. 합성곱 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

이미지 출처: http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution

           이 결과로 특징 맵을 만들 수 있습니다.

2.     Filter (Kernel) and stride

Filter는 위의 Convolution 설명 이미지에서 나왔 듯이 Input 이미지와 합성곱 연산을 하게 되는 것입니다. Fully connected layer에서 각 노드 사이의 가중치와 비슷한 개념입니다. 다만, 필터가 지정된 간격으로 이동하면서 전체 입력데이터와 합성곱을 하여 특징 맵을 만드는 것입니다. Stride는 간단히 설명하면 필터가 몇 칸씩 뛸 것 인가입니다. 예를 들어서 stride2로 설정된다면 필터가 2칸씩 이동하면서 특징 맵을 추출하게 됩니다. 아래 그림은 이에 대한 설명입니다.

이미지 출처: What are Convolutional Neural Networks? | IBM

3.     Padding

FilterStride 작용으로 특징 맵 크기가 입력데이터보다 작게 됩니다. 그렇기에 주위에 패딩을 채워 넣어서 이를 방지합니다. 대개 0으로 가장자리를 채웁니다.

4.     Pooling

Convolution 연산이 아니라 필터 크기에 따라 그 지역의 평균 값이나 최대 값 등을 추출하게 됩니다.

 

이미지 출처: Convolutional neural network - Wikipedia

이상의 깊은 내용은 관련 논문이나 정리 글들을 참고하면 좋을 것 같습니다.

손실 함수에 대해서는 각 논문마다 설정하는 것이 다릅니다. 손실함수를 정의하고 optimal 한 결과를 찾는 것이 러닝의 목적이 됩니다. 최적화 방법 중 하나가 머신러닝에서 통상적으로 쓰이는 gradient descent인 것이고 이가 여러 개 있는 particle swarm이라던지 genetic algorithm 같은 방식도 최적화 문제를 푸는 방법입니다. 뒤에서 다룰 유명한 detection 알고리즘인 faster R-CNN이나 YOLO는 손실함수를 어떻게 정의하였는지 알아보도록 할 것입니다.

 

CNN의 대표적인 network

다음은 간략하게 CNN을 활용한 대표적인 네트워크들을 설명해보겠습니다. 깊게 다루진 않을 것이고 깊은 내용은 Reference 논문을 활용하시면 좋을 것 같습니다.

 

1.     AlexNet [4]

Convolution 5개와 fully connected layer 3개로 구성되어 있습니다. 합성곱층은 약 2만 개의 가중치를 가지고, 완전연결층은 약 6500만 개의 매개변수를 가집니다. ImageNet이라는 큰 데이터베이스와 GPU를 활용하여 병렬처리를 하였고 ReLU 활성함수를 사용하였으며 과적합 방지 여러 규제 기법 등을 적용하였습니다.

2.     VGG-16 [5]

큰 크기의 커널이 여러 개의 작은 크기 커널로 분해될 수 있다는 아이디어가 핵심입니다. 작은 필터로 인해서 가중치 개수를 줄였고 신경망은 깊어졌습니다. 컨볼루션층 13층과 완전연결층 3층으로 구성되어 있습니다.

3.     GoogleNet [6]

인셉션 모듈을 사용하였습니다. 이는 다양한 크기의 필터들을 사용한 컨볼루션 연산을 하여 다양한 특징을 추출하는 것을 의미합니다. 인셉션 모듈을 9개 결합하였으며 층이 깊어졌고 완전연결층이 1개입니다.

 

4.     ResNet [7]

4개 중에 가장 유명하고 중요하지 않을까라는 개인적인 생각입니다. 현재까지 이 네트워크를 기반으로 한 backbone이 상당히 많습니다. 그렇기에 알아두시면 좋을 것 같습니다. 여기서는 잔류학습이라는 개념을 이용하여 성능 저하를 피하고 층수를 대폭 늘렸습니다. Gradient vanish 문제를 해결하였습니다.

Residual Block4가지의 주요 기술이 있습니다.

1.     연속된 3x3 filter

2.     Bottleneck 구조

3.     Residual Connection

4.     Batch Normalization