CNN-5단계(roboflow 데이터셋 - YOLO8 모델)

joooon na·2023년 9월 20일
0

CNN

목록 보기
3/3
  • ultralytics에서 제작한 Object Detection에 특화된 YOLO8n 모델을 사용할 것이다.
  • 다양한 이미지 데이터셋을 제공하는 roboflow에서 데이터셋을 사용할 것이다.
    • 데이터셋 코드는 원하는 데이터셋 페이지에서 복사해서 얻어오면 됨.
  • roboflow에서 데이터셋 생성하는 방법은 강의자료ppt 참고. 뒤에 잘 나와있음.

1. 실습(데이터셋, 모델 1, 모델 2)

- 데이터셋 불러오기(roboflow)

!pip install roboflow

from roboflow import Roboflow

rf = Roboflow(api_key="vOJCnFpStyQAaxJVYCrE")
project = rf.workspace("projet-va").project("va_projet")
dataset = project.version(7).download("yolov8")

- 방법 1
- 데이터셋이 제공하는 모델 불러오기


- 모델 생성
model_origin = project.version(7).model

- 모델 사용하여 예측하기
model_origin.predict(image_path='https://www.telegraph.co.uk/content/dam/football/2019/08/12/TELEMMGLPICT000206209364_trans_NvBQzQNjv4BqK3Ytq28vYzV8vgytz3tt20cdhPuOVqLHI0GKTHeusDU.jpeg?imwidth=1280',
                     hosted=True,
                     ).save('predicted_originModel.jpg')

- 방법 2-
- ultralytics에서 제공하는 모델 불러오기(YOLO8n)


!pip install ultralytics

from ultralytics import YOLO


model = YOLO(model='yolov8n.pt', task='detect')

model.train(data='coco128.yaml',    
            epochs=10, 
            patience=5,
            save=True,
            project='trained',
            name='trained_model',
            exist_ok=False,
            pretrained=True,       # False는 잘 안씀, 학습된 가중치 불러와서 사용하셈
            optimizer='auto',
            verbose=False,
            seed=2023,
            resume=False,
            freeze=None
            )
         
-------------------------------------------------------------------------------------
<학습에 사용되는 파라미터>
data : 학습시킬 데이터셋의 경로. default 'coco128.yaml'

epochs : 학습 데이터 전체를 총 몇 번씩 학습시킬 것인지 설정. default 100

patience : 학습 과정에서 성능 개선이 발생하지 않을 때 몇 epoch 더 지켜볼 것인지 설정. default 50

batch : 미니 배치의 사이즈 설정. default 16. -1일 경우 자동 설정.

imgsz : 입력 이미지의 크기. default 640

save : 학습 과정을 저장할 것인지 설정. default True

project : 학습 과정이 저장되는 폴더의 이름.

name : project 내부에 생성되는 폴더의 이름.
.
exist_ok : 동일한 이름의 폴더가 있을 때 덮어씌울 것인지 설정. default False

pretrained : 사전 학습된 모델을 사용할 것인지 설정. default False

optimizer : 경사 하강법의 세부 방법 설정. default 'auto'

verbose : 학습 과정을 상세하게 출력할 것인지 설정. default False

seed : 재현성을 위한 난수 설정

resume : 마지막 학습부터 다시 학습할 것인지 설정. default False

freeze : 첫 레이어부터 몇 레이어까지 기존 가중치를 유지할 것인지 설정. default None
---------------------------------------------------------------------------------------------



- 모델 예측
model.predict(source = 'https://www.livingstreets.org.uk/media/7732/roath-adult-hoop.jpg',
              save=True, save_txt=True, line_width=2,)
---------------------------------------------------------------------------------------------
<모델 예측에 사용되는 파라미터>
source : 예측 대상 이미지/동영상의 경로

conf : confidence score threshold. default 0.25

iou : NMS에 적용되는 IoU threshold. default 0.7. threshold를 넘기면 같은 object를 가리키는 거라고 판단.

save : 예측된 이미지/동영상을 저장할 것인지 설정. default False

save_txt : Annotation 정보도 함께 저장할 것인지 설정. default False

save_conf : Annotation 정보 맨 끝에 Confidence Score도 추가할 것인지 설정. default False

line_width : 그려지는 박스의 두께 설정. default None
---------------------------------------------------------------------------------------------

2-1. 실습(예측 데이터가 여러개의 이미지인 경우)

- 앞 과정은 생략.


- model 학습
model2.train(epochs=100,
            verbose=True,
            patience=5,       # mAP[:50] : mAP[50:95] = 1 : 9
            seed=2023,
            pretrained=True
            )


# 1. 폴더를 하나 만들고
!mkdir /content/imgs                

# 해당 폴더에 x_test 데이터를 넣는다.
!wget -O /content/imgs/img1.jpg https://raw.githubusercontent.com/DrKAI/image/main/14th_Street_2005.jpg         
!wget -O /content/imgs/img2.jpg https://raw.githubusercontent.com/DrKAI/image/main/street02.jpg


- 모델 예측
results = model2.predict(source='/content/imgs',          # 변수에 담아냄
                         save=True,
                         line_width=2)
                       
- 모델 예측 결과 생성
for result in results :            
    boxes = result.boxes

2-2. 실습(예측 데이터가 동영상인 경우)

- 앞 과정은 생략.


- model 학습
model2.train(epochs=100,
            verbose=True,
            patience=5,       # mAP[:50] : mAP[50:95] = 1 : 9
            seed=2023,
            pretrained=True
            )

- 모델 예측
results = model2.predict(source='https://youtu.be/RGLPlKtCgd8?si=WhYAsbhtul46FudD',
                        save=True,
                        line_width=2,
                        stream=True
                        )

- 모델 예측 결과 생성
for result in results:
    boxes = result.boxes  # Boxes object for bbox outputs    
profile
배고프다

0개의 댓글