• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

Image data preprocessing 질문드립니다.

21.04.20 09:46 작성 조회수 99

0

저는 안저이미지와 시력을 매칭하려고 합니다.

이미지를 읽어오는 것부터 막혔습니다. 우선 image_dataset_from_directory은 시력이 연속변수이기때문에 제한이 있습니다. 이렇게  연속변수를 대상으로 cnn을 하려고 하려면 이미지를 어떻게 정리하고 어떤 함수를 써서 이미지를 읽어와야 할까요? dataset을 만드는 방법이 있나요?

두번째로 연속변수를 대상으로 하기 때문에 categorical cross entropy는 적절하지 않아 보이는데,  loss함수로 MSE를 쓰는것이 적절할까요?

답변 1

답변을 작성해보세요.

0

안녕하십니까,

질문 내용이 강의의 내용은 아니신거죠?

프로젝트를 진행하시려는데 안저 이미지 기반으로 시력(연속형값)을 예측하시려는 거죠?

일단 위 내용으로 가정하고 말씀 드리겠습니다. 아니면 다시 말씀해 주십시요.

0. 이미지 기반으로 연속형 값을 예측하기는 성능이 잘 나오지 않습니다. 물론 업무 유형에 따라 다를 수도 있지만, 안저 이미지(잘 몰라서 검색해 봤더니, 눈 안구 이미지 더군요)를 살펴본 결과 시력과 같은 연속형 값을 잘 처리하기는 쉽지 않을 것 같습니다. 이유로는 classification은 단순히 확률로 기반해서, 예를 들어 0.5 보다 크면 이걸 기준으로 class를 판별합니다. 그러니까, 0.5 ~ 0.99 대략적으로 예측해도 어느정도 classification이 가능합니다. 그런데 시력의 경우는 상대적으로 예측이 매우 정확해야 할거 같습니다. 오차 범위가 서로 너무 다릅니다. 

이런 경우 때문에 이미지만 가지고 회귀와 같은 연속형 값 예측은 잘 하지 않습니다

하지만 만약에 안저 이미지 시력 예측 모델을 만들고자 한다면 모델 자체는 크게 어렵지는 않습니다. feature extraction 레이어 들과 + Dense layer를 붙이되, 맨 마지막 dense layer는 node가 1개이고 activation을 적용하지 않으면 모델이 만들어 집니다.

1. 이미지를 읽어오는 것부터 막혔습니다. 우선 image_dataset_from_directory은 시력이 연속변수이기때문에 제한이 있습니다. 이렇게  연속변수를 대상으로 cnn을 하려고 하려면 이미지를 어떻게 정리하고 어떤 함수를 써서 이미지를 읽어와야 할까요? dataset을 만드는 방법이 있나요?

=> image_dataset_from_directory은 ImageDataGenerator의 flow_from_directory() 함수를 얘기하시는 건지요? 그렇다고 가정하면, 뒤에서 말씀드릴 Sequence 클래스를 상속받아서 적용하시면 됩니다.  target값에 시력값을 입력하면 됩니다.

2. 두번째로 연속변수를 대상으로 하기 때문에 categorical cross entropy는 적절하지 않아 보이는데,  loss함수로 MSE를 쓰는것이 적절할까요?

=> 네 맞습니다. model.compile(loss='mse'....) 를 적용하셔야 합니다.

3. 추가로 첨언 드리면 안저 이미지만 가지고 시력 예측 모델을 만드시는 것 보다는 다양한 다른 feature 들과 안저 이미지를 같이 이용하셔야 할 것 같습니다. 이 경우에는 multi로 input feature 들이 만들어 져야 합니다.

그리고, 만약 이미지만 가지고 회귀와 같은 연속형 값 예측을 잘하려면, 보다 prediction layer쪽에 좀더 복잡한 layer들이 추가가 되어야 할 것 같습니다(이건 본 강의 수준을 뛰어 넘을 수도 있습니다)

감사합니다.