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 해준다.
- 먼저 상하좌우 224 px 사이즈만큼 0을 Padding 한다.
- 그리고 중심에서 224 x 224 사이즈만큼 Crop 한다.
- 그 외의 Argumentation 종류는 H-Flip, V-Flip, Rotation (0 ~ 360도를 15도 단위로 회전) 한다.
- 대략 20 px ~ 300 px 사이즈의 이미지들이 존재하므로 224 x 224에 맞게 0으로 Padding 해준다.
-
위와 같은 방법으로 학습 시, 적은 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로 정해져 있으므로 한계가 있음.
-> 데이터 증량 필요 !