TEAM Project (10.17) - Stanford Dogs Dataset (2)
실행 순서
- sit 폴더와 other 폴더에 이미지 데이터 준비
- 이미지를 동일한 사이즈로 조절
ModuleNotFoundError: No module named 'sklearn'
Scikit-learn
Scikit-learn은 Python에서 머신러닝과 데이터 분석을 쉽게 수행할 수 있도록 제공되는 오픈소스 라이브러리
pip install scikit-learn
preprocess.py 작성, train_model.py 작성 후 모델 훈련 시키려고 하는 도중 위와 같은 에러 나옴 ..
위는 사이킷 런이라고하는 머신러닝 알고리즘을 구현한 파이썬 라이브러리! 설치가 안되어있었나봐
image = load_img(image_path, target_size=(224, 224))
image = img_to_array(image) / 255.0
이미지는 일반적으로 행렬로 표현, RGB 컬러 이미지는 3차원을 이루어져 있음
image 크기를 224 X 224 크기로 동일하게 적용시키고, img_to_array으로 이미지를 Numpy 배열로 변환하여 각 픽셀의 값을 직접 접근하고 사용할 수 있게 한다.
그리고 /255.0 (정규화) -> 픽셀 값은 0~255 사이의 정수 값, 딥러닝 모델에서 입력 데이터를 정규화하는 것은 매우 중요, 특히 이미지의 경우 픽셀 값을 0~1 사이의 실수 값으로 변환하는 것이 일반적
- 그래서 이미지를 Numpy 배열로 변환한 뒤 / 255.0 을 해줌으로써 모든 픽셀 값을 255으로 나누어 각 픽셀을 0.0에서 1.0 사이의 값으로 변환해줌
딥러닝 모델은 배치 단위로 데이터를 입력받도록 설계되어 있다.
배치 단위란 한 번에 여러 개의 데이터를 처리하는 방식으로, 모델의 입력 데이터 형태는 보통 (배치 크기, 높이, 너비, 채널)이다.
단일 이미지를 입력하더라도, 모델이 요구하는 입력 형태로 만들기 위하여 배치 차원을 추가해야한다.
1차 test
import numpy as np
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing.image import load_img, img_to_array
# 모델 경로 설정
model_path = r'C:\Users\admin\IdeaProjects\TailsRoute_PJ\VScode\dog_behavior_analysis\models\dog_behavior_model.keras'
# 모델 불러오기
model = load_model(model_path)
print("모델 정상 작동")
#테스트 이미지 로드 및 전처리
image_path = r'C:\Users\admin\IdeaProjects\TailsRoute_PJ\VScode\dog_behavior_analysis\data\sit\n02085782_754.jpg' # 이미지 경로
image = load_img(image_path, target_size=(224, 224)) # 이미지 크기
image = img_to_array(image) / 255.0 # 정류화 (0-1 사이 값으로 변환)
image = np.expand_dims(image, axis=0) # 배치 차원 추가
# 예측 수행
prediction = model.predict(image)
# 결과 출력
if prediction[0][0] >= 0.5:
print(f"예측 결과: 앉기 행동 (확률: {prediction[0][0]:.2f})")
else:
print(f"예측 결과: 기타 행동 (확률: {prediction[0][0]:.2f})")
이미지 자체를 전처리하고 훈련시킨 다음 test한 결과 앉아 있는 모습을 물어보니 다른 기타 행동이라고.. 결과 나옴.. 심지어 확률이 무슨 0.3..?ㅋㅋㅋ
이래서 강사님이 축을 맞춰야된다고 하셨구나..
찾아보니 OpenCV 영상만 되는줄알았는데 이미지 전처리도 되는구나 OpenCV를 활용해서 특정 부분에 중심점을 기준으로 이미지 정렬시켜야함