1.mp4
- iOS
- UIKit
- GCD (DispatchSemaphore)
- AVFoundation
- Vision
- CoreML
- Server
- Flask
- MySQL
- AWS
- Machine Learning
- OpenCV
- Scikit learn
- Pytorch
비문으로 강아지를 분류하려면 먼저 강아지 얼굴에서 강아지 코를 찾을 수 있어야합니다.
물론 클라이언트로부터 강아지 코를 지정하여 입력받을 수도 있지만 사용자가 엉뚱한 사진으로 강아지를 등록하는 것을 방지하기 위해 검증된 강아지 코만 입력받아야 합니다.
때문에 강아지 코를 찾기위한 객체 탐지(Object Detection) 모델이 필요합니다.
객체 탐지 분야에서 유명한 YOLO(You Only Look Once)중 YOLOv5 모델을 사용하여 강아지 코 탐지 모델을 구현하였습니다.
Stanford의 Dogs Dataset 중 해상도가 높은 사진을 3060장 골라 직접 라벨링하여 모델을 학습하였습니다.
강아지 코를 촬영할 때 그늘지면 주름이 잘 보이지 않습니다.
주름 무늬가 잘 보이도록 어두운 부분을 밝게 펴주는 전처리가 필요합니다.
CLAHE는 히스토그램 높이에 제한을 둬서 특정 높이 이상에 있는 pixel 값들을 재분배하는 이미지 평탄화 방식입니다.
CLAHE를 적용 전 이미지
CLAHE를 적용 후 이미지
이미지로만 분류한다면 처리해야하는 텐서의 차원이 높아지고 높은 차원의 입력을 처리하기 위해서는 복잡한 모델이 요구됩니다.
예를들어 100x100x3 이미지라면 30000개의 특징들이 존재하게 됩니다.
이미지 분류에 있어서 이미지의 크기와 필요한 학습 데이터 수는 비례합니다.
하지만 사용자에게 100장 이상의 강아지 사진을 요구할 수는 없습니다.
따라서 입력의 차원을 줄여주는 전처리 과정이 필요합니다.
먼저 평탄화한 이미지에서 특징을 추출합니다. 특징 추출 알고리즘은 SIFT를 사용합니다.
그 후 추출한 특징을 100차원 벡터로 변환하여 분류합니다. 벡터화 알고리즘은 K-means Bag of Words 기법으로 구현하였습니다.
100차원의 벡터로 변환된 이미지를 SVM 모델을 이용하여 분류합니다.
Scikit leran의 SVM을 이용하여 분류하였습니다.