技术标签: 算法 python 机器学习 计算机视觉 神经网络
点击上方“机器学习与生成对抗网络”,关注"星标"
获取有趣、好玩的前沿干货!
编辑 计算机视觉联盟
《三体》中罗辑沉睡了两个世纪后,在位于地下一千多米的城市中醒来;《流浪地球》中,行星推进器下500米的地下城。
在那里是一样的人间烟火,只不过人们生活的场景从地上转移到了地下。
未来,随着人类栖息空间的不断延展和拓宽,现存的城市管理体系注定会失效,必将需要一个高度复杂的智能系统来维护,而打造智慧城市,要完成交通、供水、供电、供气、通讯、环保等等基础设施的数字化建设,但是很少有城市关注到。
而上海的「一网统管」系统做到了,小到每一个路灯、井盖、消防栓,大到26000多公里的地下管网,都被连接了起来,让城市的精细化管理成为可能。
这个「一网统管」得益于依图自主研发的人工智能芯片,人工智能算力在城市管理中规模化落地的可能性被大大释放,为此还得到了央视《新闻联播》“十三五”成就巡礼专题的点赞。
一直以来,依图都在智能基础设施的建设方面狠下功夫,在基础的算法和芯片方面不断突破新的边界。
移动端神经网络新架构MobileNeXt,超越谷歌MobileNet和何恺明团队ResNet
基础网络结构是各种算法的基础,直接影响模型最终的性能,这方面高质量的研究很稀缺。
依图研发团队近期在 ECCV 2020 发表了新论文,通过分析当前主流移动端网络的倒残差模块的优势与劣势,提出了一种改良版本MobileNeXt,大大提升了移动端神经网络的性能。
论文:
https://arxiv.org/abs/2007.02269
代码:
https://github.com/yitu-opensource/MobileNeXt
在不使用SE等性能提升模块的条件下,相比于主流的MobileNetV2,MobileNeXt在相同计算量下可达到1.7%的分类精度提升。
此外,新提出的沙漏模块可用于改良神经网络自动化搜索的搜索空间,在使用相同搜索算法的情况下,加入沙漏模块的搜索空间可以在CIFAR10的数据集上取得更高效的模型架构,大大优于谷歌的MobileNet、何恺明团队提出的ResNet等使用倒残差结构的模型。
图一:ImageNet 测试结果
倒残差和线性瓶颈,让移动端神经网络彻底「通车」
谷歌在2017年提出了专门为移动端优化的轻量级CNN网络,该研究最大的亮点是提出了深度可分离卷积(depthwise separable convolution)。
传统卷积
传统卷积分两步,每个卷积核与每个特征图按位相乘,然后再相加,此时,计算量为????????∗????????∗????????∗????????∗????∗????,其中????????为特征图尺寸,????????为卷积核尺寸,M为输入通道数,N为输出通道数。
深度可分离卷积
而谷歌提出的深度可分离卷积,将普通卷积拆分成了一个深度卷积depthwise和一个逐点卷积pointwise。
首先按通道进行按位相乘,通道数没有改变;然后将第一步的结果,使用1*1的卷积核进行传统的卷积,此时通道数可以进行改变。使用了深度可分离卷积,其计算量变为????????∗????????∗????∗????????∗????????+1∗1∗????∗????∗????????∗????????。
深度可分离卷积的计算量下降了,也是MobileNet V1能够实现加速的主要原因。
MobileNet V1的速度虽然提高了,但是低维信息映射到高维的维度较低,经过ReLU后再映射回低维时损失比较大,所以谷歌在V1的基础上,又引入了倒残差(Inverted Residuals)和线性瓶颈(Linear Bottlenecks)两个模块,使得MobileNetV2降低时延的同时精度也有所提升。
MobileNetV2 提出的倒残差模块现在已经成为移动端网络的基础构建模块。
倒残差模块中间粗两头细,扩张-卷积-压缩,提取更高维信息
线性瓶颈模块,将最后的ReLU替换成线性激活函数,进一步降低信息损失
通过在高维度使用深度可分离卷积,倒残差网络可以有效降低计算开销,保证模型性能。
同时,瓶颈结构的连接方式可以有效降低点操作的数量、减少所需要的内存访问,进而进一步减小硬件上的读取延时,提升硬件执行效率。
倒残差梯度回传易「走丢」,沙漏型瓶颈结构让梯度不「抖动」
倒残差结构的不足
然而,MobileNetV2集中于瓶颈结构的网络连接方式可能会造成优化过程中的梯度回传抖动,进而影响模型收敛趋势,导致模型性能降低。
现有研究表明:(1) 更宽的网络可以缓解梯度混淆问题并有助于提升模型性能;(2)逆残差模块中的短连接可能会影响梯度回传。
为了解决MobileNetV2中瓶颈结构导致的优化问题,依图团队重新思考了由ResNet提出的传统瓶颈结构的链接方式,这种连接方式把梯度主要集中在较高维度的网络层,可以减少梯度抖动、加速网络收敛。
于是便有了一种新的网络设计模块--沙漏型瓶颈结构,既能保留高维度网络加速收敛和训练的优势,又能利用深度卷积带来的计算开销收益,减少高维特征图的内存访问需求,提高硬件执行效率。
图二:a.瓶颈结构,b.倒残差结构,c.新的沙漏型瓶颈结构
依图团队把跳跃链接放置在高维度神经网络层,并使用深度卷积来降低计算开销,然后使用两连续层1x1卷积来进一步降低计算开销的效果。
图三:Sandglass Block的具体原理设计
可以看到,Sandglass Block可以保证更多的信息从bottom层传递给top层,进而有助于梯度回传;执行了两次深度卷积以编码更多的空间信息。
基于上面的分析,我们来看依图研发团队都做了哪些设计优化。
降维和升维的位置
在原始的倒残差模块中先进行升维再进行降维。
基于前述分析,为确保高维度特征的短连接,依图团队对两个1x1卷积的顺序进行了调整。假设 表示输入张量, 表示输出张量(注:此时尚未考虑深度卷积),那么该模块的计算可以写成如下形式,
见图三b中的中间两个1x1卷积。
高维度短连接
依图团队并未在瓶颈层间构建短连接,而是在更高维特征之间构建短连接(见图三b)。更宽的短连接有助于更多信息从输入F传递给输出G,从而有更多的梯度回传。
与此同时,由于高维度的跳跃链接会导致更多的点加操作、需求更多的内存读取访问,直接连接高维度跳跃链接会降低硬件执行效率。
一种新颖的残差跳跃连接可以解决这一问题:即只使用一部分信息通道进行跳跃链接。这一操作可直接减少点加操作和特征图大小,进而直接提升硬件执行效率。
实验结果显示,仅使用一半的信息通道进行跳跃链接不会造成精度损失。
引入更丰富的空间信息
我们知道,1x1卷积有助于编码通道间的信息,但难以获取空间信息,而深度卷积可以。因此依图团队沿着倒残差模块的思路引入了深度卷积来编码空间信息。
但跟倒残差模块不同的是深度卷积的位置。
倒残差模块的深度卷积在两个1x1卷积之间,而1x1卷积会降低空域信息编码,因此依图团队将深度卷积置于两个1x1卷积之外(见图三b中的两个3x3深度卷积),这样就能确保深度卷积在高维空间得到处理并获得更丰富的特征表达。
(该模块可以采用如上公式进行描述)
激活函数的位置
线性瓶颈层有助于避免特征出现零化现象导致的信息损失,因此在降维的1x1卷积后不再添加激活函数。同时最后一个深度卷积后也不添加激活函数,激活函数只添加在第一个深度卷积与最后一个1x1卷积之后。
基于上述考虑,得到了该文所设计的新颖的倒残差瓶颈模块,结构如下表所示。
图四:新的残差瓶颈模块的具体连接方式
基于上述所示沙漏瓶颈模块,依图团队提出了一种新的移动端网络架构MobileNeXt。
图五:依图团队提出的新的移动端网络架构
依图一直是稳扎稳打型的选手,做研究也很务实、不追求多和杂,梯度抖动就解决抖动的问题,损失大就想办法降低损失,追求的是实用和落地,而不是去刷各种比赛的榜单。
对标MobileNetV2,MobileNeXt参数更少精度更高
既然是基于移动端的网络,依图团队在Google Pixel手机上进行了测试,看MobileNeXt跟MobileNet V2相比,性能有多少提升。
在PyTorch环境下,可以看到MobileNeXt在不同大小的模型下,精度均优于MobileNetV2,而且模型越小,这种优势越明显。
图六:与MobileNetV2 对比的实验结果
当与后训练量化方法结合时,MobileNeXt也有很大优势。(后训练量化可以简单看做模型压缩)
图七:当与量化方法结合的时候,MobileNeXt的优势会更加明显
硬件执行效率方面,仅使用部分新系统进行跳跃链接可有效提高硬件执行效率。值得注意的是,在进行残差信息通道实验的时候,没有使用任何额外的监督信息(比如知识蒸馏)。
图八:使用不同信息通道数目对模型精度的影响
目标检测方面,相比MobileNetV2, 使用MobileNeXt的基础架构,可带来0.9mAP的收益。
图九:在PascalVOC 2017 数据集上的实验验证
神经网络搜索方面,为验证信息处沙漏模型的高效性,依图团队使用新提出的沙漏模型对神经网络搜索的搜索空间进行了扩充。在使用相同搜索算法的情况下,基于扩充空间的搜索结果可以得到0.13% 的精度提升,同时减少25% 的参数量。
图十:使用相同搜索算法时基于扩充空间的搜索结果
透过现象看本质,是研发团队成功设计沙漏型瓶颈模块及MobileNeXt的根本所在,可以看到,基础领域的进展最终靠的还是自身扎实的基本功。
从这个层面讲,依图早已不再是传统意义上的CV公司,而是凭借基础算法的优势和芯片的加持,逐渐成长为新一代的AI算力厂商。
未来,不光移动端,云端和边缘端的厂商也将从依图的软硬件协同算法创新中获益,节约自主开发的算力成本,更好地驱动整体业务。
从看、听再到本质的理解,机器的智能在不断进化中逐渐迈向更高的维度,我们看到,依图正在努力将智能化的理论不断付诸实践,成为AI落地的引路人。
参考链接:
https://arxiv.org/abs/2007.02269
https://github.com/yitu-opensource/MobileNeXt
https://www.cnblogs.com/dengshunge/p/11334640.html
https://bbs.cvmart.net/articles/2861
end
猜您喜欢:
附下载 |《TensorFlow 2.0 深度学习算法实战》
文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文
文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作 导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释: cwy_init/init_123..._达梦数据库导入导出
文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js
文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6
文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输
文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...
文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure
文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割
文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答
文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。
文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入
文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf