Text to 몽타주 AI 만들기 - 데이터 전처리
이번 글은 세 번째 토이 프로젝트의 데이터 전처리에 대한 글입니다. 또 다시 시작된 가상 환경 설정, pip install, Error, 그리고 Wandb까지... 등등 힘겨운 우열곡절(?) 끝에 겨우 학습을 시킨 후, 토이 프로젝트 3에 대한 글을 쓸 수 있게 되었습니다. 데이터 전처리의 경우는 경로 설정 등의 부분 빼고는 대부분 영상을 따라하시면 되고, 약간의 오타(?) 부분을 수정하면 데이터 전처리를 수행할 수 있습니다. 그럼 데이터 전처리 과정에 대해서 살펴보도록 하겠습니다.
- 사용 데이터 : 페르소나 기반의 가상 인물 몽타주 데이터
- 데이터 링크 (AI 허브)
■ 데이터 전처리
AI 허브로부터 받는 데이터의 크기는 약 10GB 정도되고 데이터는 이미지 데이터와 JSON 파일로 구성되어 있습니다. 데이터를 다운받는 데, 조금 시간이 걸리니 이점을 유의해주세요. 데이터를 다 받으셨으면 01. 데이터에서 Training과 Validation에서 라벨링데이터에서 TL 파일(압축 파일)을 사용하시면 됩니다. TL 파일의 압축을 푸시면 Images 폴더와 json 폴더를 확인할 수 있습니다.
1. 라이브러리 import
from glob import glob
from tqdm import tqdm
import os, json
from pathlib import Path
from shutil import copy2
2. 데이터 경로 지정
base_path = '데이터 위치 경로'
json_list = glob(os.path.join(base_path, 'json/*/*.json'))
print(len(json_list))
3. 데이터 확인 (1)
for json_path in json_list:
with open(json_path, 'r') as f:
meta_data = json.load(f)
print(meta_data)
break
4. 데이터 확인 (2)
for json_path in json_list:
with open(json_path, 'r') as f:
meta_data = json.load(f)
print(meta_data['description']['impression']['description'])
print(meta_data['sketch_info']['img_path'])
print(meta_data['org_sketch_info']['img_path'])
break
5. preprocessed 폴더에 데이터 옮기기 + 데이터 path를 text로 파일로 만들기
target_path = '프로젝트경로/preprocessed'
img_list = []
label_list = []
os.makedirs(target_path, exist_ok=True)
os.makedirs(os.path.join(target_path, 'images'), exist_ok=True)
os.makedirs(os.path.join(target_path, 'labels'), exist_ok=True)
for i, json_path in enumerate(tqdm(json_list)):
with open(json_path, 'r') as f:
meta_data = json.load(f)
if 'impression' in meta_data['description']:
text = meta_data['description']['impression']['description']
else:
# print(meta_data['descripton'][0])
text = meta_data['description']['face']['description']
img_path = os.path.join(base_path, meta_data['sketch_info']['img_path'][1:])
orig_img_path = os.path.join(base_path, meta_data['org_sketch_info']['img_path'][1:])
target_img_path = os.path.join(target_path, 'images', str(i).zfill(5) + '_' + os.path.splitext(os.path.basename(json_path))[0] + '.jpg')
target_orig_img_path = os.path.join(target_path, 'images', str(i).zfill(5) + '_' + 'orig_' + os.path.splitext(os.path.basename(json_path))[0] + '.png')
target_label_path = os.path.join(target_path, 'labels', str(i).zfill(5) + '_' + os.path.splitext(os.path.basename(json_path))[0] + '.txt')
target_orig_label_path = os.path.join(target_path, 'labels', str(i).zfill(5) + '_' + 'orig_' + os.path.splitext(os.path.basename(json_path))[0] + '.txt')
img_list.append(target_img_path)
img_list.append(target_orig_img_path)
label_list.append(target_label_path)
label_list.append(target_orig_label_path)
copy2(img_path, target_img_path)
copy2(orig_img_path, target_orig_img_path)
with open(target_label_path, 'w') as f:
f.write(text)
with open(target_orig_label_path, 'w') as f:
f.write(text)
print(len(img_list), len(label_list))
6. 데이터 저장 및 확인
import numpy as np
np.savetxt(os.path.join(target_path, 'image_list.txt'), img_list, fmt='%s')
np.savetxt(os.path.join(target_path, 'label_list.txt'), label_list, fmt='%s')
image_path = Path(os.path.join(target_path))
image_files = [
*image_path.glob("**/*[0-9].txt"),
*image_path.glob("**/*[0-9].jpg"),
*image_path.glob("**/*[0-9].png"),
]
len(image_files) / 2
7. TEST SET
val_img_list = glob(os.path.join('C:/Users/Server1/Desktop/Toy_Project/1. Project_3/preprocessed', 'val/*.jpg'))
len(val_img_list)
np.savetxt(os.path.join('C:/Users/Server1/Desktop/Toy_Project/1. Project_3/preprocessed', 'image_list_test.txt'), val_img_list, fmt='%s')
8. 결과
마무리
여기까지 토이프로젝트 3의 데이터 전처리 과정이었습니다. 다음에는 학습을 위한 과정을 수행하는 것을 순차적으로 보여드리도록 하겠습니다. 전처리는 정말 쉽게 넘어갈 수 있었지만 이후, 학습을 위해서 중간에 정말 많은 절차와 오류들을 물리치느니라, 포기할 뻔(?) 했지만 그래도 블로그에... 써놓은 것이 있으니 아까워서라도 해야겠다는 생각으로 겨우 겨우 해낼 수 있었던 것 같습니다. 역시 누군가의 프로젝트를 따라하는 것은 정말 쉬운 일은 아닌 것 같습니다. 그럼 이번 글은 여기까지 작성하고 다음 글로 찾아뵙겠습니다. 오늘도 화이팅입니다~!
'Personal Projects > Toy Projects' 카테고리의 다른 글
[토이 프로젝트 3] 범인의 몽타주 그려주는 AI - 학습 (1), VQVAE (0) | 2024.12.13 |
---|---|
[토이 프로젝트 3] 말하는대로 범인의 몽타주를 그려주는 AI 만들기 (0) | 2024.12.06 |
[토이 프로젝트 2] 여행지 추천 AI 만들기 - 데이터 전처리 & 학습 (0) | 2024.12.05 |
[토이 프로젝트 2] 내 취향을 고려한 여행지 추천 AI 만들기 (0) | 2024.12.01 |
[토이 프로젝트 1] 내 목소리로 동화책 읽어주는 AI 만들기 - 학습 & TEST (0) | 2024.11.30 |