더북(TheBook)

15.3.3 HOG & SVM 필기체 숫자 인식

이 절에서는 SVM 알고리즘을 이용하여 필기체 숫자 인식 프로그램을 만들어 보겠습니다. 필기체 숫자 인식 예제는 앞서 15.2.3절에서 kNN 알고리즘을 이용하여 만든 적이 있습니다. 이 절에서는 kNN 알고리즘 대신 SVM 알고리즘을 사용하여 비슷한 형태의 예제 프로그램을 만들어 보겠습니다.

SVM 필기체 숫자 인식을 위한 훈련 데이터 영상은 15.2.3절에서 사용하였던 digits.png 파일을 그대로 사용하겠습니다. digits.png 영상은 20×20 크기의 작은 필기체 숫자가 5000개 적혀 있는 영상입니다. 15.2.3절에서는 숫자 영상 픽셀 값 400개를 그대로 kNN 입력으로 사용하였지만, 이 절에서는 각 숫자 영상에서 HOG 특징 벡터를 추출하여 SVM 알고리즘 입력 데이터로 사용하겠습니다. HOG는 영상의 그래디언트 방향 히스토그램을 이용하여 만든 특징이며 13.3절에서 자세히 설명한 바 있습니다.

20×20 필기체 숫자 영상에서 HOG 특징 벡터를 추출하여 SVM 훈련 데이터 행렬을 만드는 과정을 그림 15-13에 나타냈습니다. HOG는 입력 영상을 일정 크기의 셀(cell)로 나누고, 2×2 셀을 합쳐 하나의 블록(block)으로 설정합니다. 필기체 숫자 영상 하나의 크기는 20×20이므로 여기서는 셀 하나의 크기를 5×5로 지정하고, 블록 하나의 크기는 10×10 크기로 설정하겠습니다. 셀 하나에서 그래디언트 방향 히스토그램은 아홉 개의 빈으로 구성하므로, 블록 하나에서는 9×4 = 36개의 빈으로 구성된 히스토그램 정보가 추출됩니다. 또한 블록은 보통 하나의 셀 단위로 이동하므로 가로로 세 개, 세로로 세 개 만들 수 있습니다. 그러므로 필기체 숫자 영상 하나에서 만들어지는 HOG 특징 벡터의 차원 크기는 36×9 = 324로 결정됩니다. 즉, 20×20 숫자 영상 하나에서 1×324 특징 벡터 행렬이 만들어지고, 이 행렬을 모두 세로로 쌓으면 5000×324 크기의 HOG 특징 벡터 행렬을 만들 수 있습니다. 그리고 이 행렬을 SVM 클래스의 훈련 데이터로 전달합니다.

▲ 그림 15-13 HOG 특징 벡터를 이용한 필기체 숫자 학습

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.