에이블 스쿨

[10주차] 딥러닝(8)_roboflow 모델링 실습

메롱메롱메롱나 2024. 11. 11. 02:00

roboflow : 모델링을 하기 전에 이미지를 annotation하고 전처리 및 증강을 할 수 있도록 도와주는 툴

https://roboflow.com/

 

Roboflow: Computer vision tools for developers and enterprises

Everything you need to build and deploy computer vision models, from automated annotation tools to high-performance deployment solutions.

roboflow.com

 

<겨울왕국 엘사, 안나, 올라프 판별 모델>

1. 이미지 수집

-> 클래스 별로 약 50~70장의 이미지를 수집 (손아픈데 귀여워서 좀 힐링)

 

이렇게 수집한 이미지들을 로보플로우에 업로드

 

2. annotation 작업

-> annotaion작업 창에서 클래스의 정답 바운딩 박스를 그리고 해당 클래스명을 입력

 

-> 작업이 끝난 후 학습, 검증, 평가 데이터의 비율을 설정하면 알아서 구분을 해줌

 

3. 전처리 및 증강

-> 전처리(사이즈 동일하게 변경)

 

-> 증강 : 데이터의 수를 늘려줌(회전, 잡음-흐리게/모자이크한 이미지를 추가)

 

4. 데이터셋 생성

-> 생성 완료된 데이터셋은 코드로 불러와서 사용 가능하다

 

5. 데이터셋 불러오기

# 로보플로 라이브러리 설치
!pip install roboflow

# 로보플로 라이브러리 불러오기
from roboflow import Roboflow

# 내가 생성한 데이터셋 가져오기
rf = Roboflow(api_key="NC4XvKNglXgbBmjwOS2x")
project = rf.workspace("project-lgek9").project("exam_1108-gkbjw")
version = project.version(3)
dataset = version.download("yolov11")

 

6. 모델링

# 라이브러리 설치 (ultralytics의 yolo모델을 사용하기 위함)
!pip install ultralytics

#####################################
## 10/30 기준 해당 설정 필요
import os
os.environ['WANDB_MODE'] = 'disabled'
#####################################

# 모델 불러오기
from ultralytics import YOLO, settings

# 데이터셋 경로 수정 (데이터셋의 경로를 현재 경로로 수정)
settings['datasets_dir'] = '/content/'
settings

-> 내가 만든 데이터셋이 저장 ( 각각의 이미지들도 다 들어있음. label(정답) 데이터는 바운딩 박스의 좌표로 들어감) 

-> data yaml파일에는 데이터셋의 정보가 들어있음. 

    (데이터 경로, 클래스의 이름과 수)

 

7. 모델 사용

# 모델의 가중치 선택. yollo11중 nano버전을 사용
model_transfer = YOLO('yolo11n.pt')

# 모델 학습
results_train = model_transfer.train(model='/content/yolov11n.pt', # 모델 경로
                                     data='/content/exam_1108-3/data.yaml', # yaml경로
                                     epochs=15,# 15번 학습
                                     seed=2024, # 시드설정을 통해 매번 동일한 값을 얻을 수 있음
                                     pretrained=True, # 사전학습된 모델을 사용(yolo)
                                     )

 

8.예측하기

(1) 이미지 예측 (conf, iou 임계값을 조정해가며 확인해보기)

# 이미지를 집어넣어 예측하는 코드
image_path = 'https://e1.pxfuel.com/desktop-wallpaper/858/575/desktop-wallpaper-olafs-frozen-adventure-anna-elsa-adventure-anna-frozen-elsa-and-anna.jpg'
results_pred = model_transfer.predict(source=image_path,
                                      conf=0.6,    # 기본값이 0.25
                                      iou=0.4,     # 기본값이 0.7
                                      save=True,
                                      )
# 결과 바로 출력해서 볼 수 있게 -> 이거 설정 안하면 detct파일에서 결과 이미지 볼 수 있음 
results_pred[0].show()

 

-> 예측도가 꽤 높게 나왔는데, 사실 학습에 사용했던 이미지인듯 (확실히 올라프가 특이하게 생겨서 예측이 높은 듯)

 

-> 어릴때 사진도 각 10장 정도 학습 시켰는데, 비슷하게 생겨서 그런가 잘 예측함

 

-> 안나가 부모님을 많이 닮았구나 ... 우리 엘사는요..

 

(2) 동영상 예측

예측이 꽤 높기도 하고 학습 데이터에 어떤 이미지를 넣었는지 기억이 안나서 동영상도 해봤음

# !mkdir /content/videos

# !wget -O /content/videos/01.mp4 https://github.com/DrKAI/image/raw/main/No_Way_This_Happened.mp4
# !wget -O /content/videos/02.mp4 https://github.com/DrKAI/image/raw/main/Guy_slips_20th_century_remix.mp4
# !wget -O /content/videos/03.mp4 https://github.com/DrKAI/image/raw/main/kid_dream.mp4

from google.colab import drive
drive.mount('/content/drive')# 내 구글 드라이브에 연결

# 동영상 1
results = model_transfer.predict(source='/content/drive/MyDrive/DX_Deep/Yolo/video2.mp4', # 동영상 파일 경로
                        save=True,
                        stream=True,
                        )

for r in results :
    r.boxes

-> 옆모습의 예측도는 확실히 정면보다 떨어짐

 

->엥 ;;;

 

-> 올라프도 진짜 빠르게 지나가는데 예측을 하긴 함

 

-> 뒷모습까지 예측할 줄은 몰랐음 (아주 굿)

 

이미지 학습을 많이 시켰는데도 이정도 예측성능이면 아주 굿잡 !!!!!! 

728x90