IT/인공지능

Yolo 커스텀 학습시키기(실시간 객체 인식,데이터셋 수집하는법, 데이터 라벨링 하는법)#1(feat.로보플로우(Roboflow) 사용법)

삥뽕뺑뽕 2022. 11. 23. 19:52

안뇽하세용~! 

티스토리 개설 기념 첫글을 작성해보려구합니당 

초 간단 초등학생도 따라할 수 있는 나만의 학습 인공지능 모델 만들기!!

처음부터 천천히 알려드릴게용 

 

모든 과정은 노트북환경에서 진행됩니다

 

가장먼저해야할것은 데이터셋 수집입니다!! 

Yolo를 사용하여 학습시키기 위해선

데이터셋만 있으면 안돼요!! 

만약 텐서플로우만 사용하여 학습하신다면 데이터셋(이미지)만 있어도괜찮습니당.

하지만 Yolo를 사용하는것이 더 좋을때가 있지요...

저는 개인적으로 텐서플로우만 사용해서 학습했을때보다

Yolo를 사용해서 학습 했을때 더 만족스러운 결과물을 얻었습니당 ㅎ

그러니!

라벨링 작업이 조금 귀찮아도 천천히 따라오셔요.

 

깃허브또는 yolo 자체에서

이미 학습된 욜로 모델들을 많이 찾을 수 있으니,

직접 학습이 너무 어려우실것같은분은

오픈된 모델들을 찾아보시는것도 추천드려요!!

 

*커스텀 학습을 하시고 싶으신분은 저를 따라와주세요.

 

1. 데이터셋 수집하기

 

1) 공공데이터 포털 등 데이터를 오픈하는 기관을 찾아보기

 

2)직접 원하는 데이터셋을 수집하기 ★★★★★

저희는 오늘 이 방법으로 아주아주쉽게 

데이터셋을 수집해볼게요~!!

 

먼저 웹캠이나, 노트북 내장카메라로 사진을 찍어볼게요.

이런 카메라 장치가 없으시다면 

개인 핸드폰에 내장되어있는 연속카메라 기능을 이용해요 좋을것같네요.

 

매우 많은 사진이 필요하니 

초당 프레임을 찍는 코드를 이용해보겠어요.

 

https://bskyvision.com/723

 

[Anaconda+python] 웹캠 영상 프레임 샘플링해서 저장하기(쉽게 이미지 데이터베이스 만들기)

다음 파이썬 코드는 웹캠으로 촬영되는 영상의 프레임을 샘플링해서 이미지 파일로 저장해주는 코드입니다. 특정 대상에 대한 이미지 데이터베이스를 만들기 위해서 작성한 코드입니다. 모든

bskyvision.com

요 선생님의 코드를 참고하였구요.

 

저도 아나콘다를 이용하여 따라해보겠습니다.

아나콘다가 설치 안되신 분은 검색을 통해 쉽게 설치해봅시당.

(사용자 이름 영어여야 과정이 순조롭습니다...)

 

아나콘다를 처음까셨으면

먼저 아나콘다 프롬프트에서 파이썬과 opencv를 설치해주셔야합니다.

요것도 검색으로 매우 간단하게 할 수 있는 작업이니 따로 설명은 않겠습니다.

 

저는 주피터 노트북을 깔아서 아나콘다를 사용하였습니다.

 

이 과정에서 어려움이 있으시다면 아는내에서 도움을 드릴수 있어용 댓글 남겨주세용!!!

 

 

 

import cv2
 
# open webcam (웹캠 열기)
webcam = cv2.VideoCapture(0) #노트북에 내장된 웹캠이 아닌 따로 웹캠을 설치하여 촬영할시 0대신 1을 넣을것
 
if not webcam.isOpened():
    print("Could not open webcam")
    exit()
    
 
sample_num = 0    
captured_num = 0
    
# loop through frames
while webcam.isOpened():
    
    # read frame from webcam 
    status, frame = webcam.read()
    sample_num = sample_num + 1
    
    if not status:
        break
 
    # display output
    cv2.imshow("captured frames", frame)
    
    if sample_num == 4:
        captured_num = captured_num + 1
        cv2.imwrite('./images/img'+str(captured_num)+'.jpg', frame)
        sample_num = 0
        
    
    # press "Q" to stop
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    
# release resources
webcam.release()
cv2.destroyAllWindows()

요거 그대로 사용하시면됩니다!!

 

카메라 앞에서 분류하고 싶은 물건들을 하나씩

15초 정도(자유롭게) 너무 짧게는 안되고!!! 들고 있으면 됩니다~

 

아 그리고 ! 

코드가 있는 폴더 안에 

images폴더를 꼭 만들어주셔야 합니당.

 

기본이지만, 주피터 노트북에서 새롭게 생성한 폴더 또는 코드는

내컴퓨터-C드라이브-사용자-user(사용자이름)

의 폴더 안에 있어요!

결과물입니다.

 

여기서 필요없는 사진들 과감히 삭제 해주시면 됩니다.

(아무것도 찍히지 않은사진 등..)

저는 저희집에 있는 인형들을 구분해볼게용.

 

이 과정을 마치셨으면 다음 단계는 

데이터 라벨링입니다.

 

먼저 저는, 매우 쉬운 데이터 라벨링 방법인 '로보플로우'를 사용해볼게요.

 

https://roboflow.com/

 

Roboflow: Give your software the power to see objects in images and video

With just a few dozen example images, you can train a working, state-of-the-art computer vision model in less than 24 hours

roboflow.com

roboflow 사이트를 활용해서 굉장히 쉽게 데이버 라벨링을 할 수 있습니다.

무료로 이용하실 수 있으니 가입하고 사용해봅시다!!

 

그럼 다음 포스팅은 

roboflow를 이용하여

데이터 라벨링하는 방법을 알아볼게요!! 

 

금방 포스팅할테니 기다려주싀용,,~~!