본문 바로가기
프로그래밍/비전

yolo v7 로컬에서 학습 데이터 만들기 (1) (환경설정, 이미지데이터 다운 후 라벨링 하기)

by 훨훨날아 2022. 12. 6.

https://www.youtube.com/watch?v=-QWxJ0j9EY8 

※ 기초부터 알고 따라하는 것이 아니라 중간중간 잘못된 설명이 있을 수도 있습니다 ※

다음 유튜브를 보고 YOLO v7을 colab이 아닌 로컬컴퓨터(개인컴퓨터)에서 작동시켜보았습니다. 가장 먼저 코드를 작성할 수 있는 가상환경을 만들어줘야한다. 영상에서는 anaconda prompt를 관리자권한으로 실행시켜 가상환경을 만들어주었다.

파일을 만들고자하는 위치로 이동한 다음 폴더를 만들어준다. (cd 폴더이름 하면 폴더로 이동하고 cd .. 을 입력하면 뒤로가기가 된다)

conda create -n yolov7_custom python=3.9

설치를 시작하고 활성화 시키기 위해 conda activate yolov7_custom 을 입력한다.

(커맨드창이 cls를 입력하여 이전기록을 지울 수 있다)

더보기

prompt창을 이용해서도 실행할 수 있지만 pycham이나 vscode를 이용해서 폴더를 만들어도 되는 것 같다. pycham에서 프로젝트 이름을 yolov7_custom으로 만들고 해당 위치에서 터미널을 이용하여 명령어 입력.

 

 

훈련데이터만들기 (이미지 모으기)

훈련데이터를 만들기 위해 구글에서 이미지를 다운로드하는 라이브러리를 설치해준다. (버전을 지정하는 이유는 최신버전이 잘 작동하지 않아서라고한다) 1)

pip install simple_image_download==0.4

그 다음 특정키워드로 하는 이미지를 다운로드 하는 파이썬 코드를 작성하여 파이썬파일(download_images.py)로 만들어준다.

# download_images.py의 코드

# The main class is Download import it in your project as so

from simple_image_download import simple_image_download as simp 

# Then create a new class instance

response = simp.simple_image_download

# Next you can use response to activate methods 

keyword = ["jonny depp jack", "jack sparrow"] # 키워드를 리스트로 작성

# 작성된 키워드들을 각각 50개씩 다운로드
for kw in keyword:
    response().download(kw, 50)

 

그리고 프롬프트창에서 만든 파이썬코드를 실행시킨다. 

python download_images.py

구글에서 같은 키워드로 검색한 이미지들이 다운로드되어 각각의 키워드 폴더에 들어가는 것을 확인할 수 있다.

이후 다운로드 한 파일중 관련없는 파일을 지우고 하나의 폴더에 넣어준다.

 

 

 

 

훈련데이터만들기 (이미지 주석달기 annotation 하기)

이제 각각의 이미지에 어떤 정보가 있는지 레이블 하는 작업을 해야한다.

다시 프롬프트 창에서 다음코드를 입력하여 레이블을 도와주는 프로그램 설치후 

pip install labelImg

labelmg 를 프롬프트 창에 입력시켜 실행시킨다.

labelmg

프로그램을 실행시키면 다음과 같은 프로그램이 실행된다.

 

이미지 파일을 지정하고 레이블포멧을 yolo로 설정한 뒤 사각형을 이미지에서 지정해주면 레이블을 할 수 있다. 그다음 옆이미지로 넘어가면 같은 작업을 반복해주면 된다. 구분해야할 객체가 여러개 있다면 한 화면에서 또 다른 사각형을 그려 레이블링하면된다.

한번 레이블링하면 다음이미지에서는 이전에 만들었던 레이블리 남아있어 새롭게 만들지 말고 똑같은 것을 선택해주면된다.

 

레이블 후 save할 때마다 지정된 폴더에 yolo의 레이블포멧이 저장된다.

 

레이블 파일을 살펴보면 classes 에는 레이블된 객체의 이름이 있고 ( 첫줄이 0 )

YOLO의 레이블 파일에는 5개의 정보가 있는데 첫번째 해당하는 객체, 바운딩박스의 x,y,widt,height 정보가 들어있다. ( 정규화된 위치와 크기)

그다음 train 과 val 폴더를 만들고 각각 images와 labels폴더를 만들어준다. 각각의 폴더에 일정 비율의 이미지와 레이블을 넣어준다.

 

 

참고

1)

https://pypi.org/project/simple-image-download/

 

simple-image-download

Downloads raw page from google images and searches for images that can be downloaded

pypi.org

 

반응형