Showing
3 changed files
with
45 additions
and
33 deletions
| ... | @@ -12,13 +12,15 @@ from utils import * | ... | @@ -12,13 +12,15 @@ from utils import * |
| 12 | # command | 12 | # command |
| 13 | # python eval.py --model_path='logs/April_16_00:26:10__resnet50__None/' | 13 | # python eval.py --model_path='logs/April_16_00:26:10__resnet50__None/' |
| 14 | 14 | ||
| 15 | -def eval(model_path): | 15 | +def eval(model_path, num_data): |
| 16 | print('\n[+] Parse arguments') | 16 | print('\n[+] Parse arguments') |
| 17 | kwargs_path = os.path.join(model_path, 'kwargs.json') | 17 | kwargs_path = os.path.join(model_path, 'kwargs.json') |
| 18 | kwargs = json.loads(open(kwargs_path).read()) | 18 | kwargs = json.loads(open(kwargs_path).read()) |
| 19 | args, kwargs = parse_args(kwargs) | 19 | args, kwargs = parse_args(kwargs) |
| 20 | + args.batch_size = num_data | ||
| 20 | pprint(args) | 21 | pprint(args) |
| 21 | device = torch.device('cuda' if args.use_cuda else 'cpu') | 22 | device = torch.device('cuda' if args.use_cuda else 'cpu') |
| 23 | + | ||
| 22 | 24 | ||
| 23 | print('\n[+] Create network') | 25 | print('\n[+] Create network') |
| 24 | model = select_model(args) | 26 | model = select_model(args) |
| ... | @@ -45,8 +47,9 @@ def eval(model_path): | ... | @@ -45,8 +47,9 @@ def eval(model_path): |
| 45 | print('\n[+] Valid results') | 47 | print('\n[+] Valid results') |
| 46 | print(' Acc@1 : {:.3f}%'.format(_test_res[0].data.cpu().numpy()[0]*100)) | 48 | print(' Acc@1 : {:.3f}%'.format(_test_res[0].data.cpu().numpy()[0]*100)) |
| 47 | print(' Acc@5 : {:.3f}%'.format(_test_res[1].data.cpu().numpy()[0]*100)) | 49 | print(' Acc@5 : {:.3f}%'.format(_test_res[1].data.cpu().numpy()[0]*100)) |
| 48 | - print(' Loss : {:.3f}'.format(_test_res[2].data)) | 50 | + print(' Acc_all : {:.3f}%'.format(_test_res[2].data.cpu().numpy()[0]*100)) |
| 49 | - print(' Infer Time(per image) : {:.3f}ms'.format(_test_res[3]*1000 / len(test_dataset))) | 51 | + print(' Loss : {:.3f}'.format(_test_res[3].data)) |
| 52 | + print(' Infer Time(per image) : {:.3f}ms'.format(_test_res[4]*1000 / len(test_dataset))) | ||
| 50 | 53 | ||
| 51 | writer.close() | 54 | writer.close() |
| 52 | 55 | ... | ... |
| ... | @@ -69,15 +69,13 @@ def train(**kwargs): | ... | @@ -69,15 +69,13 @@ def train(**kwargs): |
| 69 | step, args.max_step, current_epoch, max_epoch, (time.time()-start_t)/60, optimizer.param_groups[0]['lr'])) | 69 | step, args.max_step, current_epoch, max_epoch, (time.time()-start_t)/60, optimizer.param_groups[0]['lr'])) |
| 70 | writer.add_scalar('train/learning_rate', optimizer.param_groups[0]['lr'], global_step=step) | 70 | writer.add_scalar('train/learning_rate', optimizer.param_groups[0]['lr'], global_step=step) |
| 71 | writer.add_scalar('train/acc1', _train_res[0], global_step=step) | 71 | writer.add_scalar('train/acc1', _train_res[0], global_step=step) |
| 72 | - writer.add_scalar('train/acc5', _train_res[1], global_step=step) | 72 | + writer.add_scalar('train/loss', _train_res[1], global_step=step) |
| 73 | - writer.add_scalar('train/loss', _train_res[2], global_step=step) | 73 | + writer.add_scalar('train/forward_time', _train_res[2], global_step=step) |
| 74 | - writer.add_scalar('train/forward_time', _train_res[3], global_step=step) | 74 | + writer.add_scalar('train/backward_time', _train_res[3], global_step=step) |
| 75 | - writer.add_scalar('train/backward_time', _train_res[4], global_step=step) | ||
| 76 | print(' Acc@1 : {:.3f}%'.format(_train_res[0].data.cpu().numpy()[0]*100)) | 75 | print(' Acc@1 : {:.3f}%'.format(_train_res[0].data.cpu().numpy()[0]*100)) |
| 77 | - print(' Acc@5 : {:.3f}%'.format(_train_res[1].data.cpu().numpy()[0]*100)) | 76 | + print(' Loss : {}'.format(_train_res[1].data)) |
| 78 | - print(' Loss : {}'.format(_train_res[2].data)) | 77 | + print(' FW Time : {:.3f}ms'.format(_train_res[2]*1000)) |
| 79 | - print(' FW Time : {:.3f}ms'.format(_train_res[3]*1000)) | 78 | + print(' BW Time : {:.3f}ms'.format(_train_res[3]*1000)) |
| 80 | - print(' BW Time : {:.3f}ms'.format(_train_res[4]*1000)) | ||
| 81 | 79 | ||
| 82 | if step % args.val_step == args.val_step-1: | 80 | if step % args.val_step == args.val_step-1: |
| 83 | # print("\nstep, args.val_step: ", step, args.val_step) | 81 | # print("\nstep, args.val_step: ", step, args.val_step) |
| ... | @@ -85,11 +83,9 @@ def train(**kwargs): | ... | @@ -85,11 +83,9 @@ def train(**kwargs): |
| 85 | _valid_res = validate(args, model, criterion, valid_loader, step, writer) | 83 | _valid_res = validate(args, model, criterion, valid_loader, step, writer) |
| 86 | print('\n[+] Valid results') | 84 | print('\n[+] Valid results') |
| 87 | writer.add_scalar('valid/acc1', _valid_res[0], global_step=step) | 85 | writer.add_scalar('valid/acc1', _valid_res[0], global_step=step) |
| 88 | - writer.add_scalar('valid/acc5', _valid_res[1], global_step=step) | 86 | + writer.add_scalar('valid/loss', _valid_res[1], global_step=step) |
| 89 | - writer.add_scalar('valid/loss', _valid_res[2], global_step=step) | ||
| 90 | print(' Acc@1 : {:.3f}%'.format(_valid_res[0].data.cpu().numpy()[0]*100)) | 87 | print(' Acc@1 : {:.3f}%'.format(_valid_res[0].data.cpu().numpy()[0]*100)) |
| 91 | - print(' Acc@5 : {:.3f}%'.format(_valid_res[1].data.cpu().numpy()[0]*100)) | 88 | + print(' Loss : {}'.format(_valid_res[1].data)) |
| 92 | - print(' Loss : {}'.format(_valid_res[2].data)) | ||
| 93 | 89 | ||
| 94 | if _valid_res[0] >= best_acc: | 90 | if _valid_res[0] >= best_acc: |
| 95 | best_acc = _valid_res[0] | 91 | best_acc = _valid_res[0] | ... | ... |
| ... | @@ -33,6 +33,26 @@ TEST_TARGET_PATH = '/content/drive/My Drive/CD2 Project/data/test_nonaug_classif | ... | @@ -33,6 +33,26 @@ TEST_TARGET_PATH = '/content/drive/My Drive/CD2 Project/data/test_nonaug_classif |
| 33 | 33 | ||
| 34 | current_epoch = 0 | 34 | current_epoch = 0 |
| 35 | 35 | ||
| 36 | + | ||
| 37 | +def split_dataset(args, dataset, k): | ||
| 38 | + # load dataset | ||
| 39 | + X = list(range(len(dataset))) | ||
| 40 | + Y = dataset.targets | ||
| 41 | + | ||
| 42 | + # split to k-fold | ||
| 43 | + assert len(X) == len(Y) | ||
| 44 | + | ||
| 45 | + def _it_to_list(_it): | ||
| 46 | + return list(zip(*list(_it))) | ||
| 47 | + | ||
| 48 | + sss = StratifiedShuffleSplit(n_splits=k, random_state=args.seed, test_size=0.1) | ||
| 49 | + Dm_indexes, Da_indexes = _it_to_list(sss.split(X, Y)) | ||
| 50 | + | ||
| 51 | + return Dm_indexes, Da_indexes | ||
| 52 | + | ||
| 53 | + | ||
| 54 | + | ||
| 55 | + | ||
| 36 | def concat_image_features(image, features, max_features=3): | 56 | def concat_image_features(image, features, max_features=3): |
| 37 | _, h, w = image.shape | 57 | _, h, w = image.shape |
| 38 | #print("\nfsize: ", features.size()) # (1, 240, 240) | 58 | #print("\nfsize: ", features.size()) # (1, 240, 240) |
| ... | @@ -222,14 +242,6 @@ def get_dataloader(args, dataset, shuffle=False, pin_memory=True): | ... | @@ -222,14 +242,6 @@ def get_dataloader(args, dataset, shuffle=False, pin_memory=True): |
| 222 | return data_loader | 242 | return data_loader |
| 223 | 243 | ||
| 224 | 244 | ||
| 225 | -def get_aug_dataloader(args, dataset, shuffle=False, pin_memory=True): | ||
| 226 | - data_loader = torch.utils.data.DataLoader(dataset, | ||
| 227 | - batch_size=args.batch_size, | ||
| 228 | - shuffle=shuffle, | ||
| 229 | - num_workers=args.num_workers, | ||
| 230 | - pin_memory=pin_memory) | ||
| 231 | - return data_loader | ||
| 232 | - | ||
| 233 | 245 | ||
| 234 | def get_inf_dataloader(args, dataset): | 246 | def get_inf_dataloader(args, dataset): |
| 235 | global current_epoch | 247 | global current_epoch |
| ... | @@ -268,9 +280,9 @@ def train_step(args, model, optimizer, scheduler, criterion, batch, step, writer | ... | @@ -268,9 +280,9 @@ def train_step(args, model, optimizer, scheduler, criterion, batch, step, writer |
| 268 | loss = criterion(output, target) | 280 | loss = criterion(output, target) |
| 269 | 281 | ||
| 270 | # measure accuracy and record loss | 282 | # measure accuracy and record loss |
| 271 | - acc1, acc5 = accuracy(output, target, topk=(1, 5)) | 283 | + acc1 = accuracy(output, target, topk=(1, ))[0] |
| 272 | acc1 /= images.size(0) | 284 | acc1 /= images.size(0) |
| 273 | - acc5 /= images.size(0) | 285 | + |
| 274 | 286 | ||
| 275 | # compute gradient and do SGD step | 287 | # compute gradient and do SGD step |
| 276 | optimizer.zero_grad() | 288 | optimizer.zero_grad() |
| ... | @@ -287,10 +299,10 @@ def train_step(args, model, optimizer, scheduler, criterion, batch, step, writer | ... | @@ -287,10 +299,10 @@ def train_step(args, model, optimizer, scheduler, criterion, batch, step, writer |
| 287 | # writer.add_image(tag, | 299 | # writer.add_image(tag, |
| 288 | # concat_image_features(images[j], first[j]), global_step=step) | 300 | # concat_image_features(images[j], first[j]), global_step=step) |
| 289 | 301 | ||
| 290 | - return acc1, acc5, loss, forward_t, backward_t | 302 | + return acc1, loss, forward_t, backward_t |
| 291 | 303 | ||
| 292 | 304 | ||
| 293 | -#_acc1, _acc5 = accuracy(output, target, topk=(1, 5)) | 305 | +#_acc1= accuracy(output, target, topk=(1,)) |
| 294 | def accuracy(output, target, topk=(1,)): | 306 | def accuracy(output, target, topk=(1,)): |
| 295 | """Computes the accuracy over the k top predictions for the specified values of k""" | 307 | """Computes the accuracy over the k top predictions for the specified values of k""" |
| 296 | with torch.no_grad(): | 308 | with torch.no_grad(): |
| ... | @@ -301,7 +313,9 @@ def accuracy(output, target, topk=(1,)): | ... | @@ -301,7 +313,9 @@ def accuracy(output, target, topk=(1,)): |
| 301 | pred = pred.t() | 313 | pred = pred.t() |
| 302 | correct = pred.eq(target.view(1, -1).expand_as(pred)) | 314 | correct = pred.eq(target.view(1, -1).expand_as(pred)) |
| 303 | 315 | ||
| 304 | - | 316 | + # print("\noutout: ", output.size()) #(32, 1000) |
| 317 | + # print("\npred: ", pred.size()) #(5, 32) | ||
| 318 | + # print("\ncorrect: ", correct.size()) #(5, 32) | ||
| 305 | 319 | ||
| 306 | res = [] | 320 | res = [] |
| 307 | for k in topk: | 321 | for k in topk: |
| ... | @@ -313,7 +327,7 @@ def validate(args, model, criterion, valid_loader, step, writer, device=None): | ... | @@ -313,7 +327,7 @@ def validate(args, model, criterion, valid_loader, step, writer, device=None): |
| 313 | # switch to evaluate mode | 327 | # switch to evaluate mode |
| 314 | model.eval() | 328 | model.eval() |
| 315 | 329 | ||
| 316 | - acc1, acc5 = 0, 0 | 330 | + acc1 = 0 |
| 317 | samples = 0 | 331 | samples = 0 |
| 318 | infer_t = 0 | 332 | infer_t = 0 |
| 319 | 333 | ||
| ... | @@ -335,13 +349,12 @@ def validate(args, model, criterion, valid_loader, step, writer, device=None): | ... | @@ -335,13 +349,12 @@ def validate(args, model, criterion, valid_loader, step, writer, device=None): |
| 335 | infer_t += time.time() - start_t | 349 | infer_t += time.time() - start_t |
| 336 | 350 | ||
| 337 | # measure accuracy and record loss | 351 | # measure accuracy and record loss |
| 338 | - _acc1, _acc5 = accuracy(output, target, topk=(1, 5)) | 352 | + _acc1 = accuracy(output, target, topk=(1, ))[0] |
| 339 | acc1 += _acc1 | 353 | acc1 += _acc1 |
| 340 | - acc5 += _acc5 | ||
| 341 | samples += images.size(0) | 354 | samples += images.size(0) |
| 342 | 355 | ||
| 356 | + #print("\nsamples: ", samples) 4640 | ||
| 343 | acc1 /= samples | 357 | acc1 /= samples |
| 344 | - acc5 /= samples | ||
| 345 | 358 | ||
| 346 | # if writer: | 359 | # if writer: |
| 347 | # n_imgs = min(images.size(0), 10) | 360 | # n_imgs = min(images.size(0), 10) |
| ... | @@ -349,4 +362,4 @@ def validate(args, model, criterion, valid_loader, step, writer, device=None): | ... | @@ -349,4 +362,4 @@ def validate(args, model, criterion, valid_loader, step, writer, device=None): |
| 349 | # writer.add_image('valid/input_image', | 362 | # writer.add_image('valid/input_image', |
| 350 | # concat_image_features(images[j], first[j]), global_step=step) | 363 | # concat_image_features(images[j], first[j]), global_step=step) |
| 351 | 364 | ||
| 352 | - return acc1, acc5, loss, infer_t | 365 | + return acc1, loss, infer_t | ... | ... |
-
Please register or login to post a comment