[YOLO] Roboflow / Colab으로 Object Detection

hwhyeons·2024년 1월 3일

Roboflow + YOLOV8 + Google Colab을 이용해서

객체 인식을 위한 커스텀 모델을 학습해봤습니다.


저는 Roboflow는 개인들이 올려놓은 학습 데이터를 구하기 위해서만 사용했지

이 사이트에서 레이블을 달지는 않고 보통 간단한 작업을 위해

https://www.makesense.ai/ 와 같은 사이트에서 이미지만 업로드해서 레이블을 달아주었는데,

간단한 대신에 나중에 이미 작성한 이미지와 레이블을 다시 불러와서 이어서 작업을 한다든가

아니면 데이터셋들 끼리 합친다든가 등등 잠깐 한번 쓰기에는 정말 좋았지만 큰 프로젝트에서

길게 쓰기는 쉽지 않겠다고 느꼈습니다.


특히, 내가 어느정도 모델을 학습해놓고 그 이후에는 자동레이블링을 통해

내가 학습한 모델로 새로운 데이터셋에 레이블을 할당하는 작업을 위 사이트에서는 할 수 없었기에

anylabeling을 사용해서 커스텀 모델로

auto labeling 기능을 사용했지만, 이를 다시 yolo 포맷으로 바꾸기 위해서 레이블 변환 코드를

작성하고 이걸 다시 any labeling으로 이어서 하기 위해서 다시 변환하고 등등을 하기 위해서는

너무 번거로웠습니다.

(참고로 anylabeling으로 레이블링한 json 레이블은 로보플로우에 업로드가 바로 가능하기 때문에 anylabeling으로 작업 후에 로보플로우에 업로드해서 사용할 수 있습니다)


따라서, 업로드해놓고 나중에 이어서 레이블링 하거나 여러 포맷으로 쉽게 export 할 수 있는

roboflow를 이용했는데 매우 만족스럽습니다.

로보플로우 내에서 학습을 하기 위해서는 유료지만,

개인 프로젝트로 업로드해놓고 데이터 레이블 달고 코랩으로 학습하기에는 이만한게 없는 것 같습니다..!


대학교 3,4학년 때 딥러닝 관련 프로젝트를 몇번 했었는데, 이때는 학습을 하기 위해서

학습 데이터에 레이블링을 다 끝낸 후에 보통 코랩에서 학습하기 위해

구글드라이브에 데이터셋을 업로드 하고 나서 그걸 다시 코랩에서 불러와서 하곤 했었는데,

Roboflow를 이용하면 데이터셋 다운로드 코드를 이용해서 cli로 한번에 학습이 가능한 것도

아주 큰 장점인 것 같습니다.




Roboflow에서 제공하는 예시 이미지를 Colab에서 학습해보기

예시로 로보플로우에서 기본으로 제공하는 이미지 데이터셋을 이용해서 학습해보겠습니다.

로보플로우에 회원 가입하면 기본적으로 예시 프로젝트가 존재합니다.

Hard Hat Sample Image Dataset을 이용해보겠습니다.

프로젝트에서 Export Dataset을 누르고

여기서 show download code를 선택하고 Continue를 선택합니다.

만약 저기서 download zip to computer을 하게 되면, 전처리된 이미지와 레이블이 zip파일로 압축돼서

다운로드 되기 때문에 드라이브에 업로드하거나 로컬에서 학습, 또는 데이터셋을 따로 저장하고 싶다면 zip파일로

받아서 학습해도 상관 없습니다.


코드를 확인하고 나면

!pip install roboflow

from roboflow import Roboflow
rf = Roboflow(api_key="시크릿키")
project = rf.workspace("워크스페이스 이름").project("hard-hat-sample-csf2e")
dataset = project.version(2).download("yolov8")

이렇게 데이터셋을 다운로드할 수 있는 파이썬 코드가 제공됩니다.

이제 Colab에서


# Roboflow
!nvidia-smi
!pip install ultralytics==8.0.20
from IPython import display
display.clear_output()
import ultralytics
ultralytics.checks()
import os
HOME = os.getcwd()
print(HOME)
!mkdir {HOME}/datasets
%cd {HOME}/datasets

!pip install roboflow --quiet

from roboflow import Roboflow
rf = Roboflow(api_key="시크릿키")
project = rf.workspace("워크스페이스 이름").project("hard-hat-sample-csf2e")
dataset = project.version(2).download("yolov8")


%cd {HOME}

!yolo task=detect mode=train model=yolov8n.pt data={dataset.location}/data.yaml epochs=125  plots=True

(참고 링크)

이렇게 jupyter code를 작성 후 실행하면 학습이 진행됩니다

epochs값과 모델의 종류 (yolov8n, yolov8x, yolov8s 등등..)은

맨 아래 줄에서 바꿀 수 있습니다.


validate 코드는

%cd {HOME}

!yolo task=detect mode=val model={HOME}/runs/detect/train/weights/best.pt data={dataset.location}/data.yaml

으로 해볼 수 있습니다.

참고로 학습된 모델은 코랩 좌측에

저 부분을 클릭해서 찾아볼 수 있습니다

(사진으로 보여주고 싶은데 글 작성하는 중에 런타임이 끊겨버려서 사진이 없는점 양해부탁드립니다)

2개의 댓글

comment-user-thumbnail
2025년 1월 22일

감사합니다

1개의 답글