25
25
26
26
import paddle
27
27
from paddle .dataset .common import download
28
+ from paddle .io import Dataset
28
29
from paddle .static .log_helper import get_logger
29
30
from paddle .static .quantization import PostTrainingQuantization
30
31
@@ -116,6 +117,33 @@ def val(data_dir=DATA_DIR):
116
117
return _reader_creator (file_list , 'val' , shuffle = False , data_dir = data_dir )
117
118
118
119
120
+ class ImageNetDataset (Dataset ):
121
+ def __init__ (self , data_dir = DATA_DIR , shuffle = False , need_label = False ):
122
+ super ().__init__ ()
123
+ self .need_label = need_label
124
+ self .data_dir = data_dir
125
+ val_file_list = os .path .join (data_dir , 'val_list.txt' )
126
+ with open (val_file_list ) as flist :
127
+ lines = [line .strip () for line in flist ]
128
+ if shuffle :
129
+ np .random .shuffle (lines )
130
+ self .data = [line .split () for line in lines ]
131
+
132
+ def __getitem__ (self , index ):
133
+ sample = self .data [index ]
134
+ data_path = os .path .join (self .data_dir , sample [0 ])
135
+ data , label = process_image (
136
+ [data_path , sample [1 ]], mode = 'val' , color_jitter = False , rotate = False
137
+ )
138
+ if self .need_label :
139
+ return data , np .array ([label ]).astype ('int64' )
140
+ else :
141
+ return data
142
+
143
+ def __len__ (self ):
144
+ return len (self .data )
145
+
146
+
119
147
class TestPostTrainingQuantization (unittest .TestCase ):
120
148
def setUp (self ):
121
149
self .int8_download = 'int8/download'
@@ -267,7 +295,7 @@ def run_program(
267
295
throughput = cnt / np .sum (periods )
268
296
latency = np .average (periods )
269
297
acc1 = np .sum (test_info ) / cnt
270
- return (throughput , latency , acc1 )
298
+ return (throughput , latency , acc1 , feed_dict )
271
299
272
300
def generate_quantized_model (
273
301
self ,
@@ -284,6 +312,7 @@ def generate_quantized_model(
284
312
batch_nums = 1 ,
285
313
onnx_format = False ,
286
314
deploy_backend = None ,
315
+ feed_name = "inputs" ,
287
316
):
288
317
try :
289
318
os .system ("mkdir " + self .int8_model )
@@ -293,11 +322,30 @@ def generate_quantized_model(
293
322
294
323
place = paddle .CPUPlace ()
295
324
exe = paddle .static .Executor (place )
296
- val_reader = val ()
325
+ image = paddle .static .data (
326
+ name = feed_name [0 ], shape = [None , 3 , 224 , 224 ], dtype = 'float32'
327
+ )
328
+ feed_list = [image ]
329
+ if len (feed_name ) == 2 :
330
+ label = paddle .static .data (
331
+ name = 'label' , shape = [None , 1 ], dtype = 'int64'
332
+ )
333
+ feed_list .append (label )
334
+
335
+ val_dataset = ImageNetDataset (need_label = len (feed_list ) == 2 )
336
+ data_loader = paddle .io .DataLoader (
337
+ val_dataset ,
338
+ places = place ,
339
+ feed_list = feed_list ,
340
+ drop_last = False ,
341
+ return_list = False ,
342
+ batch_size = 2 ,
343
+ shuffle = False ,
344
+ )
297
345
298
346
ptq = PostTrainingQuantization (
299
347
executor = exe ,
300
- sample_generator = val_reader ,
348
+ data_loader = data_loader ,
301
349
model_dir = model_path ,
302
350
model_filename = model_filename ,
303
351
params_filename = params_filename ,
@@ -348,7 +396,12 @@ def run_test(
348
396
model , infer_iterations * batch_size
349
397
)
350
398
)
351
- (fp32_throughput , fp32_latency , fp32_acc1 ) = self .run_program (
399
+ (
400
+ fp32_throughput ,
401
+ fp32_latency ,
402
+ fp32_acc1 ,
403
+ feed_name ,
404
+ ) = self .run_program (
352
405
model_path ,
353
406
model_filename ,
354
407
params_filename ,
@@ -370,14 +423,15 @@ def run_test(
370
423
batch_nums ,
371
424
onnx_format ,
372
425
deploy_backend ,
426
+ feed_name ,
373
427
)
374
428
375
429
_logger .info (
376
430
"Start INT8 inference for {} on {} images ..." .format (
377
431
model , infer_iterations * batch_size
378
432
)
379
433
)
380
- (int8_throughput , int8_latency , int8_acc1 ) = self .run_program (
434
+ (int8_throughput , int8_latency , int8_acc1 , _ ) = self .run_program (
381
435
self .int8_model ,
382
436
model_filename ,
383
437
params_filename ,
@@ -421,7 +475,7 @@ def test_post_training_kl_mobilenetv1(self):
421
475
is_use_cache_file = False
422
476
is_optimize_model = True
423
477
diff_threshold = 0.025
424
- batch_nums = 1
478
+ batch_nums = 2
425
479
self .run_test (
426
480
model ,
427
481
'inference.pdmodel' ,
@@ -607,7 +661,7 @@ def test_post_training_onnx_format_mobilenetv1_tensorrt(self):
607
661
is_optimize_model = False
608
662
onnx_format = True
609
663
diff_threshold = 0.05
610
- batch_nums = 2
664
+ batch_nums = 12
611
665
deploy_backend = "tensorrt"
612
666
self .run_test (
613
667
model ,
@@ -650,7 +704,7 @@ def test_post_training_onnx_format_mobilenetv1_mkldnn(self):
650
704
is_optimize_model = False
651
705
onnx_format = True
652
706
diff_threshold = 0.05
653
- batch_nums = 1
707
+ batch_nums = 12
654
708
deploy_backend = "mkldnn"
655
709
self .run_test (
656
710
model ,
0 commit comments