Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- first pg on this rank that detected no heartbeat of its watchdog.
- irregularly sampled time series
- timellm
- Time Series
- 패혈증 관련 급성 호흡곤란 증후군
- 의료정보
- m/m/s
- pre-trained llm
- operation management
- length of stay
- queueing theory
- nccl 업데이트
- 대기행렬
- 딥러닝
- ERD
- NTMs
- GaN
- nccl 설치
- moirai
- Transformer
- 토픽모델링
- nccl 업그레이드
- ed boarding
- 불규칙적 샘플링
- multi gpu
- 분산 학습
- 리뷰
- pytorch
- gru-d
- timesfm
Archives
- Today
- Total
데알못정을
[CNN/Transfer learning] 타코, 브리또 사진 분류하기 본문
728x90
1. CNN
Convolutional Neural Network(CNN)로 불리며, 이미지, 비디오, 텍스트 또는 사운드로부터 분류하는데 필요한 특징들을 동적으로 추출해주는 딥러닝 알고리즘이다.
CNN의 구조는 다음과 같다.
- step 1. Convolution Layer + Activation Layer (RELU)
- step 2. Pooling Layer
- step 3. Fully Connected Layer
step 1에서는 kernel을 사용하여(컬러 이미지일 경우엔 filter) 이미지 속성을 파악한다. kernel(또는 filter)는 우리가 찾아야 할 weight matrix이다. 하나의 이미지에 대해 kernel을 공유하고 있다. 이를 통해 주변 픽셀과의 관계를 함께 고려하게 된다. 직관적인 이해를 돕기 위해 이미지를 하나를 가져왔다.
저기 3x3 사이즈로 색칠된 노란색이 kernel 이고 초록색 matrix가 이미지 이다. 저렇게 kernel이 이미지 전체를 찍어 내면서 분홍색 matrix와 같이 feature map 이라는 것을 만들어 낸다. 그리고 kernel 이 이동하는 칸 수를 stride 라고 한다. stride = 2 이면 2칸 씩 움직인다. 이 feature map이 해당 이미지의 특징 데이터 이다. 근데 잘 보면 이미지의 중심 부분이 가장 자리보다 더 많이 kernel에 노출 되는 것을 볼 수 있다. 이러한 문제를 피하기 위해서 padding 이라는 것을 이미지에 씌우게 되는데 padding은 그냥 0으로 채워진 더미라고 생각하면된다. 아래 그림을 보면 이해하기 쉬울 것이다.
step 2 는 Pooling layer이다. 이 단계에서는
step 1에서 얻은 feature map의 정보를 축약하는 역할을 한다.
이는 모델의 계산 과정을 수월하게 해주고, feature map에서 영향력 있는 특징을 추출한다. 이 과정을 pooling이라고 한다. 위 그림에서는 3x3 의 pooling이 이루어 지고 있다. pooling을 하는 방법은 크게 두가지가 있다.
2x2 pooling의 예시인데 이렇게 2x2 매트릭스가 feature map 위를 훑으면서 각 공간마다 max 값을 취해서 가져갈지 mean 값을 취해서 가져갈지 선택할 수 있다. step 3에서는 특징 추출한 것이 input이 된다. 이 input을 MLP(multi layer perceptron)로 우리가 원하는 모델을 만들 수 있다. 이때 MLP를 사용하기 위해서는 input이 step2의 결과와 다르게 한줄로 쭉 펼쳐저야 들어갈 수 있다.(즉 1차원 벡터로 변환) 이렇게 한줄로 쭉 펼치는 작업을 flatten 이라고 한다.
빨강 matrix가 step 2의 결과라고 하면 그 옆에 빨강 막대가 flatten 된 결과이다. 이 상태에서 다층신경망을 통과하여 우리가 원하는 문제를 풀 수 있도록 모델을 설계하면 된다.
2.Transfer learning
전이 학습은 이미지 데이터를 수집하기 어려운 경우에 유용하다. 이미 대량의 이미지가 학습되어 있는(사전학습, pre-trained) 모델을 가지고 내가 원하는 문제를 풀 수 있게끔만 살짝 만져주는 학습이다. 사전학습 되어 있는 모델은 VGG, Inception, ResNet 등이 있다. ImageNet은 이미지 인식 연구용으로 정비된 대규모 데이터인데, ResNet은 이 데이터로 사전학습이 되어 있다. ResNet은 ImageNet의 대량의 이미지가 이미 학습되어 있기 때문에 데이터가 많이 없어도 ResNet을 통해 우리의 모델을 만들 수 있다.
3.Pytorch 실습
오늘은 Pytorch를 이용해 전이학습을 구현했다. 멕시코 음식 타코와 부리또를 분류하는 모델을 만들기로 했다. 내가 공부하는 책에서 제공하는 데이터를 다운 받고, 이를 주피터 노트북에 넣었다.
데이터 불러오기
먼저 데이터를 불러와 준다. 여기서 ImageNet을 사용해 학습이 완료된 모델은 224x224 픽셀의 이미지를 입력데이터로 받기 때문에 이 크기로 crop 처리를 해야 한다. 무엇보다 나는 ImageFolder 함수가 되게 신기했는데,
주피터 노트북에 파일을 깔아 놓고 이 함수로 데이터를 불러오게 되면 알아서 디렉토리의 하위 디렉토리 명을 분류명으로 사용하고, 그 디렉토리에 있는 이미지와 분류 인덱스의 tuple을 반환하는 데이터셋을 작성할 수 있다.
이 함수 꽤나 유용하게 사용할 것 같다.
사전학습 모델 불러오기
사전 학습이 끝난 pre-trained 모델을 불러와야 한다.이 책에서는 ResNet18 이라는 모델을 불러왔다.(이 모델은 출력 선형 계층을 fc 라는 이름으로 가져온다.) 이미지의 특징 추출이 이미 되어 있는 ResNet 18의 CNN 부분을 학습 과정에서 최적화가 되는 것을 방지 하려면 이 모델의 출력 선형계층을 제외한 나머지 파라미터들을 미분 대상에서 제외해야 한다. 그대로 이미지를 넣고 특징이 추출되어 flatten 된 것만 받아 그 이후의 다층 신경만 부분만 control 해야한다. fc에 새로운 선형계층을 설정하는데, 우리는 브리또와 타코를 분류할 것이므로 출력 차원을 2로 설정(타코vs브리또 분류문제를 풀거기 때문에)이렇게 하면 마지막 선형계층만 미분 대상이 된다.
출처
[1] Dohyun, Kim."Convolutional Neural Network(CNN)"데이터애널리틱스, 9,Dec.2021.Myongji University
[3] 두세교.(2019).파이토치 첫걸음.JPub
728x90
'Research' 카테고리의 다른 글
Multimodal machine learning (0) | 2023.02.22 |
---|---|
GAN: 존재하지 않는 이미지를 어떻게 생성할까? (1) | 2022.09.30 |
DB 설계 및 HeidiSQL을 이용한 DB 구현 PART4: DB 제작 하기 (1) | 2022.09.30 |
DB 설계 및 HeidiSQL을 이용한 DB 구현 PART3: SQL 개념 및 예문 (1) | 2022.09.30 |
DB 설계 및 HeidiSQL을 이용한 DB 구현 PART2: ERD 개념 (0) | 2022.09.30 |
Comments