아까 질문했던 사람인데 코드 보여주면 도와주겠다는 천사들 있어서 다시 글 남긴다...
이건 데이터셋 입력 코드
jpeg랑 레이블파일(txt)이랑 파일명도 같고, 한 폴더 안에도 넣었음. 총 데이터는 333개.
이건 레이블 파일 형식
맨 윗줄이 label, 아래가 x_min, y_min, width, height임
문제의 코드인데, yolov5를 돌리기 위해서 json으로 변환하려 작성한 코드임.
줄바꿈으로 비어있는 줄 위는 잘 돌아감.
윗덩어리에 for문을 덕지덕지 발라놓은 이유는 label 파일 형식이 불러오면 [ label, [x_min, y_min, width, height] ]
이지랄로 2차원으로 바뀌기 때문.
아래 with open ~ 코드가 문제임.
lines에 [ label, x_min, y_min, width, height ] 이 리스트를 한 덩어리로 꺼내서 line에 넣어야 되는데,
왠지는 몰라도 각각 데이터의 label, 그러니까 lines[0]에 해당하는 값을 차례로 꺼내서 line에 넣음.
거기다가 for문은 리스트가 아니라 순차적으로 변수 자체를 줄바꿈해서 반환하니, x_center = float(line[1])의 슬라이싱이 먹히지 않을 뿐더러,
온갖 이중 for문에, split, strip, 다른 패키지까지 긁어와서 해도, 결국 for문의 line에는 데이터셋의 맨 첫 데이터만 저장됨.
line의 원소는 1개가 되어버리고, 그러다보니 [1]을 슬라이싱 하려니 없는 원소라서 이 오류가 뜸
결국 333개의 label.txt를 각각 하나씩 뽑아서
x_center에는 [ x0, x1, x2, ... x332 ]가 저장돼야 될 테고,
나머지 변수들도 마찬가지...
글도 개길고 남의 코드 고쳐주는 게 여간 귀찮은 일 아닐텐데... 영웅 출현 기대해본다...
결론. 도와주세요...
일단 첫번째 open 끝나고 lines에 원하는대로 잘 들어가는지부터 찍어보던가
대충 읽어보니까 lines가 [idx, x1, y1, x2, y2] 가 되는거같은데 얘를 다시 루프에 넣으면 line이 순서대로 idx, x1, y1, x2, y2가 나오는데 그걸 각각 split하면 될리가있나
yolov5 라벨데이터는 클래스당 한줄로 처리하고 x_center, y_center, width, height 아님? 거기에 각 좌표에 이미지 해상도 나눈 0~1 사이의 값 사용할텐데