Convolutional Neural Network

꼭 알아야 할 3가지 사항

Convolutional neural network(CNN 또는 ConvNet)은 수동으로 특징을 추출할 필요 없이 데이터로부터 직접 학습하는 딥러닝을 위한 신경망 아키텍처입니다.

CNN은 영상에서 객체, 얼굴, 장면 인식을 위한 패턴을 찾을 때 특히 유용합니다. 오디오, 시계열, 신호 데이터와 같이 영상 이외의 데이터를 분류하는 데도 효과적입니다.

자율주행 차량 및 얼굴 인식 응용 분야와 같이 객체 인식컴퓨터 비전이 필요한 응용 분야에서는 CNN을 많이 사용합니다.

CNN을 유용하게 만들어 주는 요소

CNN은 다음 세 가지 중요한 요인으로 인해 딥러닝에서 널리 사용됩니다.

  • CNN은 수동 특징 추출의 필요성을 제거합니다. 특징은 CNN에 의해 직접 학습됩니다.
  • CNN은 고도로 정확한 인식 결과를 생성합니다.
  • CNN은 새로운 인식 작업을 위해 다시 훈련시킬 수 있으므로 기존 신경망을 활용할 수 있습니다.

CNN은 영상 및 시계열 데이터에서 주요 특징을 찾아내고 학습하기 위한 최적의 아키텍처를 제공합니다. CNN은 다음과 같은 응용 분야에서 핵심 기술로 사용됩니다.

  • 의료 영상: CNN은 수천 건의 병리학 보고서를 검토하여 영상에서 암 세포의 유무를 시각적으로 검출할 수 있습니다.
  • 오디오 처리: 마이크가 있는 모든 기기에서 키워드 검출을 사용하여 특정 단어나 문구(‘Hey Siri!’)가 발화되었을 때 이를 검출할 수 있습니다. CNN은 키워드를 정확하게 학습하여 어떤 환경에서도 다른 모든 문구는 무시하고 키워드를 검출할 수 있습니다.
  • 정지 신호 검출: 자율주행에서는 표지판이나 다른 객체의 존재 여부를 정확하게 검출하고 출력을 바탕으로 결정을 내리는 데 CNN을 사용합니다.
  • 합성 데이터 생성: GAN(생성적 적대 신경망)을 사용하여 얼굴 인식 및 자율주행을 비롯한 딥러닝 응용 분야에서 사용할 새로운 영상을 생성할 수 있습니다.

자세히 알아보기

CNN의 작동 방식

Convolutional neural network은 수십 또는 수백 개의 계층을 가질 수 있으며, 각 계층은 영상의 서로 다른 특징을 검출합니다. 각 훈련 영상에 서로 다른 해상도의 필터가 적용되고, 컨벌루션된 각 영상은 다음 계층의 입력으로 사용됩니다. 필터는 밝기, 경계와 같이 매우 간단한 특징으로 시작하여 객체를 고유하게 정의하는 특징으로 복잡도를 늘려갈 수 있습니다.

특징 학습, 계층 및 분류

CNN은 다른 신경망과 마찬가지로 입력 계층, 출력 계층, 그리고 그 사이의 여러 은닉 계층으로 구성됩니다.

이러한 계층은 해당 데이터의 고유한 특징을 학습한다는 의도로 데이터를 변경시키는 연산을 수행합니다. 가장 일반적인 3가지 계층으로 컨벌루션 계층, 활성화 또는 ReLU 계층, 풀링 계층을 들 수 있습니다.

  • 컨벌루션 계층은 입력 영상을 일련의 컨벌루션 필터에 통과시킵니다. 각 필터는 영상에서 특정 특징을 활성화합니다.
  • ReLU(Rectified Linear Unit) 계층은 음수 값은 0에 매핑하고 양수 값은 그대로 두어서 더 빠르고 효과적인 훈련이 이루어지도록 합니다. 이때 활성화된 특징만 다음 계층으로 전달되므로 이를 활성화라고도 합니다.
  • 풀링 계층은 비선형 다운샘플링을 수행하여 신경망이 학습해야 하는 파라미터의 개수를 줄임으로써 출력을 단순화합니다.

이러한 연산이 수십 또는 수백 개의 계층에 대해 반복되며, 각 계층은 서로 다른 특징을 식별하도록 학습합니다.

여러 컨벌루션 계층이 있는 신경망의 예. 각 훈련 영상에 서로 다른 해상도의 필터가 적용되고, 컨벌루션된 각 영상은 다음 계층의 입력으로 사용됩니다.

공유 가중치 및 편향

CNN은 전통적인 신경망과 마찬가지로 가중치와 편향이 있는 뉴런을 갖습니다. 모델은 훈련 과정에서 이러한 값을 학습하고, 새로운 훈련 표본이 입력될 때마다 매번 이러한 값을 지속적으로 업데이트합니다. 그러나 CNN의 경우에는 주어진 계층의 모든 은닉 뉴런에 대해 가중치 및 편향 값이 모두 같습니다.

이는 모든 은닉 뉴런이 영상의 서로 다른 영역에 있는 동일한 특징(경계나 블롭 등)을 검출함을 의미합니다. 따라서 신경망은 영상에 있는 객체의 평행 이동을 허용합니다. 예를 들어, 자동차를 인식하도록 훈련된 신경망은 자동차가 영상의 어느 곳에 있어도 인식할 수 있습니다.

분류 계층

CNN 아키텍처는 여러 계층에 있는 특징을 학습한 후 분류 계층으로 넘어갑니다.

마지막에서 두 번째 계층은 K 차원의 벡터를 출력하는 완전 연결 계층입니다. 여기서 K는 신경망이 예측할 수 있는 클래스의 개수입니다. 이 벡터는 분류 대상 영상의 각 클래스에 대한 확률을 포함합니다.

CNN 아키텍처의 마지막 계층은 소프트맥스와 같은 분류 계층을 사용하여 분류 출력을 제공합니다.

MATLAB을 사용한 CNN의 설계 및 훈련

MATLAB®을 Deep Learning Toolbox™와 함께 사용하면 CNN을 설계, 훈련 및 배포할 수 있습니다.

MATLAB은 딥러닝 커뮤니티에 있는 다량의 사전 훈련된 모델을 제공하며, 이는 새로운 데이터셋으로부터 특징을 학습하고 식별하는 데 사용할 수 있습니다. 전이 학습이라고 하는 이 방법은 처음부터 시작하지 않고도 딥러닝을 적용할 수 있는 편리한 방법입니다. GoogLeNet, AlexNet, Inception과 같은 모델은 전문가들이 구축한 검증된 아키텍처를 활용하여 딥러닝을 살펴볼 수 있는 출발점을 제공합니다.

신경망의 설계 및 훈련

심층 신경망 디자이너를 사용하면 사전 훈련된 모델을 가져오거나 새 모델을 처음부터 구축할 수 있습니다.

딥러닝 신경망을 대화형 방식으로 구축, 시각화 및 편집하는 심층 신경망 디자이너.

앱에서 직접 신경망을 훈련시키고 정확도, 손실, 검증 메트릭 플롯을 사용하여 훈련을 모니터링할 수도 있습니다.

전이 학습에 사전 훈련된 모델 사용하기

전이 학습을 통해 사전 훈련된 신경망을 미세 조정하는 것이 처음부터 훈련시키는 것보다는 일반적으로 훨씬 더 빠르고 쉽습니다. 전이 학습에는 최소한의 데이터와 연산 리소스가 사용됩니다. 전이 학습은 한 가지 유형의 문제로부터 알게 된 지식을 사용하여 비슷한 문제를 해결합니다. 사용자는 사전 훈련된 신경망에서 시작하여 이를 새로운 작업을 학습하는 데 사용할 수 있습니다. 전이 학습의 이점은 사전 훈련된 신경망이 수많은 특징을 이미 학습했다는 데 있습니다. 이러한 특징은 다양한 기타 유사한 작업에 적용할 수 있습니다. 예를 들어, 수백만 개의 영상에서 훈련된 신경망을 가져와서 수백 개의 영상만 사용하여 새로운 객체 검출을 위해 다시 훈련시킬 수 있습니다.

GPU를 사용한 하드웨어 가속

Convolutional neural network은 수백, 수천, 나아가 수백만 개의 영상에 대해 훈련됩니다. 다량의 데이터와 복잡한 신경망 아키텍처로 작업할 때 GPU를 사용하면 모델을 훈련시키는 데 소요되는 처리 시간을 크게 줄일 수 있습니다.

딥러닝과 같은 계산 집약적인 작업을 가속화하는 NVIDIA® GPU.

자세히 알아보기


CNN을 사용하는 응용 분야

객체 검출

객체 검출은 영상과 비디오에서 객체를 찾고 분류하는 과정입니다. Computer Vision Toolbox™는 YOLO 및 Faster R-CNN을 사용하여 딥러닝 기반 객체 검출기를 생성하는 훈련 프레임워크를 제공합니다.

딥러닝을 사용한 객체 검출

이 예제에서는 딥러닝과 R-CNN(Regions with Convolutional Neural Networks)을 사용하여 객체 검출기를 훈련시키는 방법을 다룹니다.

키워드 검출

음성-텍스트 변환의 한 가지 응용 분야로 키워드 검출을 들 수 있습니다. 키워드 검출은 특정 키워드 또는 문구를 인식하여 이를 지시어로 사용할 수 있습니다. 널리 사용되는 예로 기기 켜기와 조명 켜기를 들 수 있습니다.

딥러닝을 사용한 키워드 검출

이 예제에서는 MATLAB을 사용하여 오디오에서 음성 명령의 존재 여부를 식별하고 검출하는 방법을 보여줍니다. 이는 음성 보조 기술에서 사용할 수 있습니다.

의미론적 분할

CNN은 의미론적 분할에서 사용되어 영상의 각 픽셀을 식별하고 이에 대응하는 클래스 레이블을 부여합니다. 의미론적 분할은 자율주행, 산업 검사, 지형 분류, 의료 영상과 같은 응용 분야에서 사용될 수 있습니다. Convolutional neural network은 의미론적 분할 신경망을 구축하기 위한 기반이 됩니다.

딥러닝을 사용한 의미론적 분할

이 예제에서는 MATLAB을 사용하여 영상의 각 픽셀을 식별하고 이에 대응하는 레이블을 부여하는 의미론적 분할 신경망을 구축하는 방법을 보여줍니다.

MATLAB은 딥러닝과 관련된 모든 작업을 수행하기 위한 툴과 기능을 제공합니다. CNN을 사용하여 신호 처리, 컴퓨터 비전, 통신 및 레이더 분야의 워크플로를 개선할 수 있습니다.


CNN에 대해 더 자세히 알아보기

영상 분석에 CNN을 사용할 수 있도록 지원하는 제품에는 MATLABComputer Vision Toolbox™Statistics and Machine Learning Toolbox™와 Deep Learning Toolbox가 있습니다.

Convolutional neural network을 사용하려면 Deep Learning Toolbox가 필요합니다. 훈련 및 예측은 CUDA® 지원 GPU(Compute Capability 3.0 이상)에서 지원됩니다. GPU를 사용하는 것이 적극 권장되며, 이를 위해서는 Parallel Computing Toolbox™가 필요합니다.

비디오

예제 및 방법

소프트웨어 참조