모든 코드는 아래 깃허브에 올려놓았습니다.
https://github.com/lsjsj92/keras_basic
지난번까지 multi classification 이미지 분류를 해봤습니다
하지만 모든 카테고리 분류가 multi이지는 않죠~
그래서 이번에는 이진 분류(binary classification)을 해보겠습니다
cat dog로 해볼게요
개냐 고양이냐?를 판단하는 이미지 분류 작업입니다
폴더는 2개입니다
cat, dog 즉, 고양이 강아지 이렇게 입니다.
그리고 각 폴더 아래에 이렇게 고양이 사진들이 있죠.
고양이와 강아지(개) 사진은 크롤링해서 긁어 왔습니다
그리고 각 사진은 25000개 정도 있습니다.
데이터는 충분한 것 같네요
keras의 ImageDataGenerator를 굳이 사용안해도 될 것 같았습니다.
저는 사진 크기를 64x64 크기로 변환할 것입니다.
그래서 weight와 height를 64씩 주었습니다.
그 다음으로 이제 이미지 변환을 해줍니다.
각 이미지를 가지고 와서 RGB형태로 변환해준 뒤 resize해줍니다.
그리고 그 값을 numpy 배열로 바꾸고 배열에 추가해주죠.
동시에 category 값도 넣어줍니다(Y)
이제 컨볼루션 레이어(Conv2D)를 통해 이미지 인식 레이어를 구축합니다.
input_shape에는 64, 64, 3 값이 들어갑니다.
MaxPooling2D는 2x2사이즈로 지정해주고요
각 padding은 same, 마지막 출력층을 제외한 activation은 렐루(relu)로 합니다
그리고 얘는 2진 분류(카테고리가 2개)이니까 binary값으로 출력을 지정해줍니다.
val_loss값이 5번 이상 상승되지 않으면 자동적으로 멈추게 했습니다.(오버피팅, overfitting 방지)
batch_size는 64, epochs는 100번씩 돌면서 model을 fit 시켰습니다.
그 결과는 아래와 같습니다.
뭔가 불안정해 보이기도 하지만
훈련은 잘 되었습니다
정확도는 87%정도 나오네요
컨볼루션 레이어 계층들을 조금씩 수정해주거나 등등 하면 92%까지 올라가는 것을 확인했습니다.
이제 predict를 해볼까요?
해당 이미지 말고 전혀 다른 이미지로 예측을 해보았습니다.
테스트할 이미지를 변환할 소스입니다.
맨 처음 이미지를 RGB로 변환할 때와 같습니다.
그리고 해당 이미지를 predict합니다
테스트할 파일은 아래와 같이
2개의 폴더에 들어가있구요
전혀 다른 이미지로 구성되어 있습니다
이제 테스트를 해볼까요?
이렇게 나오네요
역시 100%가 아니라서 맞추지 못하는 것도 있습니다.
그래도 되긴되네요~