Download utils/dml_csr/modules/util.py from m3face/M3Face: direct link, hf CLI and curl.
- Browser
- Download file 1.83 kB
-
https://huggingface.co/m3face/M3Face/resolve/main/utils/dml_csr/modules/util.py
- Command line
-
hf download hf://m3face/M3Face/utils/dml_csr/modules/util.py
-
curl -L -o util.py https://huggingface.co/m3face/M3Face/resolve/main/utils/dml_csr/modules/util.py
1.83 kB
| #!/usr/bin/env python | |
| # -*- encoding: utf-8 -*- | |
| """ | |
| @Author : Qingping Zheng | |
| @Contact : qingpingzheng2014@gmail.com | |
| @File : util.py | |
| @Time : 10/01/21 00:00 PM | |
| @Desc : | |
| @License : Licensed under the Apache License, Version 2.0 (the "License"); | |
| @Copyright : Copyright 2022 The Authors. All Rights Reserved. | |
| """ | |
| from __future__ import absolute_import | |
| from __future__ import division | |
| from __future__ import print_function | |
| import torch.nn as nn | |
| from inplace_abn import InPlaceABNSync | |
| class Bottleneck(nn.Module): | |
| expansion = 4 | |
| def __init__(self, inplanes, planes, stride=1, abn=InPlaceABNSync, dilation=1, downsample=None, fist_dilation=1, multi_grid=1): | |
| super(Bottleneck, self).__init__() | |
| self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) | |
| self.bn1 = abn(planes) | |
| self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, | |
| padding=dilation*multi_grid, dilation=dilation*multi_grid, bias=False) | |
| self.bn2 = abn(planes) | |
| self.conv3 = nn.Conv2d(planes, planes * 4, kernel_size=1, bias=False) | |
| self.bn3 = abn(planes * 4) | |
| self.relu = nn.ReLU(inplace=False) | |
| self.relu_inplace = nn.ReLU(inplace=True) | |
| self.downsample = downsample | |
| self.dilation = dilation | |
| self.stride = stride | |
| def forward(self, x): | |
| residual = x | |
| out = self.conv1(x) | |
| out = self.bn1(out) | |
| out = self.relu(out) | |
| out = self.conv2(out) | |
| out = self.bn2(out) | |
| out = self.relu(out) | |
| out = self.conv3(out) | |
| out = self.bn3(out) | |
| if self.downsample is not None: | |
| residual = self.downsample(x) | |
| out = out + residual | |
| out = self.relu_inplace(out) | |
| return out | |