Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

TensorFlow로 꽃 데이터셋의 파일 경로를 (이미지, 레이블) 쌍으로 변환하는 방법

개요

(이미지, 레이블) 쌍을 생성하려면 먼저 파일 경로를 경로 구성 요소(path components) 목록으로 변환합니다. 그다음, 마지막에서 두 번째 값을 클래스 디렉터리 정보로 활용하고, 레이블을 정수 형식으로 인코딩합니다. 이후 압축된 문자열을 텐서(tensor)로 변환한 뒤, 모델 입력에 맞는 크기로 재조정(resize)합니다.

더 읽어보기: TensorFlow란 무엇이며, Keras는 TensorFlow와 어떻게 함께 작동하여 신경망을 구축할까요?

이 글에서는 수천 장의 꽃 이미지를 포함하는 꽃(flowers) 데이터셋을 사용합니다. 이 데이터셋은 5개의 하위 디렉터리로 구성되어 있으며, 각 클래스(꽃 종류)마다 하나의 하위 디렉터리가 존재합니다.

아래 코드는 Google Colaboratory에서 실행됩니다. Google Colab은 브라우저 환경에서 Python 코드를 실행할 수 있도록 도와주며, 별도의 설정 없이 무료로 GPU(그래픽 처리 장치)에 접근할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 구축되었습니다.

print("파일 경로를 (이미지, 레이블) 쌍으로 변환하는 함수")
print("먼저, 경로를 경로 구성 요소의 리스트로 변환합니다")
print("그런 다음, 마지막에서 두 번째 값이 클래스 디렉터리에 추가됩니다")
print("레이블은 정수로 인코딩됩니다")
def get_label(file_path):
   parts = tf.strings.split(file_path, os.path.sep)
   one_hot = parts[-2] == class_names
   return tf.argmax(one_hot)

print("압축된 문자열이 3차원 int 텐서로 변환됩니다")
print("이미지가 필요한 크기로 조정됩니다")
def decode_img(img):
   img = tf.image.decode_jpeg(img, channels=3)
   return tf.image.resize(img, [img_height, img_width])

print("원시 데이터가 파일에서 문자열 값으로 로드됩니다")
def process_path(file_path):
   label = get_label(file_path)
   img = tf.io.read_file(file_path)
   img = decode_img(img)
   return img, label

코드 출처: https://www.tensorflow.org/tutorials/load_data/images

출력 결과

파일 경로를 (이미지, 레이블) 쌍으로 변환하는 함수
먼저, 경로를 경로 구성 요소의 리스트로 변환합니다
그런 다음, 마지막에서 두 번째 값이 클래스 디렉터리에 추가됩니다
레이블은 정수로 인코딩됩니다
압축된 문자열이 3차원 int 텐서로 변환됩니다
이미지가 필요한 크기로 조정됩니다
원시 데이터가 파일에서 문자열 값으로 로드됩니다

코드 설명

  • get_label 함수가 정의되며, 파일 경로를 받아 (이미지, 레이블) 쌍을 구성하는 데 필요한 레이블을 반환합니다.
  • 파일 경로는 os.path.sep 구분자를 기준으로 경로 구성 요소의 리스트로 분할됩니다.
  • 마지막에서 두 번째 요소가 곧 클래스 이름에 해당하므로, 이 값이 클래스 디렉터리 정보로 활용됩니다.
  • one-hot 벡터에 tf.argmax를 적용하여 레이블이 정수 형태로 인코딩됩니다.
  • decode_img 함수는 JPEG 이미지를 디코딩한 후 지정된 크기로 리사이즈하여 반환합니다.
  • 압축된 문자열은 우선 3채널(컬러)의 3차원 정수 텐서로 변환되고, 이후 img_height × img_width 크기로 조정됩니다.
  • process_path 함수가 정의되며, 파일에서 원시 데이터를 문자열 값으로 읽어 들인 뒤 위의 두 함수를 연결하여 최종적으로 (이미지, 레이블) 쌍을 반환합니다.