Hi
I am experimenting pytorch 1.3 Quantization for resent50. I had taken the pre-trained model from model zoo.
Please find below for accuracy (for 100 images) and size at different stages of my experiment
Size (MB): 102.491395
{"metric": "original_resnet50_val_accuracy", "value": 93.75}
Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
Size (MB): 102.145116
{"metric": "fused_resnet50_val_accuracy", "value": 0.0}
ConvReLU2d(
(0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3))
(1): ReLU()
)
{"metric": "quntize_per_tensor_resent50_val_accuracy", "value": 0.0}
{"metric": "quntize_per_channel_resent50_val_accuracy", "value": 0.0}
Size (MB): 25.65341
QuantizedConvReLU2d(3, 64, kernel_size=(7, 7), stride=(2, 2), scale=1.0, zero_point=0, padding=(3, 3))
Size (MB): 25.957137
QuantizedConvReLU2d(3, 64, kernel_size=(7, 7), stride=(2, 2), scale=1.0, zero_point=0, padding=(3, 3))
Not sure Where it went wrong
PFB code for fusing layers
def fuse_model(m):
modules_to_fuse = [['conv1','bn1',"relu"]]
torch.quantization.fuse_modules(m, modules_to_fuse,inplace=True)
for mod in m.layer1:
torch.quantization.fuse_modules(mod, [["conv1","bn1"]],inplace=True)
torch.quantization.fuse_modules(mod, [["conv2","bn2"]],inplace=True)
torch.quantization.fuse_modules(mod, [["conv3","bn3","relu"]],inplace=True)
if mod.downsample:
torch.quantization.fuse_modules(mod.downsample, [["0","1"]],inplace=True)
for mod in m.layer2:
torch.quantization.fuse_modules(mod, [["conv1","bn1"]],inplace=True)
torch.quantization.fuse_modules(mod, [["conv2","bn2"]],inplace=True)
torch.quantization.fuse_modules(mod, [["conv3","bn3","relu"]],inplace=True)
if mod.downsample:
torch.quantization.fuse_modules(mod.downsample, [["0","1"]],inplace=True)
for mod in m.layer3:
torch.quantization.fuse_modules(mod, [["conv1","bn1"]],inplace=True)
torch.quantization.fuse_modules(mod, [["conv2","bn2"]],inplace=True)
torch.quantization.fuse_modules(mod, [["conv3","bn3","relu"]],inplace=True)
if mod.downsample:
torch.quantization.fuse_modules(mod.downsample, [["0","1"]],inplace=True)
for mod in m.layer4:
torch.quantization.fuse_modules(mod, [["conv1","bn1"]],inplace=True)
torch.quantization.fuse_modules(mod, [["conv2","bn2"]],inplace=True)
torch.quantization.fuse_modules(mod, [["conv3","bn3","relu"]],inplace=True)
if mod.downsample:
torch.quantization.fuse_modules(mod.downsample, [["0","1"]],inplace=True)
return m