[33일차] ABC 부트캠프 / 최종 프로젝트 준비(3)
우리 조의 새로운 이름이다.
프로젝트 명과 조 이름을 새롭게 바꿔보았다.
이 아이디어도 공대생들에게 나온것이 아닌 인문대생의 아이디어이다.
그럼 공대생들은 대체 무엇을 하고 있는걸까?
바로 코딩이다.
오늘부터 본격적으로 냉장고에 들어갈 재료가 무엇인지 분류하는 모델을 설계하려고 한다.
이미지 분류 모델에는 크게 CNN과 YOLO 모델이 존재한다.
우리 조는 두개의 모델을 전부 설계하여 프로젝트에 맞는 모델을 선택하기로 했다.
모델을 설계하기 전 역할분담을 정하여 각자 맡은 일에 집중하려고 했다.
우선은 모델설계, 학습데이터 수집 및 전처리, 데이터 시각화로 분담하였다.
나는 모델설계에서도 YOLO 모델 설계를 맡게 되었다.
모델을 설계하기 위해 부트캠프에서 제공받은 Colab Pro 계정을 사용했다.
Colab Pro 계정은 유료 GPU를 사용할 수 있어 모델 학습 시 걸리는 시간을 크게 단축할 수 있다.
import os
import zipfile
zip_file_path = '/content/drive/MyDrive/ingredients_dataset.zip'
extract_to_path = '/content/drive/MyDrive'
# 압축 해제
with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
zip_ref.extractall(extract_to_path)
Colab에서는 폴더 자체가 업로드 되지 않아 데이터셋 압축파일을 업로드 후 코드를 통해 압축을 해제하였다.
# YOLOv5 저장소 클론
!git clone https://github.com/ultralytics/yolov5.git
# YOLOv5 디렉토리로 이동
%cd yolov5
# 필요한 의존성 설치
!pip install -r requirements.txt
YOLOv5 모델을 사용하기 위해서는 깃허브 URL에서 YOLO 저장소를 클론하여 디렉토리에 복사하는 과정이 필요하다.
또한 의존성 패키지를 설치하여 모델을 실행하고 학습시키기 위한 모델을 준비한다.
!python train.py --img 416 --batch 16 --epochs 300 --data
"/content/drive/MyDrive/ingredients_dataset/data.yaml"
--cfg ./models/yolov5s.yaml --weights yolov5s.pt --name food_ingredients_model
이 코드가 한줄로 이루어졌다.
이때 알게된 사실이지만 Colab Pro 계정을 사용한다고 해도 유료 GPU를 무한히 사용할 수 있는건 아니였다.
주어진 컴퓨팅 단위를 소진한다면 Pro 계정이여도 더는 유료 GPU를 사용할 수 없게 된다.
이때도 에포크를 300으로 설정했더니 유료 계정임에도 상당히 오랜 시간이 소요되었다.
# 모델 로드
import torch
model = torch.hub.load('ultralytics/yolov5', 'custom', path='/content/drive/MyDrive/ingredients_dataset/yolov5/runs/train/food_ingredients_model2/weights/best.pt')
import cv2
from google.colab.patches import cv2_imshow
img_path = '/content/drive/MyDrive/common.jpeg'
img = cv2.imread(img_path)
# YOLO 모델로 이미지 분류
results = model(img_rgb)
results.print()
results.show()
위 코드를 통해 학습된 모델을 불러오고 내가 원하는 이미지를 입력하여 이미지가 분류되었는지 평가하는 코드를 작성해보았다.
나는 위 이미지를 모델에 입력하였을 때 모델은 위 달걀 이미지를 어떻게 분류하였을까?
정상적으로 객체를 탐지하고 이미지를 분류하였다.