TukBang / Pet-care-app

0 stars 0 forks source link

Scenario 4: Multi-scale problem #9

Open TukBang opened 1 year ago

TukBang commented 1 year ago

3차 데모 발표 이후, AI 진단은 특정 위치에는 진단이 잘되지만, 또 다른 특정 위치에서는 다른 레이블로 예측하는 경향이 있었다.

Scenario 1 ~ 3의 학습 방법은 관심 영역이 중앙 집중화 되어 있으나 사용자가 주는 input에 대해 진단할 때는 관심 영역이 항상 가운데에 있지 않을 것으로 예견된다.

더불어 현재 가지고 있는 데이터셋은 관심 영역이 매우 작은 (e.g. 20x20) 크기를 가지기도 하고 매우 큰 (e.g. 1000x800)이상 크기를 가지는 경우도 빈번하게 볼 수 있다.

여태까지 해왔던 전처리는 1) 관심영역 만을 crop하여 resize 1-1) 관심 영역을 224x224 사이즈로 꽉 채우기 1-2) 비율에 맞춰 늘리고, 관심 영역이 직사각형이어서 빈 공간이 생길 경우 0(검은색)으로 다 채우기 2) 관심영역을 중앙에 두고 224x224 만큼 가져오고, 관심영역이 224x224보다 크다면 사용하지 않고 버림 으로 학습을 진행했다.

참고로 1번의 학습 validation 결과는 69%, 2번의 학습 validation 결과는 68%이다.

데이터셋이 가지고 있는 문제점과 관심 영역이 항상 중앙에 있을 것이라는 문제점을 해결하기 위해

  1. 관심영역의 크기를 계산하고 (w x h) 배경의 비율을 정해서 crop해오기 (6:4, 7:3, 8:2, 9:1) (Multi-scale problem)
  2. 관심영역은 이미지 상 어디에든 있을 수 있다는 가정을 두어 관심 영역을 crop할 때 잘려나가지 않는 선에서, 위치를 랜덤하게 crop하는 방법을 적용

위의 내용에 따라 Scenario 4를 진행할 예정이다. 랜덤하게 잘려오는 이미지, 배경 비율에 따라 많아지는 이미지 특성 상 Data Augmentation의 효과를 볼 수 있다.

이 후 torchvision.transforms을 통해 (224, 224)로 Resize하고 보간법은 LANCZOS을 사용 transforms.RandomHorizontalFlip(p=0.5), transforms.RandomVerticalFlip(p=0.5), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) 하여 input으로 들어가게 된다.

문제점으로 꼽을 수 있는 것 중 하나는 validation 데이터 셋의 구성이다. 학습될 때 관심 영역이 중앙에 집중되어 있지 않기 때문에

  1. validation 데이터도 random하게 매 번 바뀌어야 할지
  2. validation 데이터를 한 번만 random 추출해서 동일한 validation 데이터 셋을 구축하고 검증할지
  3. validation 데이터셋도 비율에 따른 데이터 증강이 이루어진 후 검증해야할 지 궁금증이 존재하지만

2023-05-17: 2, 3번을 채택하여 모델을 학습 예정 마지막 문제점으로 랜덤으로 인해 매번 달라지는 이미지 데이터 셋의 처리는 원본 데이터를 가져오지 않는 이상 (현재 컴퓨터 사양 64GB로 적재에 부족함) 메모리에 적재해서 가져오기 어려운데 이에 따라 읽어오는 시간에 의해 처리 속도가 매우 낮아지는 점이며 (1)스파크나, (2)ray 라이브러리, (3)jit 중 jit을 통해 연산을 빠르게 진행할 수 있는 부분을 함수화하여 실험을 진행했다.