深度学习一点主观经验

来源:https://zhuanlan.zhihu.com/p/137927248

 

很多同学在使用深度学习的项目中,大概率会存在如下疑问:

  1. 项目中,绝大多数时候,几乎只是在加数据训练,但为什么自己做不好?
  2. 优秀的深度学习同学,到底和普通的同学,优秀在什么地方?

根据自己的经验,总结了几个关键点,适合我自己,但不一定适合别人。

大的战略方向是:工作中的项目应该与平时的学习充电要紧密联系起来。

但如何找到这个战略路径呢,下面提供个人的一点经验。

总的来说,工作中的项目问题越多、越细,你才能在平时看论文中,有强烈的针对性,提高阅读文献的高效性。

利用深度学习做项目,应该关心如下几点:

  1. 场景的理解
  2. 资料的收集
  3. 专题的研究
  4. 数据的研究
  5. 网络结构、loss及压缩的研究
  6. 量化结果及测试集的更新

下面分别进行解释。


 

场景的理解

场景的理解,包括的内容比较多。主要有要解决的场景中的特点、问题及pipeline。

有项目经验的人,应该有这么一个过程:项目初期的方案和最后落地的方案,有时候是两个完全不同的东西。但也是一步步迭代过程中完成的,而这个迭代的过程,逐渐的越来越理解场景的特点

下面举几个例子来进行说明

1)场景中的特点

在一篇关于人眼gaze的论文中,有这么一句话

为了充分利用头部和眼睛的信息,作者采用了coarse to fine的策略。如何充分利用头部和眼睛的信息,来提高gaze的精度,就是对场景的理解。

在一篇车道线检测论文中,有这么一句话

为了利用上车道线的几何信息,作者设计了一个检测消失点的分支,来提高车道线检测的精度的方案。

所以,在你要解决的场景中,需要仔细琢磨场景中有哪些特点,有什么先验信息,这些先验信息如何使用到项目中,如何使用到深度学习当中。

这样的例子很多,针对某个具体的专题研究,几乎每篇论文都在针对某个问题进行解决。

2)场景中的问题

工程项目一般是测试推动迭代的。测试过程中,会发现很多bad case。大多数bad case能够快速通过增加数据解决的,但实现中,有很多条件约束,不一定能够满足你的条件。比如预算不足、公司资源不向你倾斜、采集困难、标注成本巨大等等。

针对这些bad case可以作重点分析,它有什么样的特点。

在一篇3D人脸识别的论文中,提到表情的变化,会降低识别系统的精度。当然,这个是从bad case里分析并提炼出来的问题。

要解决这个问题,最佳的办法是采集更多更让人脸,这个成本和难度是非常大的。作者通过3DMM进行生成人工数据。

这个方法,也可以用到公开数据集挑战赛中。效果前几的,一般会发论文,很多也开源了。可以利用他们的需要,把测试集跑一篇,看看针对什么case效果好,什么case效果不好。针对不好的case,可以作重点分析,提出相应的解决方案。这样就有机会去做下发顶会的梦了。

实际的项目中,有些case结果不好,可能对整个项目的精度并没有太大的影响,有些影响非常大。往往很多时候,关注的是影响大的case。

针对项目,确实该如此,但为了提高我们自身的技能,也需要有点工匠精神,把这些问题,都可以归纳到你的问题集中。

但要注意的是,工作当中,是要有优先级的,这里只是让你有更多的疑问,这样带着思考去看论文,更有效

3)场景pipeline

很多问题,传统方法已经是有解决方案的,但无法应对各种各样的复杂场景。随着深度学习的发展,越来越多的领域使用了深度学习。直接通过端到端的训练不一定取到好的效果,那么我们可不可以通过出中间结果+后处理,或多个模型进行串行解决?

在一篇车道线检测的论文中

为了解决车道线拟合的问题,作者将问题拆成2个过程,学习俯视变换,将图像的车道线投影到地面,再进行拟合。

在自动驾驶里,为了得到3D bbox,有端到端的解决方案,也有分成很多步骤的方案。这些,都认为是可以改变pipeline的思想


资料的收集

针对场景的理解,提出了自己的问题,那又如何才能去解决呢?

往往直接搜索,是很难找到直接相关的论文。这里要说的是,临时的搜索是很重要的,但更重要的是平时的积累。

比如每天泛读1-2篇的文献,做个简要的记录。泛读时,可以针对领域,也可以不针对领域进行阅读。

下面是本人的记录样例:

需要精读的论文,再进行详细笔记。

每周都会过下以前的论文,看看能否得到启发。

有条件的,可以进行团队作战,每个每周看一定的论文,定期的进行交流和交换看,这样一年下来,必定收获巨大。


专题的研究

通过前两步,心中有很多的疑问,将有点相关的论文,归总在一起,进行对比分析。这样,理解会加深很多。当然有很多专题论文。

下面是一篇关于数据不平衡的问题的综述

我们要做的是,自己建立这样的专题进行对比分析。当然不需要像上面那么全,毕竟是发论文。是这个意思就行了。

比如,你在做一个手机拿到手上,检测手机的项目,那么可能存在一个问题,手机可能被遮挡的,只剩下一小部分,那么可以建立一个遮挡检测的专题。

如果当你看到拥挤场景中,论文说解决这样遮挡的case,那么你就可以归档到你的遮挡专题中,不一定非得专门来解决遮挡问题的论文。


数据的研究

数据的研究,往往很多人知道很重要,但不重视的问题。

以下一个虚拟对话场景:

老板:XX问题,怎么还没有解
员工:这个问题解不了
老板:为什么解不了?
员工:因为没数据
老板:为什么不去提数据需求
员工:我提了呀,需求都提给了数据组了。
老板:那你为什么不去追数据呢?
员工:数据量要求很大,人家说目前数据采集不完,标注不完,甚至需要数月或半年才能达到迭代需求,我还能怎么办。
老板:有其它方式得到数据呢?比如优化采集设备、自监督或半监督标注的方案呢?
员工:。。。(内心:关我什么事,没数据,又不肯花钱,怎么让我做)

实际中的项目,是有很多关于数据的方案

比如,公开数据集,仿真贴图数据进行预训练,高仿真数据等等

比如,使用多目相机,或深度相机进行自动标注等等

下面是一篇论文中,将rgb数据,充分用到的3d数据中

还有上面提到的表情问题,通过3DMM进行增强

在实际的项目中,一般要么从场景上去解,要么从数据上解,两者都不重视的,是不适合做深度学习


网络结构、loss及压缩的研究

这个不用说了,这个是很多人看论文的关注的重点。实际上,一篇论文的核心,是思路来源,及证明思路可行的过程。

有些论文,公开了这个过程,有些没有。但实验部分或多或少,都有点的,所以实验部分是最不可忽视的部分

一篇研究跟踪的论文,从他的一系列文献中,可以得到他的优化跟踪的过程,在逐步解决什么样的问题,来提高精度。

仔细研究他们的工作,收益非常大。遇到这样的论文,应该精读,好好琢磨下。


量化结果及测试集的更新

下面虚拟对话:

老板:模型提升的怎么样了
员工:我的测试集的精度达到99.9%
老板:为什么case的成功率为80%
员工:可能过拟合了吧
老板:你的测试集,包括了所有的测试组的测试case没
员工:哦,一直都用的同一个测试集
过了很多天:
老板:模型提升的怎么样了
员工:解了很多case,case完成率为99%
老板:为什么客户反馈问题很多
员工:我是通过测试了的,是有邮件证明的
测试:产品只给了这些case
产品:我只负责定义了功能case
负责人:我马上去增加这些case进行测试迭代

很多时候,我们需要不断的更新自己的测试,不仅仅是产品和测试的工作,算法人员也需要不断的更新新发现的case。

解决这个问题,不仅仅是测试样例的完备及测试环境的等效性。还要研发人员需要站在客户、产品的角度,理解我们的场景。

虚拟对话:

老板:模型提升的怎么样了
员工:解了很多case,case完成率为99%
老板:那你的模型的精度与case完成率是什么关系,怎么分析你的模型自身的精度对产品精度的影响
员工:不清楚
老板:那下一个指标可以多少
员工:99.1%
老板:为什么只提升这么点
员工:后面提升非常的难,符合28原则,需要优化好几个月
老板:能不能将精度换一种表现形式,达到能够用周来迭代
员工:没想过

自己负责的模型,需要模块测试,除了解case率,还需要针对模型的指定的指标进行量化,甚至不同维度的量化,会加深对问题的理解。

比如,研究prelu的影响

比如,研究跟踪中的overlap的影响

等等,这样非常多。

 

总的来说:工作的目的不是完成工作内容,而是加深对问题的理解深度,才能在将工作和充电结合起来。

 

喜欢历史的同学,欢迎关注本人的公众号和知乎:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值