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) # After merge: about 7.9s
merge(model)
with torch.no_grad():
start = time()
for i in range(100):
model(x)
stop = time()
print(stop - start) # Before merge: about 4.8s
How we do
Coming soon
Are outputs the same after and before 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.2.tar.gz
(2.6 kB
view hashes)
Built Distribution
Close
Hashes for convbnmerge-0.1.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7846e8d5e1c9cad3512eca01f8af800273fcb4b5522a25bcb721c855409b234f |
|
MD5 | 9d0b1e9447c423d82a4647bd3ef8a50b |
|
BLAKE2b-256 | cbb34527d8f2248e92f0f13a615705d02de24069876ab0e8182d3f388fe87677 |