티스토리 뷰

* 레이어의 상세 동작 원리는 다루지 않습니다.

 

 

CNN을 통해 Image에서 Feature을 추출하는 레이어 [Convolutoin, Pooling, ReLU] 에 대해 알아보자

 

참고) CNN은 input으로 이미지만 받아야 하는게 아님 (n x m 2D 배열이면 다 됨)

- 단, 이미지가 아니면 결과를 시각적으로 알아보기 힘들 뿐.

 

이번 수업에서는 squeezenet 모델을 전이학습으로 사용해본다.

analyzeNetwork(net)

위 메소드를 사용하면 해당 모델의 레이어 구성을 시각적으로 확인할 수 있다.

 

squeezenet 네트워크는 총 68개의 계층(레이어)가 있다는 것을 알 수 있다..

 

(대학원 석사쯤 밟고 AI 분야로 취업하면 저렇게 많은 레이어들을 하나하나 구성하고, 가중치 조절하고 하면서 최적의 네트워크를 연구하는 일을 하게 되는 것이다.. 아우 생각만해도 머리아프다. 세상 천재들이나 하는 일같다)

 

# Activations

Activation이란, 한 레이어를 거치고 난 이후 나오는 정보, 결과(output)이라고 생각하면 된다.

 

위 사진에서 표에 보면 "활성화" 라고 한글로 번역되어 있는 부분이 있다. 그게 바로 Activation이다.

 

1번 input 레이어의 Activation은 227 x 227 x 3채널(input 이미지)이라는 뜻이고, 이 정보가 2번 레이어로 들어가게 된다

2번 컨볼루션 레이어의 Activation은 113 x 113 x 64채널이라는 뜻이고, 이 정보가 3번 레이어로 들어가게 된다.

쭉쭉쭉.. 가서

66번 pool10 (squeezenet 모델은 이 레이어가 fully-connected 레이어를 대신한다) -> 과적합 방지에 유리하다고 함.

 

66번을 거치고 나서 Activation이 1 x 1 x 1000으로 변한 것을 알 수 있고,

67번 softmax 레이어를 통해 점수를 매긴 이후에

68번 제일 점수가 높은 클래스가 output으로 예측되서 나오겠다는 것을 알 수 있다

 

자세히는 모르겠지만 대충 이런 방식으로 돌아간다는 건 대충 감을 잡아볼 수 있다.

 

 

그럼 다시 처음으로 돌아와서 컨볼루션 레이어가 어떤 일을 하는지 알아보자..

 

# Convolution Layer

하이퍼 파라미터 부분에서

  • NumChannels: input으로 들어오는 채널의 개수
  • NumFilters: 해당 레이어가 갖고있는 필터의 개수

레이어가 갖고있는 필터의 개수라는 건 이해하기 쉽게 셀카 어플의 필터를 64개 갖고있다 생각하면 된다.

그렇기 때문에 2번 컨볼루션 레이어를 통과할 떄, 1번 input 레이어의 Activation (227x227x3채널)이 들어와서 각각 64개의 다른 필터가 씌워진 버전으로 생성, 2번 Activation(113x113x64)가 만들어진거라고 생각할 수도 있겠다.

 

사실 적으면서도 이게 확실건지 잘 모르겠다.

일단 이정도만 알고있자.

하이퍼 파라미터는 불변이고, 밑에 학습 가능한 파라미터는 학습을 통해 계속 변할 수 있다.

 

컨볼루션 레이어의 상세 동작 원리같은건 그냥 구글에서 검색해보자.. 똑똑한 사람들이 이쁜자료로 설명 잘해놨더라..

(예전에 영상처리에서 배웠던 필터 씌우는거랑 똑같다)

 

글보다는 사진으로 직접 보는게 이해가 더 빠르다

atcvn1 = activations(net, image, "conv1") % "레이어 이름"

montage(atcvn1)
montage(mat2gray(atcvn1))

input

 

2번 레이어의 Activation을 시각적으로 보면 이렇게 된다. 64개의 필터로 각각 컨볼루션된 결과물인 것이다.

사진을 잘 보면 눈이나 코, 입이 특히 잘 구분되는 필터가 있다.

그런게 이제 relu와 pooling 과정을 거치면서 feature을 추출할 수 있게 되는 것.

 

 

참 신기하다. 누가 이런걸 해볼 생각을 했을까

 

# ReLU Layer

ReLU(Rectified Linear Unit, 정류 선형 유닛) 레이어. 이름만 들어도 뭔소린지 모르겠다. 릴루? 렐루?

* rectify: 바로잡다. "정류하다"

 

Convolution 레이어의 Activation을 받아서 특징이 될만한 부분만 남기고 나머지는 0으로 처리한다.

쓸만하겠다 싶은 곳만 남기고 나머지는 버리는 것.

특징이 더 도드라지게끔 처리한다고 생각하면 된다.

 

ReLU를 거치고 난 이후

 

역시 상세 동작 원리는 생략함.. 구글에 찾아보자

 

# Pooling Layer

이미지를 다운스케일링하고, ReLU 레이어에서 보이는 특징을 더 극대화시키는 역할을 수행한다.

 

Pooling Layer를 거치고 난 이후

 

 

이 과정을 수없이 반복하는 것이다

Convolution -> ReLU -> Pooling -> Convolution -> ReLU -> Pooling -> ....

 

수없이 반복하다 보면 이미지에서 특징을 추출해낼 수 있다

 

원본 -> Convolution -> ReLU

눈 부분이 강한 Positive(흰색)을 나타내는 것을 확인할 수 있다.

이를 수많은 데이터로 계속 학습하다 보면 사람 얼굴에서 눈을 인식할 수 있게 되는 것.

 

 

세부사항은 나중에 필요할 때 찾아보고,

일단은 CNN이 요딴 식으로 굴러간다는 것만 알면 어디가서 CNN이 뭐냐고 하면 대충 이런 방식이라는 얘기는 할 수 있을 것 같다.

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함