본문 바로가기

배우기/복습노트[Python과 분석]

[복습] Python | 분석 | 딥러닝(CNN) 이미지 분석(2) + 하루끝(20240402)

728x90
반응형

CNN: 이미지 분석의 꽃

 

층을 추가할 수록 좋다. 레이어가 추가될수록 더 많은 신호를 받을수 있는 좋은 점이 있으나, 기울기 소실 문제는 해결되지 않는다.

activation은 relu 가 좋은 편이다.

기울기 소실 문제를 해결하기 위한 다른 activation은 찾기 어려우므로, 다른 방법을 찾다 보니 CNN의 파생인 vgg 또는 resnet이 탄생했다. densenet, googlenet도 있다. 전부 CNN 기반 모델로, keras 문법으로 구현하는데에는 한계가 있어서 tensorflow로 구현해야 하는데, 복잡도가 증가하게 된다.

 

 

 

딥러닝 모형을 구현하는 데에 있어 두 가지 방법이 있다.

1. 제로 베이스에서 출발: 쌓은 탑이 없는 상태로, 처음부터 모델링한다. 가중치를 랜덤하게 초기에 선택해서 하는 방법으로 이제까지 배운 방법들이다. 단점은 데이터가 많이 필요하다는 점이다. 기울기를 완벽하게 만들기 위해서는 학습 데이터가 많이 필요하다. 이미지가 고해상도가 될 수록 마스크 등의 연산이 복잡해진다. 따라서 개인들이 PC를가지고 기업들만큼 이미지를 분석하기가 어렵다. 속도도 느리고 시간도 오래 걸리지만 나만의 특화된 모델의 만들 수 있는 것이 장점이다.

 

2. 전이학습 = 사전학습. 파인튜닝은 타인이 만든 모델을 재사용 하는 것이다. 사전모델을 가지고 파인튜닝하여 내 개발 환경에 맞추는 것을 전이학습이라고 한다. 연구 여력이 없는 경우 이미 연구가 되어진 모델을 사용하게 되는데, y값의 출력 노드 수가 다를 수 있다. 그럼 그 모델을 그대로 fitting 시키는 경우 에러가 발생하므로 파인튜닝을 하여야 한다. 마지막 layer나 그 이전 layer 정도를 수정하여 내 데이터를 학습시키면서 가중치를 다시 재학습하는 과정을 거치게 된다. 그래서 전이학습을 하면 데이터가 부족한 상황에서도 좋은 성능을 낼 수 있게 도와준다.

 

 

 

[ 이미지 분석 방법 ]

 

1. 기본 CNN 모델

 

2. CNN 파생 모델

 1) VGGNet

 2) ResNet

 3) DenseNet

 4) GoogLeNet

 5) MobileNet

 

3. 전이 학습

 - 미리 학습된(pre-trained) 모델을 재사용하여 새로운 데이터셋에 적용시키는 학습 방법

 - fine-tuning 필요: 새로운 데이터셋에 적용하기 위한 파라미터 재적용 과정 필요(y값의 출력 수가 다를 것이기 때문에 당연히 필요함)

 - 적은 이미지만으로도 훌륭한 성과를 낼 수 있음

 - 많은 이미지 데이터가 이미 학습된, 일반화 가능한 모델을 사용하는 것이므로 모든 이미지를 처음부터 학습할 필요 없음

 

4. 앙상블 모형

 1) 같은 모델로 구성

  ex) CNN 모델을 5개 생성, 5개모델 결과를 조합하여 최종 결론

 2) 다른 모델로 구성

  ex) ResNet + DenseNet

 

 

 

 

 

예제 - CNN 모형으로 구성된 앙상블 모델 구축(MNIST 데이터)

from keras.layers import Dense, Conv2D, Dropout, Flatten, MaxPooling2D, AveragePooling2D

 

 

1. 데이터 로딩

 

 

2. 변수 스케일링

 

step 1) 학습 모형 정의

Conv2D(filters = 32, kernel_size = (2,2), input_shape = (28, 28, 1), activation = 'relu'),

 

step 2) 앙상블 모형 구축

 

 

step 3) 앙상블 모형 훈련

 

 

step 4) 앙상블 모형 예측 # predict은 항상 2차원이 나옴 [[ 이렇게 ]]

 

 

step 5) 앙상블 모형 평가

 

 

 

4. 모델 수행

 

 

 

5. 결과 해석

1) 예측

 

2) 평가

 

 

 

 

 

 

 

ResNet을 사용한 이미지 분류(얼굴 데이터) - 스케일링이 된 데이터임

1. 데이터 로딩

 

2. 클래스 불균형 해결

 

결과 출력

 

   

3. 데이터 변환

 

 

4. 데이터 분리

 

 

 

5. 모델 정의

 

 

6. 모델 구현

step 0) 3채널 데이터로 변경(ResNet은 1ch 에서 3ch로 변경 필요)

 

stpe 1) 모델 생성

 

step 2) 컴파일 및 정지 규칙 생성

 

 

 

7. 학습

 

 

 

8. 평가

 

 

 

 

 

DenseNet

ResNet이 RNN과 비슷하다면 DenseNet은  LSTM과 비슷하다. ResNet은 이전 층이 꼭 추가되어야하나, DenseNet은 모든 층이 밀집 연결되어있다. 그래서 이름이 DenseNet이다. 모든레이어들이 완전 연결 되어있다.

DenseNet이 보다 성능이 좋다.

위와 코드는 같은데 x = Dense(512, activation = 'relu')(x)가 사라진다.

 

 

 DenseNet을 사용한 이미지 분류(얼굴 데이터) - 스케일링이 된 데이터임

 

1. 데이터 로딩

 

 

2. 클래스 불균형 해결

 

결과 출력

 

 

3. 데이터 변환

 

4. 데이터 분리

 

 

3채널 데이터 변경

 

 

 

5. 모델 정의

 

 

6. 모델 컴파일 및 정지 규칙 생성

** fit 수행 시 empty data 관련 에러 발생 시 run_eagerly  = True 설정할 것.

 

 

7. 학습

 

 

 

8. 평가

 

 

728x90
반응형