올해 랩실에 들어온 황반변성 이미지 데이터가 진단 모델에 있어 대강 어느정도의 성능을 나타내는지 측정한 결과 기본 acc 90% 이상 나왔으나 병변 데이터가 너무 적은 관계로 오버피팅 문제가 발생, 딱히 유효한 모델이 아니라고 판단했다.
따라서 병이 있는 데이터를 늘리는 작업을 해야 하는데 환자들을 찾아다니면서 안저 사진을 찍을 수는 없는 노릇이므로
데이터 증강 (Data Augmentation) 기법을 사용한다.
💡데이터 Augmentation
- 한정된 데이터를 적절한 작업을 통해 늘리는 것
- 이미지를 약간 돌리거나, RGB 농도를 조절하는 등의 의도적인 노이즈를 줘 새로운 데이터를 만드는 방식
- 인간의 눈에는 별 차이 없어 보이지만 컴퓨터는 이런 노이즈가 섞이면 완전히 새로운 이미지로 판단
왼쪽 이미지가 원본이고, 오른쪽 이미지는 단순히 원본을 수평으로 반전 시킨 이미지이다.
재미있게도 컴퓨터는 이 이미지 2개를 완전히 서로 다른 이미지로 판단한다.
✔️ cv2 라이브러리 사용
- 영상정보처리 시간에 배운 cv2 라이브러리를 사용하여 이미지에 여러 효과를 주는 방식이다.
ImageGenerator를 사용하여 generator 객체를 생성할 때 증강시켜주고 싶었으나 단순히 train, test 데이터를 늘리고 싶은 것이 아니라 train, test 데이터 중에서도 병이 있는 데이터만 늘리고 싶은 것인데 ImageGenerator는 trian, test 를 통틀어 생성하는 것으로 알고 있어 cv2를 사용해 하나하나 데이터를 변형하여 저장하는 방법을 사용했다.
import cv2
## 좌우 반전
inverted_image = image.transpose(Image.FLIP_LEFT_RIGHT)
## 회전
rotated_image = image.rotate(random.randrange(-20, 20))
## 노이즈 + 색 반전
row, col, ch = img.shape
mean = 0
var = 0.1
sigma = var ** 0.5
gauss = np.random.normal(mean, sigma, (row, col, ch)) # 정규화
gauss = gauss.reshape(row, col, ch)
noisy_array = img + gauss # 노이즈 추가
noisy_image = Image.fromarray(np.uint8(noisy_array)).convert('RGB') # R,B 바꾸기
<실험결과>
https://purrfect-catmint-d56.notion.site/Task2-aa92dc2fd5944b6d9bf9dd467d8ff8a6
- 연구 과제에서 확보한 이미지 데이터 증강 후 병변데이터 : 정상 = 1 : 1.5 정도의 비율로 맞춘 후 훈련시켰을 때 정확도는 94%, loss는 0.27% 였다.
- 이후 데이터 비율을 1:1로 맞췄을 때 오버피팅 없이 정확도가 97%, loss가 0.18% 로 안정적이고 높은 성능 나타냄 (batch = 40)
- RGB 값을 하나의 feautre로서 사용하기도 하기 때문에 붉은색을 띄는 안저 사진의 현실성을 고려해 파란색 안저 사진은 나와버리는 RGB Convert 작업은 배제
✔️ ImageGenerator 사용
- ImageGenerator 의 옵션 설정을 통해 이미지 데이터를 생성
- Class가 여러개일 때, 특정 class의 이미지만 증강하는 방법 알아보기 (*폴더도 다 나눠져 있음)
* 특정 class의 이미지 증강만 필요한 경우 까다롭다....
[Reference]
[Pytorch] 데이터를 뻥튀기하자! Data Augmentation (tistory.com)
[09] Deep learning 1: 데이터 증강 구현 – Yerim Oh
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=isu112600&logNo=221582003889
https://colinch4.github.io/2020-12-04/ImageDataGenerator1/
'인공지능(AI) & 데이터 분석' 카테고리의 다른 글
[Feature Engineering] Feature Selection & evaluation (0) | 2022.11.23 |
---|---|
[Feature Engineering] Data pre-proceessing (데이터 전처리) (0) | 2022.11.22 |
[DNN] 인공신경망/딥러닝 (Deep Neural Network) (0) | 2022.04.14 |
논문 (빨리)(효율적으로) 읽는 법 *다시 정리 예정 (0) | 2022.03.11 |