args.network == "mobile0.25"
cfg = cfg_mnet
#elif args.network == "resnet50":
# cfg = cfg_re50
# net and model
net = RetinaFace(cfg=cfg, phase = 'test')
args.trained_model = 'mobilenet0.25_250.pth' #epoch_200.pth'
args.cpu = 1
net = load_model(net, args.trained_model, args.cpu)
net.eval()
print('Finished loading model!')
print(net)
#cudnn.benchmark = True
device = torch.device("cpu" if args.cpu else "cuda")
net = net.to(device)
###########
new_model = net
new_model2 = net
model_int8 = torch.quantization.quantize_dynamic(
net, # the original model
{torch.nn.Conv2d,torch.nn.BatchNorm2d}, # a set of layers to dynamically quantize
dtype=torch.quint8)
print_size_of_model(net)
print_size_of_model(model_int8)
#torch.quantization.quantize_dynamic(new_model2, qconfig_spec=None, dtype=torch.qint8, mapping=None, inplace=False)
f0 = open("para250-quint8.txt","w")
for name, param in model_int8.named_parameters():
f0.write(name)
f0.write('\n')
# quantize
#param2 = torch.quantize_per_tensor(param, scale=1./127, zero_point=0, dtype=torch.qint8)
param2 = torch.quantize_per_tensor(param, scale=1./255, zero_point=127, dtype=torch.quint8)
y = param2.int_repr()
#print(y)
#numpy_para = param.numpy() # tensor to numpy
str = y.__repr__()
f0.write(str)
f0.write('\n\n')
for name, module in new_model.named_modules():
# prune 20% of connections in all 2D-conv layers
if isinstance(module, torch.nn.Conv2d):
prune.l1_unstructured(module, name='weight', amount=0.5)
# prune 40% of connections in all linear layers
elif isinstance(module, torch.nn.Linear):
prune.l1_unstructured(module, name='weight', amount=0.2)
#print(dict(new_model.named_buffers()).keys())
############
##
pthfile = 'mobilenet0.25_epoch_200.pth'
net2 = torch.load(pthfile,map_location=torch.device('cpu'))
f1 = open("para200-variable.txt","w")
for k in net2.keys():
#print(k)
f1.write(k)
f1.write('\n')
resize = 1
f00 = open("para250-prune-Conv2d-0.5.txt","w")
for name, param in new_model.named_parameters():
f00.write(name)
f00.write('\n')
numpy_para = param.numpy() # tensor to numpy
str = numpy_para.__repr__()
f00.write(str)
f00.write('\n\n')