One-clicked merge convolution and batchnorm to one unified convolution
Project description
Convolution Batchnorm Merge
Only one line of code and we can accelerate your model up to 50% faster!
Installation
$ pip install convbnmerge
Usage
conv-bn-merge
is ONLY used in inference time!
from convbnmerge import merge
model = ...
"""
training...
"""
merge(model)
How much fast
You usually reach 30++% inferece time reduce. In some cases, the number is more than 50%!
from time import time
import torch
from torchvision.models.resnet import resnet34
from convbnmerge import merge
if __name__ == '__main__':
model = resnet34(pretrained=True)
x = torch.Tensor(2, 3, 32, 32)
with torch.no_grad():
start = time()
for i in range(100):
model(x)
stop = time()
print(stop - start) # Before merge: about 7.9s
merge(model)
with torch.no_grad():
start = time()
for i in range(100):
model(x)
stop = time()
print(stop - start) # After merge: about 4.8s
How we do
Coming soon
Are outputs the same before and after merge?
A small difference caused by round-off error. In almost cases, it doesn't harm the model's result.
import torch
from torchvision.models.resnet import resnet34
from convbnmerge import merge
if __name__ == '__main__':
model = resnet34(pretrained=True)
model.eval()
x = torch.Tensor(1, 3, 32, 32)
out_old = model(x)
merge(model)
out_new = model(x)
print(((out_old-out_new)**2).sum()) #less than 1e-10
License
conv-bn-merge
is MIT-licensed.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
convbnmerge-0.1.3.tar.gz
(2.6 kB
view hashes)
Built Distribution
Close
Hashes for convbnmerge-0.1.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e593b4f6689e0a69a9b1af1afcef64dffef34b5ea5755a385b7bf7ba0218ff03 |
|
MD5 | e701f563ffc209f3d6c37bcdf19aab0f |
|
BLAKE2b-256 | cc82698cd8961a702e9b9afd0b5b15a2b2ceca034a4b537bc05e216e4f9b27e4 |