Buckets:
| # Copyright 2020 Ross Wightman; redistributed within github.com/Walter0807/MotionBERT (Apache License, Version 2.0). | |
| # Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with | |
| # the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 | |
| # NOTICE (cwm3 vendoring, 2026-09-16): verbatim copy of lib/model/drop.py (commit 20db205a2cabec8bb535c91f07124c7e5195a2f9, | |
| # upstream sha256 44b1af7912ae46c62c5b74712dae31697afc697e788c8dd9c5050602a2397173); no modification. | |
| """ DropBlock, DropPath | |
| PyTorch implementations of DropBlock and DropPath (Stochastic Depth) regularization layers. | |
| Papers: | |
| DropBlock: A regularization method for convolutional networks (https://arxiv.org/abs/1810.12890) | |
| Deep Networks with Stochastic Depth (https://arxiv.org/abs/1603.09382) | |
| Code: | |
| DropBlock impl inspired by two Tensorflow impl that I liked: | |
| - https://github.com/tensorflow/tpu/blob/master/models/official/resnet/resnet_model.py#L74 | |
| - https://github.com/clovaai/assembled-cnn/blob/master/nets/blocks.py | |
| Hacked together by / Copyright 2020 Ross Wightman | |
| """ | |
| import torch | |
| import torch.nn as nn | |
| import torch.nn.functional as F | |
| def drop_path(x, drop_prob: float = 0., training: bool = False): | |
| """Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks). | |
| This is the same as the DropConnect impl I created for EfficientNet, etc networks, however, | |
| the original name is misleading as 'Drop Connect' is a different form of dropout in a separate paper... | |
| See discussion: https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956 ... I've opted for | |
| changing the layer and argument names to 'drop path' rather than mix DropConnect as a layer name and use | |
| 'survival rate' as the argument. | |
| """ | |
| if drop_prob == 0. or not training: | |
| return x | |
| keep_prob = 1 - drop_prob | |
| shape = (x.shape[0],) + (1,) * (x.ndim - 1) # work with diff dim tensors, not just 2D ConvNets | |
| random_tensor = keep_prob + torch.rand(shape, dtype=x.dtype, device=x.device) | |
| random_tensor.floor_() # binarize | |
| output = x.div(keep_prob) * random_tensor | |
| return output | |
| class DropPath(nn.Module): | |
| """Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks). | |
| """ | |
| def __init__(self, drop_prob=None): | |
| super(DropPath, self).__init__() | |
| self.drop_prob = drop_prob | |
| def forward(self, x): | |
| return drop_path(x, self.drop_prob, self.training) |
Xet Storage Details
- Size:
- 2.54 kB
- Xet hash:
- df8ca28ca4843d4fe32c378894636c0f646c19df7db44ada1841246db0988a43
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.