티스토리 뷰
인공지능을 구현하는 방법인 머신러닝의 기법 중 하나인 "딥러닝"을 배워보도록 하자!!! 와! 신난다!
딥러닝 하면 가장 먼저 나오는 용어가 바로 CNN일 것이다.
CNN이 뭔지, 어떻게 사용하는지부터 알아보자.
# CNN(Convolutional Neural Network) 이란?
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된 모델(다른 누군가가 이미 학습시켜놓은 모델)을 사용하는 방법.
- 특정 환경에서 만들어진 모델을 다른 비슷한 분야에 가져와서 적용하는 방법.
- 사용자는 내가 원하는 부분 일부분만 별도로 수정해서 사용하면 된다.
- 학습 데이터가 부족한 경우 특히 유용하게 사용된다.
(아래 참고)
* 학교 수업에서는 Alexnet 모델을 사용함
net = alexnet
Alexnet의 저 레이어들을 보자.. 전이학습이 얼마나 우리에게 축복을 내려주는지 알 수 있다.
전이학습이 없었다면 1부터 25번 레이어까지 손수 짜고 있었을 것. AI 열풍따위는 없었을 것이다
* 매트랩 명령어
모델의 레이어들 보기
layers = net.layers
특정 레이어 뽑기
layer_input = layers(1)
layer_output = layers(end)
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..
'학교공부 > 인공지능' 카테고리의 다른 글
매트랩으로 배우는 인공지능 - 6 | CNN 레이어 상세 (0) | 2021.10.06 |
---|---|
매트랩으로 배우는 인공지능 - 5 | Training from scratch (0) | 2021.09.30 |
매트랩으로 배우는 인공지능 - 4 | Convolution, ReLU, Pooling (0) | 2021.09.30 |
매트랩으로 배우는 인공지능 - 3 | 전이학습2, Image Datastore (0) | 2021.09.28 |
매트랩으로 배우는 인공지능 - 1 | 인공지능, 머신러닝, 딥러닝 (1) | 2021.09.27 |