koos808

[Python] Image load 대용량 list로 불러오는 방법 본문

Python

[Python] Image load 대용량 list로 불러오는 방법

koos808 2023. 10. 1. 21:56
728x90
반응형
  • Image load 대용량 불러오는 방법
    • 참고 : 램이 커야함
    • pytorch data loader 등 다른 방법도 많으나 해당 방법은 cv2의 imread를 이용하여 image pixel을 list로 저장하는 방법임
    • label 만들어주는 부분과 image를 list로 저장하는 두 부분으로 나누어져 있음
# 기본 셋팅 : 폴더 안의 label과 image(여기서는 neg, pos 2개 0,1로 지정)
data_dir_list = ['negative', 'positive']
total_list = []
img_data_list=[]
label_idx = img_idx = 0
self_label = np.empty(0,dtype='int64')

img_ncol = img_nrow = 224
data_path = train_dir

# 너무 크면 메모리가 터지므로 중간에 한번씩 비워주기(gc.collect() 함수 중간에 삽입하면 됨)
start_time = time.time()
for dataset in data_dir_list:
    img_list = os.listdir(data_path + dataset)

    # make label
    data_label = np.full(len(img_list), label_idx, dtype = 'int64')
    self_label = np.append(self_label, data_label, axis=0)
    label_idx += 1

    for img in img_list:
        img_idx += 1
        input_img = cv2.imread(data_path + '/' + dataset + '/' + img )
        input_img=cv2.cvtColor(input_img, cv2.COLOR_BGR2RGB)
        input_img_resize = cv2.resize(input_img, (img_ncol,img_nrow) )
        img_data_list.append(input_img_resize)

        if img_idx % 500 == 0:
            print('{} /  {}'.format(img_idx, len(img_list)))

        if len(img_data_list) % 30000==0:
            total_list.extend(img_data_list)
            img_data_list = []
print(time.time() - start_time)

 

 

------------------------------------------------------------------------------------------------------------------------------------

728x90
반응형
Comments