12주차] 모델 성능 향상을 위한 수행-밝기 조절된 데이터 추가 학습

zlwmxkdla·2023년 11월 15일
0

웹 캠이 모델이 학습한 사진들과 비교했을 때 밝기와 해상도에 차이가 있다고 판단하여 데이터들의 밝기를 임의로 조정하여 증강한 데이터셋을 만들었다.

기존 UTK Faces 데이터셋 -> (밝기 변화) -> 증강한 데이터셋

이 증강한 데이터셋을 vgg16 을 기반으로 학습한 모델에 추가 학습을 진행하였다.


위에가 밝기 변화된 데이터셋들이다.
그런데 기존에 combined_agumented_faces로 학습한 모델에 추가 학습하기 위해서는 위의 데이터셋들의 구조와 형태를 combined_agumented_faces형태로 맞추어줘야 한다.

우선,

해당 데이터셋들을 학습하기 위해 엑셀 파일로 만들었다.
업로드중..

모델 학습하는 과정에서 문제점 봉착: 데이터셋이 비어있거나 이미지를 잘못 읽어들이는 문제점

예상 원인 1) 이미지들 중 이미지 크기가 매우 작은 것이 존재할 수도 있음--> 출력해보았다.
업로드중..

모두 200x200으로 이미지 크기로 인한 문제는 아닌 것 같다.

예상 원인2 ) 훈련 및 테스트 데이터셋이 비어있어서 발생하는 문제일 수도 있다.--> 확인해보았다.
데이터셋이 비어있는 경우 ValueError를 발생시키고, 비어있지 않은 경우에만 모델을 훈련하고 저장한다.

해당 원인이 주요 원인인지는 모르겠지만..
'데이터셋이 비어있다'는 의미를 잘 모르겠어서 데이터들을 확인해봤는데
업로드중..

화면 안에 꽉 차지 않는 데이터들이 비어있는 데이터를 의미하는 것인가?

--> 어쩌면 저렇게 잘린 사진들 때문에 그러한 결과가 나올 수도 있다고 판단

<해결 과정>

기존에는 밝기 변수 값은 0.5~1.5 사이의 값으로 두어 무작위적으로 밝기가 변화된 사진을 만들어냈는데, 웹 캠은 보통 일반 사진보다 어둡다는 점을 감안하여 밝기 값을 0.6으로 고정시켜 증강을 진행하였다.

1. 데이터의 밝기를 낮춰 증강한 데이터셋으로 이미 학습된 모델에 추가 학습 진행

아래는 밝기를 조정하도록 하는 코드



def adjust_brightness(input_path, output_path, brightness_factor):
    """
    이미지 파일의 밝기를 조절하는 함수
    :param input_path: 입력 이미지 파일 경로
    :param output_path: 조절된 이미지를 저장할 경로
    :param brightness_factor: 밝기 조절 계수 (0보다 작으면 어두워지고, 1보다 크면 밝아짐)
    """
    image = Image.open(input_path)
    adjusted_image = image.point(lambda p: p * brightness_factor)
    adjusted_image.save(output_path)

def adjust_brightness_folder(input_folder, output_folder, brightness_factor):
    """
    폴더 내의 모든 이미지 파일의 밝기를 일괄 조절하는 함수
    :param input_folder: 입력 이미지 파일이 있는 폴더 경로
    :param output_folder: 조절된 이미지를 저장할 폴더 경로
    :param brightness_factor: 밝기 조절 계수 (0.5로 하면 상당히 어두워짐, 1보다 크면 밝아짐)
    """
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):  # 이미지 파일 확장자에 따라 조절
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, filename)
            adjust_brightness(input_path, output_path, brightness_factor)

if __name__ == "__main__":
    input_folder = '/content/combined_faces/UTKFace'
    output_folder = '/content/drive/MyDrive/GraduationCapston/Foreigner_age_predict/change_brightness_UTK'
    brightness_factor = 0.6  # 조절하고자 하는 밝기 계수

    adjust_brightness_folder(input_folder, output_folder, brightness_factor)

그랬더니, 데이터셋이 비어있거나 이미지를 잘못 불러들어오는 상황은 발생하지 않고 학습이 수행되었다.

업로드중..

기존보다 완벽하게 성능이 올라갔다고 판단할 수는 없지만 그래도 성능이 조금은 개선된 것을 확인하였다.

  • 'your_updated_model.h5'파일이 어두운 밝기 화면에서의 추가된 데이터를 학습하여 갱신된 모델 학습 파일이다.
  • 'age_add_darkedData' 파일이 코드 파일이다.
  • 'Change_Dark' 파일이 데이터의 밝기를 낮춰주는 코드 파일이다.

2. 데이터의 밝기를 높여 증강한 데이터셋으로 이미 학습된 모델에 추가 학습 진행

  • 'your_updated_model.h5_2'파일이 밝은 밝기 화면에서의 추가된 데이터를 학습하여 갱신된 모델 학습 파일이다.
  • 'age_add_lightedData' 파일이 코드 파일이다.
  • 'Change_Lighted' 파일이 데이터의 밝기를 높여주는 코드 파일이다.
profile
개발 공부 기록

0개의 댓글

관련 채용 정보