[TIL] Keras functions

wandajeong·2023년 5월 8일
0

TIL with chatGPT

목록 보기
3/5
profile_images = []
ear_images = []

for i in range(1, 61):
    # Profile Images
    profile_img_path = f"{profile_path}/{i}.png"
    profile_img = tf.keras.preprocessing.image.load_img(profile_img_path, target_size=(320, 320))
    profile_img = tf.keras.preprocessing.image.img_to_array(profile_img)
    profile_img = tf.keras.applications.vgg16.preprocess_input(profile_img)
    profile_images.append(profile_img)

    # Ear Images
    ear_img_path = f"{ear_path}/{i}.png"
    ear_img = tf.keras.preprocessing.image.load_img(ear_img_path, target_size=(320, 320))
    ear_img = tf.keras.preprocessing.image.img_to_array(ear_img)
    ear_img = tf.keras.applications.vgg16.preprocess_input(ear_img)
    ear_images.append(ear_img)

profile_images = np.array(profile_images)
ear_images = np.array(ear_images)

위 코드는 프로파일 이미지와 귀 이미지를 로드하여 전처리하는 코드입니다.
먼저 profile_imagesear_images 리스트를 생성하고, 반복문을 사용하여 1부터 60까지의 이미지 파일을 로드하여 각 리스트에 추가합니다. tf.keras.preprocessing.image.load_img() 함수를 사용하여 이미지를 로드하고, target_size 인수를 사용하여 이미지 크기를 조정합니다. 그리고 img_to_array() 함수를 사용하여 이미지를 넘파이 배열로 변환합니다. 마지막으로 tf.keras.applications.vgg16.preprocess_input() 함수를 사용하여 이미지를 VGG16 모델에 입력할 수 있는 형태로 전처리합니다.
로드한 이미지들은 넘파이 배열로 변환되어 profile_imagesear_images 변수에 저장됩니다. 이제 이 변수들을 VGG16 모델에 입력으로 사용할 수 있습니다.

1. tf.keras.applications.vgg16.preprocess_input()에 대해 더 설명해줘

tf.keras.applications.vgg16.preprocess_input() 함수는 VGG16 모델에 입력하기 위해 이미지를 전처리하는 함수입니다. 이 함수는 넘파이 배열로 된 이미지를 입력으로 받아, 해당 이미지를 VGG16 모델에 적합한 형태로 전처리합니다.
VGG16 모델은 다음과 같은 전처리 과정을 거친 이미지를 입력으로 받습니다.
1. 이미지를 RGB 채널 순서로 바꿉니다.
2. 각 채널마다 평균값을 뺍니다.
3. 이미지를 0과 1 사이의 값으로 스케일링합니다.
따라서 tf.keras.applications.vgg16.preprocess_input() 함수는 다음과 같은 작업을 수행합니다.
1. 이미지를 RGB 채널 순서로 바꿉니다.
2. 각 채널마다 평균값을 뺍니다. 이때, VGG16 모델의 학습 데이터셋의 RGB 채널 평균값을 사용합니다.
3. 이미지를 BGR 채널 순서로 바꿉니다. 이유는 VGG16 모델이 BGR 채널 순서로 학습되었기 때문입니다.
4. 이미지를 0과 1 사이의 값으로 스케일링합니다.
이러한 전처리 과정을 거친 이미지를 VGG16 모델에 입력으로 사용하면, 모델이 더욱 높은 정확도로 예측을 수행할 수 있습니다.

2. 각 채널마다 평균값을 빼는 이유가 뭐야?

각 채널마다 평균값을 빼는 이유는 모델이 이미지를 처리할 때 채널 값의 분포를 일정하게 유지하기 위해서입니다.
일반적으로 이미지의 픽셀 값은 0~255 범위에 있습니다. 그러나 이 범위는 데이터셋에 따라 상이할 수 있습니다. 예를 들어, 어두운 이미지의 경우 대부분의 픽셀 값이 0~100 사이일 수 있고, 밝은 이미지의 경우 대부분의 픽셀 값이 150~255 사이일 수 있습니다.
따라서 모델이 학습할 때 이러한 분포 차이가 발생하면, 학습이 제대로 이루어지지 않을 수 있습니다. 따라서 입력 이미지를 평균값으로 빼면 채널 값의 분포를 일정하게 유지할 수 있습니다. 이를 통해 모델이 학습을 보다 일관성 있게 수행할 수 있게 됩니다.
VGG16 모델은 ImageNet 데이터셋을 기반으로 학습되었으며, ImageNet 데이터셋의 RGB 평균값을 사용하여 각 채널에서 평균값을 빼는 것이 일반적입니다.

profile
ML/DL swimmer

0개의 댓글