Dementia-Diagnosis-Project / memoria_AI

AI PART
3 stars 1 forks source link

[WORK] InceptionResNet V2(baseline) 모델 선정 #13

Open cyh5757 opened 9 months ago

cyh5757 commented 9 months ago

WORK PLAN

ISSUES

문제상황

  1. 데이터 사용 방법 문제 30장의 이미지는 shuffle되면 안됨.

  2. Input 이 2개에 2개의 layer에 할당시에 Input 오류 1.1 tabular data 인 성별, 나이, 이미지 번호가 dim이 안맞아서 concat이 안됨

  3. paper 그대로 학습시에 학습이 안됨.

  4. From_tensor_slices를 통해 map을 통해 'training' 인자를 True 나 False를 넣어서 train 과 valid일때의 augmentation 할려함 data Leakage과 학습 방해가 발생.(True를 training으로 놓을 때는 valid일때 data Leakage, False로 놓을때는 학습 방해)

  5. Overfitting 방지를 위해 augmentation 수행 시, gamma 변환 시 학습이 안됨.

  6. gamma 변환을 위해 from_generator로 변경시 학습이 안됨.

  7. 학습시간(5epoch)이 너무 짧아서 lr로 최고점을 찾아야함.

  8. weight_decay를 지정하고, 변화가 있었다고 생각했는데, 그 weight_decay가 제대로 함수에 들어가지 않고있었음. 그런데 학습에 변화가 있었음.

  9. pretrained_model parameter를 고정시켜서 사용하려함. 하지만 CPU로 학습만됨. 반대로 finetuning처럼 parameter를 다 학습용으로 변화시켰다 생각했지만, 부분만 parameter 풀리고, 다른 부분은 고정됨.

  10. 모델 학습시, 모델 선언부터 안하고, compile 부터 실행. 그런데 그렇게 되면 overfitting이 바로 이뤄져야하는데, 학습이 좋아짐.

해결방법

  1. shuffle을 폴더에서만 시키고, 폴더 별로 가져와서 학
  2. 기존 functional API 형태에서 subclassing 형태로 변환 1.1 각 tabular들을 reshape(1, )으로 받아서 concat
  3. layer 변경
  4. augmentation은 각각 다른 def 설정 후 mapping(training을 인자로 안줌)
  5. albumnetation으로 augmentation 변경 -> 속도 개선 및 다른 종류의 augmentation 적용
  6. augmentation 적용 속도는 빠른데, 학습이 안됨(Nan 뜸). 따라서, augmentation을 최소화함.(대조, 밝기 조절만)
  7. 일일히 하나씩 최적이라고 생각하는 지점을 end_learning_rate로 지정.
  8. random seed로 학습이 고정된 값이 나올거라는 착각. 학습 값이 random seed를 고정해도 변함.
  9. 기존에 사용하던 방법(parameter = True)으로만 학습.
  10. architecture 선언부터 실행. 하지만 왜 성적이 좋아진지는 알수없음.

RESULTS

ETC.

Unknown :

  1. 특정 학습을 위해 shuffle사용했을 때 무한 루프
  2. albumentation 및 다른 augmentation을 했을 시, 검증시에 학습이 안되어있음.
  3. random seed 고정 후, 학습 비교시에 계속 변동되는 현상 존재.
  4. 데이터 증강(50, 90 대의 label 불균형 해소 데이터)에서 학습이 잘 안됨.
  5. 데이터 불균형을 이뤄진대로 납둬야하는지, 그 불균형함을 모델이 학습하는지 알지못함.
  6. sharpen 했을 시에 sharpen 1은 잘 학습함 하지만 sharpen 2는 학습을 잘 못함. sharpen 2가 더욱 좀더 뚜렸하게 data를 변화시킴.
  7. 학습이 compile 부터 실수로 실행해서 학습시켰는데, overfitting이 이뤄지지않고, 학습이 더 잘됐음.
  8. trainable =True시에 모든 params가 True가 되지않음. 반대로 False를 해서 freeze시켰을떄는 모두 False가 됨.
cyh5757 commented 9 months ago

문제상황 1

학습에 일반화를 위해 Shuffle을 사용하려함. 하지만 paper구현을 바탕으로 사용하기위해, 이미지 shuffle은 없이, 폴더 shuffle만 해야함.

해결방법 1

폴더path를 dataset으로 만들어서 suffle엔 split을 통해 train, valid, test로 나누고 이후, 폴더path의 들어있는 image로 dataset 생성

cyh5757 commented 9 months ago

문제상황 2

Input 이 2개에 2개의 layer에 할당시에 Input 오류 tabular data 인 성별, 나이, 이미지 번호가 dim이 안맞아서 concat이 안됨

해결방법 2

정형데이터를 Inputs에 선언해서 사용하는 방법 말고 dataset을 해서 가져오는 방법을 택함. 하지만 iloc를 이용해서 가져올때 column인식을 못하게 되어있어서, 각각의 column으로 할당함. 이후 subclassing을 통해 각각의 input이 들어올수있게 parsing함. reshape을 통해 dataset이의 데이터를 (1, )형태로 변경

cyh5757 commented 9 months ago

문제상황 3

paper 그대로 학습시에 학습이 안됨. paper에서는 90%에 가까운 값들이 나오는데, train_val, loss자체가 진척이 안됨.

해결방법 3

layer의 unit을 변경함. layerd의 depth와 정규화 를 변경

cyh5757 commented 9 months ago

문제상황 4

기존 방법으로 training을 flag로 사용 From_tensor_slices를 통해 map을 통해 'training' 인자를 True 나 False를 넣어서 train 과 valid일때의 augmentation 할려함 data Leakage과 학습 방해가 발생.(True를 training으로 놓을 때는 valid일때 data Leakage, False로 놓을때는 학습 방해)

해결방법 4

전처리 및 augmentation 함수를 따로따로 만듬. train용 과 valid,test용으로 변경

cyh5757 commented 9 months ago

문제상황 5

Overfitting 방지를 위해 augmentation 수행 시, gamma 변환 시 학습이 안됨. gamma 변환을 위해 from_generator로 변경시 학습이 안됨. paper에서 주어진 augmentation을 토대로 시도. 하지만 학습이 잘 안됨.

해결방법 5

brain image를 생각하고, 지역적 데이터를 더 잘 보존시키기위해 밝기, 대조만 시킴. 이전 translation, rotate, gamma등을 이용하지않음. 이후 from_generator를 사용시에 dim 오류가 나서 albumentation으로 변경. 하지만 albumentation에서 확인한 결과 학습이 잘 이뤄지지않음. 따라서, 기존의 방법을 사용(tf.data.image)

cyh5757 commented 9 months ago

문제상황 6

학습시간(5epoch)이 너무 짧아서 lr로 최고점을 찾아야

해결방법 6

각 학습시에 최고점에 위치한 점수를 비교하고. learning rate schedular를 이용. ExponentialDecay사용

cyh5757 commented 9 months ago

최종 정리

이 모델에서 가장 중요한거는 transfer learning을 통해 많은 이득을 얻는거라고 생각합니다. 기존 이미지를 이용한 학습에서 demographics score를 concat시켰을때 확실한 성적 차이를 보이지만. 짧은 학습시간(5epoch 이내)안에 overfitting이 날 정도로 강력한 모델이였고, 일반화시키기 참 어려웠던 모델이다. 따라서 overfitting을 어떻게 다뤄야하는지 생각해야했다. 그중 여러개의 방법중 아래에 있다.

  1. 학습이 안될 때, depth를 쌓지만, 그만큼 overfitting이 이뤄짐.
  2. regularization을 줘도 그만큼 잘 따러주지않음.
  3. 가장 강력한 방법은 learning rate를 step에 따라 잘 조정해서 early stopping시켜줘야한다.
  4. lr으로 잘 학습할 때의 값으로 모델을 정의하면 어떻게 보면 valid data의 data leakage이지 않을까 고민하게됨.
  5. 추후 이 점에 대해서 일반화를 하는게 추후 학습 방향이 될것이라 생각함.