CondenseNet: An Efficient DenseNet using Learned Group Convolutions
具体代码请见:https://github.com/ShichenLiu/CondenseNet
class CondenseNet(nn.Module):def __init__(self, args):super(CondenseNet, self).__init__()self.stages = args.stagesself.growth = args.growthassert len(self.stages) == len(self.growth)self.args = argsself.progress = 0.0if args.data in ['cifar10', 'cifar100']:self.init_stride = 1self.pool_size = 8else:self.init_stride = 2self.pool_size = 7self.features = nn.Sequential()### Initial nChannels should be 3self.num_features = 2 * self.growth[0]### Dense-block 1 (224x224)self.features.add_module('init_conv', nn.Conv2d(3, self.num_features,kernel_size=3,stride=self.init_stride,padding=1,bias=False))for i in range(len(self.stages)):### Dense-block iself.add_block(i)### Linear layerself.classifier = nn.Linear(self.num_features, args.num_classes)### initializefor m in self.modules():if isinstance(m, nn.Conv2d):n = m.kernel_size[0] * m.kernel_size[1] * m.out_channelsm.weight.data.normal_(0, math.sqrt(2. / n))elif isinstance(m, nn.BatchNorm2d):m.weight.data.fill_(1)m.bias.data.zero_()elif isinstance(m, nn.Linear):m.bias.data.zero_()returndef add_block(self, i):### Check if ith is the last onelast = (i == len(self.stages) - 1)block = _DenseBlock(num_layers=self.stages[i],in_channels=self.num_features,growth_rate=self.growth[i],args=self.args,)self.features.add_module('denseblock_%d' % (i + 1), block)self.num_features += self.stages[i] * self.growth[i]if not last:trans = _Transition(in_channels=self.num_features,args=self.args)self.features.add_module('transition_%d' % (i + 1), trans)else:self.features.add_module('norm_last',nn.BatchNorm2d(self.num_features))self.features.add_module('relu_last',nn.ReLU(inplace=True))self.features.add_module('pool_last',nn.AvgPool2d(self.pool_size))
class _DenseLayer(nn.Module):def __init__(self, in_channels, growth_rate, args):super(_DenseLayer, self).__init__()self.group_1x1 = args.group_1x1self.group_3x3 = args.group_3x3### 1x1 conv i --> b*kself.conv_1 = LearnedGroupConv(in_channels, args.bottleneck * growth_rate,kernel_size=1, groups=self.group_1x1,condense_factor=args.condense_factor,dropout_rate=args.dropout_rate)### 3x3 conv b*k --> kself.conv_2 = Conv(args.bottleneck * growth_rate, growth_rate,kernel_size=3, padding=1, groups=self.group_3x3)def forward(self, x):x_ = xx = self.conv_1(x)x = self.conv_2(x)return torch.cat([x_, x], 1)class _DenseBlock(nn.Sequential):def __init__(self, num_layers, in_channels, growth_rate, args):super(_DenseBlock, self).__init__()for i in range(num_layers):layer = _DenseLayer(in_channels + i * growth_rate, growth_rate, args)self.add_module('denselayer_%d' % (i + 1), layer)class _Transition(nn.Module):def __init__(self, in_channels, args):super(_Transition, self).__init__()self.pool = nn.AvgPool2d(kernel_size=2, stride=2)def forward(self, x):x = self.pool(x)return x
CondenseNet: An Efficient DenseNet using Learned Group Convolutions相关推荐
- 卷积Groups Group Convolutions
Symmetry Consider a square. Is it symmetric? How is it symmetric? How much symmetry does it have? Wh ...
- 轻量级网络之CondenseNet
轻量级网络之CondenseNet CondenseNet: An Efficient DenseNet using Learned Group Convolutions 2018CVPR的网络,文章 ...
- 分组卷积新进展,全自动学习的分组有哪些经典模型?
作者&编辑 | 言有三 1 CondenseNet CondenseNet 以前我们给大家讲了许多的分组网络,如果分组本身可以学习,而不是通过预先定义的规则,可能取得更好的效果,其中的一个典型 ...
- 「AI不惑境」移动端高效网络,卷积拆分和分组的精髓
https://www.toutiao.com/a6714182512374989323/ 大家好,这是专栏<AI不惑境>的第六篇文章,讲述卷积拆分和分组卷积的精髓. 进入到不惑境界,就是 ...
- 【知识星球】分组卷积最新进展,全自动学习的分组有哪些经典模型?
欢迎大家来到<知识星球>专栏,这里是网络结构1000变小专题,今天介绍最新的分组卷积模型的进展. 作者&编辑 | 言有三 1 CondenseNet 有三AI知识星球-网络结构10 ...
- 【AI不惑境】移动端高效网络,卷积拆分和分组的精髓
大家好,这是专栏<AI不惑境>的第六篇文章,讲述卷积拆分和分组卷积的精髓. 进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考.如果说学习是一个从模仿,到追随,到创造的过程 ...
- CVPR 2018 paper list(论文列表)
原文链接:http://cvpr2018.thecvf.com/program/main_conference 52 Embodied Question Answering Abhishek Das ...
- 嵌入式和移动深度学习研究
转载自:https://github.com/EMDL/awesome-emdl 文章目录 EMDL Papers Survey Model System Quantization Pruning A ...
- Tiny-DSOD: Lightweight Object Detection for Resource-Restricted Usages
Y uxi Li1 lyxok1@sjtu.edu.cn Jiuwei Li2 jiuwei.li@intel.com Weiyao Lin1 wylin@sjtu.edu.cn Jianguo Li ...
最新文章
- software RAID0+cryptsetup磁盘加密
- 让你的系统“坚挺不倒”的最后一个大招——「降级」
- sql 发送邮件网络附件_利用VBA发送附件电子邮件
- JavaScript+HTML+CSS 无缝滚动轮播图的两种方式
- Nacos配置中心介绍
- 相似度和相异度、常用距离度量、余弦相似度
- KDD2021 | USCB:展示广告约束出价问题的通用解决方案
- C# 函数式编程:LINQ
- 在JDK 8中可通过反射获得构造函数/方法参数元数据
- 网格变形动画MeshTransform
- 在springboot中,如何读取配置文件中的属性
- linux gradle仓库位置,如何在Android Studio中使用Gradle发布项目至Jcenter仓库
- Java 线程池的复用原理
- 002,jvm启动流程
- 良心推荐效率办公!清描:精准稳定的文字识别软件
- 《从0到1:CTFer成长之路》书籍配套题目-[第二章 web进阶]死亡ping命令
- JAVA开发常用软件总结
- 怎样看oracle删掉没有,肿么查看以前Oracle卸载干净没
- 功能强大的全新虚拟商品自动发货商城源码
- 我是一只幼鸟,望着那蓝蓝的天空时不时就想翱翔起来