-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathtrt_inference.py
executable file
·99 lines (88 loc) · 2.74 KB
/
trt_inference.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import torch
from torch.autograd import Variable
import tensorrt as trt
from tensorrt.parsers import onnxparser
import pycuda.driver as cuda
import pycuda.gpuarray as gpuarray
import pycuda.autoinit
import os
import numpy as np
from argparse import ArgumentParser
from resnet import resnet50
import time
import cv2
from torchvision import transforms
from trt_engine import trt_engine
import pdb
MEAN = [0.485, 0.456, 0.406]
STD = [0.229, 0.224, 0.225]
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=MEAN, std=STD),
])
def read_image_chw(img_path, width, height):
img = cv2.imread(img_path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img, (width, height))
im = transform(img)
im = im.numpy()
return im
args = ArgumentParser().parse_args()
args.input_size = 224
args.input_channel = 3
args.fc_num = 1000
args.batch_size = 4
args.trt_model_name = "resnet50_32.trt"
args.testdir='data'
engine = trt_engine('resnet',args.trt_model_name).build_engine()
classes=os.listdir(args.testdir)
total = 0
correct = 0
start=time.time()
for i in range(len(classes)):
images=os.listdir(os.path.join(args.testdir,classes[i]))
for image in images:
gt=int(i)
img = read_image_chw(os.path.join(args.testdir,classes[i],image),
args.input_size, args.input_size)
output = engine.infer(img)
print(np.squeeze(output[0])[:5])
conf, pred = torch.Tensor(np.squeeze(output[0])).topk(1, dim=0)
pred = int(pred.data[0])
# print('gt:',classes[i],'pred:',classes[pred])
# if pred == gt:
# correct += 1
# total += 1
end=time.time()
print('trt:',end-start)
# speed test
model = resnet50(pretrained=True)
model.cuda()
model.eval()
trans=transforms.Compose([transforms.Resize([224,224]),transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),])
classes=os.listdir(args.testdir)
total = 0
correct = 0
start=time.time()
for i in range(len(classes)):
images=os.listdir(os.path.join(args.testdir,classes[i]))
for image in images:
gt=int(i)
img = cv2.imread(os.path.join(args.testdir,classes[i],image))
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img, (args.input_size, args.input_size))
img = transform(img)
img=torch.unsqueeze(img, 0)
batch_x=Variable(img)
batch_x=batch_x.cuda()
out = model(batch_x)
print(out.data[0][:5])
_,pred=torch.max(out.data, 1)
pred = int(pred)
# print('gt:',classes[i],'pred:',classes[pred])
# if pred == gt:
# correct += 1
# total += 1
end=time.time()
print('pytorch:',end-start)