| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> MobileNetV2拆解后总结及阶段性学习回顾(一)(超详细代码解析) -> 正文阅读 |
|
[人工智能]MobileNetV2拆解后总结及阶段性学习回顾(一)(超详细代码解析) |
-----------------------------此处是废话,自我总结用----------------------------- 作为第二个亲手一点点扒出来的代码,需要总结的东西有许多,一点点总结,或许会发很多章。 第一个拆解的网络是Resnet,对就是那个经典的残差网络结构,甚至还不知道所谓的“网络”究竟是什么概念,对深度学习也没有任何概念,甚至连模糊的印象都不存在。还曾经纠结过,究竟什么是Resnet,为什么他叫Resnet,还与舍友进行过头脑风暴,至今为止,我认为可以比较清楚地解释出来什么是Resnet了,或者说能解释什么是网络模型了 1.任何经典的网络都有其不可取代的一个方面,如resnet的残差结构,由于他所处的时代,大家都是很暴力的一层又一层的叠加网络深度,但是任何网络有一个理论极限深度(或许是这样),但是过深的网络并不能带来准确率的增长,只会增加参数的冗余,比如VGG作为Resnet的前置网络基础,整个网络含有一千多万的参数,实在是太多了,(好吧其实resnet并没有解决这个问题,只不过提一下),然后有人说,我们能不能让上一层的输入直接走到下一层,然后通过调整权重的方式,让他们平衡一下。豁,理论存在,实验开始。残差结构就形成了了,resnet名字也由此而来。这个网络当年就拿到了五大比赛的冠军,这是那个时代人们未曾设想的道路,就像一维到二维一样。这也就是成了以后所有网络必带的一个结构,也就是他的不可取代的创新点。 2.那么我第二个纠结的点在于,难道有残差结构就叫resnet吗?经过思考,其实不是的,好像这个问题很蠢,那肯定resnet就是resnet啊,难道还能是别的?可是我那个时候如果别人问我什么resnet,为什么一定是这个结构才叫resnet,换个差不多的结构,多几个卷积层,难道就不是resnet?现在我有了答案。为什么一个网络之所以有他特有的名字,不仅仅是因为他的独特的创新点,还因为这个网络结构是经过实际论证,在那个时候下,一种较好的解决方案,或者说在当时的时代,那个就是最好的网络。如果你跟他处于一个时代,你可能觉得加一层减一层都无所谓,但是可能所谓的resnet50 就是比你那resnet51。。52,,53,,63效果要好很多。 深度学习作为一个日新月异的领域,或许你睡一觉起来,就有新的网络出现了,这个网络可能就像当年的resnet一样震惊世界,但是我们不是从未来穿越而来,只能去追逐新的技术,相信大佬们,一步步前进。 -----------------------------------------------废话结束,正文开始-------------------------------- 废话不说,我直接进入正题,啥是mobilenet,为啥搞它出来。就一句话,手机和摄像头之类的设备太垃圾了,但是我还想用深度学习咋办,那谷歌爸爸就给你一个办法,用这个mobilenet,看名字都是给手机开发的,一定没问题。确实没问题,相比于VGG这个庞大的家伙,有一千多万的参数,这个小玩意就六百多万,豁,少了一半的参数量,要是平方一下就是四分之一,要是三次方。。。。倒是不必哈-。- 虽然六百万还是听起来蛮多的,但是计算机面前已经不多了。 那么就要提出问题了,为啥能减少这么多,这就涉及到了深度可分离卷积,听不懂没关系,在我理解下,这东西就是把一个连乘法2*3*4分成了两步,第一步是把第一个2乘个1,然后做三遍2乘1,第二步就是把结果加个四遍,或许不太恰当,但是核心就是把两次乘法拆开,中间变成一步加法(计算机的世界里加法要好算的很多),所以一下子降低了参数量,初学者就记住这一句话就行了,后面看完全部解析自然就会了。 其实深度可分离卷积这玩意是mobilenet V1的东西,不过我懒得再开一章了,就这么讲吧··· 上图!!!经典之我是深度可分离卷积,这图可太经典了 ------------------经典卷积部分-------------------- 首先,在学这玩意之前,你一定要知道经典卷积的过程,知道了就非常好理解,经典卷积就是,一一大堆长宽一样大的特征图,使用同一个卷积核进行卷积,卷积核的厚度就等于一摞特征图的厚度,然后一次卷积就直接干出来一个值,作为下一层卷积的输入特征图的第一层的第一个值。然后整体过完一遍卷积之后,就得到了一张特征图,你想要几张特征图就过几遍,当然这个不一样的遍数卷积核也不一样,这个特征图的张数(厚度)也叫做通道。上面的图片通道就是3 -----------------深度可分离卷积部分----------------- 好嘞,经典卷积说完,轮到主角登场,之前说经典卷积是特征图有多厚他就有多厚,那么有闲得无聊的人就说,那我就偏偏一人一张卷积核行不行,大家就开始讨论,第一层一个卷积核,来一遍,第二层一个卷积核,过一遍,以此类推,是不是最后就得到一摞大小相等的卷积核。这就是上面图的第一张,depthwise convolutiong深度分离卷积。豁,理论存在,实践开始。emmmmmm这时候突然有人说,那我想让不同层图像有关联咋办。那好办,搞个1×1的卷积呗,厚度跟特征图厚度一样,也就是通道数相等,这样既没有损失图像信息,也实现了不同通道的信息关联,也就图中的pointwise 卷积,又叫点卷积。好嘞,这就完成了,来吧算算参数量,好家伙,比经典卷积下降了一大截,来吧今年顶会有了,出门吃火锅。 -----------------------总结----------------------- 好吧其实上面那些仅仅是mobileV1的创新点,最厉害的在V2里面呢(虽然大家都这么说,但是我还是觉得深度可分离卷积太妙了,啥脑子能想出来这种),理解这个网络关键点在于:一定要知道经典卷积的通道数也就是厚度,跟特征图的通道数也就是厚度相等 。一遍卷积过程得到一张特征图,下一遍卷积得到下一张图,输出需要多少通道,也就是厚度,就要做几遍卷积 那么这个就把这种有厚度的大卷积核分成了薄片卷积,然后再变成竖棍卷积,最终实现与经典卷积相同的做法。到此为止。回宿舍睡觉 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 0:29:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |