https://github.com/AlexeyAB/darknet

 

GitHub - AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Da

YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet ) - GitHub - AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object ...

github.com

 

 

저는 Keras에서 만들때 쓰기도 했고 졸업작품에서도 쓰기위해 캔, 종이컵, 페트병 이미지를 수집하였습니다

 

yolov4-tiny 로 진행하였음을 미리 알려드립니다

 

사용한 버전

  • Python = 3.7.7
  • OpenCV = 4.5.1

 

1. 데이터 수집

 

먼저 데이터 수집입니다 대표적인 방법으로는 2가지가 있는데

 

- kaggle 등에서 dataset 을 구하기

다른 사람이 미리 만들어둔 dataset을 이용하는 방법입니다

힘들게 구하러 다닐 필요도 없는게 장점이지만 내가 원하는 dataset 찾기가 힘들죠

 

- 이미지 크롤링 하기

프로그램을 이용하거나 파이썬 코드로 크롤링을 하는 방법입니다

손으로 하는것 보다 빠르게 학습 데이터를 모을수 있습니다 다만 모은 데이터를 한번 정리는 해야겠죠

프로그램을 이용하는건 크롬의 Fatkun 같은 어플을 이용하시면 되고

파이썬 코드는 구글에 검색하면 매우 많이 있으니 스킵 하겠습니다

 

 

 

그리고 클래스별로 모든 사진을 512*512 정사각형 형태로 resize합니다

(512*512 가 아니여도 너무 작지만 않으면 상관없습니다)

(resize 하기전에 이름이 한글이거나 특수기호가 있을수도 있기때문에 이름을 전부 바꾸고 진행합시다)

 

 

다음 파이썬 코드를 사진들이 있는 폴더에서 실행시켜 줍니다

name은 원하는 이름으로

그럼 resize 라는 폴더만에 resize된 사진들이 저장 됩니다

import cv2
import numpy as np
import os

SIZE = 512
wd = os.getcwd()
os.mkdir(wd + '/resize')
save_root = wd +'/resize/'
name = 'paper'

def ImageList(root):
    img_list = []
    
    for file in os.listdir(root):
        try:
            img = cv2.imread(os.path.join(root, file))
            img_list.append((img, file))
        except:
            return
    return img_list


img_list = ImageList(wd)
  
for i, img in enumerate(img_list, start=1):
	i1 = str(i)
	try:
		img1 = cv2.resize(img, (SIZE,SIZE), cv2.INTER_LINEAR)
		cv2.imwrite(save_root + name +' (' + i1.zfill(4) + ').jpg', img1)
	except:
		continue

 

이렇게 클래스별로 2000장 씩

총 6000장의 이미지 파일을 준비했습니다

 

 

 

2. 라벨링

 

라벨링 방법에는 BBox Label Tool, LabelMe, Labelbox 등이 있고

제가 소개할 방법은 BBox Label Tool입니다

 

원본 BBox Label Tool을 이용할 수 도 있지만 여러 클래스를 동시에 라벨링 할 수 있고 변환까지 시켜주는 코드가 있길래 이 코드로 진행해 보겠습니다

https://github.com/andrewhu/Multiclass-BBox-Label-Tool

 

GitHub - andrewhu/Multiclass-BBox-Label-Tool: Multi-class bounding box labeling tool

Multi-class bounding box labeling tool. Contribute to andrewhu/Multiclass-BBox-Label-Tool development by creating an account on GitHub.

github.com

 

 

 

 

github에서 다운을 받은후 폴더를 열어보면  classes 라는 이름의 텍스트 파일이 있습니다

이 텍스트 파일을 본인이 원하는 클래스로 바꾸어 줍니다

그리고 Images, Labels 폴더 안에 클래스 별로 폴더를 하나씩 생성합니다

Images 폴더안에 있는 각 폴더에 해당 이미지들은 전부 넣습니다

 

※ 여기서 폴더는 라벨링 편하게 하기위해 임의로 나눈 것으로 can 폴더안에 paper 이미지가 하나 들어가있거나 동시에 들어있는 이미지가 있어도 상관없습니다

 

 

전부 완료하면 다음과 같은 형태가 되어있습니다

 

Images

- can

-- can사진들

- paper

-- paper 사진들

- plastic

-- plastic 사진들

Labels

- can

- paper

- plastic

classes.txt

main.py

convert.py

..

 

 

이제 main.py를 실행해 줍니다

image Dir에서 디렉토리를 선택하고 Class로 해당 라벨을 선택 후 사각형을 그려줍니다

A, D 버튼으로 라벨이 저장 되면서 해당 디렉토리의 이전, 다음 사진으로 넘어가게 됩니다,

(마지막 사진일 경우에도 D 한번 눌러야 합니다!)

 

 

 

 

 

이 작업이 상당히 오래걸립니다...  하다보면 눈이 엄청 아프니 중간중간 쉬면서 합시다!!

 

 

 

 

 

 

그렇게 작업을 모두 진행하면

Labels 폴더안에 Images 폴더의 사진과 똑같은 이름의 .txt 파일들이 생성된것을 볼수 있습니다

파일을 열어보면 다음과 같은 형태가 보이는데

 

 

이제 convert.py를 실행합니다

그럼 YOLO_Formatted 폴더가 생성되며 이미지와 텍스트 파일이 모두 옮겨지는데 텍스트 파일을 열어보면

 

좌상단 꼭지점 x, 좌상단 꼭지점 y, 우하단 꼭지점 x, 우하단 꼭지점 y, 이미지의 width, 이미지의 height, 클래스 명

의 형태였던 텍스트 파일이

 

클래스 (0, 1, 2),  박스 중앙 x, 박스 중앙 y, 박스 width, 박스 height

의 형태로 변환 된것을 볼 수 있습니다

 

 

https://blueberry-kyu.tistory.com/12

 

'딥러닝 > YOLO' 카테고리의 다른 글

custom data를 이용한 YOLO 학습 (2/2)  (0) 2021.08.21
Windows10 darknet 설치하기  (0) 2021.08.14

+ Recent posts