3 1차 테스트_원본 데이터 학습
pinb edited this page 2 years ago

테스트 방법

  • WDI 원본 데이터셋을 그대로 사용한다.

  • near-full 클레스의 데이터 수가 가장 적으므로 최대치인 이미지 개수를 조정한다.

    • train_max_images = 95
    • val_max_images = 25
  • 이 경우, 1 epoch 당 120개의 224 x 224 x 3 의 데이터가 들어가므로 배치 사이즈를 맞춰준다.

    • batch_size = 18063360
  • 매우 적은 데이터 단위로 학습하므로 1 epoch 당 데이터셋 원본 폴더에서 랜덤하게 데이터를 선택하여 학습한다.

  • 랜덤하게 선택한 데이터들은 Argumentation을 적용한다.

    • 대략 20 px ~ 300 px 사이즈의 이미지들이 존재하므로 224 x 224에 맞게 0으로 Padding 해준다.
      1. 먼저 상하좌우 224 px 사이즈만큼 0을 Padding 한다.
      2. 그리고 중심에서 224 x 224 사이즈만큼 Crop 한다.
      3. 그 외의 Argumentation 종류는 H-Flip, V-Flip, Rotation (0 ~ 360도를 15도 단위로 회전) 한다.
  • 위와 같은 방법으로 학습 시, 적은 VRAM을 사용하여 다양한 데이터셋을 학습할 수 있을 것으로 예상된다.


Load Data

from torchvision import transforms, datasets

# 데이터 전처리
rotation_angles = list(range(0, 361, 15))
rotation_transforms = [transforms.RandomRotation(degrees=(angle, angle), expand=False, center=None, fill=None) for angle in rotation_angles]

data_transforms = transforms.Compose([
    transforms.Pad(padding=224, fill=0, padding_mode='constant'),
    transforms.RandomHorizontalFlip(),
    transforms.RandomVerticalFlip(),
    transforms.RandomApply(rotation_transforms, p=1),
    transforms.CenterCrop((224, 224)),
    transforms.ToTensor(),
])

# ImageFolder를 사용하여 데이터셋 불러오기
train_dataset = datasets.ImageFolder(root='E:/wm_images/train/', transform=data_transforms)
val_dataset = datasets.ImageFolder(root='E:/wm_images/val/', transform=data_transforms)
test_dataset = datasets.ImageFolder(root='E:/wm_images/test/', transform=data_transforms)

Settings

import torch.optim as optim

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
cnn_wdi.to(device)
print(str(device) + ' loaded.')

# 손실 함수 및 최적화 알고리즘 설정
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(cnn_wdi.parameters(), lr=0.001)

# 배치사이즈
batch_size = 18063360

# 학습 및 평가 실행
num_epochs = 100

# Random sample size
train_max_images = 95
val_max_images = 25


원본 데이터셋 학습 결과

배치 사이즈

  • batch_size = 18063360

학습 및 평가 실행

  • num_epochs = 100

Random sample size

  • train_max_images = 95
  • val_max_images = 25
Epoch,	Train Loss,	Train Acc,	Val Loss,	Val Acc

1/100,	1.5930,	0.7789,	1.8920,	0.4800

2/100,	1.5193,	0.8526,	1.8520,	0.5200

3/100,	1.4562,	0.9158,	1.9320,	0.4400

4/100,	1.5088,	0.8632,	1.7720,	0.6000

5/100,	1.5088,	0.8632,	1.8920,	0.4800

6/100,	1.4983,	0.8737,	1.8520,	0.5200

7/100,	1.4983,	0.8737,	1.9720,	0.4000

8/100,	1.5720,	0.8000,	2.0120,	0.3600
...

: 위 설정으로 학습 진행 시, 데이터 부족으로 학습이 제대로 이루어지지 않음. 배치 사이즈를 크게 잡았지만, 결국 학습 이미지셋의 개수가 95 + 25로 정해져 있으므로 한계가 있음.

-> 데이터 증량 필요 !