머신러닝/영상인식

영상인식, roboflow, 데이터라벨링, 가지고 있는 데이터를 이용해 모델 만들기

Olivia-BlackCherry 2025. 3. 9. 16:51

https://app.roboflow.com/

 

Sign in to Roboflow

Even if you're not a machine learning expert, you can use Roboflow train a custom, state-of-the-art computer vision model on your own data.

app.roboflow.com

 

 

roboflow에서 회원가입 후, 프로젝트 만들기

 

roboflow에 프로젝트 만들기

 

라벨링

 

 

1) roboflow에서 모델 학습

 

해당 모델로 테스트한 결과

20250309_155819.mp4
0.20MB

 

 

2) colab에서 모델 학습

!pip install roboflow

from roboflow import Roboflow
rf = Roboflow(api_key="API KEY넣기!!")
#URL보면 workspace이름과 project이름을 알 수 있음!
project = rf.workspace("olivia-2t8pq").project("tennis-ball-detection-mgxke")
version = project.version(1)
dataset = version.download("yolov5")

 

여기서 에러가 진짜 많이 난다....

나도 여기서 zip파일이 이상하게 생성이되서 곤욕을 많이 치루었다. 

계속 zip파일 이름이 roboflow.zip이라고 나오고, 실제 폴더에 가서 파일압축을 풀어도 텅텅 비어있고..

아무리 GPT한테 물어도 몇 시간 삽질을 해도 해결이 안된다~~

BadZipFile: File is not a zip file

이 에러만 주구장창 뜬다.

 

결국 어디에서 에러가 해결되냐면, 워크스페이스 이름과 프로젝트 이름이다. 

간단히 생각하면 쓰여져 있는 그대로가 이름이라고 생각할 수 있지만 정확한 id는 URL을 봐야한다. 

나 역시 olivia라고 만들었던 워크스페이스가 뒤에 개인화된 암호가 더 붙어있었다.

이걸 붙이니 바로 해결되었다.

폴더에 train, test, valid set 모두 잘 들어왔다~~

 

또는 roboflow에서 곧바로 download dataset을 눌러서 코드를 복사해도 좋다. 

 

그 다음에는 폴더 구조를 바꿔준다.

import shutil 
shutil.move("tennis-ball-detection-1/test", "tennis-ball-detection-1/tennis-ball-detection-1/test")
shutil.move("tennis-ball-detection-1/train", "tennis-ball-detection-1/tennis-ball-detection-1/train")
shutil.move("tennis-ball-detection-1/valid", "tennis-ball-detection-1/tennis-ball-detection-1/valid")

 

model학습

!yolo task=detect mode=train model=yolov5l6u.pt data={dataset.location}/data.yaml epochs=30 imgsz=640

task=detect

mode = train

model= yolov5l6u.pt 훈련에 사용할 욜로5 모델 파일을 지정

data= 데이터셋 위치를 지정

data.yaml 파일에는 학습에 사용할 데이터셋에 대한 정보(클래스와 경로) 포함

epochs 에폭

imgsz 이미지 입력 사이즈

 

모델이 "/content/{project_name}" 폴더에 다운로드됩니다.

 

학습 결과를 살펴보면, 그다지 좋은 모델은 아니다. 50-90 구간의 평균 정확도가 낮기 때문이다. 

에폭횟수도 적고, 데이터셋도 적기 때문에 어쩔 수 없다..:)

 

  • P (Precision): 정확도. 높은 값일수록 모델이 정확하게 객체를 감지.
  • R (Recall): 재현율. 높은 값일수록 모델이 놓친 객체가 적음.
  • mAP50: IoU(Intersection over Union) 50%에서의 평균 정확도. 높을수록 모델이 객체를 잘 분류함.
  • mAP50-95: IoU가 50%에서 95%까지 다양한 기준에서의 평균 정확도.

 

마지막 가장 좋은 모델이 어디에 저장되어 있는지 알려준다.

 

해당 모델을 다운로드하여 사용하면 된다!!

 

 

3. 나의 input데이터를 가지고 해당 모델에 적용

다시 파이참으로 돌아와서 코드를 적고 해당 모델을 이용해 새로운 데이터를 적용해본다.

from ultralytics import YOLO
#Load the Model
model = YOLO("models/best.pt")
results = model.predict("input_videos/input_video.mp4", conf=0.2, save=True, show=True)

 

result는 run에서 볼 수 있다.

ㅋㅋㅋ

움직이는 볼을 캐치할 수 있지만, 나머지 것들도 모두 볼로 잡아버리는 아주...쓸모 없는 모델이다.

하지만 과정을 공부하는 것이기 때문에 성공으로 판단한다.

 

오늘도 열공!!