文章链接:https://arxiv.org/abs/1907.02157

作者提出了一种micro-architecture 名字叫Slim Module的轻量网络结构,网络结构中使用了depthwise separable convolutions(什么是depthwise separable convolutions,可以只看总结)这种结构,实验数据集是CelebA datasets,获得了91.24%的精度,但是参数与可执行方法相比较(comparable performing methods)少了25倍。

作者的方法

作者提出来的micro-architecture包括以下特点:

1)多分支(如:Inception and ResNets),网络结构中多分支意味着网络中有多条路径可以传递判别性信息(discrimination features);

2)卷积核小(如:VGG-Net and GoogleNet,卷积核大小【1*1,3*3,5*5】),提升网络结构的性能,减少训练参数;

3)skip-connections(跳层连接)

提出的slim module:

然后整体的网络结构细节:

和结构框架:

作者使用了sigmoid cross-entropy loss函数:

根据作者提供的信息,我还没将网络结构搭建出来;

实验1:作者在CelebA上进行几种人脸属性分类方法的横向比较实验:

通过表三,作者想说明,虽然自己的方法不是最好的,但是与平均精度排名第一的论文【4】的方法相比较,所占空间最小7.9M,参数量最少0.6M,而且精度还没有差太多。

实验2:作者将slim-net与其他几种深度学习的微结构(micro-architecture)进行了比较,实验结果:

(实验细节需要自行移步到论文的4.3.2节)

实验3:作者对slim-module中的3*3卷积核的depthwise separable convolutional层的卷积核进行了探究性的实验,
原文链接:https://blog.csdn.net/qq_22764813/article/details/97803221

有预训练 pytorch:

https://github.com/gtamba/pytorch-slim-cnn

torch网络结构:

https://github.com/Joyako/Slim-CNN/blob/master/SlimCNN/slim_cnn.py

import torch
import torch.nn as nn
import torch.nn.functional as Fclass ConvBNReLU(nn.Sequential):def __init__(self, in_planes, out_planes, kernel_size=3, stride=1, groups=1):padding = (kernel_size - 1) // 2super(ConvBNReLU, self).__init__(nn.Conv2d(in_planes, out_planes, kernel_size, stride, padding, groups=groups, bias=False),nn.BatchNorm2d(out_planes),nn.ReLU(inplace=True))class DWSeparableConv(nn.Module):"""Depth-Wise Separable Convolution"""def __init__(self, inp, oup):super().__init__()self.dwc = ConvBNReLU(inp, inp, kernel_size=3, groups=inp)self.pwc = ConvBNReLU(inp, oup, kernel_size=1)def forward(self, x):x = self.dwc(x)x = self.pwc(x)return xclass SSEBlock(nn.Module):"""Separable Squeeze-Expand Block"""def __init__(self, inp, oup):super().__init__()out_channel = oup * 4self.pwc1 = ConvBNReLU(inp, oup, kernel_size=1)self.pwc2 = ConvBNReLU(oup, out_channel, kernel_size=1)self.dwc = DWSeparableConv(oup, out_channel)def forward(self, x):x = self.pwc1(x)out1 = self.pwc2(x)out2 = self.dwc(x)return torch.cat((out1, out2), 1)class SlimModule(nn.Module):def __init__(self, inp, oup):super().__init__()hidden_dim = oup * 4out_channel = oup * 3self.sse1 = SSEBlock(inp, oup)self.sse2 = SSEBlock(hidden_dim * 2, oup)self.dwc = DWSeparableConv(hidden_dim * 2, out_channel)self.conv = ConvBNReLU(inp, hidden_dim * 2, kernel_size=1)def forward(self, x):out = self.sse1(x)out += self.conv(x)out = self.sse2(out)out = self.dwc(out)return outclass SlimNet(nn.Module):def __init__(self, num_classes):super().__init__()self.conv = ConvBNReLU(3, 96, kernel_size=7, stride=2)self.max_pool0 = nn.MaxPool2d(kernel_size=3, stride=2)# 4 stacked Slim Moduleself.module1 = SlimModule(96, 16)self.module2 = SlimModule(48, 32)self.module3 = SlimModule(96, 48)self.module4 = SlimModule(144, 64)self.max_pool1 = nn.MaxPool2d(kernel_size=3, stride=2)self.max_pool2 = nn.MaxPool2d(kernel_size=3, stride=2)self.max_pool3 = nn.MaxPool2d(kernel_size=3, stride=2)self.max_pool4 = nn.MaxPool2d(kernel_size=3, stride=2)self.gap = nn.AdaptiveAvgPool2d((1, 1))self.fc = nn.Linear(192, num_classes)def forward(self, x):x = self.max_pool0(self.conv(x))x = self.max_pool1(self.module1(x))x = self.max_pool2(self.module2(x))x = self.max_pool3(self.module3(x))x = self.max_pool4(self.module4(x))# global average poolingx = self.gap(x)x = torch.flatten(x, 1)x = self.fc(x)x = F.sigmoid(x)return xfrom torchstat import stat
net =SlimNet(4)
stat(net, (3, 178, 218))

轻量级人脸属性Slim-CNN相关推荐

  1. 【每周CV论文推荐】 初学深度学习人脸属性分析必读的文章

    欢迎来到<每周CV论文推荐>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的. 人脸属性分析在社交娱乐,人机交互等领域有重要 ...

  2. LFFD:轻量级人脸检测器,不止是快

    点击我爱计算机视觉标星,更快获取CVML新技术 上面的gif图展示的是LFFD人脸检测算法,在Nvidia GPU上对1080P的图像可以跑到16ms左右. 该算法出自论文: LFFD: A Ligh ...

  3. 基于深度学习的多任务人脸属性分析(基于飞桨PaddlePaddle)

    目录 一.概述 1.1 多任务人脸属性分析 1.2 本文任务 二.环境配置 2.1 安装PaddlePaddle 2.2 安装PaddleClas 三.算法模型开发 3.1 算法原理 3.2 数据集准 ...

  4. 【每周CV论文推荐】StyleGAN人脸属性编辑有哪些经典论文需要阅读

    欢迎来到<每周CV论文推荐>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的. 当前人脸图像领域的研究和落地都发展得非常迅速 ...

  5. 最强六大开源轻量级人脸检测项目分析

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 随着深度学习的兴起,工业界和学术界越来越多的使用基于深度学习的方法 ...

  6. 【CV】10种轻量级人脸检测算法大PK | 代码集合开源

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 最近在微信公众号 AIZOO 里看到轻量级人脸检测算法大盘点的文章 ...

  7. 大盘点|轻量级人脸检测算法实现,快到没朋友的都在这里了~

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 整理:公众号@OpenCV中文网 本文仅做学术分享,如有侵权,请联系删除. 人脸检测是计算机视觉中的老 ...

  8. 「每周CV论文推荐」 初学深度学习人脸属性分析必读的文章

    人脸属性分析在社交娱乐,人机交互等领域有重要的作用,本次我们介绍初学人脸属性分析需要读的文章,包括年龄,表情等. 作者&编辑 | 言有三 1 IMDB-WIKI 人脸年龄的估计包括真实年龄和表 ...

  9. 离线人脸属性分析_最新开源 | 人脸识别应用套件:毫秒级离线识别 适用多类场景...

    随着人脸识别技术的不断发展,尤其是在部分算法平台对外开放算法之后,人脸识别的应用门槛得到了极大降低.但是从算法到一款真正可落地的人脸识别产品,在完整的应用开发中,不仅需要考虑底层算法的运行逻辑,也需要 ...

最新文章

  1. 2014年新鲜出炉的16款免费英文字体
  2. Silverlight中服务通信方式的选择(WCF、Data Service、Ria Service)
  3. 01 Servlet Jsp 技术概述
  4. 题目:求100以内的全部素数,每行输出10个。1不是素数
  5. 2003系统虚拟dns服务器向导,安装和管理dns服务器.doc
  6. 如何优化Flash动画使文件更小播放更流畅
  7. 汽车电子技术——CAN总线系统
  8. snagit 注册码
  9. drive翻译成中文_drive是什么意思_drive翻译_读音_用法_翻译
  10. 表单中enter键,导致表单提交
  11. 经典拼数字游戏NumPuzzle C# By Red_angelX
  12. 多线程处理Excel导入数据入库
  13. 树莓派之树莓派系统安装
  14. 李永乐(七)向量组的秩、矩阵的秩——笔记
  15. 新加坡网络安全软件公司【Republic Power 】申请纳斯达克IPO上市
  16. CCF中国开源大会开源雨林论坛丨七大亮点议题抢鲜看!
  17. 19.系统知识-数字证书
  18. 计算机屏幕广播系统,ip网络广播终端_ip广播终端连接图_ip广播系统方案
  19. 通俗易懂谈上拉电阻与下拉电阻
  20. 前端js打开pdf文件--文件通过浏览器打开,以pdf形式进行预览

热门文章

  1. 内核调试相关变量说明
  2. Android程序为什么没有退出设计?
  3. Linux内核探讨-- 第七章
  4. NeHe教程Qt实现——lesson11
  5. mysql安装到最后报错_mysql 安装到最后一步时,start service 为失败状态
  6. python常用的工具函数
  7. python 寻找数组的中心索引_Leetcode724:寻找数组的中心索引(java、python3)
  8. Spring Boot 获取 Bean 的 3 种方式!还有谁不会?
  9. SQL优化这么做就对了
  10. 都2020 了,最流行的密码居然依旧是...