- Notifications
You must be signed in to change notification settings - Fork95
Implementation of DropBlock: A regularization method for convolutional networks in PyTorch.
License
miguelvr/dropblock
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Implementation ofDropBlock: A regularization method for convolutional networksin PyTorch.
Deep neural networks often work well when they are over-parameterizedand trained with a massive amount of noise and regularization, such asweight decay and dropout. Although dropout is widely used as a regularizationtechnique for fully connected layers, it is often less effective for convolutional layers.This lack of success of dropout for convolutional layers is perhaps due to the factthat activation units in convolutional layers are spatially correlated soinformation can still flow through convolutional networks despite dropout.Thus a structured form of dropout is needed to regularize convolutional networks.In this paper, we introduce DropBlock, a form of structured dropout, where units in acontiguous region of a feature map are dropped together.We found that applying DropBlock in skip connections in addition to theconvolution layers increases the accuracy. Also, gradually increasing numberof dropped units during training leads to better accuracy and more robust to hyperparameter choices.Extensive experiments show that DropBlock works better than dropout in regularizingconvolutional networks. On ImageNet classification, ResNet-50 architecture withDropBlock achieves 78.13% accuracy, which is more than 1.6% improvement on the baseline.On COCO detection, DropBlock improves Average Precision of RetinaNet from 36.8% to 38.4%.
Install directly from PyPI:
pip install dropblock
or the bleeding edge version from github:
pip install git+https://github.com/miguelvr/dropblock.git#egg=dropblock
NOTE: Implementation and tests were done in Python 3.6, if you have problems with other versions of python please open an issue.
For 2D inputs (DropBlock2D):
importtorchfromdropblockimportDropBlock2D# (bsize, n_feats, height, width)x=torch.rand(100,10,16,16)drop_block=DropBlock2D(block_size=3,drop_prob=0.3)regularized_x=drop_block(x)
For 3D inputs (DropBlock3D):
importtorchfromdropblockimportDropBlock3D# (bsize, n_feats, depth, height, width)x=torch.rand(100,10,16,16,16)drop_block=DropBlock3D(block_size=3,drop_prob=0.3)regularized_x=drop_block(x)
Scheduled Dropblock:
importtorchfromdropblockimportDropBlock2D,LinearScheduler# (bsize, n_feats, depth, height, width)loader= [torch.rand(20,10,16,16)for_inrange(10)]drop_block=LinearScheduler(DropBlock2D(block_size=3,drop_prob=0.),start_value=0.,stop_value=0.25,nr_steps=5 )probs= []forxinloader:drop_block.step()regularized_x=drop_block(x)probs.append(drop_block.dropblock.drop_prob)print(probs)
The drop probabilities will be:
>>> [0. , 0.0625, 0.125 , 0.1875, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25]
The user should include thestep()
call at the start of the batch loop,or at the the start of a model'sforward
call.
Checkexamples/resnet-cifar10.py tosee an implementation example.
We usedrop_prob
instead ofkeep_prob
as a matter of preference,and to keep the argument consistent with pytorch's dropout.Regardless, everything else should work similarly to what is described in the paper.
Refer toBENCHMARK.md
[Ghiasi et al., 2018] DropBlock: A regularization method for convolutional networks
- Scheduled DropBlock
- Get benchmark numbers
- Extend the concept for 3D images
About
Implementation of DropBlock: A regularization method for convolutional networks in PyTorch.