PyTorch 든 TensorFlow 든 이미지 분석을 위한 머신 러닝에서는 항상 ConvNet 이 출발점이 된다. ConvNet은 CNN(Convolutional Neural Network) 으로 흔히 불리우며 그 둘은 같은 뜻으로 사용된다,
이미지 머신 러닝을 위한 CNN 코드는 대개 10개 레이어까지 사용하는 것이 보통이다. 사용하는 레이어 수가 많으므로 인해서 초보자로서는 대단히 복잡한 알고리듬이라고 느낄 수도 있지만 사실은 그렇지 않다. 대단히 간단하다고 보면 된다. 어렵게 느낄 수 밖애 없는 점은 적절한 예제를 선택하여 보여주지 못하기 때문이다. 아무리 아인슈타인의 상대성 이론이 너무나 뛰어난 이론이지만 본인과 극소수의 전문가만 이해할 수 있는 주제라면 무슨 소용이 있을까? CNN 도 마찬가지로 볼 수 있다.
CNN을 정확히 이해하기 위해서는 1959년의 후벨 박사의 고양이 시각피질 실험에서부터 시작해야 한다.
흑백 TV에서 그림과 같이 사선 edge를 코야이에게 보여주면서 고양이 시각피질 Cortex에 전극을 설치하여 파형을 체크하였다. 후벨 박사의 실험 결과 고양이 시각 피질에는 기울어진 선 즉 edge를 검출하는 뉴론 그룹이 있음을 알게 되었다.
고양이 시각 피질의 반응 실험에서처럼 오브젝트의 edge 라든지 움직임을 비롯한 시각적인 요소들을 검출해 내는 여러 종류의 뉴론 그룹들이 있듯이 CNN 에서도 여러 개의 디지털 필터를 사용하게 된다. 물론 여러 개의 디지털 필터들이 고양이 시각피질에서처럼 여러 종류의 뉴론 역할을 할 수 있도록 웨이트 값들이 설정되어야 한다.
이와 같은 고양이 시각 피질 실험과 가장 비슷한 머신 러닝 CNN 예제는 무엇일까? 바로 유튜브에서 찾아 볼 수 있는 Brabdon Rohrer의 “How Convolutional Neural Networks work”의 “OX” 예제가 고양이 시각피질의 edge 검출 기능을 설명할 수 있는 아주 효과적인 예제이다. “OX” 중 특히 “X”를 사용한 설명이 쉽게 이해에 많은 도움을 준다.
9X9 X자 이미지를 준비하여 아래와 같이 서로 다른 필터를 적용하여 결과를 출력해 보자. 첫 번째 2X2 필터와 세 번째 3X3 필터가 괜찮은 결과를 출력해준다.
아래는 X자가 왼쪽으로 약간 회전하여 edge 가 조금 기울어진 상태이다. 웨이트 값들이 일정한 3X3 필터를 사용했을 때의 결과이다. 필터링 결과가 둘 다 명확하지 않다.
필터의 웨이트 값들을 직관적으로 바꾸어서 출력해본 결과인데 감각적으로 평가해볼 때 두 경우 모두 기하학적 특징이 잘 유지된 것으로 보인다.
실제로 꽤나 복잡한 수많은 이미지에 대해서 직관적으로 웨이트 값들을 설정할 수 없기 때문에 처음에는 랜덤한 값에서 시작해야 한다. CNN 네트워크가 설정되면 Cost 함수를 구성하고 경사하강법에 의한 학습을 통해 웨이트 값을 결정하는 것이 Convolutional Neural Network 이다. 한편 필터링 한 결과 이미지 픽셀 수는 원 이미지 픽셀 수보다 작아야 한다. 아울러 CNN 네트워크는 전반부는 특징추출 레이어들로 후반부는 Class 판별을 위한 Softmax를 포함하는 fully connected 레이어들로 구성된다. 이러한 CNN 구성에서 특징추출 레이어를 동결해둔 채 fully connected 레이어만 한정해서 학습시키는 기법이 바로 Transfer Learning 기법으로 알려져 있다. 참고로 ImageNet 의 경우는 1000개의 Class를 가지는 120만개의 샘플 이미지를 대상으로 학습을 시키므로 웬만한 오브젝트들의 edge 특성들은 충분히 추출이 되었으리라 보인다.
첨부된 파일은 쥬피터 노트북 코드 파일이다.
'머신러닝' 카테고리의 다른 글
이미 특이점을 뛰어 넘었던 중국의 슈퍼컴퓨팅 미중무역전쟁으로 허무하게 아작나는가? (0) | 2019.06.22 |
---|---|
Convolutional Neural Network에서 Pooling 알고리듬에 의한 Edge 특징 추출(featur extraction) (0) | 2019.06.22 |
구글 Colabo에서 PyTorch CIFAR-10 이미지 머신 러닝 (0) | 2019.06.18 |
PyTorch 안면 이미지 데이타 Rescale, RandomCrop, Compo (0) | 2019.06.17 |
PyTorch 안면 Landmark Data Loading and Processing (0) | 2019.06.16 |