BIG
Study. 개와 고양이 이미지 분석
[스스로 정리한 코드 분석과 흐름]
5. CNN
- CNN : Convolutional Neural Network
- 이미지를 CNN이 어떻게 구분하냐면 여러 가지 필터들이 돌아다니면서 feature extraction 해서 이미지를 추출함
- 2차원의 이미지를 1차원으로 바꿔주는 작업도 해야한다.
- feature extraction이 끝나면 classification 작업을 한다.
- 여러 개를 분리할 때는 softmax 함수를 사용하여 산출물을 낸다.
6. Tensorflow 사용하여 model층 쌓기
- model.add(Conv2d(128,(3,3), activation='relu', input_shape=(300,300,3))) ⇒ 첫 번째 층은 Conv2d라고 하는 층으로 필터는 128개이며 필터의 크기는 3X3으로 해서 feature를 추출하고 활성화 함수는 relu이고 들어오는 자료는 300X300 크기에 color이라서 3으로 준다.
- 그다음은 컨볼루션 층을 통해서 이미지를 추출했지만 여전히 데이터가 크고 복잡해서 축소하는 작업(pooling)을 해야 하기 때문에 pooling 작업을 한다.
- 쌓는 방법은 model.add()로 한다.
- model.add(MaxPool2D(pool_size(2, 2))) ⇒ model.add() 방법으로 pooling 층을 사이즈 2 by 2로 쌓아준다. 그러나 노드와 층이 많아진다고 성능이 좋아지는 것이 아니다! 그러므로 가 적합을 효과적으로 피하는 게 성능을 올리는 방법 중 하나이기 때문에 은닉층의 노드를 임의로 하나 꺼주는(drop out) 방법을 사용해서 학습 데이터가 지나치게 가 적합하는 것을 방지하기 위해 추가해준다.
- model.add(Dropout(0.5)) ⇒ 절반은 임의로 꺼준다.
- 이제 필터의 개수를 절반씩 줄이면서 feature extraction(특징 추출)을 해준다. input_shape는 필요 없다.
- 그리고 dense(계산)하는 층으로 바꿔준다.
- 그러려면 2차원에서 1차원으로 바꿔줘야 하기 때문에 flatten을 사용한다.
- 그렇게 층을 바꿔주고 dense 층을 쌓아줬다.
- model.summary() ⇒ cnn을 만든다.
- model.fit_generator(train_generator, validation_data=valid_generator, epcoh=1) ⇒ model을 실행한다.
7. 전이 학습
- 외부 기관에서 층을 여러 개 쌓아 논문화 시켜서 성능을 검증받은 모형을 가지고 와서 사용하는 것이다. 왜 사용하냐면, 기존에 학습되어 있는 결과를 가져와 유사한 프로젝트에 사용하면 데이터가 부족한 상황에서는 조금 더 효과적으로 학습을 시킬 수 있고, 딥러닝 기계가 미리 기초적인 작업을 마친 결과를 가져오면 우리는 기초작업을 생략하고 중요한 feature 만 추출해서 추가적인 작업이 가능하고 형태를 구분하는 학습은 이미 되어 있기 때문에 작업 시간을 줄일 수 있어서 유용하다. 또한 성능이 이미 검증되어 있기 때문에 층을 쌓아서 성능이 나오도록 고생하기보다는 전이 학습을 통해 검증된 모형 학습을 가져와 수정해서 하는 것이 오히려 효과적이다.
- 종류가 매우 다양하기 때문에 하나만 해보면 종류만 바꿔서 사용하면 된다.
8. VGG16
- tensorflow에서 제공하고 있는 VGG16 모형을 라이브러리로 불러온다
- VGG에서 이미지 학습으로 되어있는 것을 가져오고 마지막 부분의 레이어는 가져오지 않고 우리가 붙일 것이기 때문에 include_top을 False로 지정하고 input_shape는 300X300에 color기 때문에 3을 해주고 새로 불러온 부분이 학습하는 것이 아니기 때문에 transfer_model.trainable=False를 해준다.
- summary를 불러온 후 나온 값들을 활용한다.
- model2를 해서 층으로 쌓아서 모델을 만들어준다.
- 마지막 부분이 2차원으로 되어있기 때문에 1차원으로 바꿔준다.
- 계산층 dense를 넣어주고 개와 고양이 softmax 층을 넣어준다.
- 마지막으로 model2.fit_generator(train_generator, validation_data=valid_generator, epochs=1)를 해서 실행한다.
9. InceptionResNetV2
- VGG와 동일한 방법으로 성능이 더 좋은 인셉션 레지넷이라는 것으로 사용해본다.
- model3.add(transfer_model2) ⇒ 인셉션 레지넷을 가져온다.
- model3.add(Flatten()) ⇒ 1차원으로 바꿔줌
- model3.add(Dense(64, activation='relu')) ⇒ 계산하는 dense 층 추가
- model3.add(Dense(2, activation='softmax')) ⇒ 개, 고양이 분류하는 softmax 층 추가
- 그 후 네트워크 모델을 생성한다.
- 마지막으로 model3을 실행한다.
10. 마무리
- result = model3.predict_generator(test_generator, verbose=1, workers=2) ⇒ 예측된 결과값 출력
'🖊️Data Analysis > 📌 DL)개와 고양이 이미지 분석' 카테고리의 다른 글
[Python] 개와 고양이 이미지 분석 (0) | 2021.07.12 |
---|
댓글