-
Notifications
You must be signed in to change notification settings - Fork 0
/
eval.py
77 lines (60 loc) · 2.1 KB
/
eval.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import torch
import model
import os
from dataset import UCF101DataSet
import numpy as np
test_list = 'list/test_ucf101.list'
batch_size = 12
num_classes = 101
model_dir = 'models'
model_name = 'c3d-new.pth-60000'
os.environ["CUDA_VISIBLE_DEVICES"] = '2'
def eval():
model_path = os.path.join(model_dir, model_name)
c3d = model.C3D(num_classes)
device = get_default_device()
if device == torch.device('cpu'):
c3d.load_state_dict(torch.load(model_path, map_location='cpu'))
else:
c3d.load_state_dict(torch.load(model_path))
c3d.to(device, non_blocking=True, dtype=torch.float)
c3d.eval()
testset = UCF101DataSet(datalist_file=test_list,
clip_len=16, crop_size=112, split="testing")
testloader = torch.utils.data.DataLoader(
testset, batch_size=1, shuffle=False, num_workers=10)
total_predict_label = []
total_accuracy = []
for (i, data) in enumerate(testloader, 0):
outputs = []
inputs, labels = data['clip'].to(
device, dtype=torch.float), data['label'].to(device)
for j, sample in enumerate(inputs):
print(sample.shape)
sample_outputs = c3d(sample)
_, output_idx = sample_outputs.max(1)
print(output_idx)
output = torch.mean(sample_outputs, dim=0)
outputs.append(output)
outputs = torch.stack(outputs)
_, outputs = outputs.max(1)
total = labels.size(0)
print(labels)
print(outputs)
correct = (outputs == labels).sum().item()
accuracy = float(correct) / float(total)
print("iteration %d, accuracy = %g" % (i, accuracy))
total_predict_label.append(outputs)
total_accuracy.append(accuracy)
total_accuracy = np.array(total_accuracy)
total_predict_label = np.array(total_predict_label)
print("Final accuracy", np.mean(total_accuracy))
def get_default_device():
if torch.cuda.is_available():
return torch.device('cuda:0')
else:
return torch.device('cpu')
def main():
eval()
if __name__ == "__main__":
main()