머신러닝

6-1 고양이 시각피질의 edge detection 실험과 CNN(Convolutional Neural Network)

coding art 2021. 7. 8. 20:17
728x90

 

파이선 코딩 초보자를 위한 텐서플로우∙OpenCV 머신 러닝 2차 개정판 발행

https://blog.daum.net/ejleep1/1175

 

파이선 코딩 초보자를 위한 텐서플로우∙OpenCV 머신 러닝 2차 개정판 하이퍼링크 목차 pdf 파일

본서는 10월 26일 교보문고 퍼플 POD 출판 신청하였습니다. 일정 기간 검토 후 출판 결정이 될 것이며 11월 초부터 주문 구입이 가능합니다. 참고로 책 목차에 따른 내용별 학습을 위한 코드는 이미

blog.daum.net

____________________________________________________________________________________________________________________________

시각 이미지 인식을 위한 CNN(Convolutionary Neural Network) 방식 머신 러닝의 기원을 찾아가 보자. 위 사진은 고양이에게 안경을 맞춰주는 사진이 아니라 1981년도 노벨 의학상을 수상하게 되었던 하버드 의대의 닥터 후벨(Hubel)1959년도 고양이 시각피질(visual cortex) 반응에 대한 실험 연구 장면이다. 고양이 뇌의 시각피질에 전극을 꽂은 상태에서 검은색 바탕의 흑백 TV 화면에 기울어진 흰색 바(bar)를 생성하여 움직이면서 고양이 시각피질에 자극(stimuli)을 주어 전극에서 나오는 신호를 증폭해서 오디오로 듣는 실험이다. 흰색 바탕에 검은 색 바를 움직임에 따라 생성되는 시각피질 반응 신호는 뜨뜨뜨∙∙∙하는 끓김성의 사운드로 변환된다.

 

고양이를 비롯한 포유류의 시각피질은 여러 부위로 구성되는 바 후벨의 실험은 시각피질의 V1(primary visual cortex: 기본 시각 피질) 부분의 기본적인 성능으로서 특히 머신 러닝에서도 이미지의 특징 추출에 필요한 주로 edge detection 능력에 관한 것들이다.

다음에 해설하는 실험의 내용을 먼저 읽어 보고 난 후 유튜브에서 이 실험 동영상(url 주소 첨부하였음)을 시청하여 시각피질 뉴론의 특성 이해에 접근하기 바란다. 이어서 그 결과가 CNN 방식의 머신 러닝에 어떻게 적용되는지 앞으로 살펴보도록 하자. 그림과 같은 위치에서 흰색 사선을 켰다 껐다 해보면 뜨뜨뜨∙∙∙하는 노이즈가 들린다. 

뉴론에서 threshold 조건을 만족하여 firing 반응이 일어나는 뇌 부위 근처에 전극이 있으면 뜨뜨뜨∙∙∙하는 사운드가 들리며 반응이 없으면 조용하다. 이 동영상에서 흰색 바를 다음의 사진에서처럼 현재 x x x x x 로 표기된 위치 조금 지나서까지 끌어 오면 뜨뜨뜨하는 노이즈가 들리는 위치이며 여기에 x 표시를 해 두었다.

 

한편 다음 사진에서는 흰색 사선을 조금 이동 시킨 후 흰색 사선을 켰다 껐다를 반복해도 아무런 노이즈를 들을 수 없다. 즉 시각 피질의 해당 부위가 반응하지 않는다.

 

다음 사진은 흰색 바가 사선 방향으로 움직일 때에 즉 x 표시한 사선을 통과할 때에 뜨뜨뜨하는 잡음이 들리며 통과 후는 잡음 소리가 사라진다.

이 간단한 실험을 통해서 고양이 시각피질에는 사선을 인식하는 기능이 있음을 알 수 있다.

사선하면 일단 방향(orientation) 속성이 있으며 흰색 바가 x 표시 사선을 통과한다는 듯은 기울어져 방향이 있는 일정 길이의 사선 즉 길이, , 배경색과 현격한 밝기 차이가 있는 에지(edge)의 동적 움직임을 인식한다는 뜻이다.

 

다음과 같이 사선의 폭을 늘려 긴 직사각형으로 변형시킨 후 x 표시 가까이에 위치시키고 노이즈가 없는 상태에서 세모 표시를 해둔다. 이 긴 직사각형을 그림과 같이 이동 시키면 직사각형의 흰색 모서리와 x 표시한 직사각형의 변이 만날 때 노이즈가 발생한다.

반면에 다음과 같이 방향이 맞지 않는 경우에 흰색 바를 움직여도 아무런 반응이 없다.

다음의 첫 번째 사진처럼 아예 화면에 흰색의 큰 정 사각형을 씌워서 껐다 켰다를 반복하거나 약간 아래 위로 움직여도 아무런 반응이 없다. 하지만 두 번째와 세 번째 사진에서처럼 움직여서 흰색 정사각형의 변이 x 표시에 가까워지면 노이즈가 발생하며 이 상태에서 정지하여 껐다 켰다를 반복하면 역시 노이즈가 발생한다.

반대로 배경색을 흰색으로 바꾼 후 검은색 펜으로 x표시를 가린 후 껐다 켰다를 반복해도 비슷한 결과를 준다. 동영상에서 검은 색 펜을 움직일 경우에 대한 실험은 없는데 아마도 검은 펜이 x 표시를 지나갈 때 노이즈가 발생할 것으로 예상된다.

이 실험에 의하면 고양이의 시각 피질은 흑백 이미지에서 밝기가 변하는 사선이나 배경색과 대조되는 움직이는 사선 즉 사선형 edge를 detect 할 수 있다는 결론이다. 더 나아가서 후벨의 실험에 의하면 시각피질은 이미지에서 edge의 크기 또는 기울어진 각도와 edge의 움직이는 방향을 detect할 수 있도록 다음과 같이 세 종류의 뉴론 들로 구성되어 있다는 점을 밝혔다.

결국 이미지를 구성하는 기울어진 크고 작은 edge 요소들의 합성 과정을 통해서 전체 이미지를 구성해 볼 수 있다는 것이다. 그밖에 인간에게는 색깔을 인식할 수 있는 시각세포도 있는 반면 많은 동물들의 경우는 흑백만을 구별할 수 있는 시각 세포를 가진 경우도 있다.

 

이와 같은 시각 특성은 특히 컴퓨터 비전분야에서 소프트웨어적으로 구현되어 폭 넓게 활용되고 있다. 다음 사례는 OpenCV에서 Gaussian Blur 기법을 적용해서 얻을 수 있는 이미지 처리 결과의 단적인 사례이다. Gaussian Blur라는 기법도 이미지에 포함된 오브젝트들을 식별해 내기 위한 CNN(Convolutional Neural Network) 기법을 구성하는 일부임을 지적해 두자.

 

번 이미지를 Gaussian blur 처리하여 윤곽이 희미한 번 이미지를 얻을 수 있다.

번 이미지에 대해서 흑백으로 변환 후 Canny Edge 기법을 적용하면 번 이미지를 얻을 수 있다.

번 이미지는 번 이미지에 대하여 Gaussian blur 기법을 적용한 결과이다.

상기의 이미지 프로세싱 기법은 필자의 다음 블로그 주소의 사례를 참조하기 바란다.

https://steemit.com/kr/@codingart/6-14-opencv-gaussianblur

 

더 나아가서 시각피질의 다양한 이미지 처리 결과를 종합하여 이미지에 포함된 오브젝트들이 과연 무엇인지 머신 러닝에 의해서 알아낼 필요가 있다. 다시 말하면 이미지에 포함된 오브젝트들이 고양이인지, 개인지, 자동차인지 사람인지를 정확하게 구별해내야 할 필요가 있는 것이다.

 

바로 이러한 목적을 달성하기 위해서 CNN(Convolutional Neural Network)에 의한 이미지 처리 기법이 1990년대 이후 지속적으로 개발되었으며 2012AlexNet 출현 이후 2017년에서 부터는 그 인식률이 거의 95% 수준까지 도달했다.

 

다음 유튜브 주소에서 고양이 시각 피질의 기울어진 edge detection 기능 실험 동영상을 시청해 보자.

Visual Cortex Cell Recording

https://www.youtube.com/watch?v=RSNofraG8ZE