티스토리 뷰

인공지능을 구현하는 방법인 머신러닝의 기법 중 하나인 "딥러닝"을 배워보도록 하자!!! 와! 신난다!

 

딥러닝 하면 가장 먼저 나오는 용어가 바로 CNN일 것이다.

CNN이 뭔지, 어떻게 사용하는지부터 알아보자.

 

 

# CNN(Convolutional Neural Network) 이란?

CNN의 구성

CNN의 기본 구성은 위 사진과 같다.

세가지 큰 틀로 구성된다. 

 

1. 데이터 input

2. 데이터에서 특징(Feature) 추출

3. 추출된 특징들에 점수를 매겨 하나의 클래스로 분류(Classification)

 

[1. 데이터 input]

m x n 2D 레이어를 input으로 넣어야 한다.

m x n x 3 에서 "x3" 은 3채널(대개 R, G, B)를 가진 데이터라는 의미

 

[2. Feature Extraction]

추후 공부예정.

pre-trained된 모델이 알아서 해준다

 

[3. Classification]

Fully Connected 레이어

- 추출된 Feature와 output 클래스 간 연결을 시켜주는 역할

 

Softmax 레이어

- 점수를 매겨(수치화) 가장 높은 점수를 가진 output클래스를 찾는다. 

- 모든 점수의 총 합은 항상 1이다 (정규화된 점수)

 

 

레이어 별 상세한 동작원리는 추후에 공부 예정.. 일단은 대충 개념만 알고 넘어가자

 

근데 딥러닝으로 CNN을 사용하기 위해서는 저 레이어들을 정말로 처음부터 끝까지 내가 직접 만들어야 하는 걸까?

생각만 해도 머리가 띵 가슴이 답답 딥러닝 때려치기 일보직전이다.

하지만 다행히도 그러지 않아도 된다. CNN을 간편하게 사용하기 위한 아주 좋은 학습 방법이 있따.

이름하야 "전이학습"

 

# Transfer Learning (전이학습)

pre-trained된 모델(다른 누군가가 이미 학습시켜놓은 모델)을 사용하는 방법.

- 특정 환경에서 만들어진 모델을 다른 비슷한 분야에 가져와서 적용하는 방법.

- 사용자는 내가 원하는 부분 일부분만 별도로 수정해서 사용하면 된다.

- 학습 데이터가 부족한 경우 특히 유용하게 사용된다.

 

(아래 참고)

https://blog.lgcns.com/1563

 

부족한 데이터로 하는 머신러닝! ‘전이 학습’

인공지능(AI)에 많은 관심을 두지 않는 사람이라도, '알파고 제로(AlphaGo Zero)' 대한 소식은 접하지 않았을까 생각합니다. 알파고는 미지의 영역이라고 여겨진 AI 기술을 본격화하는 계기가 되었기

blog.lgcns.com

 

* 학교 수업에서는 Alexnet 모델을 사용함

net = alexnet

 

Alexnet의 구성

Alexnet의 저 레이어들을 보자.. 전이학습이 얼마나 우리에게 축복을 내려주는지 알 수 있다.

전이학습이 없었다면 1부터 25번 레이어까지 손수 짜고 있었을 것. AI 열풍따위는 없었을 것이다

 

* 매트랩 명령어

 

모델의 레이어들 보기

layers = net.layers

특정 레이어 뽑기

layer_input = layers(1)
layer_output = layers(end)

1번 레이어

1번 레이어를 살펴보자. ImageInputLayer.

InputSize가 1 x 3 행렬인 것을 확인할 수 있다. 

아까 위에서 봤던 m x n x 3 (R, G, B) 구성의 이미지를 입력으로 받는다는 의미이다.

 

또한, inputSize가 227 x 227이기 때문에, 이미지 다운사이징으로 이미지의 크기를 맞춰줘야 한다.

 

 

마지막 레이어

마지막 레이어를 살펴보자. ClassificationOutputLayer

입력을 넣으면 1000개의 Categorical 데이터들 중 하나로 예측된 출력이 나오게 된다는 의미이다.

- 카테고리 개수, 목록은 직접 수정할 수 있다

- 카테고리 목록 보기

classes = layer_output.Classes

 

 

* 이미지 리사이징 방법

image = imread("image.jpg", "jpg"); % 읽기

image_resized = imresize(image, [227, 227]); % 리사이징
imshow(image_resized) % 출력

 

 

그럼 이제 모든 준비가 끝났고 CNN을 사용해보자!!

천재들이 이미 모델을 잘 만들어뒀기 때문에 가져다 쓰기만 하는건 너무 쉽다

% 예측값만 받기
prediction = classify(net, image_resized)

% 예측값과 점수를 같이 받기
[predictions, score] = classify(net, image_resized)
max(score)

 

단 한줄이면 CNN을 사용할 수 있다

이게 끝이다.

 

사용자는 내부에서 어떤 알고리즘으로 돌아가는지 굳이 알 필요가 없다.

이게 바로 잘 만들어진 캡슐화의 모범이 아닐까 싶다. 이것이 객체지향..?

 

 

하지만 전공자로서 수업은 여기서 끝나지는 않는다..

CNN의 핵심은 상황에 딱 맞는 모델 수정에 있는 것! 

무궁무진한 딥러닝의 활용은 결국 모델 수정에서 나온다고 생각할 수 있다고 볼 수 있을 것 같다.

 

이제야 3주차 수업 정리다.. 정리하는데 시간이 생각보다 너무 오래걸리는데 이거 계속 할 수 있을지 모르겠다.

 

To be continued..

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함