본 프로젝트는 사전 학습된 Inception v3 CNN 모델을 사용하여 고양이 이미지의 품종(Tabby Cat, Tiger Cat)을 예측하고, 해당 예측 확률 값을 피처(Feature)로 활용하여 **SVM(Support Vector Machine)**으로 두 품종 간의 의사결정 경계(Decision Boundary)를 분류 및 시각화하는 파이토치(PyTorch) 및 머신러닝 실습 노트북입니다.
- PyTorch Hub를 사용하여 ImageNet 데이터셋으로 사전 학습된 Inception v3 모델을 불러옵니다.
- 모델 입력에 맞게 데이터를 정규화하기 위한 커스텀 PyTorch Module인
Normalize클래스를 정의하고 모델 파이프라인의 첫 단계로 구성합니다. (ImageNet 평균:[0.485, 0.456, 0.406], 표준편차:[0.229, 0.224, 0.225])
- 입력 이미지를 Inception v3 입력 규격인
299x299크기로 조정(Resize&CenterCrop)하고 텐서로 변환합니다. - 특정 URL에서 고양이 이미지를 다운로드받아 모델에 입력한 후 소프트맥스(Softmax)를 거쳐 상위 5개의 ImageNet 클래스 및 예측 확률을 출력합니다.
- ImageNet 클래스 인덱스 281: 얼룩고양이 (tabby, tabby cat)
- ImageNet 클래스 인덱스 282: 호랑이고양이 (tiger cat)
- 총 12장의 고양이 이미지(Tabby Cat 이미지 6장, Tiger Cat/Toyger 이미지 6장)를 활용하여 각 이미지별 Tabby Cat(281)과 Tiger Cat(282)의 예측 확률 데이터를 수집합니다.
- 수집된 데이터는 아래와 같은 2차원 피처 공간 상의 좌표로 표현됩니다.
- X축: 얼룩고양이 확률 (Tabby Cat Probability [%])
- Y축: 호랑이고양이 확률 (Tiger Cat Probability [%])
- Label: 얼룩고양이(0), 호랑이고양이(1)
scikit-learn라이브러리의svm.SVC모델을 사용하여 선형 커널(kernel='linear') 기반의 SVM 분류기를 학습시킵니다.- 두 클래스를 가장 잘 구분하는 최적의 결정 초평면(Decision Hyperplane)과 마진(Margin)을 계산합니다.
matplotlib를 사용하여 2차원 좌표 평면에 고양이 데이터 포인트를 산점도(Scatter Plot)로 나타냅니다.- 학습된 SVM의 결정 경계(실선)와 서포트 벡터의 마진 경계(점선)를 평면에 함께 시각화하여 분류 성능을 한눈에 확인합니다.
본 노트북을 실행하기 위해서는 아래의 라이브러리들이 설치되어 있어야 합니다.
pip install torch torchvision numpy matplotlib pillow scikit-learn- Python 3.7+
- PyTorch & Torchvision (CUDA 가속 사용 가능 권장)
- NumPy
- Matplotlib
- Pillow (PIL)
- Scikit-Learn
- Jupyter Notebook 또는 Google Colab을 실행합니다.
Cat_classifying.ipynb파일을 열어 모든 셀을 순서대로 실행합니다.- 이미지 URL 로드 시 네트워크 연결이 필요하므로 인터넷 환경에서 실행해 주세요.
- 마지막 셀 실행 후 화면에 출력되는 SVM 의사결정 경계 시각화 그래프를 확인합니다.
노트북이 정상적으로 실행되면, Tabby Cat과 Tiger Cat 예측 확률의 선형 관계와 이를 나누는 검은색 SVM 결정 초평면(Decision Boundary)이 시각화됩니다.
- Tabby Cat 확률이 높은 영역(주로 우측 하단)과 Tiger Cat 확률이 높은 영역(주로 좌측 상단) 사이에 깔끔한 경계가 생성되는 것을 볼 수 있습니다.