웹 캠이 모델이 학습한 사진들과 비교했을 때 밝기와 해상도에 차이가 있다고 판단하여 데이터들의 밝기를 임의로 조정하여 증강한 데이터셋을 만들었다.
기존 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)
그랬더니, 데이터셋이 비어있거나 이미지를 잘못 불러들어오는 상황은 발생하지 않고 학습이 수행되었다.
기존보다 완벽하게 성능이 올라갔다고 판단할 수는 없지만 그래도 성능이 조금은 개선된 것을 확인하였다.
2. 데이터의 밝기를 높여 증강한 데이터셋으로 이미 학습된 모델에 추가 학습 진행