YOLO-NAS와 웹캠을 사용한 실시간 수화 언어 감지
제목: 미국 수화 알파벳 인식을 위한 YOLO 모델 학습 및 테스트 방법
목차
- 소개
- 필요한 패키지 설치
- YOLO 모델 및 가중치 불러오기
- 데이터셋 다운로드 및 준비
- 모델 학습
- 모델 성능 평가
- 랜덤 이미지 및 동영상 테스트
- 웹캠 테스트
- 모델 내보내기
- FAQ
소개 📚
이 비디오 튜토리얼에서는 YOLO 모델을 사용하여 수화 알파벳 인식을 수행하는 방법을 알아볼 것입니다. 우리는 로보플로우에서 제공하는 수화 알파벳 데이터셋을 사용하여 YOLO 모델을 수정하고 훈련시킬 것입니다. 이후에는 랜덤 이미지와 동영상을 사용하여 모델을 테스트하고, 실시간 웹캠 피드에서도 모델을 테스트할 것입니다. 마지막으로, 훈련된 모델을 Onyx 형식으로 내보낼 것입니다.
1. 소개
이 비디오 튜토리얼에서는 YOLO 모델을 사용하여 미국 수화 알파벳 인식을 수행하는 방법에 대해 살펴보겠습니다. 먼저, 로보플로우에서 제공하는 수화 알파벳 데이터셋을 사용하여 YOLO 모델을 수정하고 훈련시킵니다. 이후, 랜덤 이미지와 동영상을 사용하여 모델을 테스트하고, 실시간 웹캠 피드에서도 모델을 테스트합니다. 마지막으로, 훈련된 모델을 Onyx 형식으로 내보냅니다.
2. 필요한 패키지 설치
먼저, 필요한 패키지를 설치해야 합니다. 이를 위해 다음 명령을 실행합니다.
!pip install opencv-python
!pip install supergradients
위 명령을 실행하여 opencv-python과 supergradients 패키지를 설치합니다.
3. YOLO 모델 및 가중치 불러오기
다음으로, YOLO 모델과 가중치를 불러와야 합니다. YOLO 모델은 robflow에서 제공하는 수화 알파벳 데이터셋에 대해 사전 훈련된 모델을 기반으로 fine-tuning하게 됩니다. 다음 코드를 사용하여 모델과 가중치를 불러옵니다.
from supergradients import models
model = models.get_model('yolo-small')
model.load_weights('path/to/weights')
위 코드에서 path/to/weights
를 실제 가중치 파일의 경로로 대체해야 합니다.
4. 데이터셋 다운로드 및 준비
데이터셋을 다운로드하여 Google Colab 노트북으로 가져와야 합니다. 데이터셋을 가져오기 위해 다음 단계를 따릅니다.
- 먼저, 로보플로우 웹사이트로 이동하여 미국 수화 알파벳 데이터셋을 다운로드합니다.
- 데이터셋을 Google Colab 노트북으로 업로드합니다. 업로드한 데이터셋은 "data" 폴더에 저장합니다.
다음은 데이터셋을 로드하는 코드입니다.
import os
import cv2.cv2 as cv2
data_dir = 'data'
train_dir = os.path.join(data_dir, 'train')
val_dir = os.path.join(data_dir, 'val')
test_dir = os.path.join(data_dir, 'test')
train_images = [cv2.imread(os.path.join(train_dir, img)) for img in os.listdir(train_dir)]
train_labels = [img.split('.')[0] for img in os.listdir(train_dir)]
val_images = [cv2.imread(os.path.join(val_dir, img)) for img in os.listdir(val_dir)]
val_labels = [img.split('.')[0] for img in os.listdir(val_dir)]
test_images = [cv2.imread(os.path.join(test_dir, img)) for img in os.listdir(test_dir)]
test_labels = [img.split('.')[0] for img in os.listdir(test_dir)]
위 코드에서 data_dir
변수에는 데이터셋이 위치한 폴더의 경로를 입력해야 합니다.
5. 모델 학습
이제 모델을 학습합니다. YOLO 모델을 익숙한 데이터셋에 맞게 fine-tuning하고 가중치를 조정합니다. 훈련 코드는 다음과 같습니다.
training_params = {
'max_epochs': 25,
'loss': 'pp-yoloe-loss',
'optimizer': 'adam',
'metrics': {
'mean_avg_precision': 0.5
}
}
model.compile(loss=training_params['loss'], optimizer=training_params['optimizer'])
model.fit(train_images, train_labels, validation_data=(val_images, val_labels), epochs=training_params['max_epochs'])
위 코드에서 training_params
변수에는 학습에 필요한 매개변수를 설정해야 합니다. 훈련 이미지와 레이블 변수에는 실제 학습에 사용할 이미지와 레이블 데이터를 입력해야 합니다.
6. 모델 성능 평가
다음으로, 훈련된 모델의 성능을 평가합니다. 평가 방법은 다음과 같습니다.
results = model.evaluate(test_images, test_labels)
위 코드에서 results
변수에는 모델의 평가 결과가 저장됩니다.
7. 랜덤 이미지 및 동영상 테스트
테스트 때 사용할 랜덤 이미지와 동영상을 선택합니다. 다음 코드는 선택한 이미지와 동영상을 테스트하는 방법을 보여줍니다.
import random
random_image = random.choice(test_images)
random_video = random.choice(test_videos)
predicted_image = model.predict(random_image)
predicted_video = model.predict(random_video)
위 코드에서 predicted_image
와 predicted_video
변수에는 모델의 예측 결과가 저장됩니다.
8. 웹캠 테스트
실시간으로 웹캠 피드를 사용하여 모델을 테스트할 수도 있습니다. 다음 코드는 실시간 웹캠 피드에서 수화 알파벳을 인식하는 방법을 보여줍니다.
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
# 모델 예측 코드 추가
# 결과를 화면에 표시
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q'를 눌러서 종료
break
cap.release()
cv2.destroyAllWindows()
위 코드에서 모델 예측 코드와 결과 표시 코드를 추가해야 합니다. 'q' 키를 눌러 프로그램을 종료할 수 있습니다.
9. 모델 내보내기
훈련된 모델을 다른 포맷으로 내보내는 것도 가능합니다. 다음 코드는 모델을 Onyx 형식으로 내보내는 예입니다.
model.export('custom.onyx')
위 코드에서 custom.onyx
는 모델을 저장할 파일 이름입니다.
10. FAQ
Q: 어떤 GPU를 사용해야 할까요?
A: Google Colab에서는 T4 GPU를 사용하기를 권장합니다.
Q: 데이터셋에서 이미지와 레이블을 어떻게 불러와야 할까요?
A: cv2 모듈을 사용하여 이미지를 불러오고, 레이블은 이미지 파일 이름을 기반으로 생성합니다.
Q: 훈련된 모델의 성능을 어떻게 평가할 수 있나요?
A: evaluate() 함수를 사용하여 테스트 이미지와 레이블을 평가합니다.
Q: 어떻게 실시간 웹캠 피드에서 모델을 테스트할 수 있나요?
A: OpenCV를 사용하여 웹캠에서 프레임을 읽은 후, 모델을 사용하여 예측 결과를 출력합니다.