1 minute read

랜드마크 이미지 데이터셋 생성

  • 이미지 크롤러를 통해 모은 이미지 묶음을 Tensorflow에서 학습할수 있도록 데이터셋으로 만들어주었다.

  • 데이터셋 생성 및 모델 훈련에 관한 코드는 앞으로 이곳에 업로드할 예정이다.
    • 하나의 주제를 가진 프로젝트에 대한 도구를 이렇게 여러곳에 나누어 업로드하는것이 옳은것인지는 모르겠다.
    • 프로그래밍 관해서 상담하거나 할만한 인맥이 없어 새삼 서러워졌다.
  • 크게 두 파트로 나누어 진행했다.
    1. 이미지 파일을 학습(입력) 데이터로 변환
    2. 저장한 학습 데이터를 load하여 모델에 학습시키기

Image_To_Dataset.py

  • 이미지 파일을 학습데이터로 변환하는 함수를 만들었다.

  • 이미지를 crop한 버전의 학습데이터와 crop하지 않은 데이터 두 버전에 대한 함수를 각각 구현하였다.

  • 이 글을 참고하여 제작했다.

Trouble Shooting & TIL

  • cv2.imread 한글 경로 인식 문제
    • 이미지를 cv2를 활용해 읽어들일때, 경로에 한글이 포함될시 발생하는 오류.
    • np.fromfile을 통해 파일을 np.uint8로 열고 cv2.imdecode를 통해 이미지를 array로 변환한다.
    • 관련 글
  • np.load ValueError
    • ValueError: Object arrays cannot be loaded when allow_pickle=False라는 오류 발생.
    • np.load의 allow_pickle 옵션을 True로 변경.
    • 관련 글
  • cv2 image crop
    img = cv2.imread('test.jpg')
    cropped_img = img[y: y+h, x:x+h]
    
    • json 데이터의 경우에는 왼쪽 x,y 좌표/ 오른쪽 x,y좌표가 기록되어있었으므로 다음처럼 코드를 변경했다.
      lx, ly, rx, ry = img_json['regions'][0]['boxcorners']
      img = cv2.imread('test.jpg')
      cropped_img = img[ly:ry, lx:rx]
      
    • 관련 글
  • tensorflow loss함수의 from_logits 옵션?
    • 쉽게 말해서, tensorflow 모델의 출력값이
      • 확률을 출력하면 logit=False
      • sigmoid, linear등을 통해 확률이 아닌값일때 logit=True
    • 관련 글
  • 이미지 데이터를 .npy 데이터로 변환하여 저장
    • 관련 글
    • 사실 위의 Trouble들 전부가 이 튜토리얼을 따라하다가 발생했다.
    • 문제라면, 해당 글과는 달리 ndarray가 tensor로 변환되지 않아 모델을 학습시킬수 없었다.
    • 해당 문제로만 3시간 가까이 해결책을 찾다가 Tensorflow 튜토리얼에서 나온 데이터셋 만드는 방법을 사용하니 모델 훈련 단계까지 바로 넘어갔다.
      • 다만 해당 문제는 데이터셋을 따로 뺄수 없다는 문제가 있긴 하다.
      • 근데 시간이 새벽 세시를 넘어가서 그런지, 그런건 아무래도 상관없겠다는 생각이 들어 일단 이미지 모델이 훈련되는것만 확인하고 오늘의 작업을 종료하기로 했다.