ROI wise 方法得到的矩阵归一化处理公式怎么处理

后使用快捷导航没有帐号?
查看: 2010|回复: 11
注册时间阅读权限10最后登录在线时间83 小时贡献值0 积分80分享好友记录日志相册UID38585
正式滴友, 积分 80, 距离下一级还需 420 积分
水晶97 心级80 精华0主题帖子
做功能连接,ROI wise几个ROI得到的矩阵怎么处理哈?求救!!!
该贴已经同步到
注册时间阅读权限1最后登录在线时间0 小时贡献值0 积分7分享好友记录日志相册UID33727
新新滴友, 积分 7, 距离下一级还需 23 积分
水晶0 心级7 精华0主题帖子
,为你点赞
注册时间阅读权限1最后登录在线时间67 小时贡献值0 积分20分享好友记录日志相册UID34042
新新滴友, 积分 20, 距离下一级还需 10 积分
水晶983 心级20 精华0主题帖子
可以在MATLAB编个小程序,将矩阵整理成你想要的格式输出,再进行下一步的统计
注册时间阅读权限1最后登录在线时间67 小时贡献值0 积分20分享好友记录日志相册UID34042
新新滴友, 积分 20, 距离下一级还需 10 积分
水晶983 心级20 精华0主题帖子
可以在MATLAB编个小程序,将矩阵整理成你想要的格式输出,再进行下一步的统计
注册时间阅读权限10最后登录在线时间83 小时贡献值0 积分80分享好友记录日志相册UID38585
正式滴友, 积分 80, 距离下一级还需 420 积分
水晶97 心级80 精华0主题帖子
勿匆匆7 发表于
可以在MATLAB编个小程序,将矩阵整理成你想要的格式输出,再进行下一步的统计 ...
不会编程,求指导!
注册时间阅读权限10最后登录在线时间83 小时贡献值0 积分80分享好友记录日志相册UID38585
正式滴友, 积分 80, 距离下一级还需 420 积分
水晶97 心级80 精华0主题帖子
勿匆匆7 发表于
可以在MATLAB编个小程序,将矩阵整理成你想要的格式输出,再进行下一步的统计 ...
本来想说手动整理,在SPSS里分析,可是量好大,而且用T检验感觉怪怪的,用多重比较不知道从哪下手!
注册时间阅读权限1最后登录在线时间67 小时贡献值0 积分20分享好友记录日志相册UID34042
新新滴友, 积分 20, 距离下一级还需 10 积分
水晶983 心级20 精华0主题帖子
金麦穗 发表于
不会编程,求指导!
dir I:\REST\NEWsmokerHC\Results\ROIwise\Sub*.txt%你处理出来每个被试的功能连接结果的txt
outfile=fopen('Result','w');%输出文件,输出在MATLAB界面,可查看一共有几个被试
while i&=102%每个文件运行一次,i表示文件序号,你一共有几个被试就输几
& & filename=strcat('Sub',num2str(i),'.txt');
& & data=importdata(filename);
& & for x=2:11%ROI的数目
& && &&&for y=1:10%ROI的数目-1
& && && && &if y&x
& && && && && & datas(i,j)=data(x,y);
& && && && && & fprintf(outfile,'%f ',datas(j));
& && && && && &j=j+1;
& && && && &end
& && &&&end
& && &&&fprintf(outfile,'\r\n');%换行
& & i=i+1;
& &fclose(outfile);
一定要将那些txt所在的文件夹作为工作目录,否则会出错!!!上面语言可在MATLAB输入回车使用,或创建一个m文件进行调用。结束后会在workspace出现一个名为datas的矩阵,就是你整理好的每个被试一行。
话说你是用DPARSF跑的吗?
总评分:&水晶 + 1&
注册时间阅读权限1最后登录在线时间67 小时贡献值0 积分20分享好友记录日志相册UID34042
新新滴友, 积分 20, 距离下一级还需 10 积分
水晶983 心级20 精华0主题帖子
金麦穗 发表于
本来想说手动整理,在SPSS里分析,可是量好大,而且用T检验感觉怪怪的,用多重比较不知道从哪下手! ...
那要看你被试的分组情况啊,如果就2组的话,一般用T检验啊,再进行多重比较校正(有多种方法可以实现,可百度),刚开始不会的话,多上网查查学学吧,谁刚开始都是不会的,不懂的问问师兄师姐啥的解决的比较快,依靠网上别人给你回复的话不靠谱
注册时间阅读权限10最后登录在线时间83 小时贡献值0 积分80分享好友记录日志相册UID38585
正式滴友, 积分 80, 距离下一级还需 420 积分
水晶97 心级80 精华0主题帖子
勿匆匆7 发表于
那要看你被试的分组情况啊,如果就2组的话,一般用T检验啊,再进行多重比较校正(有多种方法可以实现,可 ...
各种感谢,就病人和对照两组,新手刚入门,师兄师姐也都不做这个方向,谢谢指导!
注册时间阅读权限10最后登录在线时间83 小时贡献值0 积分80分享好友记录日志相册UID38585
正式滴友, 积分 80, 距离下一级还需 420 积分
水晶97 心级80 精华0主题帖子
勿匆匆7 发表于
dir I:\REST\NEWsmokerHC\Results\ROIwise\Sub*.txt%你处理出来每个被试的功能连接结果的txt
outfile=fop ...
用REST跑的,用DPARSF也跑了
Powered by
Template By
Comsenz Inc.君,已阅读到文档的结尾了呢~~
静息态脑功能数据处理培训
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
静息态脑功能数据处理培训
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口后使用快捷导航没有帐号?
查看: 2010|回复: 11
注册时间阅读权限10最后登录在线时间83 小时贡献值0 积分80分享好友记录日志相册UID38585
正式滴友, 积分 80, 距离下一级还需 420 积分
水晶97 心级80 精华0主题帖子
做功能连接,ROI wise几个ROI得到的矩阵怎么处理哈?求救!!!
该贴已经同步到
注册时间阅读权限1最后登录在线时间0 小时贡献值0 积分7分享好友记录日志相册UID33727
新新滴友, 积分 7, 距离下一级还需 23 积分
水晶0 心级7 精华0主题帖子
,为你点赞
注册时间阅读权限1最后登录在线时间67 小时贡献值0 积分20分享好友记录日志相册UID34042
新新滴友, 积分 20, 距离下一级还需 10 积分
水晶983 心级20 精华0主题帖子
可以在MATLAB编个小程序,将矩阵整理成你想要的格式输出,再进行下一步的统计
注册时间阅读权限1最后登录在线时间67 小时贡献值0 积分20分享好友记录日志相册UID34042
新新滴友, 积分 20, 距离下一级还需 10 积分
水晶983 心级20 精华0主题帖子
可以在MATLAB编个小程序,将矩阵整理成你想要的格式输出,再进行下一步的统计
注册时间阅读权限10最后登录在线时间83 小时贡献值0 积分80分享好友记录日志相册UID38585
正式滴友, 积分 80, 距离下一级还需 420 积分
水晶97 心级80 精华0主题帖子
勿匆匆7 发表于
可以在MATLAB编个小程序,将矩阵整理成你想要的格式输出,再进行下一步的统计 ...
不会编程,求指导!
注册时间阅读权限10最后登录在线时间83 小时贡献值0 积分80分享好友记录日志相册UID38585
正式滴友, 积分 80, 距离下一级还需 420 积分
水晶97 心级80 精华0主题帖子
勿匆匆7 发表于
可以在MATLAB编个小程序,将矩阵整理成你想要的格式输出,再进行下一步的统计 ...
本来想说手动整理,在SPSS里分析,可是量好大,而且用T检验感觉怪怪的,用多重比较不知道从哪下手!
注册时间阅读权限1最后登录在线时间67 小时贡献值0 积分20分享好友记录日志相册UID34042
新新滴友, 积分 20, 距离下一级还需 10 积分
水晶983 心级20 精华0主题帖子
金麦穗 发表于
不会编程,求指导!
dir I:\REST\NEWsmokerHC\Results\ROIwise\Sub*.txt%你处理出来每个被试的功能连接结果的txt
outfile=fopen('Result','w');%输出文件,输出在MATLAB界面,可查看一共有几个被试
while i&=102%每个文件运行一次,i表示文件序号,你一共有几个被试就输几
& & filename=strcat('Sub',num2str(i),'.txt');
& & data=importdata(filename);
& & for x=2:11%ROI的数目
& && &&&for y=1:10%ROI的数目-1
& && && && &if y&x
& && && && && & datas(i,j)=data(x,y);
& && && && && & fprintf(outfile,'%f ',datas(j));
& && && && && &j=j+1;
& && && && &end
& && &&&end
& && &&&fprintf(outfile,'\r\n');%换行
& & i=i+1;
& &fclose(outfile);
一定要将那些txt所在的文件夹作为工作目录,否则会出错!!!上面语言可在MATLAB输入回车使用,或创建一个m文件进行调用。结束后会在workspace出现一个名为datas的矩阵,就是你整理好的每个被试一行。
话说你是用DPARSF跑的吗?
总评分:&水晶 + 1&
注册时间阅读权限1最后登录在线时间67 小时贡献值0 积分20分享好友记录日志相册UID34042
新新滴友, 积分 20, 距离下一级还需 10 积分
水晶983 心级20 精华0主题帖子
金麦穗 发表于
本来想说手动整理,在SPSS里分析,可是量好大,而且用T检验感觉怪怪的,用多重比较不知道从哪下手! ...
那要看你被试的分组情况啊,如果就2组的话,一般用T检验啊,再进行多重比较校正(有多种方法可以实现,可百度),刚开始不会的话,多上网查查学学吧,谁刚开始都是不会的,不懂的问问师兄师姐啥的解决的比较快,依靠网上别人给你回复的话不靠谱
注册时间阅读权限10最后登录在线时间83 小时贡献值0 积分80分享好友记录日志相册UID38585
正式滴友, 积分 80, 距离下一级还需 420 积分
水晶97 心级80 精华0主题帖子
勿匆匆7 发表于
那要看你被试的分组情况啊,如果就2组的话,一般用T检验啊,再进行多重比较校正(有多种方法可以实现,可 ...
各种感谢,就病人和对照两组,新手刚入门,师兄师姐也都不做这个方向,谢谢指导!
注册时间阅读权限10最后登录在线时间83 小时贡献值0 积分80分享好友记录日志相册UID38585
正式滴友, 积分 80, 距离下一级还需 420 积分
水晶97 心级80 精华0主题帖子
勿匆匆7 发表于
dir I:\REST\NEWsmokerHC\Results\ROIwise\Sub*.txt%你处理出来每个被试的功能连接结果的txt
outfile=fop ...
用REST跑的,用DPARSF也跑了
Powered by
Template By
Comsenz Inc.&img src=&/v2-26f8df0579175bbb85b66baf2bc7372b_b.jpg& data-rawwidth=&1600& data-rawheight=&900& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&/v2-26f8df0579175bbb85b66baf2bc7372b_r.jpg&&今天读了一遍谷歌大脑工程师Eric Jang的一个解答,想把这个知识与大家分享!最近也发现,有很多牛人喜欢在博客中分享DL的相关知识,所以个人感觉有空可以在博客中度阅读一些相关内容,对自己基础和深度了解有很大的帮助,也在此感谢那些为DL&ML默默共享的大牛们,让我们一起努力学习!!!那就不多说了,开始对这个话题的理解。嘿嘿!&p&有很多人问:&strong&为什么ReLU深度网络能逼近任意函数?&/strong&&/p&&p&对此,其有深入见解,但是在此他是简单,并用最少的数学形式来解释这个问题。ReLU其实是分段线性的,所以有人会质疑,对于一个固定大小的神经网络,ReLU网络可能不具有更平滑+有界的激活函数(如tanh)的表达。&/p&&p&因为他们学习非平滑函数,ReLU网络应该被解释为以分段线性方式分离数据,而不是实际上是一个“真实”函数近似。 在&a href=&/?target=http%3A//lib.csdn.net/base/2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&机器学习&i class=&icon-external&&&/i&&/a&中,人们经常试图从有限离散数据点(即100K图像)的数据集中学习,并且在这些情况下,只需学习这些数据点的分隔就足够了。考虑二维模数运算符,即:&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&n&&vec2&/span& &span class=&n&&p&/span& &span class=&o&&=&/span& &span class=&n&&vec2&/span&&span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&)&/span& &span class=&c1&&// x,y are floats &/span&
&span class=&n&&vec2&/span& &span class=&n&&mod&/span&&span class=&p&&(&/span&&span class=&n&&p&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&n&&vec2&/span&&span class=&p&&(&/span&&span class=&n&&p&/span&&span class=&p&&.&/span&&span class=&n&&x&/span& &span class=&o&&%&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&n&&p&/span&&span class=&p&&.&/span&&span class=&n&&y&/span& &span class=&o&&%&/span& &span class=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&mod函数的输出是将所有2D空间折叠/散架到单位平方上的结果。 这是分段线性,但高度非线性(因为有无限数量的线性部分)。&img src=&/v2-3b2e63df91a642ad3ecc78_b.png& data-rawwidth=&832& data-rawheight=&330& class=&origin_image zh-lightbox-thumb& width=&832& data-original=&/v2-3b2e63df91a642ad3ecc78_r.png&&&/p&&p&用ReLU激活的深层神经网络工作相似-它们将激活空间分割/折叠成一簇不同的线性区域,像一个真正复杂的折纸。&/p&&p&可以看“&a href=&/?target=https%3A//papers.nips.cc/paper/5422-on-the-number-of-linear-regions-of-deep-neural-networks.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&On the number of linear regions of Deep Neural Networks&i class=&icon-external&&&/i&&/a&”这篇文章的第三幅图,就很清楚表现了。&/p&&img src=&/v2-dfeb056270_b.png& data-rawwidth=&807& data-rawheight=&255& class=&origin_image zh-lightbox-thumb& width=&807& data-original=&/v2-dfeb056270_r.png&&&p&在&a href=&/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&文章的图2&i class=&icon-external&&&/i&&/a&中,它们展示了在网络中层的深度/层数的如何增加的,线性区域的数量呈指数增长。 &br&&/p&&img src=&/v2-bd0e601e5a44b3e9d5b0cac_b.png& data-rawwidth=&833& data-rawheight=&478& class=&origin_image zh-lightbox-thumb& width=&833& data-original=&/v2-bd0e601e5a44b3e9d5b0cac_r.png&&&p&事实证明,有足够的层,你可以近似“平滑”任何函数到任意程度。 此外,如果你在最后一层添加一个平滑的激活函数,你会得到一个平滑的函数近似。&/p&&p&一般来说,我们不想要一个非常平滑的函数近似,它可以精确匹配每个数据点,并且过拟合数据集,而不是学习一个在测试集上可正常工作的可泛化表示。 通过学习分离器,我们得到更好的泛化性,因此ReLU网络在这种意义上更好地自正则化。&/p&&p&详情:&a href=&/?target=https%3A//pdfs.semanticscholar.org./& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&A Comparison of the Computational Power of Sigmoid and Boolean Threshold Circuits&i class=&icon-external&&&/i&&/a&&/p&
今天读了一遍谷歌大脑工程师Eric Jang的一个解答,想把这个知识与大家分享!最近也发现,有很多牛人喜欢在博客中分享DL的相关知识,所以个人感觉有空可以在博客中度阅读一些相关内容,对自己基础和深度了解有很大的帮助,也在此感谢那些为DL&ML默默共享的大…
&img src=&/v2-c2fccaeaf55_b.jpg& data-rawwidth=&1366& data-rawheight=&768& class=&origin_image zh-lightbox-thumb& width=&1366& data-original=&/v2-c2fccaeaf55_r.jpg&&最近遇到一位小师弟,他让我给他推导一下前向传播和反向传播过程,于是我埋头在白纸上一步一步推导,最后,小师弟特别开心,在此过程中,我也更一步认识了这个知识点,感觉很开心!O(∩_∩)O~~&br&&img data-rawwidth=&960& data-rawheight=&720& src=&/v2-c484b5b054c2349deee11a_b.jpg& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&/v2-c484b5b054c2349deee11a_r.jpg&&&br&&p&接下来我用&a href=&/?target=https%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Matt Mazur&i class=&icon-external&&&/i&&/a&的例子,来简单告诉读者推导过程吧(其实就是链式)!&/p&&img src=&/v2-3d4ce55a9e2f56ec7dd8e14d7313a7ab_b.png& data-rawwidth=&323& data-rawheight=&254& class=&content_image& width=&323&&&p&先初始化权重和偏置量,得到如下效果:&/p&&img src=&/v2-5d352cb1e9cd3ec2c721908fea71c06f_b.png& data-rawwidth=&339& data-rawheight=&253& class=&content_image& width=&339&&&h2&&b&前向传播&/b&&/h2&&ol&&li&先计算&img src=&/equation?tex=h_%7B1%7D+& alt=&h_{1} & eeimg=&1&&的所有输入:&img src=&/equation?tex=net_%7Bh_%7B1%7D+%7D+%3Dw_%7B1%7D%5Cast+i_%7B1%7D++%2Bw_%7B2%7D%5Cast+i_%7B2%7D%2Bb_%7B1%7D%5Cast+1& alt=&net_{h_{1} } =w_{1}\ast i_{1}
+w_{2}\ast i_{2}+b_{1}\ast 1& eeimg=&1&&,代入数据可得:&img src=&/equation?tex=net_%7Bh_%7B1%7D+%7D+%3D0.15%5Cast+0.05++%2B0.2%5Cast+0.1%2B0.35%5Cast+1%3D0.3775& alt=&net_{h_{1} } =0.15\ast 0.05
+0.2\ast 0.1+0.35\ast 1=0.3775& eeimg=&1&&;&br&&/li&&li&然后利用logistic函数计算得&img src=&/equation?tex=h_%7B1%7D+& alt=&h_{1} & eeimg=&1&&的输出:&img src=&/equation?tex=out_%7Bh_%7B1%7D+%7D%3D%5Cfrac%7B1%7D%7B1%2Be%5E%7B-net_%7Bh_%7B1%7D+%7D+%7D+%7D++%3D%5Cfrac%7B1%7D%7B1%2Be%5E%7B-0.3775%7D++%7D%3D0.& alt=&out_{h_{1} }=\frac{1}{1+e^{-net_{h_{1} } } }
=\frac{1}{1+e^{-0.3775}
}=0.& eeimg=&1&&;&/li&&li&用同样的方法得&img src=&/equation?tex=out_%7Bh_%7B2%7D+%7D%3D0.& alt=&out_{h_{2} }=0.& eeimg=&1&&;&br&&/li&&/ol&&br&&p&对输出层神经元重复这个过程,使用隐藏层神经元的输出作为输入。这样就能给出&img src=&/equation?tex=o_%7B1%7D+& alt=&o_{1} & eeimg=&1&&的输出:&/p&&p&&img src=&/equation?tex=net_%7Bo_%7B1%7D+%7D+%3Dw_%7B5%7D%5Cast+out_%7Bh_%7B1%7D+%7D++%2Bw_%7B6%7D%5Cast+out_%7Bh_%7B2%7D+%7D%2Bb_%7B2%7D%5Cast+1& alt=&net_{o_{1} } =w_{5}\ast out_{h_{1} }
+w_{6}\ast out_{h_{2} }+b_{2}\ast 1& eeimg=&1&&,代入数据可得:&br&&/p&&p&&img src=&/equation?tex=net_%7Bo_%7B1%7D+%7D+%3D0.4%5Cast+0.++%2B0.45%5Cast+0.B0.6%3D1.& alt=&net_{o_{1} } =0.4\ast 0.
+0.45\ast 0..6=1.& eeimg=&1&&,则其输出为:&/p&&p&&img src=&/equation?tex=out_%7Bo_%7B1%7D+%7D%3D%5Cfrac%7B1%7D%7B1%2Be%5E%7B-net_%7Bo_%7B1%7D+%7D+%7D+%7D++%3D%5Cfrac%7B1%7D%7B1%2Be%5E%7B-1.D++%7D%3D0.& alt=&out_{o_{1} }=\frac{1}{1+e^{-net_{o_{1} } } }
=\frac{1}{1+e^{-1.}
}=0.& eeimg=&1&&。&/p&&p&同样可以得到&img src=&/equation?tex=out_%7Bo_%7B2%7D+%7D%3D0.& alt=&out_{o_{2} }=0.& eeimg=&1&&。&/p&&br&&p&&b&开始统计所有的误差&/b&&/p&&img src=&/equation?tex=E_%7Btotal%7D+%3D%5Csum_%7B%7D%5E%7B%7D%7B%5Cfrac%7B1%7D%7B2%7D%28target+-+output%29%5E%7B2%7D++%7D+& alt=&E_{total} =\sum_{}^{}{\frac{1}{2}(target - output)^{2}
} & eeimg=&1&&&br&&p&如上图,&img src=&/equation?tex=o_%7B1%7D+& alt=&o_{1} & eeimg=&1&&的原始输出为0.01,而神经网络的输出为0.,则其误差为:&br&&/p&&img src=&/equation?tex=E_%7Bo_%7B1%7D+%7D+%3D%5Csum_%7B%7D%5E%7B%7D%7B%5Cfrac%7B1%7D%7B2%7D%280.01+-+0.%5E%7B2%7D++%7D%3D0.+& alt=&E_{o_{1} } =\sum_{}^{}{\frac{1}{2}(0.01 - 0.)^{2}
}=0. & eeimg=&1&&&br&&br&&p&同样可得 &img src=&/equation?tex=E_%7Bo_%7B2%7D+%7D+%3D0.& alt=&E_{o_{2} } =0.& eeimg=&1&&。&/p&&p&综合所述,可以得到总误差为:&img src=&/equation?tex=E_%7Btotal%7D+%3DE_%7Bo_%7B1%7D+%7D%2B++E_%7Bo_%7B2%7D+%7D%3D0.& alt=&E_{total} =E_{o_{1} }+
E_{o_{2} }=0.& eeimg=&1&&。&br&&/p&&br&&h2&&b&反向传播&/b&&/h2&&b&输出层&/b&&p&对于&img src=&/equation?tex=w_%7B5%7D+& alt=&w_{5} & eeimg=&1&&,想知道其改变对总误差有多少影响,于是得:&img src=&/equation?tex=%5Cfrac%7Bd+E_%7Btotal%7D+%7D%7Bd+w_%7B5%7D+%7D+& alt=&\frac{d E_{total} }{d w_{5} } & eeimg=&1&&。&/p&&p&通过链式法则可以得到:&/p&&img src=&/equation?tex=%5Cfrac%7Bd+E_%7Btotal%7D+%7D%7Bd+w_%7B5%7D+%7D%3D%5Cfrac%7Bd+E_%7Btotal%7D+%7D%7Bd+out_%7Bo_%7B1%7D+%7D+%7D%5Cast%5Cfrac%7Bd+out_%7Bo_%7B1%7D+%7D+%7D%7Bd+net_%7Bo_%7B1%7D+%7D+%7D%5Cast+%5Cfrac%7Bd+net_%7Bo_%7B1%7D+%7D+%7D%7Bd+w_%7B5%7D+%7D+++& alt=&\frac{d E_{total} }{d w_{5} }=\frac{d E_{total} }{d out_{o_{1} } }\ast\frac{d out_{o_{1} } }{d net_{o_{1} } }\ast \frac{d net_{o_{1} } }{d w_{5} }
& eeimg=&1&&&br&&p&其实如下图所示,其实是一直在做的就是这个:&/p&&p&&img src=&/v2-d44ca2a953b_b.png& data-rawwidth=&500& data-rawheight=&230& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&/v2-d44ca2a953b_r.png&&在这个过程中,需要弄清楚每一个部分。首先:&/p&&p&&img src=&/v2-5414eaa222162dfb50acd23cb3de78ed_b.png& data-rawwidth=&481& data-rawheight=&129& class=&origin_image zh-lightbox-thumb& width=&481& data-original=&/v2-5414eaa222162dfb50acd23cb3de78ed_r.png&&然后知:&/p&&p&&img src=&/v2-4b4f1d78ed0cf45eae3718_b.png& data-rawwidth=&536& data-rawheight=&95& class=&origin_image zh-lightbox-thumb& width=&536& data-original=&/v2-4b4f1d78ed0cf45eae3718_r.png&&最后得:&/p&&p&&img src=&/v2-c9e6e0daaf_b.png& data-rawwidth=&412& data-rawheight=&79& class=&content_image& width=&412&&把它们放在一起就是:&/p&&p&&img src=&/v2-efedc9af99dfb_b.png& data-rawwidth=&476& data-rawheight=&87& class=&origin_image zh-lightbox-thumb& width=&476& data-original=&/v2-efedc9af99dfb_r.png&&为了减少误差,然后从当前的权重减去这个值(可选择乘以一个学习率,比如设置为0.5),得:&br&&/p&&p&&img src=&/v2-ddb478df679c272e70a1d040bc32ed7c_b.png& data-rawwidth=&446& data-rawheight=&43& class=&origin_image zh-lightbox-thumb& width=&446& data-original=&/v2-ddb478df679c272e70a1d040bc32ed7c_r.png&&通过相同的步骤就可以得到:&img src=&/v2-0d8aecf78d509a20b0ee8ed3dc04b7e2_b.png& data-rawwidth=&143& data-rawheight=&120& class=&content_image& width=&143&&&/p&&p&在有新权重导入隐藏层神经元(即,当继续下面的反向传播算法时,使用原始权重,而不是更新的权重)之后,执行神经网络中的实际更新。&br&&/p&&br&&p&&b&隐藏层&/b&&/p&&p&我们需要就算:&img src=&/v2-e5fefc0a1bf7_b.png& data-rawwidth=&263& data-rawheight=&43& class=&content_image& width=&263&&从图中其实更加明显可以看清楚:&/p&&p&&img src=&/v2-d2a4fad7cbd614ee6abbb5cb_b.png& data-rawwidth=&556& data-rawheight=&466& class=&origin_image zh-lightbox-thumb& width=&556& data-original=&/v2-d2a4fad7cbd614ee6abbb5cb_r.png&&得:&img src=&/v2-127f359b0463434ceb568ef_b.png& data-rawwidth=&193& data-rawheight=&47& class=&content_image& width=&193&&&/p&&p&可知:&img src=&/v2-c741f67ca891f519beb58_b.png& data-rawwidth=&193& data-rawheight=&38& class=&content_image& width=&193&&&/p&&p&&img src=&/v2-f25ef621f63f509f800b234a5bb84315_b.png& data-rawwidth=&513& data-rawheight=&41& class=&origin_image zh-lightbox-thumb& width=&513& data-original=&/v2-f25ef621f63f509f800b234a5bb84315_r.png&&又因为:&/p&&p&&img src=&/v2-05a9aeb6c790d3d32f5bd47d_b.png& data-rawwidth=&348& data-rawheight=&40& class=&content_image& width=&348&&所以:&img src=&/v2-2c04f6bfd98e8ae5cfc04be_b.png& data-rawwidth=&176& data-rawheight=&48& class=&content_image& width=&176&&&/p&&p&结合可得:&/p&&p&&img src=&/v2-a0d15d943f7b_b.png& data-rawwidth=&486& data-rawheight=&50& class=&origin_image zh-lightbox-thumb& width=&486& data-original=&/v2-a0d15d943f7b_r.png&&同样可以得到:&img src=&/v2-fc5e1b25_b.png& data-rawwidth=&191& data-rawheight=&47& class=&content_image& width=&191&&&/p&&p&因此:&img src=&/v2-fe8b3e39c492a588a0cd5c4e10b372ad_b.png& data-rawwidth=&562& data-rawheight=&45& class=&origin_image zh-lightbox-thumb& width=&562& data-original=&/v2-fe8b3e39c492a588a0cd5c4e10b372ad_r.png&&&/p&&p&我们知道logistic函数:&img src=&/v2-8132aab8bab44dfbc413ec85c1bfe15e_b.png& data-rawwidth=&176& data-rawheight=&48& class=&content_image& width=&176&&&/p&&p&所以其求导为:&img src=&/v2-b169f618ef5bfb1ff9332dd_b.png& data-rawwidth=&576& data-rawheight=&36& class=&origin_image zh-lightbox-thumb& width=&576& data-original=&/v2-b169f618ef5bfb1ff9332dd_r.png&&&/p&&p&同样有前面前向传播可以知道:&img src=&/v2-93aedefe9dfb6_b.png& data-rawwidth=&275& data-rawheight=&27& class=&content_image& width=&275&&&/p&&p&得:&img src=&/v2-d2eb31f3c209cc27658a6_b.png& data-rawwidth=&164& data-rawheight=&33& class=&content_image& width=&164&&&/p&&p&结合可得:&img src=&/v2-b719d4c89bb6d60f39e2a0_b.png& data-rawwidth=&463& data-rawheight=&92& class=&origin_image zh-lightbox-thumb& width=&463& data-original=&/v2-b719d4c89bb6d60f39e2a0_r.png&&&/p&&p&现在可以更新&img src=&/equation?tex=w_%7B1%7D+& alt=&w_{1} & eeimg=&1&&了。&/p&&p&&img src=&/v2-cddefcff88fb84cacbadad_b.png& data-rawwidth=&511& data-rawheight=&40& class=&origin_image zh-lightbox-thumb& width=&511& data-original=&/v2-cddefcff88fb84cacbadad_r.png&&同样的步骤可以得到:&img src=&/v2-095dc2001afde9c61558_b.png& data-rawwidth=&174& data-rawheight=&145& class=&content_image& width=&174&&&/p&&p&最后,更新了所有的权重! 当最初前馈传播时输入为0.05和0.1,网络上的误差是0.。 在第一轮反向传播之后,总误差现在下降到0.。 它可能看起来不太多,但是在重复此过程10,000次之后。例如,错误倾斜到0.。 &/p&&p&在这一点上,当前馈输入为0.05和0.1时,两个输出神经元产生0.(相对于目标为0.01)和0.(相对于目标为0.99)。很接近了O(∩_∩)O~~&/p&
最近遇到一位小师弟,他让我给他推导一下前向传播和反向传播过程,于是我埋头在白纸上一步一步推导,最后,小师弟特别开心,在此过程中,我也更一步认识了这个知识点,感觉很开心!O(∩_∩)O~~ 接下来我用的例子,来简单告诉读者推导过程吧(其实…
&img src=&/v2-4d69362ea1ffae1e0a7d_b.jpg& data-rawwidth=&1044& data-rawheight=&780& class=&origin_image zh-lightbox-thumb& width=&1044& data-original=&/v2-4d69362ea1ffae1e0a7d_r.jpg&&深度学习大讲堂致力于推送人工智能,深度学习方面的最新技术,产品以及活动。请关注我们的知乎专栏!&br&&br&&br&&br&&b&摘要&/b&&p&海康威视研究院独家授权,分享ImageNet2016竞赛Scene Classification第一名,Object Detection第二名,Object Localization第二名,Scene Parsing第七名背后的技术修炼之道。&br&&br&下面为大家介绍海康威视研究院在本次ImageNet2016竞赛中的相关情况。&br&&img src=&/v2-4d69362ea1ffae1e0a7d_b.jpg& class=&content_image&&团队成员和分工如下:&br&&img src=&/v2-7f654278ede90b2148c14eae50088d41_b.jpg& class=&content_image&&&img src=&/v2-e890a1b57de718cda0bc_b.jpg& class=&content_image&&&img src=&/v2-c0aaae481f6f6ac2b80863_b.jpg& class=&content_image&&数据增强对最后的识别性能和泛化能力都有着非常重要的作用。我们使用下面这些数据增强方法。第一,对颜色的数据增强,包括色彩的饱和度、亮度和对比度等方面,主要从Facebook的代码里改过来的。第二,PCA Jittering,最早是由Alex在他2012年赢得ImageNet竞赛的那篇NIPS中提出来的. 我们首先按照RGB三个颜色通道计算了均值和标准差,对网络的输入数据进行规范化,随后我们在整个训练集上计算了协方差矩阵,进行特征分解,得到特征向量和特征值,用来做PCA Jittering。第三,在图像进行裁剪和缩放的时候,我们采用了随机的图像差值方式。第四, Crop Sampling,就是怎么从原始图像中进行缩放裁剪获得网络的输入。比较常用的有2种方法:一是使用Scale Jittering,VGG和ResNet模型的训练都用了这种方法。二是尺度和长宽比增强变换,最早是Google提出来训练他们的Inception网络的。我们对其进行了改进,提出Supervised Data Augmentation方法。&br&&img src=&/v2-0e3a4ea09d978803ddc0a5_b.jpg& class=&content_image&&尺度和长宽比增强变换有个缺点,随机去选Crop Center的时候,选到的区域有时候并不包括真实目标的区域。这意味着,有时候使用了错误的标签去训练模型。如图所示,左下角的图真值标签是风车农场,但实际上裁剪的区域是蓝天白云,其中并没有任何风车和农场的信息。我们在Bolei今年CVPR文章的启发下,提出了有监督的数据增强方法。我们首先按照通常方法训练一个模型,然后用这个模型去生成真值标签的Class Activation Map(或者说Heat Map), 这个Map指示了目标物体出现在不同位置的概率. 我们依据这个概率,在Map上随机选择一个位置,然后映射回原图,在原图那个位置附近去做Crop。&br&&img src=&/v2-cd9bbcf8fb_b.jpg& class=&content_image&&如图所示,对比原始的尺度和长宽比增强变换,我们方法的优点在于,我们根据目标物体出现在不同位置的概率信息,去选择不同的Crop区域,送进模型训练。通过引入这种有监督的信息,我们可以利用正确的信息来更好地训练模型,以提升识别准确率。 (+0.5~0.7)&br&&img src=&/v2-4cfe5d86a4ca3ec90e9add4_b.jpg& class=&content_image&&场景数据集有800万样本,365个类别,各个类别的样本数非常不平衡,有很多类别的样本数达到了4万,也有很多类别的样本数还不到5000。这么大量的样本和非常不均匀的类别分布,给模型训练带来了难题。在去年冠军团队的Class-Aware Sampling方法的启发下,我们提出了Label Shuffling的类别平衡策略。在Class-Aware Sampling方法中,他们定义了2种列表,一是类别列表,一是每个类别的图像列表,对于365类的分类问题来说,就需要事先定义366个列表,很不方便。我们对此进行了改进,只需要原始的图像列表就可以完成同样的均匀采样任务。以图中的例子来说,步骤如下:首先对原始的图像列表,按照标签顺序进行排序;然后计算每个类别的样本数量,并得到样本最多的那个类别的样本数。根据这个最多的样本数,对每类随机都产生一个随机排列的列表;然后用每个类别的列表中的数对各自类别的样本数求余,得到一个索引值,从该类的图像中提取图像,生成该类的图像随机列表;然后把所有类别的随机列表连在一起,做个Random Shuffling,得到最后的图像列表,用这个列表进行训练。每个列表,到达最后一张图像的时候,然后再重新做一遍这些步骤,得到一个新的列表,接着训练。Label Shuffling方法的优点在于,只需要原始图像列表,所有操作都是在内存中在线完成,非常易于实现。&br&&img src=&/v2-b9fb06d90ccfbbf7e80e_b.jpg& class=&content_image&&我们使用的另外一个方法是Label Smoothing,是今年Google的CVPR论文中提出来的方法。根据我们的混淆矩阵(Confusion Matrix)的分析,发现存在很多跨标签的相似性问题,这可能是由于标签模糊性带来的。所以,我们对混淆矩阵进行排序,得到跟每个标签最相近的4个标签,用它们来定义标签的先验分布,将传统的 one-hot标签,变成一个平滑过的soft标签。通过这种改进,我们发现可以从某种程度上降低过拟合问题。(+0.2~0.3)&br&&img src=&/v2-c88ff71ef491bff70aa1f0dbd5fcd1d0_b.jpg& class=&content_image&&这边还有一些其他的技巧来提升性能,我们将其总结成一个原则:训练和测试要协调。在训练的时候,我们通常都需要做数据增强,在测试的时候,我们通常很少去做数据增强。这其中似乎有些不协调,因为你训练和测试之间有些不一致。通过我们的实验发现,如果你在训练的最后几个epoch,移除数据增强,然后跟传统一样测试,可以提升一点性能。同样,如果训练的时候一直使用尺度和长宽比增强数据增强,在测试的时候也同样做这个变化,随机取32个crop来测试,也可以在最后的模型上提升一点性能。还有一条,就是多尺度的训练,多尺度的测试。另外,值得指出的是,使用训练过程的中间结果,加入做测试,可以一定程度上降低过拟合。&br&&img src=&/v2-2ea607bca495fb43e5b476d482f9eca7_b.jpg& class=&content_image&&对于模型结构,没什么特别的改进,我们主要使用了Inception v3和Inception ResNet v2,以及他们加深加宽的版本。还用到了Wide ResNet 。&br&&img src=&/v2-d90cfdf3ebb0e9e27b76_b.jpg& class=&content_image&&此次竞赛的语义分割任务非常具有挑战性。它一方面需要目标整体层面的信息,同时还需要每个像素的分类准确率。目前有很多语义分割的模型,但哪一种框架是最好的仍然是一个问题。我们设计了一个Mixed Context Network(MCN),它由一系列Mixed Context Blocks(MCB)堆叠而成。如图所示,每个MCB包括两个并行的卷积层:1个1x1卷积和1个3x3 Dilated卷积。Dilated卷积的采样率分别设置成了1,2,4,8,16。除了MCN之外,我们还在最后设计了一个Message Passing Network(MPN),来增强不同标签之间的空间一致性。&br&&img src=&/v2-d6f1aa74ee_b.jpg& class=&content_image&&CRF as RNN可以被加到网络的最后,与CNN一起联合训练。但是CRF as RNN比较耗费显存,尤其是在类别数比较大的时候(比如ADE20K有150类)。可以通过降低输入图像的分辨率来节省显存,但是这样做也会带来一些负面影响。为了解决这个问题,我们引入了一个新的比较省显存的模块,叫做MPN。在MPN中,我们首先将Score Map的通道从150降到了32,然后接了一个Permutohedral卷积层,用于做高维的高斯滤波。我们去掉了其中的平滑项,仅仅将1x1卷积层的特征和Permutohedral卷积层的特征连接,然后接一个3x3的卷积。实验证明,这样的结构也能较好地工作。&br&&img src=&/v2-93d428d5ba487f04bcfadda_b.jpg& class=&content_image&&&img src=&/v2-bec665c1c8130cdf13e9_b.jpg& class=&content_image&&我们的检测和定位,都是基于Faster-RCNN这个框架。图中我们列出了所有用到的技巧。有很多技巧在以前的文献中都可以找到,比如多尺度的训练和测试,难样本挖掘,水平翻转和Box Voting。但我们自己也做了很多新的改进,比如样本均衡,Cascade RPN,预训练的Global Context等。至于网络结构,我们仅仅用了三个ResNet-101模型。一个来自于MSRA,一个来自于Facebook,还有一个是我们自己训练的Identity Mapping版的ResNet-101。我们最好的单模型结果,是源自我们自己训练的Identity Mapping版的ResNet-101。&br&&img src=&/v2-be5c4d1acadc3ad2d588b_b.jpg& class=&content_image&&我们设计了一个轻量级的Cascade RPN。2个RPN顺序堆叠在一起。 RPN 1使用滑窗Anchors,然后输出比较精确定位的Proposals。RPN 2使用RPN 1的Proposals作为Anchors。我们发现这个结构可以提升大中尺寸Proposals的定位精度,但不适合小的Proposals。所以在实际中,我们RPN1提取小的Proposals,RPN2提取大中尺寸的Proposals。&b&注:&/b& Proposals尺寸的阈值是64 * 64。&img src=&/v2-a5be0c98a1ec81a960e9f_b.jpg& class=&content_image&&另外一个改进就是限制正负Anchor的比例。在传统的RPN中,Batch Size通常是256,理想的正负Anchor比例是1。但是在实际使用中,这个比例往往会很大,通常会大于10。所以我们缩小了Batch Size,控制最大的比例为1.5。最小的Batch Size设置为32。对比实验表明,使用Cascade RPN和限制正负Anchor比例这两个策略,在ImageNet DET的验证集上,AR提升了5.4个点,Recall@0.7提升了9.5个点,而Recall@0.5只提升1个点。这说明Proposals的定位精度得到了显著的改善。&br&&img src=&/v2-4932aca2e45c04c8e55ef6de_b.jpg& class=&content_image&&Global Context在去年Kaiming的论文中就已经提到,他们使用这个方法得到了1个点的mAP提升。我们也实现了自己的Global Context方法:除了在在RoI上做RoIPooling 之外,我们还对全图做了RoIPooling来获得全局特征。这个全局特征仅仅被用来分类,不参加bbox回归。我们实验发现,Global Context如果使用随机初始化,其性能提升有限。当我们采用预训练的参数进行精调之后,发现mAP的性能可以提升3.8个点。&br&&img src=&/v2-6ca5a27eebe9f4d573ab0a52_b.jpg& class=&content_image&&此外,我们发现,在1000类的LOC上预训练,然后再在DET数据上精调,可以 得到额外0.5个点的mAP提升。&br&&img src=&/v2-02d93f5ba2e2fd93a492a58591bee613_b.jpg& class=&content_image&&平衡采样是去年场景分类任务中所用到的一个技巧。我们也将它用来做检测任务。左侧是一个类别的列表,对于每个类别,我们又创建了一个图像列表。训练过程中,我们先从类别列表中选择一个类别,然后从这个类对应的图像列表中采样。和分类任务不同的是,检测任务中一张图像可能包含多个类别的目标。对于这种多标签的图像我们允许它们出现在多个类别的图像列表中。使用平衡采样技术,可以在VOC2007数据集上获得0.7的mAP提升。&br&&img src=&/v2-3b9ec8b03ed_b.jpg& class=&content_image&&集成上述所列的各项技术,我们的检测模型取得了SOTA的性能。在ImageNet DET任务中,我们以65.3的mAP获得了第二名。就单个模型而言,我们的模型能以少许优势排名第一。我们使用了相同的检测框架来完成ImageNet LOC任务。在最后的竞赛中,我们以8.7的定位误差排名第二。在PASCAL VOC 2012检测任务中,我们单模型获得了87.9的 mAP,超过了去年Kaiming的模型有4个点之多。&br&&img src=&/v2-bc294f99afd3c5109de9_b.jpg& class=&content_image&&&img src=&/v2-208d59b4cfdcdfddd8f5bfc_b.jpg& class=&content_image&&&img src=&/v2-baabbb763f3_b.jpg& class=&content_image&&&img src=&/v2-6f7fff38841cceec4d15d2_b.jpg& class=&content_image&&&b&该文章属于“深度学习大讲堂”原创,如需要转载,请联系&a href=&/people/guo-dan-qing& class=&internal&&@果果是枚开心果.&/a&&/b&&/p&&p&&br&&br&&b&作者简介:&/b&&/p&&p&&b&海康威视研究院 &/b&是海康威视最重要的核心部门,主要致力于基础技术和前沿技术的探索和创新,在视音频编解码、视频图像处理、视频智能分析、云计算、大数据、云存储、人工智能等方面有深厚的技术积累,为海康威视核心产品和新兴业务拓展提供了有力的支撑,成为公司主营业务和创新业务发展的重要驱动力。研究院在KITTI、MOT、Pascal VOC、ImageNet等世界级人工智能竞赛中均获得过第一的好成绩。欢迎各位老师、学者、专家及其他业内人士,莅临杭州,参观交流。技术探讨、访问交流、求职招聘以及其他相关事宜,欢迎邮件联系谢迪博士:。&/p&&br&&p&&b&原文链接:&a href=&/?target=http%3A//mp./s%3F__biz%3DMzI1NTE4NTUwOQ%3D%3D%26mid%3D%26idx%3D1%26sn%3D69a7eddaa6d6%26chksm%3Df235a558c5422c4eabe75f6db92fd13a3ca662dc9bfd1f4e22affe12430afce3%26scene%3D0%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【高手之道】海康威视研究院ImageNet2016竞赛经验分享&i class=&icon-external&&&/i&&/a&&br&&/b&&/p&&br&&p&&b&欢迎大家关注我们的微信公众号,搜索微信名称:深度学习大讲堂&/b&&br&&/p&&img src=&/v2-a29f11dacaf2c3a3f8b93_b.jpg& data-rawwidth=&346& data-rawheight=&67& class=&content_image& width=&346&&
深度学习大讲堂致力于推送人工智能,深度学习方面的最新技术,产品以及活动。请关注我们的知乎专栏! 摘要海康威视研究院独家授权,分享ImageNet2016竞赛Scene Classification第一名,Object Detection第二名,Object Localization第二名,Scene Parsing第…
&img src=&/v2-c1cddf4f4b17b_b.jpg& data-rawwidth=&1440& data-rawheight=&900& class=&origin_image zh-lightbox-thumb& width=&1440& data-original=&/v2-c1cddf4f4b17b_r.jpg&&&h2&&b&一、背景介绍&/b&&/h2&&p&普通的深度学习监督算法主要是用来做分类,如图1(1)所示,分类的目标是要识别出图中所示是一只猫。而在ILSVRC(ImageNet Large Scale Visual Recognition Challenge)竞赛以及实际的应用中,还包括目标定位和目标检测等任务。其中目标定位是不仅仅要识别出来是什么物体(即分类),而且还要预测物体的位置,位置一般用边框(bounding box)标记,如图1(2)所示。而目标检测实质是多目标的定位,即要在图片中定位多个目标物体,包括分类和定位。比如对图1(3)进行目标检测,得到的结果是好几只不同动物,他们的位置如图3中不同颜色的框所示。&br&&/p&&img src=&/v2-db31b6a57b3e15eedd6b_b.png& data-rawwidth=&881& data-rawheight=&427& class=&origin_image zh-lightbox-thumb& width=&881& data-original=&/v2-db31b6a57b3e15eedd6b_r.png&&&p&简单来说,分类、定位和检测的区别如下:&/p&&ol&&li&分类:是什么?&br&&/li&&li&定位:在哪里?是什么?(单个目标)&br&&/li&&li&检测:在哪里?分别是什么?(多个目标)&br&&/li&&/ol&&br&&p&目标检测对于人类来说并不困难,通过对图片中不同颜色模块的感知很容易定位并分类出其中目标物体,但对于计算机来说,面对的是RGB像素矩阵,很难从图像中直接得到狗和猫这样的抽象概念并定位其位置,再加上有时候多个物体和杂乱的背景混杂在一起,目标检测更加困难。但这难不倒科学家们,在传统视觉领域,目标检测就是一个非常热门的研究方向,一些特定目标的检测,比如人脸检测和行人检测已经有非常成熟的技术了。普通的目标检测也有过很多的尝试,但是效果总是差强人意。&/p&&p&传统的目标检测一般使用滑动窗口的框架,主要包括三个步骤:&/p&&ol&&li&&p&利用不同尺寸的滑动窗口框住图中的某一部分作为候选区域;&/p&&/li&&li&&p&提取候选区域相关的视觉特征。比如人脸检测常用的Harr特征;行人检测和普通目标检测常用的HOG特征等;&/p&&/li&&li&&p&利用分类器进行识别,比如常用的SVM模型。&/p&&/li&&/ol&&p&传统的目标检测中,多尺度形变部件模型DPM(Deformable Part Model)[13]是出类拔萃的,连续获得VOC(Visual Object Class)的检测冠军,2010年其作者Felzenszwalb Pedro被VOC授予”终身成就奖”。DPM把物体看成了多个组成的部件(比如人脸的鼻子、嘴巴等),用部件间的关系来描述物体,这个特性非常符合自然界很多物体的非刚体特征。DPM可以看做是HOG+SVM的扩展,很好的继承了两者的优点,在人脸检测、行人检测等任务上取得了不错的效果,但是DPM相对复杂,检测速度也较慢,从而也出现了很多改进的方法。正当大家热火朝天改进DPM性能的时候,基于深度学习的目标检测横空出世,迅速盖过了DPM的风头,很多之前研究传统目标检测算法的研究者也开始转向深度学习。&/p&&p&基于深度学习的目标检测发展起来后,其实效果也一直难以突破。比如文献[6]中的算法在VOC 2007测试集合上的mAP只能30%多一点,文献[7]中的OverFeat在ILSVRC 2013测试集上的mAP只能达到24.3%。2013年R-CNN诞生了,VOC 2007测试集的mAP被提升至48%,2014年时通过修改网络结构又飙升到了66%,同时ILSVRC 2013测试集的mAP也被提升至31.4%。&/p&&p&R-CNN是Region-based Convolutional Neural Networks的缩写,中文翻译是基于区域的卷积神经网络,是一种结合候选区域(Region Proposal)和卷积神经网络(CNN)的目标检测方法。Ross Girshick在2013年的开山之作《Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation》[1]奠定了这个子领域的基础,这篇论文后续版本发表在CVPR 2014[2],期刊版本发表在PAMI 2015[3]。&/p&&p&其实在R-CNN之前已经有很多研究者尝试用Deep Learning的方法来做目标检测了,包括OverFeat[7],但R-CNN是第一个真正可以工业级应用的解决方案,这也和深度学习本身的发展类似,神经网络、卷积网络都不是什么新概念,但在本世纪突然真正变得可行,而一旦可行之后再迅猛发展也不足为奇了。&/p&&p&R-CNN这个领域目前研究非常活跃,先后出现了R-CNN[1,2,3,18]、SPP-net[4,19]、Fast R-CNN[14, 20] 、Faster R-CNN[5,21]、R-FCN[16,24]、YOLO[15,22]、SSD[17,23]等研究。Ross Girshick作为这个领域的开山鼻祖总是神一样的存在,R-CNN、Fast R-CNN、Faster R-CNN、YOLO都和他有关。这些创新的工作其实很多时候是把一些传统视觉领域的方法和深度学习结合起来了,比如选择性搜索(Selective Search)和图像金字塔(Pyramid)等。&/p&&p&深度学习相关的目标检测方法也可以大致分为两派:&/p&&ol&&li&&p&基于候选区域的,如R-CNN、SPP-net、Fast R-CNN、Faster R-CNN、R-FCN;&/p&&/li&&li&&p&端到端(End-to-End),无需候选区域的,如YOLO、SSD。&/p&&/li&&/ol&&p&目前来说,基于候选区域的方法依然占据上风,但端到端的方法速度上优势明显,后续的发展拭目以待。&/p&&br&&h2&&b&二、具体分析与总结&/b&&/h2&&p&本文作为目标检测的一篇回顾,先来看看目标检测中广泛使用的候选区域——选择性搜索,以及用深度学习做目标检测的早期工作——Overfeat 。&/p&&h3&2.1.1
&b&选择性搜索&/b&&/h3&&p&目标检测的第一步是要做候选区域(Region Proposal),也就是找出可能的感兴趣区域(Region Of Interest, ROI)。候选区域类似于光学字符识别(OCR)领域的切分,OCR切分常用过切分方法,简单说就是尽量切碎到小的连通域(比如小的笔画之类),然后再根据相邻块的一些形态学特征进行合并。但目标检测的对象相比OCR领域千差万别,而且图形不规则,大小不一,所以一定程度上可以说候选区域是比OCR切分更难的一个问题。&/p&&p&候选区域可能的方法有:&/p&&p&一、滑动窗口。滑动窗口本质上就是穷举法,利用不同的尺度和长宽比把所有可能的大大小小的块都穷举出来,然后送去识别,识别出来概率大的就留下来。很明显,这样的方法复杂度太高,产生了很多的冗余候选区域,在现实当中不可行。&/p&&p&二、规则块。在穷举法的基础上进行了一些剪枝,只选用固定的大小和长宽比。这在一些特定的应用场景是很有效的,比如拍照搜题APP小猿搜题中的汉字检测,因为汉字方方正正,长宽比大多比较一致,因此用规则块做区域提名是一种比较合适的选择。但是对于普通的目标检测来说,规则块依然需要访问很多的位置,复杂度高。&/p&&p&三、选择性搜索。从机器学习的角度来说,前面的方法召回是不错了,但是精度差强人意,所以问题的核心在于如何有效地去除冗余候选区域。其实冗余候选区域大多是发生了重叠,选择性搜索利用这一点,自底向上合并相邻的重叠区域,从而减少冗余。&/p&&p&候选区域并不只有以上所说的三种方法,实际上这块是非常灵活的,因此变种也很多,有兴趣的读者不妨参考一下文献[12]。&/p&&p&选择性搜索的具体算法细节[8]如算法1所示。总体上选择性搜索是自底向上不断合并候选区域的迭代过程。&/p&&blockquote&&b&输入: &/b&一张图片&br&&b&输出:&/b&候选的目标位置集合L&br&&b&算法:&/b&&br&1: 利用过切分方法得到候选的区域集合R = {r1,r2,…,rn}&br&2: 初始化相似集合S = ?&br&3: foreach 邻居区域对(ri,rj) do&br&4:
计算相似度s(ri,rj)&br&5:
∪ s(ri,rj)&br&6: while S not=? do&br&7:
得到最大的相似度s(ri,rj)=max(S)&br&8:
合并对应的区域rt = ri ∪ rj&br&9:
移除ri对应的所有相似度:S = S\s(ri,r*)&br&10:
移除rj对应的所有相似度:S = S\s(r*,rj)&br&11:
计算rt对应的相似度集合St&br&12:
S = S ∪ St&br&13:
R = R ∪ rt&br&14: L = R中所有区域对应的边框&/blockquote&&b&
&/b&选择性搜索算法&br&&br&&p&从算法不难看出,&em&R&/em&中的区域都是合并后的,因此减少了不少冗余,相当于准确率提升了,但是别忘了我们还需要继续保证召回率,因此算法1中的相似度计算策略就显得非常关键了。如果简单采用一种策略很容易错误合并不相似的区域,比如只考虑轮廓时,不同颜色的区域很容易被误合并。选择性搜索采用多样性策略来增加候选区域以保证召回,比如颜色空间考虑RGB、灰度、HSV及其变种等,相似度计算时既考虑颜色相似度,又考虑纹理、大小、重叠情况等。&/p&&p&总体上,选择性搜索是一种比较朴素的候选区域方法,被早期的基于深度学习的目标检测方法(包括Overfeat和R-CNN等)广泛利用,但被当前的新方法弃用了。&/p&&h3&2.1.2
&b& OverFeat&/b&&/h3&&p&OverFeat[7][9]是用CNN统一来做分类、定位和检测的经典之作,作者是深度学习大神之一————Yann Lecun在纽约大学的团队。OverFeat也是ILSVRC 2013任务3(分类+定位)的冠军得主[10]。&/p&&p&OverFeat的核心思想有三点:&/p&&ol&&li&&p&候选区域:结合滑动窗口和规则块,即多尺度(multi-scale)的滑动窗口;&/p&&/li&&li&&p&分类和定位:统一用CNN来做分类和预测边框位置,模型与AlexNet[12]类似,其中1-5层为特征抽取层,即将图片转换为固定维度的特征向量,6-9层为分类层(分类任务专用),不同的任务(分类、定位、检测)公用特征抽取层(1-5层),只替换6-9层;&/p&&/li&&li&&p&累积:因为用了滑动窗口,同一个目标对象会有多个位置,也就是多个视角;因为用了多尺度,同一个目标对象又会有多个大小不一的块。这些不同位置和不同大小块上的分类置信度会进行累加,从而使得判定更为准确。&/p&&/li&&/ol&&p&OverFeat的关键步骤有四步:&/p&&ol&&li&&p&利用滑动窗口进行不同尺度的候选区域,然后使用CNN模型对每个区域进行分类,得到类别和置信度。从图2中可以看出,不同缩放比例时,检测出来的目标对象数量和种类存在较大差异;&img src=&/v2-ae78bb01abda35324fbb_b.png& data-rawwidth=&916& data-rawheight=&354& class=&origin_image zh-lightbox-thumb& width=&916& data-original=&/v2-ae78bb01abda35324fbb_r.png&&
Overfeat关键步骤一&br&&/p&&/li&&li&&p&利用多尺度滑动窗口来增加检测数量,提升分类效果,如图3所示;&img src=&/v2-fa604d37ed59c01fcc5ad122e02d18d1_b.png& data-rawwidth=&919& data-rawheight=&417& class=&origin_image zh-lightbox-thumb& width=&919& data-original=&/v2-fa604d37ed59c01fcc5ad122e02d18d1_r.png&&
Overfeat关键步骤二&/p&&/li&&li&&p&用回归模型预测每个对象的位置,从图4中来看,放大比例较大的图片,边框数量也较多;&img src=&/v2-fab3f4cc8303f_b.png& data-rawwidth=&915& data-rawheight=&412& class=&origin_image zh-lightbox-thumb& width=&915& data-original=&/v2-fab3f4cc8303f_r.png&&
图4 Overfeat关键步骤三&br&&/p&&/li&&li&&p&边框合并。&img src=&/v2-3a5f8fce7db6f8e48b0e70_b.png& data-rawwidth=&342& data-rawheight=&257& class=&content_image& width=&342&&&/p&&p&
图5 Overfeat关键步骤四&/p&&p&Overfeat是CNN用来做目标检测的早期工作,主要思想是采用了多尺度滑动窗口来做分类、定位和检测,虽然是多个任务但重用了模型前面几层,这种模型重用的思路也是后来R-CNN系列不断沿用和改进的经典做法。&/p&&p&当然Overfeat也是有不少缺点的,至少速度和效果都有很大改进空间,后面的R-CNN系列在这两方面做了很多提升。&/p&&/li&&/ol&&br&&h2&&b&2.2
基于候选区域的方法&/b&&/h2&&p&本小节主要介绍基于候选区域的方法,包括R-CNN、SPP-net、Fast R-CNN、Faster R-CNN、R-FCN。&/p&&h3&2.2.1 &b& R-CNN&/b&&/h3&&p&如前面所述,早期的目标检测,大都使用滑动窗口的方式进行候选窗口,这种方式本质是穷举法,R-CNN[1,2,3]采用的是Selective Search。&/p&&p&以下是R-CNN的主要步骤:&/p&&ol&&li&&p&候选区域:通过Selective Search从原始图片提取2000个左右区域候选框;&/p&&/li&&li&&p&区域大小归一化:把所有侯选框缩放成固定大小(原文采用227×227);&/p&&/li&&li&&p&特征提取:通过CNN网络,提取特征;&/p&&/li&&li&&p&分类与回归:在特征层的基础上添加两个全连接层,再用SVM分类来做识别,用线性回归来微调边框位置与大小,其中每个类别单独训练一个边框回归器。&/p&&/li&&/ol&&p&其中目标检测系统的结构如图6所示,注意,图中的第2步对应步骤中的1、2步,即包括候选区域和区域大小归一化。&img src=&/v2-c5f93c0fcbe71b0c992c8a_b.png& data-rawwidth=&825& data-rawheight=&306& class=&origin_image zh-lightbox-thumb& width=&825& data-original=&/v2-c5f93c0fcbe71b0c992c8a_r.png&&&/p&&p&Overfeat可以看做是R-CNN的一个特殊情况,只需要把Selective Search换成多尺度的滑动窗口,每个类别的边框回归器换成统一的边框回归器,SVM换为多层网络即可。但是Overfeat实际比R-CNN快9倍,这主要得益于卷积相关的共享计算。&/p&&p&事实上,R-CNN有很多缺点:&/p&&ol&&li&&p&重复计算:R-CNN虽然不再是穷举,但依然有两千个左右的候选框,这些候选框都需要进行CNN操作,计算量依然很大,其中有不少其实是重复计算;&/p&&/li&&li&&p&SVM模型:而且还是线性模型,在标注数据不缺的时候显然不是最好的选择;&/p&&/li&&li&&p&训练测试分为多步:候选区域、特征提取、分类、回归都是断开的训练的过程,中间数据还需要单独保存;&/p&&/li&&li&&p&训练的空间和时间代价很高:卷积出来的特征需要先存在硬盘上,这些特征需要几百G的存储空间;&/p&&/li&&li&&p&慢:前面的缺点最终导致R-CNN出奇的慢,GPU上处理一张图片需要13秒,CPU上则需要53秒[2]。&/p&&/li&&/ol&&p&当然,R-CNN这次是冲着效果来的,其中ILSVRC 2013数据集上的mAP由Overfeat的24.3%提升到了31.4%,第一次有了质的改变。&/p&&br&&h3&2.2.2
&b&SPP-net&/b&&/h3&&p&SPP-net[4,19]是MSRA何恺明等人提出的,其主要思想是去掉了原始图像上的crop/warp等操作,换成了在卷积特征上的空间金字塔池化层(Spatial Pyramid Pooling,SPP),如图7所示。为何要引入SPP层 ,主要原因是CNN的全连接层要求输入图片是大小一致的,而实际中的输入图片往往大小不一,如果直接缩放到同一尺寸,很可能有的物体会充满整个图片,而有的物体可能只能占到图片的一角。传统的解决方案是进行不同位置的裁剪,但是这些裁剪技术都可能会导致一些问题出现,比如图7中的crop会导致物体不全,warp导致物体被拉伸后形变严重,SPP就是为了解决这种问题的。SPP对整图提取固定维度的特征,再把图片均分成4份,每份提取相同维度的特征,再把图片均分为16份,以此类推。可以看出,无论图片大小如何,提取出来的维度数据都是一致的,这样就可以统一送至全连接层了。SPP思想在后来的R-CNN模型中也被广泛用到。&img src=&/v2-a209abc71dcc_b.png& data-rawwidth=&785& data-rawheight=&392& class=&origin_image zh-lightbox-thumb& width=&785& data-original=&/v2-a209abc71dcc_r.png&&&/p&&p&SPP-net的网络结构如图8所示,实质是最后一层卷积层后加了一个SPP层,将维度不一的卷积特征转换为维度一致的全连接输入。&img src=&/v2-caba80e223d322ad83944fe_b.png& data-rawwidth=&635& data-rawheight=&471& class=&origin_image zh-lightbox-thumb& width=&635& data-original=&/v2-caba80e223d322ad83944fe_r.png&&&/p&&p&SPP-net做目标检测的主要步骤为:&/p&&ol&&li&&p&候选区域:用Selective Search从原图中生成2000个左右的候选窗口;&/p&&/li&&li&&p&区域大小缩放:SPP-net不再做区域大小归一化,而是缩放到min(&em&w&/em&, &em&h&/em&)=&em&s&/em&,即统一长宽的最短边长度,&em&s&/em&选自{480,576,688,864,1200}中的一个,选择的标准是使得缩放后的候选框大小与224×224最接近;&/p&&/li&&li&&p&特征提取:利用SPP-net网络结构提取特征;&/p&&/li&&li&&p&分类与回归:类似R-CNN,利用SVM基于上面的特征训练分类器模型,用边框回归来微调候选框的位置。&/p&&/li&&/ol&&p&SPP-net解决了R-CNN候选区域时crop/warp带来的偏差问题,提出了SPP层,使得输入的候选框可大可小,但其他方面依然和R-CNN一样,因而依然存在不少问题,这就有了后面的Fast R-CNN。&/p&&br&&h3&2.2.3
&b&Fast R-CNN&/b&&/h3&&p&Fast R-CNN是要解决R-CNN和SPP-net两千个左右候选框带来的重复计算问题,其主要思想为:&/p&&ol&&li&&p&使用一个简化的SPP层 —— RoI(Region of Interesting) Pooling层,操作与SPP类似;&/p&&/li&&li&&p&训练和测试是不再分多步:不再需要额外的硬盘来存储中间层的特征,梯度能够通过RoI Pooling层直接传播;此外,分类和回归用Multi-task的方式一起进行;&/p&&/li&&li&&p&SVD:使用SVD分解全连接层的参数矩阵,压缩为两个规模小很多的全连接层。&/p&&/li&&/ol&&p&如图9所示,Fast R-CNN的主要步骤如下:&/p&&ol&&li&&p&特征提取:以整张图片为输入利用CNN得到图片的特征层;&/p&&/li&&li&&p&候选区域:通过Selective Search等方法从原始图片提取区域候选框,并把这些候选框一一投影到最后的特征层;&/p&&/li&&li&&p&区域归一化:针对特征层上的每个区域候选框进行RoI Pooling操作,得到固定大小的特征表示;&/p&&/li&&li&&p&分类与回归:然后再通过两个全连接层,分别用softmax多分类做目标识别,用回归模型进行边框位置与大小微调。&img src=&/v2-7edbaecbda6a574f_b.png& data-rawwidth=&651& data-rawheight=&330& class=&origin_image zh-lightbox-thumb& width=&651& data-original=&/v2-7edbaecbda6a574f_r.png&&Fast R-CNN比R-CNN的训练速度(大模型L)快8.8倍,测试时间快213倍,比SPP-net训练速度快2.6倍,测试速度快10倍左右。&img src=&/v2-45adcc70bbf_b.png& data-rawwidth=&577& data-rawheight=&338& class=&origin_image zh-lightbox-thumb& width=&577& data-original=&/v2-45adcc70bbf_r.png&&&/p&&/li&&/ol&&p&
图10 Fast R-CNN, R-CNN, SPP-net的运行时间比较&br&&/p&&br&&h3&2.2.4
&b& Faster R-CNN&/b&&/h3&&p&Fast R-CNN使用Selective Search来进行候选区域,速度依然不够快。Faster R-CNN则直接利用RPN(Region Proposal Networks)网络来计算候选框。RPN以一张任意大小的图片为输入,输出一批矩形候选区域,每个区域对应一个目标分数和位置信息。Faster R-CNN中的RPN结构如图11所示。&img src=&/v2-73d4b6fe44d6c28cf37baffc222d1951_b.png& data-rawwidth=&511& data-rawheight=&329& class=&origin_image zh-lightbox-thumb& width=&511& data-original=&/v2-73d4b6fe44d6c28cf37baffc222d1951_r.png&&&/p&&p&
图11 Region Proposal Network(RPN)&/p&&p&Faster R-CNN的主要步骤如下:&/p&&ol&&li&&p&特征提取:同Fast R-CNN,以整张图片为输入,利用CNN得到图片的特征层;&/p&&/li&&li&&p&候选区域:在最终的卷积特征层上利用&em&k&/em&个不同的矩形框(Anchor Box)进行提名,&em&k&/em&一般取9;&/p&&/li&&li&&p&分类与回归:对每个Anchor Box对应的区域进行object/non-object二分类,并用&em&k&/em&个回归模型(各自对应不同的Anchor Box)微调候选框位置与大小,最后进行目标分类。&/p&&/li&&/ol&&p&总之,Faster R-CNN抛弃了Selective Search,引入了RPN网络,使得候选区域、分类、回归一起共用卷积特征,从而得到了进一步的加速。但是,Faster R-CNN需要对两万个Anchor Box先判断是否是目标(目标判定),然后再进行目标识别,分成了两步。&/p&&br&&h3&2.2.5
&b& R-FCN&/b&&/h3&&p&前面的目标检测方法都可以细分为两个子网络:&/p&&ol&&li&&p&共享的全卷积网络;&/p&&/li&&li&&p&不共享计算的ROI相关的子网络(比如全连接网络)。&/p&&/li&&/ol&&p&R-FCN则将最后的全连接层之类换为了一个位置敏感的的卷积网络,从而让所有计算都可以共享。具体来说,先把每个候选区域划分为&em&k&/em&×&em&k&/em&个网格,比如R-FCN原文中&em&k&/em&的取值为3,则对应的九个网格分别表示:左上top-left,上中top-center,……,右下bottom-right,对应图12中的九宫格及图13中的不同颜色的块,每个Grid都有对应的编码,但预测时候会有&em&C&/em&+1个输出,&em&C&/em&表示类别数目,+1是因为有背景类别,全部的输出通道数量为&em&k&/em&×&em&k&/em&×(&em&C&/em&+1)。&/p&&img src=&/v2-25252cd0dbba1a_b.png& data-rawwidth=&838& data-rawheight=&400& class=&origin_image zh-lightbox-thumb& width=&838& data-original=&/v2-25252cd0dbba1a_r.png&&&p&&img src=&/v2-3fce33cc9ed92ff2d5baaeed_b.png& data-rawwidth=&614& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&614& data-original=&/v2-3fce33cc9ed92ff2d5baaeed_r.png&&
图13 R-FCN&/p&&p&需要注意的是,图12、13中不同位置都存在一个九宫格,但是Pooling时候只有一个起作用,比如bottom-right层只有右下角的小块起作用。那么问题来了,这一层其他的8个框有什么作用呢?答案是它们可以作为其他ROI(偏左或偏上一些的ROI)的右下角。&/p&&p&R-FCN的步骤为:&/p&&ol&&li&&p&候选区域:使用RPN(Region Proposal Network,候选区域网络),RPN本身是全卷积网络结构;&/p&&/li&&li&&p&分类与回归:利用和RPN共享的特征进行分类。当做bbox回归时,则将&em&C&/em&设置为4。&/p&&/li&&/ol&&br&&h2&&b&2.3
端到端的方法&/b&&/h2&&p&本小节介绍端到端(End-to-End)的目标检测方法,这些方法无需候选区域,包括YOLO和SSD。&/p&&h3&2.3.1 &b&
YOLO&/b&&/h3&&p&YOLO的全拼是You Only Look Once,顾名思义就是只看一次,进一步把目标判定和目标识别合二为一,所以识别性能有了很大提升,达到每秒45帧,而在快速版YOLO(Fast YOLO,卷积层更少)中,可以达到每秒155帧。&/p&&p&网络的整体结构如图14所示,针对一张图片,YOLO的处理步骤为:&/p&&ol&&li&&p&把输入图片缩放到448×448大小;&/p&&/li&&li&&p&运行卷积网络;&/p&&/li&&li&&p&对模型置信度卡阈值,得到目标位置与类别。&br&&/p&&/li&&/ol&&img src=&/v2-e0e51ddfc1d136a1a00e0fa_b.png& data-rawwidth=&835& data-rawheight=&199& class=&origin_image zh-lightbox-thumb& width=&835& data-original=&/v2-e0e51ddfc1d136a1a00e0fa_r.png&&&p&
图14 YOLO检测系统&/p&&p&网络的模型如图15所示,将448×448大小的图切成&em&S&/em&×&em&S&/em&的网格,目标中心点所在的格子负责该目标的相关检测,每个网格预测&em&B&/em&个边框及其置信度,以及&em&C&/em&种类别的概率。YOLO中&em&S&/em&=7,&em&B&/em&=2,&em&C&/em&取决于数据集中物体类别数量,比如VOC数据集就是&em&C&/em&=20。对VOC数据集来说,YOLO就是把图片统一缩放到448×448,然后每张图平均划分为7×7=49个小格子,每个格子预测2个矩形框及其置信度,以及20种类别的概率。&/p&&img src=&/v2-ff629bd062aafcbedeb6c06c0b74d93d_b.png& data-rawwidth=&690& data-rawheight=&425& class=&origin_image zh-lightbox-thumb& width=&690& data-original=&/v2-ff629bd062aafcbedeb6c06c0b74d93d_r.png&&&p&
图15 YOLO模型&/p&&p&YOLO简化了整个目标检测流程,速度的提升也很大,但是YOLO还是有不少可以改进的地方,比如&em&S&/em&×&em&S&/em&的网格就是一个比较启发式的策略,如果两个小目标同时落入一个格子中,模型也只能预测一个;另一个问题是Loss函数对不同大小的bbox未做区分。&/p&&br&&h3&2.3.2
&b&SSD &/b&&/h3&&p&SSD[17,23]的全拼是Single Shot MultiBox Detector,冲着YOLO的缺点来的。SSD的框架如图16所示,图16(a)表示带有两个Ground Truth边框的输入图片,图16(b)和(c)分别表示8×8网格和4×4网格,显然前者适合检测小的目标,比如图片中的猫,后者适合检测大的目标,比如图片中的狗。在每个格子上有一系列固定大小的Box(有点类似前面提到的Anchor Box),这些在SSD称为Default Box,用来框定目标物体的位置,在训练的时候Ground Truth会赋予给某个固定的Box,比如图16(b)中的蓝框和图16(c)中的红框。&/p&&p&&img src=&/v2-35e5f7cef9f60b485d5e_b.png& data-rawwidth=&594& data-rawheight=&278& class=&origin_image zh-lightbox-thumb& width=&594& data-original=&/v2-35e5f7cef9f60b485d5e_r.png&&SSD的网络分为两部分,前面的是用于图像分类的标准网络(去掉了分类相关的层),后面的网络是用于检测的多尺度特征映射层,从而达到检测不同大小的目标。SSD和YOLO的网络结构对比如图17所示。&br&&/p&&img src=&/v2-f47d61ddfb7da02_b.png& data-rawwidth=&739& data-rawheight=&400& class=&origin_image zh-lightbox-thumb& width=&739& data-original=&/v2-f47d61ddfb7da02_r.png&&&p&
图17 SSD和YOLO的网络结构对比&/p&&p&SSD在保持YOLO高速的同时效果也提升很多,主要是借鉴了Faster R-CNN中的Anchor机制,同时使用了多尺度。但是从原理依然可以看出,Default Box的形状以及网格大小是事先固定的,那么对特定的图片小目标的提取会不够好。&/p&&br&&h2&&b&3
总结&/b&&/h2&&p&基于深度学习的目标检测总体上分为两派:&/p&&ol&&li&&p&基于候选区域的R-CNN系列;&/p&&/li&&li&&p&无需候选区域的YOLO、SSD系列。&/p&&/li&&/ol&&p&表1大致对比了各种方法的性能(Fps,每秒帧数)和VOC 2007上的MAP对比。注意相关数据搜集自不同的paper,由于评测硬件和环境等区别,数据仅供参考,不具有绝对对比意义。&/p&&p&
表1 不同目标检测算法的指标对比&/p&&p&&img src=&/v2-cf7d8a4fbf3ec6cbbb1b3d_b.png& data-rawwidth=&888& data-rawheight=&574& class=&origin_image zh-lightbox-thumb& width=&888& data-original=&/v2-cf7d8a4fbf3ec6cbbb1b3d_r.png&&基于深度学习的目标检测的研究目前依然非常火热,图18为VOC2012目标检测排行榜[25](结果),很高兴看到很多华人和国内同仁在这方面各领风骚。&br&&/p&&img src=&/v2-fd5c3acb5_b.png& data-rawwidth=&849& data-rawheight=&240& class=&origin_image zh-lightbox-thumb& width=&849& data-original=&/v2-fd5c3acb5_r.png&&&p&
图18 VOC2012目标检测排行榜&/p&&p&当然,目标检测还有很长的路要走,比如业界公认较难的小目标检测问题。&/p&&p&小试身手,来一张实际的照片,YOLO的检测结果如图19所示,可以看出漏检了目标。&/p&&p&&img src=&/v2-c793c4a7efccd58f185587b_b.jpg& data-rawwidth=&960& data-rawheight=&1280& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&/v2-c793c4a7efccd58f185587b_r.jpg&&再来看看图20中SSD的效果,看起来效果好不少。&/p&&img src=&/v2-edf4e069_b.jpg& data-rawwidth=&3264& data-rawheight=&2448& class=&origin_image zh-lightbox-thumb& width=&3264& data-original=&/v2-edf4e069_r.jpg&&&img src=&/v2-fc387ecd7ad505_b.jpg& data-rawwidth=&3264& data-rawheight=&2448& class=&origin_image zh-lightbox-thumb& width=&3264& data-original=&/v2-fc387ecd7ad505_r.jpg&&&img src=&/v2-aaa89ec62dbf_b.jpg& data-rawwidth=&3264& data-rawheight=&2448& class=&origin_image zh-lightbox-thumb& width=&3264& data-original=&/v2-aaa89ec62dbf_r.jpg&&&br&&h2&&b&引用内容&/b&&/h2&&blockquote&&p&[1] R. Girshick, J. Donahue, T. Darrell, J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. ImageNet Large-Scale Visual Recognition Challenge workshop, ICCV, 2013.&/p&&p&[2] R. Girshick, J. Donahue, T. Darrell, J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2014.&/p&&p&[3] R. Girshick, J. Donahue, T. Darrell, J. Malik. Region-Based Convolutional Networks for Accurate Object Detection and Segmentation. IEEE Transactions on Pattern Analysis and Machine Intelligence, May. 2015.&/p&&p&[4] K. He, X. Zhang, S. Ren, and J. Sun. Spatial pyramid pooling in deep convolutional networks for visual recognition. In ECCV. 2014.&/p&&p&[5] S. Ren, K. He, R. Girshick, J. Sun. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks. Advances in Neural Information Processing Systems 28 (NIPS), 2015.&/p&&p&[6] C. Szegedy, A. Toshev, D. Erhan. Deep Neural Networks for Object Detection. Advances in Neural Information Processing Systems 26 (NIPS), 2013.&/p&&p&[7] P. Sermanet, D. Eigen, X.Zhang, M. Mathieu, R. Fergus, and Y. LeCun. OverFeat: Integrated recognition, localization and detection using convolutional networks. In ICLR, 2014.&/p&&p&[8] J.R. Uijlings, K.E. vandeSande, T. Gevers, and A.W. Smeulders. Selective search for object recognition. IJCV, 2013.&/p&&p&[9] OverFeat source code:&/p&&p&&a href=&/?target=http%3A//cilvr.nyu.edu/doku.php%3Fid%3Dsoftware%3AOverFeat%3Astart& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&software:overfeat:start&i class=&icon-external&&&/i&&/a&&/p&&p&[10] ILSVRC 2013 results:&/p&&p&&a href=&/?target=http%3A//www.image-net.org/challenges/LSVRC/2013/results.php& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ImageNet Large Scale Visual Recognition Competition 2013 (ILSVRC2013)&i class=&icon-external&&&/i&&/a&&/p&&p&[11] A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural net- works. In NIPS, 2012.&/p&&p&[12] J. Hosang, R. Benenson, P. Dolla ?r, and B. Schiele. What makes for effective detection proposals? TPAMI, 2015.&/p&&p&[13] Felzenszwalb P F, Girshick R B, McAllester D, et al. Object detection with discriminatively trained part-based models[J]. Pattern Analysis and Machine Intelligence, IEEE Transactions on, ): .&/p&&p&[14] Girshick, R. Fast R-CNN. ICCV 2015.&/p&&p&[15] Redmon, J., Divvala, S., Girshick, R., Farhadi, A.: You only look once: Unified, real-time&/p&&p&object detection. In: CVPR. (2016)&/p&&p&[16] R-FCN: Object Detection via Region-based Fully Convolutional Networks. Jifeng Dai, Yi Li, Kaiming He, and Jian Sun. Conference on Neural Information Processing Systems (NIPS), 2016.&/p&&p&[17] Liu W, Anguelov D, Erhan D, et al. SSD: Single Shot MultiBox Detector[J]. arXiv preprint arXiv:, 2015.&/p&&p&[18] R-CNN: Region-based Convolutional Neural Networks: &a href=&/?target=https%3A///rbgirshick/rcnn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - rbgirshick/rcnn: R-CNN: Regions with Convolutional Neural Network Features&i class=&icon-external&&&/i&&/a&&/p&&p&[19] SPP-net: &a href=&/?target=https%3A///ShaoqingRen/SPP_net& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - ShaoqingRen/SPP_net: SPP_net : Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition&i class=&icon-external&&&/i&&/a&&/p&&p&[20] Fast R-CNN: &a href=&/?target=https%3A///rbgirshick/fast-rcnn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - rbgirshick/fast-rcnn: Fast R-CNN&i class=&icon-external&&&/i&&/a&&/p&&p&[21] Faster R-CNN: &a href=&/?target=https%3A///rbgirshick/py-faster-rcnn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - rbgirshick/py-faster-rcnn: Faster R-CNN (Python implementation) -- see /ShaoqingRen/faster_rcnn for the official MATLAB version&i class=&icon-external&&&/i&&/a&&/p&&p&[22] YOLO: &a href=&/?target=http%3A///darknet/yolo/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&YOLO: Real-Time Object Detection&i class=&icon-external&&&/i&&/a&&/p&&p&[23] SSD: &a href=&/?target=https%3A///weiliu89/caffe/tree/ssd& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - weiliu89/caffe at ssd&i class=&icon-external&&&/i&&/a&&/p&&p&[24] R-FCN: &a href=&/?target=https%3A///daijifeng001/r-fcn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - daijifeng001/R-FCN: R-FCN: Object Detection via Region-based Fully Convolutional Networks&i class=&icon-external&&&/i&&/a&&/p&&p&[25] Detection Results: VOC2012 Competition – “comp4” (train on own data): &a href=&/?target=http%3A//host.robots.ox.ac.uk%3A8080/leaderboard/displaylb.php%3Fchallengeid%3D11%26compid%3D4& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PASCAL VOC Challenge performance evaluation server&i class=&icon-external&&&/i&&/a&&/p&&/blockquote&
一、背景介绍普通的深度学习监督算法主要是用来做分类,如图1(1)所示,分类的目标是要识别出图中所示是一只猫。而在ILSVRC(ImageNet Large Scale Visual Recognition Challenge)竞赛以及实际的应用中,还包括目标定位和目标检测等任务。其中目标定位是不仅…
&img src=&/v2-ea2e35dbabc7_b.jpg& data-rawwidth=&597& data-rawheight=&461& class=&origin_image zh-lightbox-thumb& width=&597& data-original=&/v2-ea2e35dbabc7_r.jpg&&&p&说到人工智能和机器人,上点儿岁数的码农们可能对封面这张图有点印象。不明就里的朋友,可以回去补习一下《编辑部的故事》。&/p&&p&我是个二手的人工智能表演艺术家:从博士毕业开始,就在MSRA做了几年语音识别项目的研究。虽然我们的两任院长——李开复老师和洪小文老师都是语音研究出身,却丝毫不能改变当年这一项目在全院最鸡肋的地位。&br&&/p&&p&为什么鸡肋呢?因为在当年,各种各样的人工智能应用能真刀真枪上阵的并不多。就拿语音识别来说,从几十年前IBM和AT&T提出人类用语音与机器交互这一伟大的设想以来,就有无数的业内业外人士为之激动、为之奋斗,也为之失望。我们都知道新技术的发展有条Gartner曲线,先被炒得大热,再跌下来,又慢慢爬坡到稳定的状态。语音识别或人工自然则不然:它被爆炒了好几次,也深深地摔下来好几次。这一方面反映了人工智能问题的巨大吸引力,也体现了它巨大的难度。在我从事语音的那几年,恰逢一个谷底时期,那是有无数的“有识之士”纷纷站出来表达对互联网糙快猛的膜拜,并夹枪带棒地表达对人工智能的鄙夷,认为我们不过是马勺上的苍蝇——混饭吃的。我们要是向互联网界提起自己是做“语音识别”的,也放佛在两会会场上上偷看了毛片那样无地自容。&br&&/p&&p&&img src=&/v2-84a39c68ee2cfad51eb7f39_b.png& data-rawwidth=&515& data-rawheight=&289& class=&origin_image zh-lightbox-thumb& width=&515& data-original=&/v2-84a39c68ee2cfad51eb7f39_r.png&&&br&然而不得不说,在真正从事人工智能的那几年里,我接触到了到目前为止看来最严谨、最具学者风范的几位良师和益友。比如我第一任的老板,Bell Labs来的资深科学家宋謌平老师、第二任的老板,原港大教授霍强老师、以及多年的好友,现科大讯飞执行总裁胡郁等。这些人工智能专家身上都有一种共同的特质:思维深邃又有独立见解,长期甘守寂寞,在人工智能的低潮期从未放弃探索与研究。&br&&/p&&p&那么事情是什么时候发生转折的呢?2010年前后,我以前微软的同事俞栋老师、邓力老师等,将深度学习在图像领域的突破移植到语音识别领域,一下子把识别错误率降低了20%以上,这让原来感觉总是差点儿火候的语音识别突然看到了在某些场景下实用的希望。从图像、语音等领域的突破开始,人工智能的一个新春天又悄然来临,同时也火了“深度学习”这个词。&br&&/p&&p&&strong&“深度学习”这个词儿,实在是太美妙了,不是有邓丽君的一句歌词么?“你问我爱你有多深?我爱你八公分!”&/strong&深,就意味着莫测,意味着正常人的智商大概难以企及。正常人不明白的事儿从我嘴里说出来,那我不牛逼谁牛逼?就是因为这样一个逼格甚高的词儿(有点儿像广告领域的“程序化交易”),再加上若干人工智能应用确实有了一定的突破,在今天,人工智能已经替代大数据、O2O,成为互联网各位卖野药的、开秀场的、搞劫持的、做流氓软件的诸企业家们最好的春药。&br&&/p&&p&在春药的加持下,大佬们纷纷把自己满肚子的互联网思维呕吐出来,摆出一副智能仁波切的嘴脸,像念“嗡嘛呢叭咪吽”那样把“人工智能、深度学习、机器人、无人驾驶”等词汇摆在嘴边,并且具备了时刻达到高潮的能力。我曾经有幸听过几位大佬有关人工智能的论述和演讲,据说他们都已经成为人工智能先驱者一个多礼拜了。就内容而言,有一种郭德纲做政府工作报告的莫名喜感,只不过没有那么密集的包袱罢了。&br&&/p&&p&在智商不够的人看来,一切都是智能的。于是乎,一些充满了邪教气息的论断,在互联网界开始甚嚣尘上,例如:&br&&/p&&p&&strong&“机器学习模型依靠左右互搏,可以迅速达到很高的智能水准。”&/strong&(说他们智商低,是因为这一点他们真信了。)&/p&&p&&strong&“人工智能毁灭人类的奇点即将来到!”&/strong&(我认为机器早就能毁灭人类了,不过这跟人工智能并没有关系。)&/p&&p&&strong&“只有人工智能才能拯救人类!”&/strong&(潜台词是:只有我这样人工智能的使者才能拯救你们!)&/p&&p&&strong&“我们的产品融合了大数据和人工智能技术。”&/strong&(其实多数情况下不过是用hadoop跑了个脚本。)&/p&&p&作为一个知识分子,我是不太擅长骂人的。咱们还是先讲讲道理,看看深度学习到底解决了什么,还有哪些挑战。&br&&/p&&p&实际上,到今天为止,无论什么样的机器学习,本质上都是在统计数据,从中归纳出模型。实际上,很早以前大家就认识到,深层的神经网络比起浅层的模型,&strong&在参数数量相同的情形下,深层模型具有更强的表达能力。&/strong&这个概念说起来也好理解:用同样的面积的铁皮,做个桶比做个盘子盛的水要多一些。对此,马三立大师早有论述:碗比盘深,盆比碗深,缸比盆深,最浅的是碟子,最深的是缸。而盘子或桶里的水,则类比于模型可以接纳并总结的数据:太浅层的模型,其实很容易自满,即使有大量的数据灌进去,也并没有什么卵用。&br&&/p&&img src=&/v2-1a12c62c1534d01bde78aa7c62604f76_b.png& data-rawwidth=&295& data-rawheight=&209& class=&content_image& width=&295&&&p&&strong&既然很早就知道深层模型的表达能力更强,那么为什么近年来深度学习才大放异彩呢?那是因为桶虽然盛水多,我们以前却没有掌握将它高效率地灌满的办法。&/strong&也就是说,以前对深度神经网络,没有太有效的工程优化方法。一个大桶摆在那儿,却只能用耳挖勺一勺勺往里灌水,多怎才能灌满啊?直到本世纪,Geoffrey Hilton和他的学生发明了用GPU来优化深度神经网络的工程方法,这就好比灌水时发明了水管,极大地提高了效率。这样的工程方法产生后,深度神经网络才变成工业界实用的武器,并且在若干领域都带来了里程碑式的变化。&br&&/p&&img src=&/v2-525db31b0dcd14_b.png& data-rawwidth=&310& data-rawheight=&179& class=&content_image& width=&310&&&p&桶有了,水管也有了,还缺什么呢?当然就是水了。对深度学习模型而言,水就是海量的数据。比方说原来用浅层的模型做人脸识别,训练样本到了一定的规模,再多就没有用了,因为盘子已经灌满了,再灌就盛不了了。可是,改用深度学习,再加上有了水管以后,数据一直往里面灌,模型还是可以继续学习和提高。就拿机器识别物体这样的任务来说,通过数百万副图片的训练,深度学习模型甚至可以超过人的肉眼的识别能力,这确实是人工智能在感知类问题上重要的里程碑。&/p&&img src=&/v2-26d41b53d1ff53f33c3c4a4df7471a73_b.png& data-rawwidth=&160& data-rawheight=&209& class=&content_image& width=&160&&&p&然而,上面的例子提醒我们:人工智能和人的智能,还真的不是一回事。几岁的小孩子,大人给他指过一次猫,下次他十有八九就能认出来。然而不论是多强的人工智能模型,也不可能看几张猫的图片,就能准确地认识猫。也就是说,深度

我要回帖

更多关于 matlab得到矩阵的行数 的文章

 

随机推荐