이전 단계의 퀴즈는 잘 통과하셨나요? 아래 파일로 퀴즈 정답과 해설을 제공하니 확인하시고 프로젝트를 계속 진행하세요!
개-고양이 분류기 만들기 (Cat-Dog Classifier)
- [TensorFlow] CNN퀴즈정답 PDF
1. 프로젝트 개요
지금까지 배운 내용을 통해 개-고양이 분류기를 만드는 모델을 만들어봅니다.
개-고양이 분류기 만들기 (Cat-Dog Classifier)
우리는 개와 고양이를 봤을 때, 단번에 구별할 수 있습니다. 100%의 정확도를 보장할 수는 없지만, 일반적으로 귀가 뾰족하고 위로 쳐져 있거나 수염이 조금 길게 나와 있으면 "고양이", 반대로 귀가 쳐져 있고 수염이 짧거나 없으면 "개"라고 판단하기도 합니다. 하지만 만약 기계가 개 혹은 고양이 사진을 판별한다면 어떨까요? 딥러닝은 어떻게 사진을 통해 개와 고양이를 판단하는 것일까요? 이번 프로젝트에서는 합성곱 신경망 네트워크(Convolutional Neural Network, CNN)를 사용하여 개와 고양이를 판별하는 모델을 만들어 봅니다.
개와 고양이
출처 : Pixabay
프로젝트 목표
이번 프로젝트의 목표는 다음과 같습니다.
- CNN을 설계하고 이미지 분류기를 학습시킨다.
- 학습 과정에서 데이터 증식(data augmentation)을 적용한다.
- 학습된 모델을 저장하고 불러올 수 있다.
- 전이학습(transfer learning)을 구현할 수 있다.
2. 프로젝트 요구사항
최종 결과물
모델에게 개/고양이 이미지를 입력으로 주면, 해당 이미지가 개인지 고양이인지를 예측하여 반환합니다.
프로젝트 진행
모든 프로젝트 실습은 첨부되는 Jupyter Notebook 에서 진행되며 차례대로 한 스텝씩 진행하면 됩니다.
프로젝트를 시작하기 위해서 다음 파일을 내려받으시고, Jupyter Notebook을 실행하세요!
! 주의 !
해당 프로젝트의 진행은 꼭 Jupyter Notebook 환경에서만 진행할 수 있습니다.
Jupyter Notebook이 없으시다면, 다음 경로를 통해 프로젝트 실습을 진행하시길 바랍니다.
본 프로젝트는 [Python 3.6], [Tensorflow 2.0.0] 버전에서 제작되었습니다.
원활한 실행을 위해 환경을 동일하게 맞춰주시는 것을 권장드리며, Colab 내 버전 설정은 공지사항을 확인해주세요!
▶ 공지사항 : [프로젝트 안내] 프로젝트 Colab 환경에서의 버전 안내 (pip 설치 후, 런타임 초기화)
update : 2020.04.22
코드 작성 구간
여러분이 작성할 코드 구간을 "[TODO] 코드 구현" 부분에 명시해두었습니다.
##코드시작## 부터 ##코드종료## 구간에 필요한 코드를 작성해주세요. 나머지 명시되지 않은 구간은 임의로 수정하지 마세요!
* file update
2020.03.05 업데이트 (tensorflow 1.0 -> 2.0)
- 02_cnn_tf ZIP
- 텐서플로우 CNN 프로젝트 파일입니다. 상단의 <zip> 버튼을 클릭하여 다운로드 하세요!
- [TensorFlow] Colab사용자안내 PDF
- Colab 사용자를 위한 튜토리얼입니다.
3. 평가기준표
[데이터셋 다운로드 및 훈련, 검증, 테스트 데이터셋 구분]
- 데이터 개수 체크
- 훈련, 검증, 테스트용 데이터셋이 원하는 수만큼 구성이 되어 있는지 파악한다.
[tf.data.Dataset을 이용하여 Input pipeline 만들기]
- 다양한 augmentation 기법을 구현
- resize, random_crop, normalize, central_crop 함수를 구현한다.
- resize, random_crop, normalize, central_crop 함수를 구현한다.
- Input pipeline 구현
- tf.data.Dataset을 이용하여 Input pipeline을 만든다.
[네트워크 설계]
- Convolution layer 설계
- 적절한 출력 채널 수와 필터 크기를 가진 convolution layer를 설계한다.
- 적절한 출력 채널 수와 필터 크기를 가진 convolution layer를 설계한다.
- Batch normalization layer 설계
- 적절한 feature 수를 가진 batch normalization layer를 설계한다.
- 적절한 feature 수를 가진 batch normalization layer를 설계한다.
- ReLU 설계
- ReLU를 activation function으로 사용한다.
- ReLU를 activation function으로 사용한다.
- Maxpooling layer 설계
- 적절한 필터 크기를 가진 maxpooling layer를 설계한다.
- 적절한 필터 크기를 가진 maxpooling layer를 설계한다.
- dense layer 설계
- 적절한 출력 feature 수를 가진 dense layer를 설계한다.
[모델 저장 및 callback 정의]
- save_only_weights
- 모델의 파라미터만 저장한다.
- 모델의 파라미터만 저장한다.
- save_frequency 지정
- 모델 파라미터의 저장주기를 정의한다.
[모델 생성 및 성능 평가]
- 모델 생성
- Cross entropy loss : cross entropy loss function을 정의한다.
- Adam : Adam optimizer를 정의한다.
- 성능 평가
- Accuracy : Model 의 Accuracy를 평가한다.
- model.evaluation() : Model이 잘 학습되었는지 평가한다.
[transfer learning]
- 레이어 수정
- dense layer의 출력 feature 수를 수정한다.
4. 프로젝트 제출방법
본 프로젝트는 2024년 8월 11일자로 리뷰 제출이 중단되었습니다. 대신 여러분 스스로 체크할 수 있는 함수를 제공하고 있습니다.
체크함수는 최소한의 요구사항만 체크할 뿐, Python 문법 등 모든 오류를 체크해주지 않는 다는 것을 유의해주시길 바랍니다.
로컬 환경 실행자
- 모든 실습 완료 후, Jupyter Notebook 을 Ctrl+S 혹은 File > Save and checkpoint 로 저장합니다.
- 제일 하단의 코드를 실행합니다. 여기서 주의할 점은 Jupyter Notebook 의 파일 이름을 수정하시면 안됩니다!
만약에 노트북 이름을 수정했다면 "tensorflow-dnn-project" 로 바꿔주시길 바랍니다. - 모든 평가 기준을 통과하면, 함수 실행 후 프로젝트 "submit" 디렉토리와 압축된 "submit.zip"이 생깁니다.
"dnn_submission.tsv" 파일을 열고 모든 루브릭을 PASS 했는지 확인해보세요!- "dnn_submission.tsv" : 평가기준표에 근거해 각 세부항목의 통과여부(PASS/FAIL)를 확인하는 파일
- "dnn_submission.html" : 여러분이 작성한 Jupyter Notebook 을 html 형식으로 전환한 파일
import check_util.submit as submit
submit.process_submit()
Colab 환경 실행자
- 모든 실습 완료 후, Jupyter Notebook 을 Ctrl+S 으로 저장합니다.
- 제일 하단의 코드를 실행합니다. 코드 실행결과 안내에 따라서 코드를 수정하거나 다음 스텝으로 넘어갑니다.
- 모든 평가 기준을 통과하면, 함수 실행 후 프로젝트 "submit" 디렉토리와 압축된 "dnn_submission.tsv"만 생깁니다.
"dnn_submission.tsv" 파일을 열고 모든 루브릭을 PASS 했는지 확인해보세요!- "dnn_submission.tsv" : 평가기준표에 근거해 각 세부항목의 통과여부(PASS/FAIL)를 확인하는 파일
- "dnn_submission.tsv" : 평가기준표에 근거해 각 세부항목의 통과여부(PASS/FAIL)를 확인하는 파일
import check_util.submit as submit
submit.process_submit()
※ 동료 학습자의 원활한 학습을 위해 프로젝트 관련 소스코드 유출(SNS, Gitlab, Github)을 엄격히 금지합니다.
※ 개발환경의 버전을 맞추는 일은 서버 오류 등의 이슈를 방지할 수 있어 매우 중요합니다. 반드시 권장 버전으로 설치해 주세요.
※ 부스트코스의 프로젝트는 순차적으로 학습하도록 구성되어 있습니다. 프로젝트 진행에 참고 부탁드립니다.