ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TEST IMAGE Sequence 상속 받아서 예측하기 (CNN Baseline 연계)
    딥러닝/딥러닝 Baseline 2022. 11. 10. 12:38

    제목과 같이 테스트 이미지도 단순 for문을 통해서 image -> tensor 변형이 어려울 때 , sequence 를 사용할 수 있다.

    이때 train data에서 사용한 sequence 그대로 쓰면 안되고 약간 변형만 해주면 된다. 

    (label 내용들만 빼면 된다.)

     

    # TEST 데이터를 불러온다 (당연히 label은 right answer라서 없다)
    
    PATH_TEST = 'test data 경로' 
    
    glob(PATH_TEST + "/*/*")    # *를 바꿔가며 이미지 경로 .jpg 단위확장자까지 잘들어가는지 확인 후
    
    test = pd.DataFrame([])
    
    test["image_files"] = glob(PATH_TEST + "/*/*")   
    
    test_image_path = test["image_files"].values 
    
    # TEST 데이터용 Sequence 선언
    
    class test_data_set(Sequence):
        
        def __init__(self , image_filenames , batch_size = BATCH_SIZE , augmentor = None , pre_func = None , shuffle = None):
            
            self.image_filenames = image_filenames 
            # label 내용 삭제 
            self.batch_size = BATCH_SIZE 
            self.augmentor = augmentor 
            self.pre_func = pre_func 
            self.shuffle = shuffle
            
        def __len__(self):
            return int(np.ceil(len(self.labels)/self.batch_size))
        
        def __getitem__(self, index):
            
            image_name_batch = self.image_filenames[index * self.batch_size : (index+1)* self.batch_size]
            
            image_batch = np.zeros((image_name_batch.shape[0],IMAGE_SIZE , IMAGE_SIZE , 3))
            
            for image_index in range(image_name_batch.shape[0]):
                image = cv2.cvtColor(cv2.imread(image_name_batch[image_index]) , cv2.COLOR_BGR2RGB)
                image = image/ 255.0
                image = cv2.resize(image , (IMAGE_SIZE , IMAGE_SIZE))
            
                if self.augmentor is not None:
                    image = self.augmentor(image = image)["image"]
                if self.pre_func is not None:
                    image = self.pre_func(image)
                
                image_batch[image_index] = image
                
            return image_batch # return 은 image batch만
        
        
        def on_epoch_end(self):
            if(self.shuffle):
                self.image_filenames, self.labels = sklearn.utils.shuffle(self.image_filenames , self.labels)
            else:
                pass
                
                
     ### TEST data 인스턴스 생성 
     
     test_ds = data_set(test_image_path) ## label 넣을 필요 없어요 헷갈리지 않기 
     
     pred_sequence = model.predict(test_ds)  # 학습모델은 baseline 참조
    
     #pred_sequence.shape 결과 (전체 이미지 크기 , 라벨숫자) 차원이면 제대로 된 것 
     
     result = [np.argmax(value) for value in pred_sequence]
     
     categories = pd.factorize(train["image_labels"])[1] # 이미지 크기 작을때와 동일
     final_result =  categories[result]
     
     # to_csv로 제출하면 완료 
     # submission file 활용

    위와 같이 참조해서 진행하면 된다.

Designed by Tistory.