고민 과정

참고 코드

skin_type_infection 데이터 전처리

08.18

해야할 것

  1. 이미지 증강 (레이블 당 1000개) _auto augment (open source)

# git - autoaugment 불러오기 위해서 py 파일 다운받고 같은 디렉토리에 넣기
# 각각의 샘플에 대해 업데이트 수행

import os
from PIL import Image
from autoaugment import ImageNetPolicy
from torchvision import transforms

# 손상된 이미지를 부분적으로 로드할 수 있도록 Pillow에게 지시하는 방법
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

# 원본 이미지가 있는 폴더 경로
source_dir = "C:/Users/82102/Desktop/GCP/augment/akiec"

# 증강된 이미지를 저장할 폴더 경로
save_dir = "C:/Users/82102/Desktop/GCP/augment/akiec_aug"

# 증강을 위한 변환 설정
transform = transforms.Compose([
    transforms.RandomResizedCrop(224), 
    transforms.RandomHorizontalFlip(), 
    ImageNetPolicy(), 
    transforms.ToTensor(), 
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# 만약 저장 디렉토리가 없다면 생성
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

# source_dir 안의 모든 이미지 파일에 대해서
for img_name in os.listdir(source_dir):
    if img_name.lower().endswith(('.png', '.jpg', '.jpeg')): # 이미지 파일만 처리
        img_path = os.path.join(source_dir, img_name)
        
        # 이미지 열기
        pil_image = Image.open(img_path)
        
        # 원본 이미지에 대해 2번의 증강을 수행
        for i in range(2):
            # 증강 및 변환 적용
            augmented_image = transform(pil_image)
            
            # Tensor를 PIL 이미지로 다시 변환
            pil_image_aug = transforms.ToPILImage()(augmented_image)
            
            # 증강된 이미지 저장
            save_path = os.path.join(save_dir, f"augmented_{i+1}_{img_name}")
            pil_image_aug.save(save_path)

print("Image augmentation completed!")

akiec (327장), akiec_aug (654장) > squamous_cell_carcinomas (981장) _원본 이미지에 대해 2번 증강

df (115장), df_aug (575장) > Dermatofibroma (690장) _원본 이미지에 대해 5번 증강 (이거 데이터ㅠ 그냥 삭제할까)

vasc (142장), vasc_aug (710장) > Vascular_skin_lesions (852장) _원본 이미지에 대해 5번 증강

일반적으로 이미지 증강은 2-5회가 적당

과적합 조심 !!

(이미지가 적은데도 굳이굳이 학습시킨 이유 >>> 메타데이터 csv 파일이 있기 때문에 이미지 데이터가 부족해도 예측을 더 정확하게 할 수 있는 방법이 있어서)

이미지 증강 완료 > 버킷에 올리는 과정 진행 (akiec(완료) > df(완료) > vasc(완료))

혹시 모르니까 코드 써서 개수 확인 > 완료