06-3 Convolutional Neural Network(CNN)의 이미지 인식 원리 2: 필터링

in #kr6 years ago (edited)

noname01.png

MNIST 문제에서처럼 수기 숫자 데이터를 샘플해서 DB를 만들 듯이 알파벳 문자도 비슷하게 처리하면 되지 않겠느냐? 고 반문할 수도 있을 것이다. 다음의 MNIST 수시 숫자 샘플들을 살펴 보자 뭔가 인위적인 느낌이 많이 나지 않는가?

noname02.png

그렀다. 이 수기숫자 DB 구성을 위해서 숫자 하나당 크기 방향 굵기를 비롯하여 많은 요인들이 이미 관리 된 상태에서 샘플된 데이터이다. 그렇다면 아무런 제약 조건 없이 샘플되는 글자는 어떤 기하학적 특징을 가지게 될것이가? 다음과 같이 기본적인 4가지 요소 즉 병진, 확대, 회전 및 가중 여부가 큰 영향을 미칠 것이다.

noname03.png

즉 MNIST에서처럼 DB 가 일정한 조건하에처럼 구성되지 않으면 Softmax 에 의한 인식 작업이 인식율이 떨어지면서 무의미 해 질 수 있다.
다음의 회전된 문자 X에 대해서 이들이 같은지 다른지 판단해 보기로 하자. 사람 입장에서는 이들이 유사하게 X 라고 직접 쉽게 판단할 수 있다. 하지만 컴퓨터 입장에서는 어떤 방식으로 처리해야 할 것인지 쉽지 않다. 같으면 왜 같은지 아니면 왜 서로 디른 글자인지 근거가 제공되어야 할 것이다.

noname04.png

다음은 컴퓨터가 이미지를 인식하는 방법에 근거해서 표현해 보면 흰색은 +1 검은 색은 –1로 둔자. 0∼255 로 둘 수도 있지만 Rosenblatt 의 아이디어를 그대로 따르기로 한다.

noname05.png

이 2가지의 데이터를 가지고 컴퓨터가 가장 쉽게 할 수 있는 일은 각 셀들의 값을 비교해서 매치(match)가 되는 지 확인하는 일 일 것이다. 다음 그림에서 match 작업 결과를 보여 준다. 흰색은 정확하게 매치가 되는 픽셀이며 붉은 색 표시는 매치가 안되는 픽셀들을 나타낸다. 이 결과를 가지고 단순하게 판단한다면 5개는 매치가 되고 8개는 매치가 되지 않으므로 결과는 서로 다르다. 이런 식으로 컴퓨터가 판단한다면 그 컴퓨터도 너무 순진해 보인다.

noname06.png

어차피 컴퓨터 자체야 문자를 비교할 만한 알고리듬을 제공해 주어야 한다. 그냥 프로그래머가 코딩 할 것이 아니라 옛날 엣적에 후벨 교수가 고양이 시각 피질 연구에서 알아낸 그러한 류의 알고리듬이 필요하지 않을까 싶다.

CNN에서는 MNIST 에서와는 달리 전체 이미지 가 매치되는지 비교하기 보다는 이미지를 작은 요소로 나누어 보면 이 작은 요소들이나 특징들이 얼마나 유사한지 또는 매치가 되는지 쉽게 체크해 볼 수 있는 방법을 택한다.
다음의 ConvNets 그림에서 두 개의 이미지들의 부분적으로 매치가 되는 공통점을 찾아보자. 중앙의 X자형 5개 픽셀들은 동일하며 2개짜리 대각선 픽셀들은 서로 위치가 좀 변경되었다.

noname07.png

좀 더 체계적으로 이미지를 구성하는 3개의 작은 기본적인 이미지 요소들을 고려한다. 즉 3X3 매트릭스 크기의 대각선형 ⓵번 ⓷번과 x자형 ⓶ 이미지 요소들이다. 이 세가지 작은 요소들을 사용하여 주어진 전체 이미지를 재구성이 가능하다. 여기서부터 세부적인 특징을 추출해 문자를 식별해 나가게 되는 CNN 의 필터링 과정을 살펴보기로 한다.

noname08.png

다음 그림에서처럼 대각선형 ⓵번과 매치되는 부분에서의 필터링 연산을 고려해 본다. 원래 컨볼루션이라 함음 필터 매트릭스를 윗부분 코너에서부터 우측으로 스트라이딩 시킨 후 우측 벽에 닿으면 TV 주사선이 움직이듯이 다시 왼쪽으로 옮겨가 스트라이딩 작업을 계속해 오른쪽 하단에 닿을 때까지 실행하는 것이다. 지금 필터링 계산은 스트라이딩 와중에 그 부분에 이르렀을 때에 실행하는 필터링 계산 예이다.
필터와 매치되고 있는 부분들까리 서로 곱셈을 실행해서 우측 상단의 3X3 매트릭스에 적어 넣자. 전부 다 1 이 된다.

noname09.png

이 9개의 결과를 모두 합해서 9로 나누어 평균 값을 구해서 아래 그림의 오른쪽 회색 보드에서처럼 3X3 매트릭스 중앙에 평균 값 1을 처리해 넣는다. 컨볼루션 필터링 작업은 처음 스트라이딩 시작할 때부터 지정된 중앙 위치에 평균 값을 넣기 시작하여 끝날떄까지 처리하면 9X9 매트릭스에 외곽 한 줄이 비는 8X8 사이즈의 작은 매트릭스가 얻어진다.

noname10.png

다음 그림은 스트라이딩 과정 중에서 가운데 X 자형 이미지에서 필터링 작업을 하게 되면 – 값들이 섞이게 되어 평균 값이 0.55 가 된다. 항상 1의 값 이 얻어지는 것은 아니란 점을 참고하자.

noname11.png

이와 같이 ⓵ 번 대각선 필터를 사용하여 처리해서 다음의 8X8 매트릭스를 얻어낼 수 있다.

noname12.png

이 작업 결과에서 9X9 이미지의 기하학적 특성과 ⓵ 번 대각선 필터에 의해 필터링 된 8X8 매트릭스의 특징을 비교해 보면 특히 ⓵ 번 대각선 방향으로만 1.0에 가까운 숫자를 보여주며 나머지는 숫자 값이 상대적으로 작아 쉽게 구분할 수 있다. 즉 ⓵ 번 대각선 특징이 필터링 된 것이다.

그렇다면 ⓶ 번 x자형 이미지 와 ⓷번 대각선 이미지를 사용하여 필터링 한 결과를 함께 비교해 보기로 하자.

다음과 같이 3개의 8X8 매트릭스가 얻어지는데 기대했던 바대로 원래의 9X9 매트릭스에서 필터의 특징을 그대로 닮은 결과가 얻어진다.

noname13.png

다음 편 06-3에서 에서 계속 될 예정입니다.

Sort:  

Congratulations @codingart! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You published a post every day of the week

Click here to view your Board of Honor
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Do not miss the last post from @steemitboard:

SteemFest3 and SteemitBoard - Meet the Steemians Contest

Support SteemitBoard's project! Vote for its witness and get one more award!

저도 스터디중입니다 ^^
좋은 글 계속 올려주세요 ㅎ
꾸욱하고 갑니다 ~

Posted using Partiko iOS

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 63550.59
ETH 2644.53
USDT 1.00
SBD 2.81