具体代码请见: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相关推荐

  1. 卷积Groups Group Convolutions

    Symmetry Consider a square. Is it symmetric? How is it symmetric? How much symmetry does it have? Wh ...

  2. 轻量级网络之CondenseNet

    轻量级网络之CondenseNet CondenseNet: An Efficient DenseNet using Learned Group Convolutions 2018CVPR的网络,文章 ...

  3. 分组卷积新进展,全自动学习的分组有哪些经典模型?

    作者&编辑 | 言有三 1 CondenseNet CondenseNet 以前我们给大家讲了许多的分组网络,如果分组本身可以学习,而不是通过预先定义的规则,可能取得更好的效果,其中的一个典型 ...

  4. 「AI不惑境」移动端高效网络,卷积拆分和分组的精髓

    https://www.toutiao.com/a6714182512374989323/ 大家好,这是专栏<AI不惑境>的第六篇文章,讲述卷积拆分和分组卷积的精髓. 进入到不惑境界,就是 ...

  5. 【知识星球】分组卷积最新进展,全自动学习的分组有哪些经典模型?

    欢迎大家来到<知识星球>专栏,这里是网络结构1000变小专题,今天介绍最新的分组卷积模型的进展. 作者&编辑 | 言有三 1 CondenseNet 有三AI知识星球-网络结构10 ...

  6. 【AI不惑境】移动端高效网络,卷积拆分和分组的精髓

    大家好,这是专栏<AI不惑境>的第六篇文章,讲述卷积拆分和分组卷积的精髓. 进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考.如果说学习是一个从模仿,到追随,到创造的过程 ...

  7. CVPR 2018 paper list(论文列表)

    原文链接:http://cvpr2018.thecvf.com/program/main_conference 52 Embodied Question Answering Abhishek Das ...

  8. 嵌入式和移动深度学习研究

    转载自:https://github.com/EMDL/awesome-emdl 文章目录 EMDL Papers Survey Model System Quantization Pruning A ...

  9. 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 ...

最新文章

  1. software RAID0+cryptsetup磁盘加密
  2. 让你的系统“坚挺不倒”的最后一个大招——「降级」
  3. sql 发送邮件网络附件_利用VBA发送附件电子邮件
  4. JavaScript+HTML+CSS 无缝滚动轮播图的两种方式
  5. Nacos配置中心介绍
  6. 相似度和相异度、常用距离度量、余弦相似度
  7. KDD2021 | USCB:展示广告约束出价问题的通用解决方案
  8. C# 函数式编程:LINQ
  9. 在JDK 8中可通过反射获得构造函数/方法参数元数据
  10. 网格变形动画MeshTransform
  11. 在springboot中,如何读取配置文件中的属性
  12. linux gradle仓库位置,如何在Android Studio中使用Gradle发布项目至Jcenter仓库
  13. Java 线程池的复用原理
  14. 002,jvm启动流程
  15. 良心推荐效率办公!清描:精准稳定的文字识别软件
  16. 《从0到1:CTFer成长之路》书籍配套题目-[第二章 web进阶]死亡ping命令
  17. JAVA开发常用软件总结
  18. 怎样看oracle删掉没有,肿么查看以前Oracle卸载干净没
  19. 功能强大的全新虚拟商品自动发货商城源码
  20. 我是一只幼鸟,望着那蓝蓝的天空时不时就想翱翔起来

热门文章

  1. Python+OpenCV:图像Harris角点检测(Harris Corner Detection)
  2. 机器视觉系统中相机的分辨率怎么选择?
  3. HTTPS那些事(三)攻击实例与防御(转载)
  4. Apache-配置、测试和调试
  5. Node.js 文档(目录)
  6. Win7 本地打印后台处理程序服务没有运 怎么办
  7. 【转】MySQL索引和查询优化
  8. sgu 101 domino
  9. c语言strTrimed函数用法介绍,linux type命令用法_转
  10. php 当前时间转换,php时间转换