※ Notification
본 게시글에서 오탈자나 잘못된 부분이 있다면 댓글로 알려주시면 수정하도록 하겠습니다 :)
본 포스팅에서는 Dataset을 구성할 때 Data file과 label file이 동일한지 확인하는 과정을 다루겠다.
Dataset은 Data file name과 label file name이 동일하게 매칭되어야 한다.
하지만 간혹 파일의 일부가 손실되거나, Dataset이 잘못 만들어진 경우 Data file과 lable file의 이름이 일치하지 않는 경우가 있다.
이러한 경우 해당 Data에 대하여 처리가 필요한데, 그 처리 과정을 알아보자.
Data file과 label file이 모두 매칭되는지 확인하기 위해 다양한 방법이 존재할 것이다.
하지만 본 포스팅에서는 set()
을 이용한 처리 과정에 대해 이야기하겠다.
대략적인 처리 과정은 다음과 같다.
import os
DATA_ROOT_DIR = '/data_directory_path'
IMAGE_DATA_DIR = os.path.join(DATA_ROOT_DIR,'/images')
LABEL_DATA_DIR = os.path.join(DATA_ROOT_DIR,'/labels')
IMAGE_EXTENSION = '.jpg'
LABEL_EXTENSION = '.txt'
먼저 디렉토리 및 확장자 변수를 선언해준다.
image_file_list = []
label_file_list = []
image_file_name_list = []
label_file_name_list = []
image_file_name_set = set()
label_file_name_set = set()
image_label_difference_set = set()
image_label_intersection_set = set()
그 후 file name들이 담길 list와 set 변수를 선언해준다.
image_file_list = os.listdir(IMAGE_DATA_DIR)
label_file_list = os.listdir(LABEL_DATA_DIR)
image_file_list.sort()
label_file_list.sort()
# image file name 추출
for index in range(len(image_file_list)):
image_name = image_file_list[index].split(IMAGE_EXTENSION)[0] # image file name
image_file_name_list.append(image_name)
image_file_name_set = set(image_file_name_list) # 이미지 파일 이름 집합생성
# label file name 추출
for index in range(len(label_file_list)):
label_name = label_file_list[index].split(LABEL_EXTENSION)[0] # label file name
label_file_name_list.append(label_name) # 정답 파일 이름 집합생성
디렉토리의 file name을 가져오기 위해 위와 같이 코드를 작성해준다.
label_file_name_set = set(label_file_name_list) # 정답 파일 이름 집합생성
# image file / label file name 비교
image_label_difference_set = image_file_name_set - label_file_name_set # 차집합
if len(image_label_difference_set) == 0:
print('※ image is exactly same as label ※')
else:
print('※ image is not same as label ※')
# TO_DO code
이미지 파일이 존재하더라도 정답 파일이 존재하지 않으면 쓸모가 없으므로 정답 파일을 기준으로 비교해준다. 그 후 image file name
과 label file name
이 동일한지 안내 문구를 출력해주도록 코드를 작성하였다. image file name
과 label file name
이 동일하지 않을 경우 별도의 처리 코드를 작성해 처리해주도록 하자.
Data file name
과 label file name
이 당연히 같을 것이라고 생각하지 말자.
특히나 데이터셋을 구성할 때 해당 내용을 잘 기억하도록 하자.