darknet相关问题咨询 本人会微信支付费用相关费用 有意可联系 谢谢

律师费用记入哪个会计分录?_百度知道
律师费用记入哪个会计分录?
请告诉我啊.谢谢
我有更好的答案
律师费应计入“管理费”——咨询费或法律服务费。企业管理费用是指企业行政管理部门为管理组织经营活动而发生的各项费用,包括公司经费、工会经费、职工教育经费、劳动保险费、待业保险费、董事会费、咨询费、审计费、诉讼费、排污费、绿化费、税金、土地使用费、土地损失补偿费、技术转让费、技术开发费、无形资产摊销、开办费摊销、业务招待费,坏账损失,存货盘亏、毁损和报废(减盘盈)损失,以及其他管理费用。咨询费 指委托人就相关事项从咨询人员或公司获得意见或建议而支付的报酬。如向律师或律师事务所咨询相关法律问题而支付咨询费,向税务师咨询相关税务问题而支付咨询费等,这类专业人员或机构如:会计师(事务所)、医师、药师、化工师、教师、管理师、营销策划师、广告策划师、ISO咨询师等,以及向虽没有国家认可的相关职称,但可以提供相关信息的人员支付的信息费亦可以列入咨询费支出,咨询费可列入企业管理费用,在税前列支。因此,支付的咨询费、常年法律顾问费应计入“管理费用”科目的“咨询费”明细科目中。
国内知名职业教育培训机构
主营:公职培训、职业教育、网络教育
记入:管理费用--咨询费或
管理费用--诉讼费
本回答被提问者采纳
对,应记入管理费用.
为您推荐:
其他类似问题
您可能关注的内容
会计分录的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。检车家的服务费用可以手机支付吗?_百度知道
检车家的服务费用可以手机支付吗?
我有更好的答案
他们的支持手机支付的。
采纳率:100%
您好,腾讯手机管家的功能都是免费的,不收取用户任何费用,感谢您对腾讯手机管家的支持,如有使用疑问,可以直接在我们的平台上提问,谢谢~
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。支付宝付款或充值到最后一步总是出现网页无法连接的问题_百度知道
支付宝付款或充值到最后一步总是出现网页无法连接的问题
最近在淘宝购物发现支付宝付款到最后总是网页无法链接,按照网上教的方法去做也没用。各位有更好的办法吗?真郁闷啊。
我有更好的答案
你好,依据你的介绍我想可能有一下几个原因:1、如果你一直使用个人PC,且你所说这种情况发生在较短时间段内(一两天),并且以前没有发生过,那么有可能是网络问题,因为有的时候网路得不稳定和服务器的暂时调整,会使得你的访问受限。2、有可能你安装部分杀毒、防御软件、安全浏览器后,有意无意间更改了部分安全设置,造成访问受限。3、在淘宝购物时,如果使用支付宝不能划账的话,你可以使用网上银行直接打款。4、也可能机器本身中了钓鱼或者相关木马病毒,病毒和杀毒软件作用时,也可能发生类似情况。建议立即全盘杀毒排除次因素。
不知以上回答是否对你帮助,谢谢o(∩_∩)o...!
采纳率:58%
如果你没有安装支付宝插件,你可以点击IE“属性”—“安全”—“自定义级别”—“设置”—“ActiveX控件和插件”全部改为“允许”或者“同意”之类的。另外,“可信任点”中的“站点”中加入你的网上银行卡的银行网址和help.alipay.com(这个通常会有,也极有可能两个都有的),然后确定。设置修改后,登陆IE,会有提示说会有危险,你先不要理会,登陆到淘宝,然后进行网上银行充值或者付款。这些工作做好后,你把原来的设置再改回来就好了。也很方便。可能第一次网上银行充值或者付款会出现这样的情况,可能以后就不会出现了。
安装了支付宝插件了没有啊?在看看是不是防火墙的问题~~还有有的页面禁止弹出页面,也要注意
为您推荐:
其他类似问题
您可能关注的内容
支付宝付款的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。&p&最近投了一堆机器学习/深度学习/计算机视觉方向的公司,分享一下自己的经验,希望对大家有帮助。&/p&&p&个人背景: 华科本科 + 港科大硕士(MPhil)&/p&&p&拿到的offer有腾讯优图,阿里AI lab,今日头条,滴滴研究院,商汤科技,旷视(face++),大疆,快手。绝大部分是ssp(super special),给到了普通硕士能给到的最高档。&/p&&p&最新修改:经人提醒,我意识到直接po公司的原题是非常不好的行为。所以我修改一下答案,只能指明大概的考察范围。在此对我的所有面试官表示抱歉,未经同意贴出了所有的面试题。&/p&&p&&br&&/p&&p&写在前面的话&/p&&p&这个回答的适用对象主要还是本科和硕士。PhD找工作的套路跟硕士还是很不一样的,所以这个回答的经验对于手握几篇一作顶会的PhD大神并没啥参考意义。&/p&&p&我也和我们实验室几个找工作的PhD学长学姐聊过,他们的面试主要是讲自己的research,有的甚至就是去公司给个talk,跟本科硕士的校招流程完全不同。现在也是AI方向PhD的黄金时代,没毕业就被各大公司主动联系,待遇也比我这种硕士高很多很多。&/p&&p&&br&&/p&&p&一.
整体建议&/p&&p&一定要找内推。&/p&&p&内推一般有两种,第一种力度比较弱,在公司的内推系统上填一下你的名字,加快一下招聘流程;第二种力度比较强,直接把简历送到部门负责人手上。个人比较建议第二种,会省事很多。&/p&&p&原因如下:&/p&&p&(1)现在做机器学习的人实在太多了,在不找内推的情况下,流程会特别特别慢。即使你的简历比较优秀,也可能淹没在茫茫大海中,不一定能被懂行的人看到。&/p&&p&(2)现在很多公司的笔试其实挺有难度的,就算是大神也有翻车的可能性。&/p&&p&(3)对于大公司而言,即使通过了简历筛选、笔试那一关,你也很难保证你的简历被合适的部门挑中。很可能过关斩将后,发现给你安排的面试官并不是太对口。尤其是深度学习这样比较新的领域,一般部门的面试官多半也是近期自学的,对这个也是一知半解。所以如果是想去BAT这些大公司里面专门做AI的部门,按照正常校招流程走是不合适的,一定要找到那些部门的员工内推。&/p&&p&在我看来,如果是跪在简历筛选、笔试这些上面,连面试官都没见到,就实在太可惜了。为了避免这一点,请认真找内推。最好能联系到你想去的公司部门里的负责人,直接安排面试。&/p&&p&&br&&/p&&p&二. 面试经验&/p&&p&面试遇到的题目,可以分为几个大类:&/p&&p&(1)代码题(leetcode类型),主要考察数据结构和基础算法,以及代码基本功 &/p&&p&虽然这部分跟机器学习,深度学习关系不大,但也是面试的重中之重。基本每家公司的面试都问了大量的算法题和代码题,即使是商汤、face++这样的深度学习公司,考察这部分的时间也占到了我很多轮面试的60%甚至70%以上。我去face++面试的时候,面试官是residual net,shuffle net的作者;但他们的面试中,写代码题依旧是主要的部分。&/p&&p&大部分题目都不难,基本是leetcode medium的难度。但是要求在现场白板编程,思路要流畅,能做到一次性Bug-free.
并且,一般都是要给出时间复杂度和空间复杂度最优的做法。对于少数难度很大的题,也不要慌张。一般也不会一点思路也没有,尽力给面试官展现自己的思考过程。面试官也会引导你,给一点小提示,沿着提示把题目慢慢做出来也是可以通过面试的。&/p&&p&以下是我所遇到的一些需要当场写出完整代码的题目:&/p&&p&/*******************************************************************&/p&&p&经人提醒,意识到直接贴具体的面试原题是非常不好的行为,该部分不在回答里放出来了。&/p&&p&*******************************************************************/&/p&&p&不过这部分有些是LeetCode原题,在这里我简单地举几个例子,附上LeetCode题目链接:&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//leetcode.com/problems/maximum-product-subarray/description/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Maximum Product Subarray&/a&&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//leetcode.com/problems/maximal-square/description/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Maximal Square&/a&&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//leetcode.com/problems/subsets/description/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Subsets&/a&&/p&&p&&br&&/p&&p&(2)数学题或者&智力&题。&/p&&p&不会涉及特别高深的数学知识,一般就是工科数学(微积分,概率论,线性代数)和一些组合数学的问题。&/p&&p&下面是我在面试中被问到过的问题:&/p&&p&/*******************************************************************&/p&&p&经人提醒,意识到直接贴具体的面试原题是非常不好的行为,该部分不在回答里放出来了。&/p&&p&*******************************************************************/&/p&&p&这部分有些题也在知乎上被讨论过,这里附上相应的知乎链接&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&如果一个女生说,她集齐了十二个星座的前男友,我们应该如何估计她前男友的数量?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&如何理解矩阵的「秩」?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&矩阵低秩的意义?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&如何理解矩阵特征值?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&奇异值的物理意义是什么?&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&为什么梯度反方向是函数值下降最快的方向?&/a&&/p&&p&&br&&/p&&p&(3)机器学习基础&/p&&p&这部分建议参考周志华老师的《机器学习》。&/p&&p&下面是我在面试中被问到过的问题:&/p&&p&/*******************************************************************&/p&&p&经人提醒,意识到直接贴具体的面试原题是非常不好的行为,该部分不在回答里放出来了。&/p&&p&*******************************************************************/&/p&&p&列一下考察的知识点,并附上相关的优质知乎讨论。&/p&&p&逻辑回归,SVM,决策树&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&逻辑回归和SVM的区别是什么?各适用于解决什么问题?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&Linear SVM 和 LR 有什么异同?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&SVM(支持向量机)属于神经网络范畴吗?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&如何理解决策树的损失函数?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&各种机器学习的应用场景分别是什么?例如,k近邻,贝叶斯,决策树,svm,逻辑斯蒂回归和最大熵模型。&/a&&/p&&p&主成分分析,奇异值分解&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&SVD 降维体现在什么地方?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&为什么PCA不被推荐用来避免过拟合?&/a&&/p&&p&随机森林,GBDT, 集成学习&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&为什么说bagging是减少variance,而boosting是减少bias?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&基于树的adaboost和Gradient Tree Boosting区别?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&机器学习算法中GBDT和XGBOOST的区别有哪些?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&为什么在实际的 kaggle 比赛中 gbdt 和 random forest 效果非常好?&/a&&/p&&p&过拟合&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&机器学习中用来防止过拟合的方法有哪些?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&机器学习中使用「正则化来防止过拟合」到底是一个什么原理?为什么正则化项就可以防止过拟合?&/a&&/p&&p&&br&&/p&&p&(4)深度学习基础&/p&&p&这部分的准备,我推荐花书(Bengio的Deep learning)和 &a class=&member_mention& href=&//www.zhihu.com/people/b716bc76c2990cd06dae2f9c1f984e6d& data-hash=&b716bc76c2990cd06dae2f9c1f984e6d& data-hovercard=&p$b$b716bc76c2990cd06dae2f9c1f984e6d&&@魏秀参&/a& 学长的&a href=&//link.zhihu.com/?target=http%3A//210.28.132.67/weixs/book/CNN_book.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《解析卷积神经网络-深度学习实践手册》&/a&&/p&&p&/*******************************************************************&/p&&p&经人提醒,意识到直接贴具体的面试原题是非常不好的行为,该部分不在回答里放出来了。&/p&&p&*******************************************************************/&/p&&p&列一下大概的考察点和相关的知乎讨论。&/p&&p&卷积神经网络,循环神经网络,LSTM与GRU,梯度消失与梯度爆炸,激活函数,防止过拟合的方法,dropout,batch normalization,各类经典的网络结构,各类优化方法&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&卷积神经网络工作原理直观的解释?&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&卷积神经网络的复杂度分析&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&bp算法中为什么会产生梯度消失?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&梯度下降法是万能的模型训练算法吗?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&LSTM如何来避免梯度弥散和梯度爆炸?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&sgd有多种改进的形式(rmsprop,adadelta等),为什么大多数论文中仍然用sgd?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&你有哪些deep learning(rnn、cnn)调参的经验?&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Adam那么棒,为什么还对SGD念念不忘 (1)&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Adam那么棒,为什么还对SGD念念不忘 (2)&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&全连接层的作用是什么?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&深度学习中 Batch Normalization为什么效果好?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&为什么现在的CNN模型都是在GoogleNet、VGGNet或者AlexNet上调整的?&/a&&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&Krizhevsky等人是怎么想到在CNN里用Dropout和ReLu的?&/a&&/p&&p&&br&&/p&&p&&br&&/p&&p&(5)科研上的开放性问题&/p&&p&这部分的问题没有固定答案,也没法很好地针对性准备。功在平时,多读paper多思考,注意培养自己的insight和intuition&/p&&p&下面是我在面试中被问到过的问题:&/p&&p&/*******************************************************************&/p&&p&经人提醒,意识到直接贴具体的面试原题是非常不好的行为,该部分不在回答里放出来了。&/p&&p&*******************************************************************/&/p&&p&这部分在知乎上也有很多讨论,不具体列了。&/p&&p&&br&&/p&&p&(6) 编程语言、操作系统等方面的一些问题。&/p&&p&C++, Python, 操作系统,Linux命令等等。这部分问得比较少,但还是有的,不具体列了&/p&&p&(7)针对简历里项目/论文 / 实习的一些问题。&/p&&p&这部分因人而异,我个人的对大家也没参考价值,也不列了。&/p&&p&&br&&/p&&p&三. 平时应该怎么准备&/p&&p&在大多数情况下,你能拿到什么样的offer,其实已经被你的简历决定了。如果平时没有积累相关的经历和成果,很难只靠面试表现就拿到非常好的offer。所以建议大家平时积累算法岗所看重的一些干货。&/p&&p&下面几点算是找AI相关工作的加分项:&/p&&p&(1)一作的顶级会议论文&/p&&p&(2)AI领域知名公司的实习经历(长期实习更好)&/p&&p&(3)相关方向有含金量的项目经历&/p&&p&(4)计算机视觉竞赛,数据挖掘竞赛的获奖或者优秀名次。现在这类竞赛太多了,就不具体列了。&/p&&p&(5)程序设计竞赛的获奖(例如OI/ACM/topcoder之类的)&/p&&p&当然,名校、高GPA这些是针对所有领域都有用的加分项,同样也是适用于这个领域的。&/p&&p&所以我的建议就是,如果自己所在的实验室很厉害,资源丰富,就专心做科研,发paper; 如果所在的实验室一般,没法产出相关的优秀成果,可以考虑自己做比赛和找实习。有一份知名公司的实习经历之后,找工作难度会下降很多。&/p&&p&&br&&/p&&p&最后,祝有志于AI这个领域的人都能拿到满意的offer.&/p&
最近投了一堆机器学习/深度学习/计算机视觉方向的公司,分享一下自己的经验,希望对大家有帮助。个人背景: 华科本科 + 港科大硕士(MPhil)拿到的offer有腾讯优图,阿里AI lab,今日头条,滴滴研究院,商汤科技,旷视(face++),大疆,快手。绝大部分是ss…
&p&不妨看看 xlearn 的源码。&/p&&p&在机器学习里,除了深度学习和树模型 (GBDT, RF) 之外,如何高效地处理高维稀疏数据也是非常重要的课题,Sparse LR, FM, FFM 这些算法被广泛运用在实际生产和kaggle比赛中。现有的开源软件例如 liblinear, libfm, libffm 都只能针对特定的算法,并且可扩展性、灵活性、易用性都不够友好。基于此,我在博士期间开发了 xLearn,一款专门针对大规模稀疏数据的机器学习库,曾在之前 NIPS 上做过展示。经过打磨,现开源 &a href=&//link.zhihu.com/?target=https%3A//github.com/aksnzhy/xlearn& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/aksnzhy/xlea&/span&&span class=&invisible&&rn&/span&&span class=&ellipsis&&&/span&&/a&。我们的 vision 是将 xLearn 打造成和 xgboost,MXNet一样的工业事实标准。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-f3fab90bd5a5b10c67890_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&750& data-rawheight=&703& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&https://pic2.zhimg.com/50/v2-f3fab90bd5a5b10c67890_r.jpg&&&/figure&&p&相比于已有的软件,xLearn的优势主要有(1)通用性好,我们用统一的架构将主流的算法(lr, fm, ffm 等)全部囊括,用户不用再切换于不同软件之间。(2)性能好。xLearn由高性能c++开发,提供 cache-aware 和 lock-free learning,并且经过手工 SSE/AVX 指令优化。 在单机MacBook Pro上测试 xLearn 可以比 libfm 快13倍,比 libffm 和 liblinear 快5倍(基于Criteo CTR数据 bechmark)。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-59e0cbdba5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&750& data-rawheight=&980& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&https://pic1.zhimg.com/50/v2-59e0cbdba5_r.jpg&&&/figure&&p&(3)易用性和灵活性,xLearn 提供简单的 python 接口,并且集合了机器学习比赛中许多有用的功能,例如:cross-validation,early-stopping 等。除此之外,用户可以灵活选择优化算法(例如,SGD,AdaGrad, FTRL 等)&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-a9c56903cf5fddac60c653d2c4d045c6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&750& data-rawheight=&661& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&https://pic3.zhimg.com/50/v2-a9c56903cf5fddac60c653d2c4d045c6_r.jpg&&&/figure&&p&(4) 可扩展性好。xLearn 提供 out-of-core 计算,利用外存计算可以在单机处理 1TB 数据。除此之外,xLearn 也提供分布式训练功能。这里我希望更多的朋友加入这个开源项目!&/p&
不妨看看 xlearn 的源码。在机器学习里,除了深度学习和树模型 (GBDT, RF) 之外,如何高效地处理高维稀疏数据也是非常重要的课题,Sparse LR, FM, FFM 这些算法被广泛运用在实际生产和kaggle比赛中。现有的开源软件例如 liblinear, libfm, libffm 都只能针…
&p&算法工程师,溢价程度超乎你想象。我本科毕业1年,已经从年薪35万涨到50万了。&/p&&p&以下几条能够做到的话,绝对不止年薪50万:&/p&&ul&&li&《算法竞赛入门经典(第二版)》:把书啃透,然后把书上每道题在OJ上AC了。&/li&&li&《机器学习》(周志华):把书上每个算法实现,每个公式推导一遍。&/li&&li&《UNIX环境高级编程》:很多人都缺少的对操作系统的深入了解。(补充:我觉得光看这本书是比较片面的,前两点像是在修炼内功,那么这一条就是在修炼外功。而这本书作为起点是一个还不错的选择。)&/li&&li&托福 100+:跟进前沿paper,与国外同行交流。&/li&&/ul&&p&想到再补充,但是这几条绝对不是明面上这么简单,背后需要付出大量的时间以及其他基础知识的学习,例如想要推导清楚《机器学习》这本书的所有公式,需要对微积分,线性代数,概率论,数理统计,甚至是随机过程都有一定的基础。要刷光《算法竞赛入门经典(第二版)》,那么你的C++,算法,数据结构水平应该也是大部分本科生无法企及的。&/p&&p&&br&&/p&&p&如果想深入交流可以私信。&/p&&p&&br&&/p&&p&----补充----&/p&&p&没想到有这么多私信来咨询,实际我也只是个小白,谈不上什么指导,最多是根据自身的经历给大家一些可供参考的建议。关于年薪50万的事情,我觉得年薪只能相对反映出一个人的水平,并不是绝对的年薪50万就比年薪30万强很多。现在人工智能行业站在风口,大把投资进到这个行业,带来的后果之一就是人才薪资的严重溢价。&/p&&p&&b&我的建议一定不是到达年薪50万的捷径,但等到退潮时,裸泳的人中不会有你。&/b&&/p&&p&----补充----&/p&&p&年薪50万的确因为是风口,但我这些年的热情纯粹是出于对coding的热爱,就算是年薪10万我也会在这条路继续走下去。从高一那年写下printf(&hello world!&);那一刻起就注定这会是我一生的追求。&/p&&p&----补充----&br&&/p&&p&评论区有些意见,我统一回复一下:&/p&&p&1.完爆大部分phd这话我说错了。&/p&&p&2.看完西瓜书和吃透是两回事,并且这的确是本科生入门的好书。&/p&&p&3.说我编的可能有两个原因&/p&&p&(1)没有搞清楚现在的市场行情。&/p&&p&(2)低估刷穿紫书和吃透西瓜书的价值了。&/p&
算法工程师,溢价程度超乎你想象。我本科毕业1年,已经从年薪35万涨到50万了。以下几条能够做到的话,绝对不止年薪50万:《算法竞赛入门经典(第二版)》:把书啃透,然后把书上每道题在OJ上AC了。《机器学习》(周志华):把书上每个算法实现,每个公式推…
&p&Part I:你的简历&/p&&p&Part II:深度学习&/p&&p&Part III:机器学习&/p&&p&Part IV:算法编程&/p&&p&Part VI:佛系养生篇&/p&&hr&&p&背景:广州某985本硕,研究方向NLP/DL/RL,面了BAT和网易游戏这四家,其中三个是做问答或对话系统。&/p&&p&offer情况:全部收到offer。offer可能会迟到,但是不会缺席的。&/p&&p&&br&&/p&&p&本文主要总结一下我个人的准备过程,时间为半个月左右。&/p&&p&一面首先要过coding这一关,白板编程,接下来面试主要围绕你简历展开考察深度学习基础,然后再聊一聊传统机器学习。&/p&&p&&br&&/p&&hr&&p&&br&&/p&&p&&b&Part I:你的简历&/b&&/p&&p&首先你要写一份漂亮的简历,用语简练专业,突出重点,对大部分同学来说压缩成一页就够了,最多两页。&/p&&p&推荐这个免费网站:&a href=&http://link.zhihu.com/?target=https%3A//www.wondercv.com/zh-CN/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&超级简历&/a&,非常简洁漂亮又有迎面而来的大神既视感。&/p&&p&你的简历需要包含这几部分:&/p&&p&1)教育背景:可以写上绩点排名,所在实验室以及研究方向。&/p&&p&2)项目经历:写明问题背景,xx数据集,xx解决方法,具体评价指标达到xx,相比xx方法提升了xx个百分点,最后还可以附上代码开源地址,或者项目上线地址。&/p&&p&3)实习经历:实习所负责的职责,和项目经历一样的写法。&/p&&p&4)论文:如果你投research岗位,顶会是个大加成;如果你投的是nlp工程岗位,论文其实没有硬性要求,更看重项目。&/p&&p&5)荣誉奖项:xx奖学金,kaggle xx牌,xx比赛排名。(打比赛最好是先solo再组队,自己的贡献一目了然)&/p&&p&6)其它:放上你的github地址,blog地址。&/p&&p&&br&&/p&&p&其中项目是重点,我相信看到这篇文章的你,应该有相关的NLP项目,那么你应该对你简历所写上去的东西负责任(也就是对细节非常熟),对方可能会问到你:&/p&&p&1)具体参数设置,为什么要这样设置(掌握一下调参玄学)&/p&&p&2)你的模型,为什么这么做,为什么能work,和xx方法比怎么样&/p&&p&3)可能根据你的项目及模型,提出某个可能存在的深藏不露的问题,问你如何解决&/p&&p&4)项目难点是什么,又如何解决,从哪几方面解决,效果提升多少&/p&&p&5)如今的你再来看从前的这个任务,有没有更好的解决思路&/p&&p&6)给你一个新的业务场景,你怎么把你的模型移植上去,怎么重新设计模型,和你之前项目的区别是什么,需要注意哪些问题&/p&&p&7)项目分工,你做了哪部分工作&/p&&p&8)你这个任务的state of the art&/p&&hr&&p&&b&Part II:深度学习&/b&&/p&&p&这部分其实我没怎么复习,都是经验之谈。&/p&&p&首先关于基础原理,你至少要知道这些:&/p&&p&1)CNN原理,如何用在文本上,在什么情况下适合用CNN,在什么情况下用LSTM&/p&&p&2)RNN系列,掌握RNN、LSTM和GRU的内部结构,RNN产生梯度消失的原因,LSTM如何解决,GRU对LSTM的改进。&/p&&p&3)Word2vec工具,怎么训练词向量,skip-gram和cbow,可以参考一下:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&一篇通俗易懂的word2vec&/a&(也可能并不通俗易懂)&/p&&p&4)Attention机制,比较常见的方法,可以参考一下:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Attention用于NLP的一些小结&/a&&/p&&p&5)NLP基础任务,比如分词算法(序列标注任务),分类算法&/p&&p&&br&&/p&&p&关于实战部分,你至少也要知道这些:&/p&&p&1)数据预处理,权重初始化,为什么不能全部初始化为0,词向量怎么预训练&/p&&p&2)过拟合问题,原因是什么,怎么解决,主要从数据和模型两方面出发:&a href=&https://www.zhihu.com/question/& class=&internal&&机器学习中用来防止过拟合的方法有哪些?&/a&&/p&&p&3)调参技巧,比如,卷积核大小怎么按层设置,bn放在哪里比较合适,激活函数之间的区别(sigmoid,tanh和relu),词向量维度怎么设置,等等。&/p&&p&4)模型评估指标,acc,pre,recall,f1,roc曲线和auc曲线,分别适用于什么任务,怎么降低偏差,怎么降低方差,可以关注一下Hulu微信公众号:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Hulu机器学习问题与解答系列 | 第一弹:模型评估&/a&&/p&&p&5)优化方法,批量梯度下降,随机梯度下降,mini-batch梯度下降的区别,adam,adagrad,adadelta,牛顿法&/p&&p&6)梯度消失问题,原因(链式求导,激活函数),解决方法(主要是batch norm);以及梯度爆炸问题(梯度截断)&/p&&p&7)关于训练集和验证集,为什么要划分,如何划分(留出法,交叉验证)&/p&&p&8)如何处理数据不均衡问题,也是从数据和模型两方面出发解决。&/p&&p&&br&&/p&&p&其实大部分问题,google一下就有答案。&/p&&hr&&p&&b&Part III:传统机器学习&/b&&/p&&p&看这本书:&b&周志华-机器学习&/b&(俗称西瓜书)&/p&&p&这本书我们实验室人手一本,真正通俗易懂,有基础的话一周就能看得差不多,很多内容我在大三的时候已经学过了。这本书比李航统计学习方法要好看很多,特别适合没有基础的入门者。&/p&&p&我觉得这本书的目录差不多已经涵盖了面试会问到的内容,至少要看完第2-9章,第14章的概率图模型也看一下,第16章的强化学习就见仁见智了,虽然我在简历上写到强化学习背景,但实际上问到我强化学习的只有那么一位面试官(RL+对话系统)&/p&&p&&br&&/p&&p&你至少要掌握的算法原理:&/p&&p&1)朴素贝叶斯&/p&&p&2)逻辑回归,线性回归&/p&&p&3)决策树,不同的划分方式,ID3,C4.5,CTAR,XGBoost等等&/p&&p&4)Ensemble模型&/p&&p&5)SVM,核函数选择,不同SVM形式&/p&&p&6)HMM,CRF,&a href=&http://link.zhihu.com/?target=https%3A//www.jianshu.com/p/5& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何轻松愉快地理解条件随机场(CRF)?&/a&&/p&&p&7)最大熵原理,&a href=&http://link.zhihu.com/?target=https%3A//wanghuaishi.wordpress.com//%25E5%259B%25BE%25E8%25A7%25A3%25E6%259C%%25A4%25A7%25E7%%25E5%258E%259F%25E7%EF%25BC%2588the-maximum-entropy-principle%25EF%25BC%2589/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&图解最大熵原理(The Maximum Entropy Principle)&/a&&/p&&p&8)KNN和K-Means,DBSACN也了解一下,以及各种距离计算方式,&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&关于机器学习距离的理解&/a&&/p&&p&以上列出的算法都需要掌握其基本原理以及优缺点,可以参考:&a href=&http://link.zhihu.com/?target=https%3A//blog.csdn.net/mach_learn/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&机器学习算法优缺点及其应用领域 - CSDN博客&/a& &/p&&p&&br&&/p&&p&你必须要会写的公式:&/p&&p&1)BP后向传播过程的推导,可以参考:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&漫谈LSTM系列的梯度问题&/a&,先定义Loss函数,然后分别对输出层参数和隐藏层参数进行求导,得到参数的更新量。&/p&&p&2)softmax和交叉熵推导,分成i=j 和 i&img src=&http://www.zhihu.com/equation?tex=%5Cne& alt=&\ne& eeimg=&1&&j 两种情况来算,参考这里:&a href=&http://link.zhihu.com/?target=http%3A//www.php-master.com/post/295807.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&大师网-简单易懂的softmax交叉熵损失函数求导&/a&&/p&&p&3)各种Loss函数&/p&&p&4)似然函数,负对数似然函数的推导&/p&&p&5)最小二乘法,利用矩阵的秩进行推导&/p&&p&7)贝叶斯定理,拉普拉斯平滑&/p&&p&&br&&/p&&p&你最好也要掌握一下的公式:&/p&&p&1)RNN在BP过程中梯度消失的原因,也把这个链式求导过程写出来。&/p&&p&2)各种优化方法的公式,SGD,Momentum,Adagrad,Adam,&a href=&http://link.zhihu.com/?target=http%3A//www.cnblogs.com/ljygoodgoodstudydaydayup/p/7294671.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&机器学习优化方法总结比较 - 合唱团abc - 博客园&/a&&/p&&p&3)Batch Normalization,就是个归一化过程,再加一个scale操作&/p&&p&4)SVM推导,拉格朗日了解一下:&a href=&http://link.zhihu.com/?target=http%3A//guoshangshu.com//machine_learning/lagrange/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&机器学习之拉格朗日乘数法&/a&&/p&&p&5)最大熵模型相关推导,&a href=&http://link.zhihu.com/?target=https%3A//www.cnblogs.com/wxquare/p/5858008.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&一步一步理解最大熵模型 - wxquare - 博客园&/a&&/p&&hr&&p&&b&Part IV:算法编程&/b&&/p&&p&&b&不管你面试什么公司,请记住coding几乎是必考的,这是工程师的基本功。&/b&&/p&&p&编程分成三种:普通算法编程,海量数据编程,模型编程。&/p&&p&普通算法编程,一般用C++,需要掌握数组,链表,二叉树,递归,贪心,动态规划,各种容器,各种排序算法,在时间或者空间上的优化思路,以及复杂度的分析。&/p&&p&容器是个好东西,用vector代替数组,用map实现桶思想,用set排序,用queue写bfs,用stack写dfs等等。&/p&&p&推荐大家刷:&b&剑指offer&/b&,这本书两天就可以看完(如果仅仅是看题目以及思路),然后上牛客网做一下题:&a href=&http://link.zhihu.com/?target=https%3A//www.nowcoder.com/ta/coding-interviews& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&剑指Offer_编程题_牛客网&/a&,66道原题全在这,而且评论区有大神出没,某些题的解法我觉得比书上的要巧妙。或者刷&a href=&http://link.zhihu.com/?target=https%3A//leetcode.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LeetCode&/a&也可以。&/p&&p&随手列几道常考的代码题:&/p&&p&1)复杂链表的复制,链表的删除&/p&&p&2)最长公共子序列,逆序对&/p&&p&3)快排,归并排序,堆排序&/p&&p&4)二分查找,以及衍生的题目&/p&&p&5)深度优先搜索&/p&&p&&br&&/p&&p&海量数据编程,这种用python写比较方便一点,可以把大文件划分成小文件,或者分治加哈希:&a href=&http://link.zhihu.com/?target=https%3A//blog.csdn.net/v_july_v/article/details/6279498/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&十道海量数据处理面试题与十个方法大总结 - CSDN博客&/a&&/p&&p&&br&&/p&&p&模型编程,有时候可能会让你用某个深度学习框架搭某个模型,不过这种比较少。&/p&&p&做科研比较推荐pytorch,业界用tf 比较多,不过也得看组看个人,如果项目需要上线很有可能就是要用tf了。我个人比较喜欢用pytorch,方便搭模型,对RL也很友好。但tf 还是要掌握一下的,指不定哪天这个项目就是要用tf来上线呢。&/p&&p&总之,刷题即可,多写代码多搭模型。&/p&&hr&&p&以上都是非常基础的内功,最重要的是你如何向别人去展示你的实力,我觉得只有理解到位了,且有自己的思考,才能和别人进行愉悦的交流和探讨。&/p&&hr&&p&&b&Part VI:佛系养生篇&/b&&/p&&p&&b&offer固然重要,身体是最重要的。&/b&&/p&&p&最近没有更新专栏,因为身体出了点状况,三天两头跑医院。因此添加这一节内容告诉大家,有钱不如去买口红买机械键盘!不要大把花在医院!&/p&&p&&br&&/p&&p&1. 牙齿超级重要!&/p&&p&牙齿要保护好,并及时拍片检查。&/p&&p&因为牙齿真的真的真的很重要!嘤嘤嘤!我小时候牙齿动过手术,现在复发很严重,要做好多次手术,我瑟瑟发抖!&/p&&p&(刚刚动完第一次手术,人生依然美好!并不影响我的颜值!开心!)&/p&&p&&br&&/p&&p&2. 眼睛是心灵的窗户&/p&&p&1) 眼药水,推荐日本santen那一款。&/p&&p&2) 日常转动眼珠,先顺时针慢慢转动几圈,再逆时针转动几圈(超有效)。&/p&&p&3) 轻轻按摩眼窝和太阳穴。&/p&&p&4) 眼霜,熬越晚的夜就用越贵的眼霜。&/p&&p&&br&&/p&&p&3. 关于熬夜&/p&&p&不要熬夜!早睡早起!&/p&&p&熬夜使你脸浮肿!熬夜使你第二天没精神写代码!熬夜使你内分泌失调!熬夜会带来很多潜伏的问题!熬夜玩手机不如看论文!&/p&&p&对付不得已的浮肿:&/p&&p&1) 每天洗脸的时候,顺时针转动头部,再逆时针转动,大概花几分钟时间,非常有效。&/p&&p&2) 轻轻按摩咬肌附近,要先上乳液。&/p&&p&3) 从下巴往上沿轮廓轻轻推动肉肉&/p&&p&4) 轻轻拍打下颌处肉肉(俗称打脸)&/p&&p&&br&&/p&&p&4. 多运动!&/p&&p&道理大家都懂。&/p&&p&很久之前我和实验室另一个妹子,一起办了健身卡,想要相互push,后来,我一次也没去过,她只去过一次.......&/p&&p&但最后她加入了校内的运动社团,强制签到push,每周30公里的运动量妥妥的。&/p&&p&但是我找到了这个:&/p&&p&&a href=&http://link.zhihu.com/?target=https%3A//m.bilibili.com/video/av.html%3Fshare_medium%3Dandroid%26share_source%3Dweixin%26bbid%3D46E025F6--8A49-FB81994infoc%26ts%3D8%26from%3Dmessage& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&30分钟瘦身操&/a&&/p&&p&感觉很方便~~~啦啦啦&/p&&p&&/p&
Part I:你的简历Part II:深度学习Part III:机器学习Part IV:算法编程Part VI:佛系养生篇背景:广州某985本硕,研究方向NLP/DL/RL,面了BAT和网易游戏这四家,其中三个是做问答或对话系统。offer情况:全部收到offer。offer可能会迟到,但是不会缺席的…
&figure&&img src=&https://pic2.zhimg.com/v2-0fa05b926d7a29a6cacfa_b.jpg& data-rawwidth=&1600& data-rawheight=&1045& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&https://pic2.zhimg.com/v2-0fa05b926d7a29a6cacfa_r.jpg&&&/figure&&p&选自 Medium,作者:Jonathan Hui,机器之心编译&/p&&blockquote&目标检测是很多计算机视觉任务的基础,不论我们需要实现图像与文字的交互还是需要识别精细类别,它都提供了可靠的信息。本文对目标检测进行了整体回顾,第一部分从RCNN开始介绍基于候选区域的目标检测器,包括Fast R-CNN、Faster R-CNN 和 FPN等。第二部分则重点讨论了包括YOLO、SSD和RetinaNet等在内的单次检测器,它们都是目前最为优秀的方法。&/blockquote&&p&机器之心之前已经讨论过非常多的目标检测算法,对计算机视觉感兴趣的读者也可以结合以前的文章加强理解。&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D2a6ad467ca87fbc2e04c66%26chksm%3D871b35c2b06cbcd4b7a7dde708fdf20f1b4025%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深度学习目标检测模型全面综述:Faster R-CNN、R-FCN和SSD&/a&&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D03dfb0fafc358b5a803e7bf%26chksm%3D871ade75b06dc5da1cacf7ce52a0a23e6c320f129f79bb9b3be4d2da0%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从零开始PyTorch项目:YOLO v3目标检测实现&/a&&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D3%26sn%3Ddc26c3dc6220%26chksm%3D871ac989b06d409f89bd2a1ea99ed415af05e692bef968a6606fde%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&像玩乐高一样拆解Faster R-CNN:详解目标检测的实现过程&/a&&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D3%26sn%3Dcdceb47cf48f12b3d451afc%26chksm%3D871acc1ab06d450ccdec98adb2de3b6a2c9dc20bd%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&后RCNN时代的物体检测及实例分割进展&/a&&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D3%26sn%3D453e29cbdf12%26chksm%3D871b1f64b06ccee90f5a036c09b08cec9e5c7f0c19d5a8c7e0eb06e0b%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&物体检测算法全概述:从传统检测方法到深度神经网络框架&/a&&/li&&/ul&&p&&br&&/p&&h2&&b&基于候选区域的目标检测器&/b&&/h2&&p&&b&滑动窗口检测器&/b&&/p&&p&自从 AlexNet 获得 ILSVRC 2012 挑战赛冠军后,用 CNN 进行分类成为主流。一种用于目标检测的暴力方法是从左到右、从上到下滑动窗口,利用分类识别目标。为了在不同观察距离处检测不同的目标类型,我们使用不同大小和宽高比的窗口。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-0e3563cbe7a616e953700d_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&313& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-0e3563cbe7a616e953700d_r.jpg&&&figcaption&滑动窗口(从右到左,从上到下) &/figcaption&&/figure&&p&我们根据滑动窗口从图像中剪切图像块。由于很多分类器只取固定大小的图像,因此这些图像块是经过变形转换的。但是,这不影响分类准确率,因为分类器可以处理变形后的图像。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-d126fb6c53d388dd0a32c5ed80d1cb6a_b.jpg& data-size=&normal& data-rawwidth=&310& data-rawheight=&172& class=&content_image& width=&310&&&figcaption&将图像变形转换成固定大小的图像 &/figcaption&&/figure&&p&变形图像块被输入 CNN 分类器中,提取出 4096 个特征。之后,我们使用 SVM 分类器识别类别和该边界框的另一个线性回归器。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-12afee2acd7c32cfd5c154183caa90aa_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&651& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-12afee2acd7c32cfd5c154183caa90aa_r.jpg&&&figcaption&滑动窗口检测器的系统工作流程图&/figcaption&&/figure&&p&下面是伪代码。我们创建很多窗口来检测不同位置的不同目标。要提升性能,一个显而易见的办法就是减少窗口数量。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&for window in windows
patch = get_patch(image, window)
results = detector(patch)
&/code&&/pre&&/div&&p&&br&&/p&&p&&b&选择性搜索&/b&&/p&&p&我们不使用暴力方法,而是用候选区域方法(region proposal method)创建目标检测的感兴趣区域(ROI)。在选择性搜索(selective search,SS)中,我们首先将每个像素作为一组。然后,计算每一组的纹理,并将两个最接近的组结合起来。但是为了避免单个区域吞噬其他区域,我们首先对较小的组进行分组。我们继续合并区域,直到所有区域都结合在一起。下图第一行展示了如何使区域增长,第二行中的蓝色矩形代表合并过程中所有可能的 ROI。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-f79a078a92b326ed22cfea3_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&705& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic1.zhimg.com/v2-f79a078a92b326ed22cfea3_r.jpg&&&figcaption&图源:van de Sande et al. ICCV'11 &/figcaption&&/figure&&p&&b&R-CNN&/b&&/p&&p&R-CNN 利用候选区域方法创建了约 2000 个 ROI。这些区域被转换为固定大小的图像,并分别馈送到卷积神经网络中。该网络架构后面会跟几个全连接层,以实现目标分类并提炼边界框。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-b2ddde68e040e2e9af4a06_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&433& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-b2ddde68e040e2e9af4a06_r.jpg&&&figcaption&使用候选区域、CNN、仿射层来定位目标&/figcaption&&/figure&&p&以下是 R-CNN 整个系统的流程图:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-37ddcbb2e6bee1ca72a44e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&341& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic1.zhimg.com/v2-37ddcbb2e6bee1ca72a44e_r.jpg&&&/figure&&p&通过使用更少且更高质量的 ROI,R-CNN 要比滑动窗口方法更快速、更准确。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&ROIs = region_proposal(image)
for ROI in ROIs
patch = get_patch(image, ROI)
results = detector(patch)
&/code&&/pre&&/div&&p&&br&&/p&&p&&b&边界框回归器&/b&&/p&&p&候选区域方法有非常高的计算复杂度。为了加速这个过程,我们通常会使用计算量较少的候选区域选择方法构建 ROI,并在后面使用线性回归器(使用全连接层)进一步提炼边界框。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-485ba49bcf8cbaa2a0e576c_b.jpg& data-size=&normal& data-rawwidth=&688& data-rawheight=&391& class=&origin_image zh-lightbox-thumb& width=&688& data-original=&https://pic2.zhimg.com/v2-485ba49bcf8cbaa2a0e576c_r.jpg&&&figcaption&使用回归方法将蓝色的原始边界框提炼为红色的。&/figcaption&&/figure&&p&&b&Fast R-CNN&/b&&/p&&p&R-CNN 需要非常多的候选区域以提升准确度,但其实有很多区域是彼此重叠的,因此 R-CNN 的训练和推断速度非常慢。如果我们有 2000 个候选区域,且每一个都需要独立地馈送到 CNN 中,那么对于不同的 ROI,我们需要重复提取 2000 次特征。&/p&&p&此外,CNN 中的特征图以一种密集的方式表征空间特征,那么我们能直接使用特征图代替原图来检测目标吗?&/p&&figure&&img src=&https://pic3.zhimg.com/v2-cc95d9b56e2fa13118aa39_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&770& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic3.zhimg.com/v2-cc95d9b56e2fa13118aa39_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-aad71cc3f4_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&447& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-aad71cc3f4_r.jpg&&&figcaption&直接利用特征图计算 ROI。 &/figcaption&&/figure&&p&Fast R-CNN 使用特征提取器(CNN)先提取整个图像的特征,而不是从头开始对每个图像块提取多次。然后,我们可以将创建候选区域的方法直接应用到提取到的特征图上。例如,Fast R-CNN 选择了 VGG16 中的卷积层 conv5 来生成 ROI,这些关注区域随后会结合对应的特征图以裁剪为特征图块,并用于目标检测任务中。我们使用 ROI 池化将特征图块转换为固定的大小,并馈送到全连接层进行分类和定位。因为 Fast-RCNN 不会重复提取特征,因此它能显著地减少处理时间。 &/p&&figure&&img src=&https://pic4.zhimg.com/v2-e44f123a9dc9aeebe8dc0d_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&306& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-e44f123a9dc9aeebe8dc0d_r.jpg&&&figcaption&将候选区域直接应用于特征图,并使用 ROI 池化将其转化为固定大小的特征图块。&/figcaption&&/figure&&p&以下是 Fast R-CNN 的流程图:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ba05bcb7b9c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&328& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-ba05bcb7b9c_r.jpg&&&/figure&&p&在下面的伪代码中,计算量巨大的特征提取过程从 For 循环中移出来了,因此速度得到显著提升。Fast R-CNN 的训练速度是 R-CNN 的 10 倍,推断速度是后者的 150 倍。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&feature_maps = process(image)
ROIs = region_proposal(feature_maps)
for ROI in ROIs
patch = roi_pooling(feature_maps, ROI)
results = detector2(patch)
&/code&&/pre&&/div&&p&Fast R-CNN 最重要的一点就是包含特征提取器、分类器和边界框回归器在内的整个网络能通过多任务损失函数进行端到端的训练,这种多任务损失即结合了分类损失和定位损失的方法,大大提升了模型准确度。&/p&&p&&br&&/p&&p&&b&ROI 池化&/b& &/p&&p&因为 Fast R-CNN 使用全连接层,所以我们应用 ROI 池化将不同大小的 ROI 转换为固定大小。&/p&&p&为简洁起见,我们先将 8×8 特征图转换为预定义的 2×2 大小。&/p&&ul&&li&下图左上角:特征图。&/li&&li&右上角:将 ROI(蓝色区域)与特征图重叠。&/li&&li&左下角:将 ROI 拆分为目标维度。例如,对于 2×2 目标,我们将 ROI 分割为 4 个大小相似或相等的部分。&/li&&li&右下角:找到每个部分的最大值,得到变换后的特征图。&/li&&/ul&&figure&&img src=&https://pic2.zhimg.com/v2-88c912c17e6de84afa09_b.jpg& data-size=&normal& data-rawwidth=&735& data-rawheight=&703& class=&origin_image zh-lightbox-thumb& width=&735& data-original=&https://pic2.zhimg.com/v2-88c912c17e6de84afa09_r.jpg&&&figcaption&输入特征图(左上),输出特征图(右下),ROI (右上,蓝色框)。 &/figcaption&&/figure&&p&按上述步骤得到一个 2×2 的特征图块,可以馈送至分类器和边界框回归器中。&/p&&p&&br&&/p&&p&&b&Faster R-CNN&/b&&/p&&p&Fast R-CNN 依赖于外部候选区域方法,如选择性搜索。但这些算法在 CPU 上运行且速度很慢。在测试中,Fast R-CNN 需要 2.3 秒来进行预测,其中 2 秒用于生成 2000 个 ROI。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&feature_maps = process(image)
ROIs = region_proposal(feature_maps)
# Expensive!
for ROI in ROIs
patch = roi_pooling(feature_maps, ROI)
results = detector2(patch)
&/code&&/pre&&/div&&p&Faster R-CNN 采用与 Fast R-CNN 相同的设计,只是它用内部深层网络代替了候选区域方法。新的候选区域网络(RPN)在生成 ROI 时效率更高,并且以每幅图像 10 毫秒的速度运行。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c03d3fdc25baf_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-c03d3fdc25baf_r.jpg&&&figcaption&Faster R-CNN 的流程图与 Fast R-CNN 相同。 &/figcaption&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-06ee67acdde4e763cfe2374d_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&306& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic1.zhimg.com/v2-06ee67acdde4e763cfe2374d_r.jpg&&&figcaption&外部候选区域方法代替了内部深层网络。&/figcaption&&/figure&&p&&b&候选区域网络&/b&&/p&&p&候选区域网络(RPN)将第一个卷积网络的输出特征图作为输入。它在特征图上滑动一个 3×3 的卷积核,以使用卷积网络(如下所示的 ZF 网络)构建与类别无关的候选区域。其他深度网络(如 VGG 或 ResNet)可用于更全面的特征提取,但这需要以速度为代价。ZF 网络最后会输出 256 个值,它们将馈送到两个独立的全连接层,以预测边界框和两个 objectness 分数,这两个 objectness 分数度量了边界框是否包含目标。我们其实可以使用回归器计算单个 objectness 分数,但为简洁起见,Faster R-CNN 使用只有两个类别的分类器:即带有目标的类别和不带有目标的类别。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e392b05f144d6d6adffcd6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1008& data-rawheight=&278& class=&origin_image zh-lightbox-thumb& width=&1008& data-original=&https://pic1.zhimg.com/v2-e392b05f144d6d6adffcd6_r.jpg&&&/figure&&p&&br&&/p&&p&对于特征图中的每一个位置,RPN 会做 k 次预测。因此,RPN 将输出 4×k 个坐标和每个位置上 2×k 个得分。下图展示了 8×8 的特征图,且有一个 3×3 的卷积核执行运算,它最后输出 8×8×3 个 ROI(其中 k=3)。下图(右)展示了单个位置的 3 个候选区域。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-cef1aad1f534af_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&688& data-rawheight=&379& class=&origin_image zh-lightbox-thumb& width=&688& data-original=&https://pic3.zhimg.com/v2-cef1aad1f534af_r.jpg&&&/figure&&p&此处有 3 种猜想,稍后我们将予以完善。由于只需要一个正确猜想,因此我们最初的猜想最好涵盖不同的形状和大小。因此,Faster R-CNN 不会创建随机边界框。相反,它会预测一些与左上角名为「锚点」的参考框相关的偏移量(如 x、 y)。我们限制这些偏移量的值,因此我们的猜想仍然类似于锚点。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-910ee2e86c2f9323ccd534_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&400& data-rawheight=&303& class=&content_image& width=&400&&&/figure&&p&要对每个位置进行 k 个预测,我们需要以每个位置为中心的 k 个锚点。每个预测与特定锚点相关联,但不同位置共享相同形状的锚点。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-f465c2db394aa5757b64cacbc8426c2b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&350& data-rawheight=&353& class=&content_image& width=&350&&&/figure&&p&这些锚点是精心挑选的,因此它们是多样的,且覆盖具有不同比例和宽高比的现实目标。这使得我们可以以更好的猜想来指导初始训练,并允许每个预测专门用于特定的形状。该策略使早期训练更加稳定和简便。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-c25d0f9dd35a844ac1bfa1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&624& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-c25d0f9dd35a844ac1bfa1_r.jpg&&&/figure&&p&Faster R-CNN 使用更多的锚点。它部署 9 个锚点框:3 个不同宽高比的 3 个不同大小的锚点框。每一个位置使用 9 个锚点,每个位置会生成 2×9 个 objectness 分数和 4×9 个坐标。&/p&&i&&figure&&img src=&https://pic2.zhimg.com/v2-c25d0f9dd35a844ac1bfa1_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&624& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-c25d0f9dd35a844ac1bfa1_r.jpg&&&figcaption&图源:https://arxiv.org/pdf/.pdf&/figcaption&&/figure&&/i&&p&&b&R-CNN 方法的性能&/b&&/p&&p&如下图所示,Faster R-CNN 的速度要快得多。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-1c881eabda776_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&500& data-rawheight=&302& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic4.zhimg.com/v2-1c881eabda776_r.jpg&&&/figure&&p&&br&&/p&&p&&b&基于区域的全卷积神经网络(R-FCN)&/b&&/p&&p&假设我们只有一个特征图用来检测右眼。那么我们可以使用它定位人脸吗?应该可以。因为右眼应该在人脸图像的左上角,所以我们可以利用这一点定位整个人脸。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-ba4a036c86ab79a4ef38b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&507& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-ba4a036c86ab79a4ef38b_r.jpg&&&/figure&&p&如果我们还有其他用来检测左眼、鼻子或嘴巴的特征图,那么我们可以将检测结果结合起来,更好地定位人脸。&/p&&p&现在我们回顾一下所有问题。在 Faster R-CNN 中,检测器使用了多个全连接层进行预测。如果有 2000 个 ROI,那么成本非常高。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&feature_maps = process(image)
ROIs = region_proposal(feature_maps)
for ROI in ROIs
patch = roi_pooling(feature_maps, ROI)
class_scores, box = detector(patch)
# Expensive!
class_probabilities = softmax(class_scores)
&/code&&/pre&&/div&&p&R-FCN 通过减少每个 ROI 所需的工作量实现加速。上面基于区域的特征图与 ROI 是独立的,可以在每个 ROI 之外单独计算。剩下的工作就比较简单了,因此 R-FCN 的速度比 Faster R-CNN 快。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&feature_maps = process(image)
ROIs = region_proposal(feature_maps)
score_maps = compute_score_map(feature_maps)
for ROI in ROIs
V = region_roi_pool(score_maps, ROI)
class_scores, box = average(V)
# Much simpler!
class_probabilities = softmax(class_scores)
&/code&&/pre&&/div&&p&现在我们来看一下 5 × 5 的特征图 M,内部包含一个蓝色方块。我们将方块平均分成 3 × 3 个区域。现在,我们在 M 中创建了一个新的特征图,来检测方块的左上角(TL)。这个新的特征图如下图(右)所示。只有黄色的网格单元 [2, 2] 处于激活状态。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-378a0a57bb45ded82e4f1bdaf7c921ab_b.jpg& data-size=&normal& data-rawwidth=&880& data-rawheight=&322& class=&origin_image zh-lightbox-thumb& width=&880& data-original=&https://pic2.zhimg.com/v2-378a0a57bb45ded82e4f1bdaf7c921ab_r.jpg&&&figcaption&在左侧创建一个新的特征图,用于检测目标的左上角。&/figcaption&&/figure&&p&我们将方块分成 9 个部分,由此创建了 9 个特征图,每个用来检测对应的目标区域。这些特征图叫作位置敏感得分图(position-sensitive score map),因为每个图检测目标的子区域(计算其得分)。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-12ab2eddb4f0fdde114948b_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&845& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic3.zhimg.com/v2-12ab2eddb4f0fdde114948b_r.jpg&&&figcaption&生成 9 个得分图 &/figcaption&&/figure&&p&下图中红色虚线矩形是建议的 ROI。我们将其分割成 3 × 3 个区域,并询问每个区域包含目标对应部分的概率是多少。例如,左上角 ROI 区域包含左眼的概率。我们将结果存储成 3 × 3 vote 数组,如下图(右)所示。例如,vote_array[0][0] 包含左上角区域是否包含目标对应部分的得分。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-9b7eaed417e3d5b69de6d461dab91ef4_b.jpg& data-size=&normal& data-rawwidth=&913& data-rawheight=&297& class=&origin_image zh-lightbox-thumb& width=&913& data-original=&https://pic4.zhimg.com/v2-9b7eaed417e3d5b69de6d461dab91ef4_r.jpg&&&figcaption&将 ROI 应用到特征图上,输出一个 3 x 3 数组。 &/figcaption&&/figure&&p&将得分图和 ROI 映射到 vote 数组的过程叫作位置敏感 ROI 池化(position-sensitive ROI-pool)。该过程与前面讨论过的 ROI 池化非常接近。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-e807dc872f0cd42fd5ba3f_b.jpg& data-size=&normal& data-rawwidth=&791& data-rawheight=&665& class=&origin_image zh-lightbox-thumb& width=&791& data-original=&https://pic2.zhimg.com/v2-e807dc872f0cd42fd5ba3f_r.jpg&&&figcaption&将 ROI 的一部分叠加到对应的得分图上,计算 V[i][j]。 &/figcaption&&/figure&&p&在计算出位置敏感 ROI 池化的所有值后,类别得分是其所有元素得分的平均值。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c9f1ac56b18d01fe9ae58_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&450& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-c9f1ac56b18d01fe9ae58_r.jpg&&&figcaption&ROI 池化 &/figcaption&&/figure&&p&假如我们有 C 个类别要检测。我们将其扩展为 C + 1 个类别,这样就为背景(非目标)增加了一个新的类别。每个类别有 3 × 3 个得分图,因此一共有 (C+1) × 3 × 3 个得分图。使用每个类别的得分图可以预测出该类别的类别得分。然后我们对这些得分应用 softmax 函数,计算出每个类别的概率。&/p&&p&以下是数据流图,在我们的案例中,k=3。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ac3679dfa282e36fef92d110f7521c37_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&536& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-ac3679dfa282e36fef92d110f7521c37_r.jpg&&&/figure&&p&&b&总结&/b&&/p&&p&我们首先了解了基础的滑动窗口算法:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&for window in windows
patch = get_patch(image, window)
results = detector(patch)
&/code&&/pre&&/div&&p&然后尝试减少窗口数量,尽可能减少 for 循环中的工作量。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&ROIs = region_proposal(image)
for ROI in ROIs
patch = get_patch(image, ROI)
results = detector(patch)
&/code&&/pre&&/div&&p&&br&&/p&&h2&&b&单次目标检测器&/b&&/h2&&p&第二部分,我们将对单次目标检测器(包括 SSD、YOLO、YOLOv2、YOLOv3)进行综述。我们将分析 FPN 以理解多尺度特征图如何提高准确率,特别是小目标的检测,其在单次检测器中的检测效果通常很差。然后我们将分析 Focal loss 和 RetinaNet,看看它们是如何解决训练过程中的类别不平衡问题的。&/p&&p&&br&&/p&&p&&b&单次检测器&/b&&/p&&p&Faster R-CNN 中,在分类器之后有一个专用的候选区域网络。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c03d3fdc25baf_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-c03d3fdc25baf_r.jpg&&&figcaption&Faster R-CNN 工作流 &/figcaption&&/figure&&p&基于区域的检测器是很准确的,但需要付出代价。Faster R-CNN 在 PASCAL VOC 2007 测试集上每秒处理 7 帧的图像(7 FPS)。和 R-FCN 类似,研究者通过减少每个 ROI 的工作量来精简流程。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&feature_maps = process(image)
ROIs = region_proposal(feature_maps)
for ROI in ROIs
patch = roi_align(feature_maps, ROI)
results = detector2(patch)
# Reduce the amount of work here!
&/code&&/pre&&/div&&p&作为替代,我们是否需要一个分离的候选区域步骤?我们可以直接在一个步骤内得到边界框和类别吗?&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&feature_maps = process(image)
results = detector3(feature_maps) # No more separate step for ROIs
&/code&&/pre&&/div&&p&让我们再看一下滑动窗口检测器。我们可以通过在特征图上滑动窗口来检测目标。对于不同的目标类型,我们使用不同的窗口类型。以前的滑动窗口方法的致命错误在于使用窗口作为最终的边界框,这就需要非常多的形状来覆盖大部分目标。更有效的方法是将窗口当做初始猜想,这样我们就得到了从当前滑动窗口同时预测类别和边界框的检测器。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-c75bbfdb426b_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&540& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic3.zhimg.com/v2-c75bbfdb426b_r.jpg&&&figcaption&基于滑动窗口进行预测&/figcaption&&/figure&&p&这个概念和 Faster R-CNN 中的锚点很相似。然而,单次检测器会同时预测边界框和类别。例如,我们有一个 8 × 8 特征图,并在每个位置做出 k 个预测,即总共有 8 × 8 × k 个预测结果。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-c46da58035ffcaddbd16d_b.jpg& data-size=&normal& data-rawwidth=&336& data-rawheight=&375& class=&content_image& width=&336&&&figcaption&64 个位置 &/figcaption&&/figure&&p&在每个位置,我们有 k 个锚点(锚点是固定的初始边界框猜想),一个锚点对应一个特定位置。我们使用相同的 锚点形状仔细地选择锚点和每个位置。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-2bedafd69945_b.jpg& data-size=&normal& data-rawwidth=&335& data-rawheight=&337& class=&content_image& width=&335&&&figcaption&使用 4 个锚点在每个位置做出 4 个预测。&/figcaption&&/figure&&p&以下是 4 个锚点(绿色)和 4 个对应预测(蓝色),每个预测对应一个特定锚点。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-9afb097e039_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&540& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic3.zhimg.com/v2-9afb097e039_r.jpg&&&figcaption&4 个预测,每个预测对应一个锚点。 &/figcaption&&/figure&&p&在 Faster R-CNN 中,我们使用卷积核来做 5 个参数的预测:4 个参数对应某个锚点的预测边框,1 个参数对应 objectness 置信度得分。因此 3× 3× D × 5 卷积核将特征图从 8 × 8 × D 转换为 8 × 8 × 5。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-02efc9d104cf7aabd192d52_b.jpg& data-size=&normal& data-rawwidth=&708& data-rawheight=&382& class=&origin_image zh-lightbox-thumb& width=&708& data-original=&https://pic1.zhimg.com/v2-02efc9d104cf7aabd192d52_r.jpg&&&figcaption&使用 3x3 卷积核计算预测。 &/figcaption&&/figure&&p&在单次检测器中,卷积核还预测 C 个类别概率以执行分类(每个概率对应一个类别)。因此我们应用一个 3× 3× D × 25 卷积核将特征图从 8 × 8 × D 转换为 8 × 8 × 25(C=20)。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-b1ed5d3f9b0c90a14d3ee14_b.jpg& data-size=&normal& data-rawwidth=&1047& data-rawheight=&476& class=&origin_image zh-lightbox-thumb& width=&1047& data-original=&https://pic4.zhimg.com/v2-b1ed5d3f9b0c90a14d3ee14_r.jpg&&&figcaption&每个位置做出 k 个预测,每个预测有 25 个参数。 &/figcaption&&/figure&&p&单次检测器通常需要在准确率和实时处理速度之间进行权衡。它们在检测太近距离或太小的目标时容易出现问题。在下图中,左下角有 9 个圣诞老人,但某个单次检测器只检测出了 5 个。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f86e841d395f97bada93_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&659& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-f86e841d395f97bada93_r.jpg&&&/figure&&p&&b&SSD&/b&&/p&&p&SSD 是使用 VGG19 网络作为特征提取器(和 Faster R-CNN 中使用的 CNN 一样)的单次检测器。我们在该网络之后添加自定义卷积层(蓝色),并使用卷积核(绿色)执行预测。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-13532ded138d620f627e36a5e7a39f44_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&97& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-13532ded138d620f627e36a5e7a39f44_r.jpg&&&figcaption&同时对类别和位置执行单次预测。&/figcaption&&/figure&&p&然而,卷积层降低了空间维度和分辨率。因此上述模型仅可以检测较大的目标。为了解决该问题,我们从多个特征图上执行独立的目标检测。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-357bf7c0bf_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&236& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic1.zhimg.com/v2-357bf7c0bf_r.jpg&&&figcaption&使用多尺度特征图用于检测。 &/figcaption&&/figure&&p&以下是特征图图示。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-664a2b9c38aeb2a4c0811_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&363& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic1.zhimg.com/v2-664a2b9c38aeb2a4c0811_r.jpg&&&figcaption&图源:https://arxiv.org/pdf/.pdf&/figcaption&&/figure&&p&SSD 使用卷积网络中较深的层来检测目标。如果我们按接近真实的比例重绘上图,我们会发现图像的空间分辨率已经被显著降低,且可能已无法定位在低分辨率中难以检测的小目标。如果出现了这样的问题,我们需要增加输入图像的分辨率。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-3d0ef715ee44f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&696& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic1.zhimg.com/v2-3d0ef715ee44f_r.jpg&&&/figure&&p&&b&YOLO&/b&&/p&&p&YOLO 是另一种单次目标检测器。&/p&&a href=&https://link.zhihu.com/?target=https%3A//v.qq.com/x/page/t06146pm1qk.html& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&YOLO v3_腾讯视频&/a&&p&YOLO 在卷积层之后使用了 DarkNet 来做特征检测。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-eb0e55772bba649e09b23454_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&127& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-eb0e55772bba649e09b23454_r.jpg&&&/figure&&p&然而,它并没有使用多尺度特征图来做独立的检测。相反,它将特征图部分平滑化,并将其和另一个较低分辨率的特征图拼接。例如,YOLO 将一个 28 × 28 × 512 的层重塑为 14 × 14 × 2048,然后将它和 14 × 14 ×1024 的特征图拼接。之后,YOLO 在新的 14 × 14 × 3072 层上应用卷积核进行预测。&/p&&p&YOLO(v2)做出了很多实现上的改进,将 mAP 值从第一次发布时的 63.4 提高到了 78.6。YOLO9000 可以检测 9000 种不同类别的目标。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-4d1a300a87_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&446& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic3.zhimg.com/v2-4d1a300a87_r.jpg&&&figcaption&图源:https://arxiv.org/pdf/.pdf &/figcaption&&/figure&&p&以下是 YOLO 论文中不同检测器的 mAP 和 FPS 对比。YOLOv2 可以处理不同分辨率的输入图像。低分辨率的图像可以得到更高的 FPS,但 mAP 值更低。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-b5c37375bafe2c6bc2f89_b.jpg& data-size=&normal& data-rawwidth=&462& data-rawheight=&325& class=&origin_image zh-lightbox-thumb& width=&462& data-original=&https://pic1.zhimg.com/v2-b5c37375bafe2c6bc2f89_r.jpg&&&figcaption&图源:https://arxiv.org/pdf/.pdf&/figcaption&&/figure&&p&&b&YOLOv3&/b&&/p&&p&YOLOv3 使用了更加复杂的骨干网络来提取特征。DarkNet-53 主要由 3 × 3 和 1× 1 的卷积核以及类似 ResNet 中的跳过连接构成。相比 ResNet-152,DarkNet 有更低的 BFLOP(十亿次浮点数运算),但能以 2 倍的速度得到相同的分类准确率。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-7fa54b75f52cd32094fce80b_b.jpg& data-size=&normal& data-rawwidth=&334& data-rawheight=&462& class=&content_image& width=&334&&&figcaption&图源:https://pjreddie.com/media/files/papers/YOLOv3.pdf&/figcaption&&/figure&&p&YOLOv3 还添加了特征金字塔,以更好地检测小目标。以下是不同检测器的准确率和速度的权衡。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-80e27cdbfb96b1d667cb_b.jpg& data-size=&normal& data-rawwidth=&800& data-rawheight=&498& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/v2-80e27cdbfb96b1d667cb_r.jpg&&&figcaption&图源:https://pjreddie.com/media/files/papers/YOLOv3.pdf&/figcaption&&/figure&&p&&b&特征金字塔网络(FPN)&/b&&/p&&p&检测不同尺度的目标很有挑战性,尤其是小目标的检测。特征金字塔网络(FPN)是一种旨在提高准确率和速度的特征提取器。它取代了检测器(如 Faster R-CNN)中的特征提取器,并生成更高质量的特征图金字塔。&/p&&p&&br&&/p&&p&数据流&/p&&figure&&img src=&https://pic4.zhimg.com/v2-2dcde6970d7_b.jpg& data-size=&normal& data-rawwidth=&500& data-rawheight=&201& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic4.zhimg.com/v2-2dcde6970d7_r.jpg&&&figcaption&FPN(图源:https://arxiv.org/pdf/.pdf)&/figcaption&&/figure&&p&FPN 由自下而上和自上而下路径组成。其中自下而上的路径是用于特征提取的常用卷积网络。空间分辨率自下而上地下降。当检测到更高层的结构,每层的语义值增加。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-39be056a48895_b.jpg& data-size=&normal& data-rawwidth=&470& data-rawheight=&318& class=&origin_image zh-lightbox-thumb& width=&470& data-original=&https://pic4.zhimg.com/v2-39be056a48895_r.jpg&&&figcaption&FPN 中的特征提取(编辑自原论文)&/figcaption&&/figure&&p&SSD 通过多个特征图完成检测。但是,最底层不会被选择执行目标检测。它们的分辨率高但是语义值不够,导致速度显著下降而不能被使用。SSD 只使用较上层执行目标检测,因此对于小的物体的检测性能较差。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-d2d1c84dd96f49_b.jpg& data-size=&normal& data-rawwidth=&400& data-rawheight=&246& class=&content_image& width=&400&&&figcaption&图像修改自论文 https://arxiv.org/pdf/.pdf&/figcaption&&/figure&&p&FPN 提供了一条自上而下的路径,从语义丰富的层构建高分辨率的层。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-43bf3ab98bc0fe1ab644f_b.jpg& data-size=&normal& data-rawwidth=&500& data-rawheight=&201& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic2.zhimg.com/v2-43bf3ab98bc0fe1ab644f_r.jpg&&&figcaption&自上而下重建空间分辨率(编辑自原论文)&/figcaption&&/figure&&p&虽然该重建层的语义较强,但在经过所有的上采样和下采样之后,目标的位置不精确。在重建层和相应的特征图之间添加横向连接可以使位置侦测更加准确。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-2dcde6970d7_b.jpg& data-size=&normal& data-rawwidth=&500& data-rawheight=&201& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic4.zhimg.com/v2-2dcde6970d7_r.jpg&&&figcaption&增加跳过连接(引自原论文)&/figcaption&&/figure&&p&下图详细说明了自下而上和自上而下的路径。其中 P2、P3、P4 和 P5 是用于目标检测的特征图金字塔。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-c0b4df421b4ca8dc34d65_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&968& data-rawheight=&1134& class=&origin_image zh-lightbox-thumb& width=&968& data-original=&https://pic3.zhimg.com/v2-c0b4df421b4ca8dc34d65_r.jpg&&&/figure&&p&&b&FPN 结合 RPN&/b&&/p&&p&FPN 不单纯是目标检测器,还是一个目标检测器和协同工作的特征检测器。分别传递到各个特征图(P2 到 P5)来完成目标检测。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-51dc59b9effde8e735adad898c5688d9_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&767& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic3.zhimg.com/v2-51dc59b9effde8e735adad898c5688d9_r.jpg&&&/figure&&p&&br&&/p&&p&&b&FPN 结合 Fast R-CNN 或 Faster R-CNN&/b&&/p&&p&在 FPN 中,我们生成了一个特征图的金字塔。用 RPN(详见上文)来生成 ROI。基于 ROI 的大小,我们选择最合适尺寸的特征图层来提取特征块。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-6e41dfff6e4a77fc5344_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1000& data-rawheight=&368& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&https://pic1.zhimg.com/v2-6e41dfff6e4a77fc5344_r.jpg&&&/figure&&p&&b&困难案例&/b&&/p&&p&对于如 SSD 和 YOLO 的大多数检测算法来说,我们做了比实际的目标数量要多得多的预测。所以错误的预测比正确的预测要更多。这产生了一个对训练不利的类别不平衡。训练更多的是在学习背景,而不是检测目标。但是,我们需要负采样来学习什么是较差的预测。所以,我们计算置信度损失来把训练样本分类。选取最好的那些来确保负样本和正样本的比例最多不超过 3:1。这使训练更加快速和稳定。&/p&&p&&br&&/p&&p&&b&推断过程中的非极大值抑制&/b&&/p&&p&检测器对于同一个目标会做出重复的检测。我们利用非极大值抑制来移除置信度低的重复检测。将预测按照置信度从高到低排列。如果任何预测和当前预测的类别相同并且两者 IoU 大于 0.5,我们就把它从这个序列中剔除。&/p&&p&&br&&/p&&p&&b&Focal Loss(RetinaNet)&/b&&/p&&p&类别不平衡会损害性能。SSD 在训练期间重新采样目标类和背景类的比率,这样它就不会被图像背景淹没。Focal loss(FL)采用另一种方法来减少训练良好的类的损失。因此,只要该模型能够很好地检测背景,就可以减少其损失并重新增强对目标类的训练。我们从交叉熵损失 CE 开始,并添加一个权重来降低高可信度类的 CE。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-eb38ebda4fddd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&203& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic1.zhimg.com/v2-eb38ebda4fddd_r.jpg&&&/figure&&p&例如,令 γ = 0.5, 经良好分类的样本的 Focal loss 趋近于 0。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-3eb91e4353a79eecd198aa4b598a983c_b.jpg& data-size=&normal& data-rawwidth=&400& data-rawheight=&240& class=&content_image& width=&400&&&figcaption&编辑自原论文 &/figcaption&&/figure&&p&这是基于 FPN、ResNet 以及利用 Focal loss 构建的 RetianNet。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-72dc5ac95bd7_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&289& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic3.zhimg.com/v2-72dc5ac95bd7_r.jpg&&&figcaption&RetinaNet &/figcaption&&/figure&&p&原文链接:&a href=&https://link.zhihu.com/?target=https%3A//medium.com/%40jonathan_hui/what-do-we-learn-from-region-based-object-detectors-faster-r-cnn-r-fcn-fpn-7ec9& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&medium.com/@jonathan_hu&/span&&span class=&invisible&&i/what-do-we-learn-from-region-based-object-detectors-faster-r-cnn-r-fcn-fpn-7ec9&/span&&span class=&ellipsis&&&/span&&/a&&br&&a href=&https://link.zhihu.com/?target=https%3A//medium.com/%40jonathan_hui/what-do-we-learn-from-single-shot-object-detectors-ssd-yol

我要回帖

更多关于 微信支付费用 的文章

 

随机推荐