yolov5 custom train 3

박선후·2021년 7월 13일
1

yolov5

목록 보기
3/6

보행자 데이터셋 전처리하기

보행자 데이터셋 Link
https://data.vision.ee.ethz.ch/cvl/aess/dataset/

위 데이터의 사진들을 보니 이미지 수는 작지만 instance수가 많아 해당 데이터들을 사용하기로 했다. 내가 사용한 이미지는 총 2601장이다. 하지만 instance로만 따지만 1만정도 되기 때문에 학습에는 충분할 것이라고 생각되었다. 그래서 annotion 파일을 확인해 보니 .idl 형식이였다.

그래도 라벨링 형식 자체는 그 전과 같이 xmin, ymin, xmax, ymax 인 것을 확인하여, txt 파일로 변환 후 전에 했던 것과 같이 코드를 수정해 전처리를 진행했다.

  • 전처리 코드
import os
from PIL import Image

output_dir = 'pedestrain4/output/'
img_dir = 'pedestrain4/images/'

def convert(size, box):
    dw = 1./size[0]
    dh = 1./size[1]
    x = (box[0] + box[1])/2.0
    y = (box[2] + box[3])/2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = round(x*dw,6)
    w = round(w*dw,6)
    y = round(y*dh,6)
    h = round(h*dh,6)
    if w <0 or h < 0:
        return False
    return (x,y,w,h)

f_input = open('pedestrain4/annos4.txt','r')
items=f_input.readlines()
    
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

for item in items:
    #이미지 이름 가져오기
    data=item.split(':')
    img_name=data[0].split('/')
    file_name=img_name[1][:-5]

    #이미지 사이즈 가져오기
    image = Image.open(img_dir+file_name+'.png')
    width = int(image.size[0])
    height = int(image.size[1])

    #바운딩박스 위치 가져오기 및 변환
    info=data[1].split('(')
    bound=[]
    for i in info[1:]:
        j=i[:-3].split(', ')
        xmin = j[0]
        xmax = j[2]
        ymin = j[1]
        ymax = j[3]
        b = (float(xmin), float(xmax), float(ymin), float(ymax))
        bb = convert((width, height), b)
        if bb == False:
            continue
        bound.append(bb)

    #변환한거 저장하기
    f = open(output_dir + file_name + '.txt', 'w')
    for k in bound:
        f.write('4' + " " + " ".join([str(a) for a in k]) + '\n')
    
    print(file_name+' '+'complete')

이전 글(yolov5 custom train2)에 썻던 코드를 베이스로 여러개의 instance를 하나의 txt에 담아내기 위해 for문을 추가했다. 또한 이미지크기보다 라벨범위가 넘어간 것이 있어 실제 라벨파일에는 음수가 나오는 경우가 있었다. 따라서 convert 메소드에

if w <0 or h < 0:
	return False

을 추가해 주어 라벨이 음수인 경우에는 continue를 실행하도록 하였다.

  • 전처리 결과

yolov5 custom train1, 2, 3에서의 전처리한 데이터를 종합해하여 yolov5 custom train을 다시 진행하고 있다. 아직은 학습 중이기 때문에, 학습이 완료되는 대로 글을 추가하겠다.

profile
공부노트

0개의 댓글

관련 채용 정보