이미지 인식은 선형 회귀 및 유사성 비교와 같은 훨씬 간단한 방법을 사용하여 수행되었습니다. 결과는 분명히 좋지 않았고 손으로 쓴 알파벳을 인식하는 간단한 작업조차도 어려웠습니다. CNN(컨볼루션 신경망)은 이미지를 인식할 때 인간 두뇌의 신경 활동을 느슨하게 시뮬레이션하는 저렴한 계산 방법을 제공함으로써 우리가 전통적으로 하던 것에서 한 단계 더 발전해야 합니다.
컨볼루션 신경망 개요
우리가 다양한 물체를 인식하는 방식과 매우 유사하게, 컴퓨터 알고리즘은 입력을 일반화하고 이전에 본 적이 없는 이미지를 판단하기 전에 수백만 개의 이미지를 거쳐야 합니다.
컴퓨터는 모든 이미지를 픽셀이라고 하는 2차원 숫자 배열로 봅니다. 이미지의 개체를 식별하기 위해 컴퓨터는 특수한 종류의 인공 신경망인 CNN(Convolutional Neural Network)을 사용합니다. CNN은 네트워크에서 가장 중요한 작업 중 하나인 컨볼루션에서 비롯됩니다.
컨볼루션 신경망에서 각 레이어는 너비, 높이 및 깊이로 구성됩니다. CNN의 주요 부분인 Convolution은 두 가지 기능을 결합하여 세 번째 기능(두 세트의 정보를 병합)을 생성합니다. 이는 단순히 두 행렬을 요소별로 곱한 다음 합을 곱하는 (이미지) 컨볼루션을 고려한다는 의미입니다.
컨볼루션은 이미지 처리의 3단계 절차입니다 -
-
입력 이미지를 가져옵니다.
-
입력 이미지에 적용할 커널 행렬입니다.
-
그리고 커널과 컨볼루션된 입력 이미지의 출력을 저장할 최종 이미지입니다.
다음은 에지 감지를 위한 이미지 처리 필터인 opencv를 사용한 소벨 필터의 작은 구현입니다.
예시 코드
import cv2 import numpy as np img = cv2.imread('beach.jpg') img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY).astype(float) edge_x = cv2.Sobel(img,cv2.CV_64F,1,0,ksize = 3) edge_y = cv2.Sobel(img,cv2.CV_64F,0,1,ksize = 3) edge = np.sqrt(edge_x ** 2 + edge_y ** 2) # image can be normalized to # fit into 0..255 color space cv2.imwrite('beach_convol.jpg', edge)
입력 이미지
출력 이미지