2018.03.04更新我这些回答仅是从我的几份实习中总结出来的,只是写自己的看法与感受,当然有些同学跟我所做的内容有些差别,所以答案仅供参考啦在算法模型领域大概实习了1年多的时间了,突然看到这个问题,也顺便总结一下自己过去实习的经历。看到各位知乎大佬的答案,我仅从实习的这个角度来浅显地谈一谈我在工业界做算法和日常做小project之间的不同感受。在我目前的理解上,算法工程师分为两类。其中一类是偏研究型的算法工程师,例如复现paper,改善模型,发paper,出专利,这一类人才大都是科研大佬。第二类则是更加贴近业务的算法工程师,不如称为「算法应用工程师」。这一类同学主要是与业务同学进行搭档,通过现有的一些成熟模型来帮助业务同学解决问题。我所从事的主要是后者,即算法应用。在我的工作中,大多数时间都花在定义问题、数据预处理(包含ETL、特征工程、特征筛选等)、模型评估上,而模型的训练、调参等所花费的仅仅是少数时间。这也印证了吴叔叔(Andrew Ng)所说的“实用化的机器学习基本就是在做特征工程”。下面分别从这三个方面来具体说下:首先是定义问题。定义问题包括很多方面,例如业务需求定义、模型……
阅读全文2018.03.04更新我这些回答仅是从我的几份实习中总结出来的,只是写自己的看法与感受,当然有些同学跟我所做的内容有些差别,所以答案仅供参考啦在算法模型领域大概实习了1年多的时间了,突然看到这个问题,也顺便总结一下自己过去实习的经历。看到各位知乎大佬的答案,我仅从实习的这个角度来浅显地谈一谈我在工业界做算法和日常做小project之间的不同感受。在我目前的理解上,算法工程师分为两类。其中一类是偏研究型的算法工程师,例如复现paper,改善模型,发paper,出专利,这一类人才大都是科研大佬。第二类则是更加贴近业务的算法工程师,不如称为「算法应用工程师」。这一类同学主要是与业务同学进行搭档,通过现有的一些成熟模型来帮助业务同学解决问题。我所从事的主要是后者,即算法应用。在我的工作中,大多数时间都花在定义问题、数据预处理(包含ETL、特征工程、特征筛选等)、模型评估上,而模型的训练、调参等所花费的仅仅是少数时间。这也印证了吴叔叔(Andrew Ng)所说的“实用化的机器学习基本就是在做特征工程”。下面分别从这三个方面来具体说下:首先是定义问题。定义问题包括很多方面,例如业务需求定义、模型产出形式、变量的定义与衍生、目标y的定义等等。在大多数时候,业务方同学对自己的需求并不是那么明晰,很可能只是说“我需要一个简单的用户画像or某个客群识别or某个值的预测”,但是具体的细节例如这个模型未来的使用场景、变量的要求等等都是不清楚的,需要在不断的讨论与数据验证过程中进行定义与修改。甚至更多的时候要考虑到模型在未来业务变化的情况下是否能保持稳定的产出,尽量减小模型的衰减。其次是数据的预处理。这一步是非常消耗时间的,大多数情况下,数据并不是现成的放在面前,就等你跑个模型。我相信大多数学生党所接触到的机器学习都是拿到几张二维表,直接做个表连,然后调几个包,处理下特征,跑个模型。但真正在工业界(至少在我接触到的业务中),数据都是原始的、底层的,甚至是非结构化的,更甚至好不容易找到个相关数据源,但发现不维护了,数据质量得不到保证,就只能更换数据源。这类原始数据中充斥着各种脏数据,而我们的大多数工作就是在处理这些脏数据,让它们变成可以让我们的模型所使用的数据。其次很重要的就是特征的处理,俗话说“Garbage in, Garbage out”不是没有道理的。以前我做Kaggle的时候,总是想着,特征不用那么精细化处理,我随便调几个包,填个空值、做个特征排序就OK了。但其实在真正的业务中,是要对某一个特征的分布、数据的源头、加工逻辑有着严格的把控,一旦某个特征加工逻辑有问题就会导致结果非常差。由于我是做金融领域模型的,所以某些模型需要解释性,因此变量的筛选和特征工程就要做得非常精细化,否则即使模型效果再好,但没办法解释就无法上线(这也是为啥我们很少用DNN去做某些模型)。第三点就是模型评估。在学校自己做project的时候,模型的评估无非就是MSE,MAE,混淆矩阵,precision,recall,F1 score等等,在validation上看看这些值,画几个图,再调调参数。但在工业界里,模型的评估是非常重要的一个环节。模型评估包含模型本身的性能、模型稳定性、变量的稳定性、可维护性等等方面,还要结合具体的业务指标进行验证。因为业务是经常发生变化的,所以要对模型的衰减有一个预估,保证在业务可接受的时间内稳定运行。最后简单说几个和在学校做模型不同的地方:1.工业界基本遵循“奥坎姆剃刀”原则,在不牺牲很大性能的情况下,更加愿意选择简单、稳定性强、可解释性强、可维护性好的算法与模型。其本身并不是像kaggle那样要追求那么高精准的结果,一个算法和模型的完成要综合考虑到方方面面。2.特征工程十分重要!否则就是上面提到的“Garbage in, Garbage out”3.业务规则>模型。做业务支持算法的同学可能对此有体会,有时候几个资深业务专家的规则的结果甚至要强于模型。现在我做模型也基本是规则+模型一起做。4.数据分析很重要!这里包括对数据的理解、对统计学的认知等,一个好的算法工程师也一定是一个好的数据分析师。5.统计学很重要!!!6.对算法的原理、应用场景要非常熟悉,这也是一个算法工程师的基本功。
外行看目前的“人工智能”觉得牛逼啊,简直工作链的顶端。当时找工作时,也是奔着这种优越感去的。工作几年,这种有点莫名其妙的感觉彻底消失了。如果目前的算法水平能称为智能,那的确很人工。对内行来说无非是换了些模型,加了些技巧。但并没有智能到哪里去。流程和入门的逻辑斯蒂回归几乎没什么区别。其次,说说算法工程师最该自豪的模型吧。个人是大部分都能从底层推导公式。但其实工作中,一般是改改参数,或者调整特征图,bounding box啥的。感觉就是在一副完成的画上加上几笔就是你的工作。真正自己发挥的空间不算特别大,因为很可能你有思路,然后花了几周,出了结果,不好,怎么交代?最后,说说成果。之前面过一家顶尖的公司,面试官比较傲,做检测的。但吃惊的是除了检测他什么都不会,我也不明白为什么能这样。面试时却感觉高高在上的感觉。我的确不太明白,用机器抠图到底有什么优越感。其他的算法一样没有什么高下之分,甚至任何技能都一样,都是技术,难道抠图就比烧一手好菜厉害?烧菜烧的好,最起码还能让她开开心心的,若对谁都因为你是算法工程师觉得了不起,真是无处不就露出一种猥琐的自卑。别问为什么,因为我经历过。所以,我真劝某些并不……
阅读全文外行看目前的“人工智能”觉得牛逼啊,简直工作链的顶端。当时找工作时,也是奔着这种优越感去的。工作几年,这种有点莫名其妙的感觉彻底消失了。如果目前的算法水平能称为智能,那的确很人工。对内行来说无非是换了些模型,加了些技巧。但并没有智能到哪里去。流程和入门的逻辑斯蒂回归几乎没什么区别。其次,说说算法工程师最该自豪的模型吧。个人是大部分都能从底层推导公式。但其实工作中,一般是改改参数,或者调整特征图,bounding box啥的。感觉就是在一副完成的画上加上几笔就是你的工作。真正自己发挥的空间不算特别大,因为很可能你有思路,然后花了几周,出了结果,不好,怎么交代?最后,说说成果。之前面过一家顶尖的公司,面试官比较傲,做检测的。但吃惊的是除了检测他什么都不会,我也不明白为什么能这样。面试时却感觉高高在上的感觉。我的确不太明白,用机器抠图到底有什么优越感。其他的算法一样没有什么高下之分,甚至任何技能都一样,都是技术,难道抠图就比烧一手好菜厉害?烧菜烧的好,最起码还能让她开开心心的,若对谁都因为你是算法工程师觉得了不起,真是无处不就露出一种猥琐的自卑。别问为什么,因为我经历过。所以,我真劝某些并不喜欢数学的算法工程师承认吧,你们只是因为这行工资高才喜欢的。============================================================补充一下,一些人觉得工资高不就是了。关键就在这里,其实我当时找工作的时候很难受的一点,一般招聘上都是3-5万,其实看看其他的,类似高级工程师之类的,人家工资也是这个范围,而对于算法工程师来说,语言可能不必那么精,但要求绝不低,外加数据挖掘,机器学习,深度学习这几个,还要掌握sklearn,tf,caffe,好点的还要cuda之类的,更何况要看多少本数学相关的书,面试几乎都要推公式,工资还和3-5年开发差不太多。所以光提钱,真并不觉得特别有绝对的优势。性价比在这么看来,貌似真不那么高。其次,假设工资高,那么能高多久又是一个问题。十几年前,普通工人也就是目前的互联网的感觉,也是收入高,我爸为此还特地去学了高级技工之类的东西。可是现在呢?所以,现在高,你沾沾自喜,那么你敢保证10年后这东西还能火?更何况目前发展势头如此猛烈,新闻上都说,高中生都开始学python,外加人工智能基础,他们父母也可能首选让他们读计算机系,到时你我30多岁大叔和他们竞争?这还是在算法没多大改变的基础上,如果又出来一个很牛逼的算法替代了深度学习,你的确愿意学并且也学会了,但公司是相信你还是相信年轻人?所以对于我的确已经在准备其他东西作为第二职业,希望有朝一日能替代吧。我个人是不太信任自己未来依然能扛得住这种发展势头。谁知道几年后这些东西会不会只是过眼云烟。愿到时希望你我别在北京某某高楼的楼顶见面,相顾无言,惟有泪千行。只是个人观点,居安思危,警钟长鸣,理性探讨。
体验有很多,个中心酸不足为外人道也。1. 算法工程师与项目经理间的矛盾因为机器学习发展太快,整个行业还没有储备足够的项目经理。因此导致的结果有二:工程师转型做项目经理:优点是了解技术,但往往缺乏商业洞察力,抓不到产品方向非算法背景出身的项目经理:以为算法和模型可以解决所有问题,对于项目的实际困难缺乏应有的了解与合理的评估项目经理需要理解:算法不是万能的,机器学习模型不总奏效,有一定的概率失败。而从传统行业的项目经理角度来看,很难理解为什么一个“代码项目”会失败,他们以为只要花时间按部就班的实施即可。然而任何数据导向的项目都有可能会失败,原因有很多:数据量和数据质量有问题缺乏合适的算法模型训练需要过高的代价,计算力不够因为各种bug而导致的无法收敛2. 量化模型的效果与个人发展另一个使得算法工程师落入尴尬境地的问题是:很难量化模型为公司带来的直接收益。换句话说,对于算法工程师制定KPI是比较难的一件事,而算法工程师很难因此获得公司老板的嘉奖。换句话说,很多时候往往很难说“模型A为公司带来了X新客户,创造了y价值”。因此对于工程师来说,更加重要的是如何“包装”自己的模型,至少要宣传自己的模……
阅读全文体验有很多,个中心酸不足为外人道也。1. 算法工程师与项目经理间的矛盾因为机器学习发展太快,整个行业还没有储备足够的项目经理。因此导致的结果有二:工程师转型做项目经理:优点是了解技术,但往往缺乏商业洞察力,抓不到产品方向非算法背景出身的项目经理:以为算法和模型可以解决所有问题,对于项目的实际困难缺乏应有的了解与合理的评估项目经理需要理解:算法不是万能的,机器学习模型不总奏效,有一定的概率失败。而从传统行业的项目经理角度来看,很难理解为什么一个“代码项目”会失败,他们以为只要花时间按部就班的实施即可。然而任何数据导向的项目都有可能会失败,原因有很多:数据量和数据质量有问题缺乏合适的算法模型训练需要过高的代价,计算力不够因为各种bug而导致的无法收敛2. 量化模型的效果与个人发展另一个使得算法工程师落入尴尬境地的问题是:很难量化模型为公司带来的直接收益。换句话说,对于算法工程师制定KPI是比较难的一件事,而算法工程师很难因此获得公司老板的嘉奖。换句话说,很多时候往往很难说“模型A为公司带来了X新客户,创造了y价值”。因此对于工程师来说,更加重要的是如何“包装”自己的模型,至少要宣传自己的模型是有价值的,不然很难得到升职加薪。抬头看天,低头看路。要提防钻到模型中,而忽视了个人发展。钻研技术与获得匹配的嘉奖是合理的,“工匠精神”应该被嘉奖,而不该仅是默默奉献为人抬轿,甘愿做螺丝钉。3. 实用性与性能间的取舍 做机器学习的人都绕不开解释模型,而很多时候一个模型是否能被管理层接受完全取决于他们对于模型的信心。人是主观的,很多时候模型效果再好不能解释也会被毙掉。因此另一个做算法的体验就是,一定要能在性能与解释度上找平衡,不能一味追求模型性能良好。在很多情况下,决策者愿意牺牲掉一定的性能而换取更高的可解释度。因此直到今天,很多算法岗都还在用逻辑回归。当然,这个是分领域的,做视觉和语言的一般走的快一些,而传统行业的算法更加保守。所以作为一个工程师,应从全局角度出发,防止沉迷于性能,而忽视了实用性。另一个异曲同工的考量是模型精度与运算速度的取舍。举个简单例子,融合多个模型可以达到高精度模型,但代价是运算开销成倍上升。在很多精度第一的情况下,那么我们可以接受这样的代价。当运算开销更重要时,我们应该优先选择简单但性能尚可的模型。因此要灵活,不要追寻定式。4. 科研创新与应用 -“落后的工业界”不少答主也提到了学界前沿算法与实际应用间的断层,即很多前沿算法并不实用。那是因为工业界比学术界更加落后?还是因为学术界都是“骗经费”的呢?都不是,单纯是因为研究成果商业化周期的滞后性。学术界的研究成果,在能够商业化前还有很长的路要走,如下图所示一般要经历多个步骤并且不同的环节之间都有“门槛”,很多研究成果往往走不到商业化那一步。而能够成功商业化的研究成功往往都是历经考验,被大家认为真实有效,并可以为社会提供价值的。检验这个过程一般有漫长的周期,短则几个月,长则很多年,这个周期给了很多人错觉工业界很落后。其实不然,工业界只是更加保守。和有政府拨款的研究机构不同,企业的主要任务是盈利而不是探索科技的边界,同时还得考虑到人力成本、产品痛点等复杂的因素。学术界成熟的算法和成果,只要能在应用领域上落地,很快就会被商业化走入我们的生活。换句话说,学术界的成功经过自己的内部筛选和沉淀,能够存活下来的就会进一步被商业化。原图链接:Innovation Diffusion From University R&D [1]可能短时间内某个领域学术界走的快一些或者工业界走的快一些,但总体来讲很少有极端滞后性。作为一个已经身在工业界的人,我们也紧跟学术界的潮流,尽量了解下一个可能大热的技术是什么。很多公司还会安排员工去参加学术会议,争取将可靠的技术尽快商业化落地。从算法工程师的角度来看,从成本控制的角度还是优先尝试成熟的算法。在缺乏成熟算法的情况下,也不妨“追逐一下”学界热点。如果更进一步,算法工程师很适合开展研究,反哺学界。现在不少前沿成果都是企业的,如Google,因为其科研投入和天生的数据优势。更多相关讨论可以参考[2]。5. 数据提取、整合与清理 - 全栈工程师?另一个广为人诟病的就是“建模五分钟,清理数据两小时”。更加极端的是因为公司的定位,导致算法工程师不仅仅需要建模,还需要包产一条龙,因此对于算法工程师的期待越来越高:熟悉各种数据库以及分布式计算:方便从多个平台收集数据熟悉各种数据清理操作以及算法模型的数学原理了解可视化:可以展示模型成果等接触过模型部署上线:拥有架构经验和部署经验当然,这个和公司规模有关。算法工程师在大公司会被继续细分,做到专精。根据公司规模,对算法工程师的技能期望有一定的差异化,一个粗略的分类见下图。大公司一般更需要专精岗位,一般要求你在特定方向出类拔萃,可以适当放宽其他要求。比如可能要求你深入理解机器视觉,但不要求你精通Spark或者自然语言处理。而中小型公司因为资金和能力的限制,更需要通用型人才,职位一般也分得没那么细。正所谓“我是革命一块砖,哪里需要往哪搬”。在中小型企业,公司希望机器学习工程师可以独挑大梁,完成从数据收集、清理、建模、调整、到部署上线,甚至维护和更新的一系列工作。因此在大部分中小型公司的机器学习工程师也做了全栈的工作,捎带着把网站做了的也不是没有...6. 成为一个有价值的算法工程师 - 1+1>2 虽然掌握每一个技能似乎都不复杂,但机器学习工程师的精髓之一就在于整合,即掌握以上所有的操作。当你可以把一系列技能掌握时,你一个人就是一支军队。更为重要的是,作为一个智力密集的岗位,从业者的质量比数量重要,一个厉害的算法大牛比一百个新手工程师更有意义。给出一个简单例子以供参考,比如你在一家互联网公司想做一个信用卡欺诈预测模型,希望可以实时检测信用卡盗刷。基本的流程:了解可使用的数据范围。比如你们有客户的基本信息,消费的信息(地点、时间、金额),消费场所的信息(是否是欺诈高发行业)。收集和整合一切可用的历史信息,对数据进行必要的清洗。使用可视化技术对数据进行初步分析。可视化可以在建模前帮助你节省大量的时间。考虑要使用的模型和建模。以这个问题为例,如果我们把盗刷考虑为独立事件,那么可以简单的用普通分类器,如逻辑回归先建个模型试试。我们也可以把盗刷考虑为在时间轴上的事件,即你的消费历史会影响盗刷的可能性,那么就要考虑时间序列的上的相关性,可以使用循环网络或者把时间作为一个输入用于建模。对模型进行回测和验证。在正式交付上线之前还需要进行大量的验证、微调、和性能优化。如果模型A需要3分钟做出预测准确率为99%,而B模型只需要3秒但准确率是98%,可能我们会选择模型B。将预测模型部署上线,并进行后期维护。随着收集到了新的数据,对模型进行线下更新训练并替换线上的模型。不难看出,这一套流程中处处都要求极好的工程能力。一个人很容易可以拥有其中一部分技能,但很难同时掌握所有的技能。这解释了为什么高端的机器学习工程师“洛阳纸贵”,这也是检测你是否合格的一个标准。更多关于机器学习工程师技能的讨论,可以参考[3]。7. 总结不难看出,算法工程师所面临的挑战与机遇都来自于如何更好的对模型进行解释与包装。算法的目的是为企业创造价值,而不是单纯实现高精度。从职业角度出发,要在干活的同时学习如何“推销自己的工作”,防止受到不公平的对待与职业天花板。从技术角度来看,追求专精与完整都有一定的优势,应根据个人情况灵活决定。专精型人才更适合大公司,而全栈型人才适合小公司。从某个角度来看,全栈型从业者的空间更为广阔,但不必为此追求面面俱到,容易狗熊掰棒子。话说回来,尽管算法岗是当下最火热的求职方向,但降温总会发生,可以参考最近的讨论 [4]。因此不必执迷于岗位名称和现阶段的高待遇,做好自己最为重要。毕竟退潮终会来到,那时才方见谁是裸泳。[1] Innovation Diffusion From University R&D[2] 微调:现在机器学习工业界和学术界的差别越来越大了吗?尽早实习和踏实科研各有什么利弊?[3] 微调:怎样才算是一个合格的机器学习工程师?[4] 从今年校招来看,机器学习等算法岗位应届生超多,竞争激烈,未来 3-5 年机器学习相关就业会达到饱和吗?
2017年,我做了一年机器学习,数据挖掘相关的工作。 工作体验和其他答主完全不一样,所以准备写一下部分难忘的经历。 可能在大公司做机器学习相关的工作容易很多吧,比如变量是现成的,甚至 标签也是现成的。 于是工作的日常就是抽取一些变量和标签进行建模,调整参数之类。每天不停的跑数据。 但是我们的工作完全不一样。 我们的目标在业务上是反欺诈,现有的特征不能使用,因为已经有建模的团队了。 为了提升反欺诈的效果,我们只能从数据角度出发,挖掘出更多更好的变量,不用现有的任何特征,目标却是比现有的模型效果更好。 了解了状况之后,于是开始做关系网络,因为这块是公司空缺的领域,而且整个行业来看的话,做的好的公司也没有几家。 说干就干,工作从研究数据类型,关系, 数据清洗开始。 遇到的第一个问题是 sql, 无法构造成图结构。 于是自己动手 写代码用 java 读写 hdfs 数据,在内存里面构图,计算特征。尽管搞到一台256G内存的机器,依然遇到 内存不够用的情况。 查的原因是 需要加载到内存的边太多,几亿条。 接下来,优化数据结构的内存开销,能用short 就不用integer, 能用l……
阅读全文2017年,我做了一年机器学习,数据挖掘相关的工作。 工作体验和其他答主完全不一样,所以准备写一下部分难忘的经历。 可能在大公司做机器学习相关的工作容易很多吧,比如变量是现成的,甚至 标签也是现成的。 于是工作的日常就是抽取一些变量和标签进行建模,调整参数之类。每天不停的跑数据。 但是我们的工作完全不一样。 我们的目标在业务上是反欺诈,现有的特征不能使用,因为已经有建模的团队了。 为了提升反欺诈的效果,我们只能从数据角度出发,挖掘出更多更好的变量,不用现有的任何特征,目标却是比现有的模型效果更好。 了解了状况之后,于是开始做关系网络,因为这块是公司空缺的领域,而且整个行业来看的话,做的好的公司也没有几家。 说干就干,工作从研究数据类型,关系, 数据清洗开始。 遇到的第一个问题是 sql, 无法构造成图结构。 于是自己动手 写代码用 java 读写 hdfs 数据,在内存里面构图,计算特征。尽管搞到一台256G内存的机器,依然遇到 内存不够用的情况。 查的原因是 需要加载到内存的边太多,几亿条。 接下来,优化数据结构的内存开销,能用short 就不用integer, 能用long 就不用 string. 甚至自己做数据做分片。 计算特征的时候,仅仅加载该分片需要的所有数据到内存里面来。 终于第一个里程碑做到了, 特征有了, 标签有了。 从开始工作到第一个模型的建立,中间花了1.5个月。还好模型效果显著,得到了老大们的支持。 既然模型效果好,仅仅用了 xgboost 就效果显著了。那么就努力上线啊。这个时候才知道上线才是最大的困难。因为这个模型上线需要优先做到实时关系网络的构建。 关系网络数据存哪里?试过 Neo4j , OriginDB, Titan 等图数据库。 花了3个多星期用来写各种demo, 测试逻辑准确性,测试性能等等。 得到的结论是没有一个开源的图数据能够满足需求。 捉急啊,有价值的模型居然因为技术实现问题难以上线。总不能放弃吧。 最终决定只把边这一种数据保存到 HBASE 表里面。 让HBASE 帮我解决存储问题。 采用Flink 实时流框架,写了一堆代码暴力的往 HBASE里面写入 增量的边。 历时2个多月,完成 FLINK + kafka 做到实时关系网络的构建, 延时不到1秒。 并发的进程数量高达30多个。 后续还需要做 图的完整性测试,时效性测试,测试ok 后。 还需要自己写基于关系网络的特征工程,模型预测,预测结果还需要上线观察一个月。 真正意义上的上线都已经10月份了。从2月底开始尝试去做,到做成上线一共经历了7个月。 整个过程下来,建模的工作不超过2周。流计算,实时关系网络构建,特征工程,特征准确性测试等技术工程实现上花的时间占用99%。一条龙全部自己做。而业务使用上,只是到 hbase 的一张表里面根据 rowkey 拿模型预测分就好了。却无法感知上线路程之艰难。 模型的实际效果好,为之辛苦值得。
CV DL:1. 接到一个项目之后心潮澎湃,脑子里马上闪现出faster rcnn、resnet、mask rcnn等各种牛逼的算法。2. 结果发现图片都不知道存在哪……于是反馈给产品经理,开了一通会议,确定图片数据库在某个位置,准备读表爬虫!3. 结果发现表的信息是乱七八糟的,一张表里面有图片链接,但没有这个图片的标签信息;另一张表里面有标签信息,但又没有图片链接。找了许久才发现两张表可以用图片id来结合,行吧,不就是查表的事情,写一堆代码把这些信息整理起来吧!4. 花了一天终于整理出图片链接的csv了,交给爬虫组爬了三天三夜,期间在YY到时图片下下来之后可以用什么算法。5. 拿到图片了,发现类别有了,但是bbox、关键点坐标信息都没有啊!咋整,上网找了个labelme自己整个1000张用着先呗,然后花了两天整了少量图片出来,期间还要劝服同事帮忙。6. 剩下的图片交给标注员去标注。接着就是根据前两天YY到的算法,上github找找有没有现成的模型,然后git clone。修改了一点输入输出,用公共数据集顺利跑通!看来还是不错的嘛!7. 回头把自己的数据放进去试试,简直一塌糊涂,那是当……
阅读全文CV DL:1. 接到一个项目之后心潮澎湃,脑子里马上闪现出faster rcnn、resnet、mask rcnn等各种牛逼的算法。2. 结果发现图片都不知道存在哪……于是反馈给产品经理,开了一通会议,确定图片数据库在某个位置,准备读表爬虫!3. 结果发现表的信息是乱七八糟的,一张表里面有图片链接,但没有这个图片的标签信息;另一张表里面有标签信息,但又没有图片链接。找了许久才发现两张表可以用图片id来结合,行吧,不就是查表的事情,写一堆代码把这些信息整理起来吧!4. 花了一天终于整理出图片链接的csv了,交给爬虫组爬了三天三夜,期间在YY到时图片下下来之后可以用什么算法。5. 拿到图片了,发现类别有了,但是bbox、关键点坐标信息都没有啊!咋整,上网找了个labelme自己整个1000张用着先呗,然后花了两天整了少量图片出来,期间还要劝服同事帮忙。6. 剩下的图片交给标注员去标注。接着就是根据前两天YY到的算法,上github找找有没有现成的模型,然后git clone。修改了一点输入输出,用公共数据集顺利跑通!看来还是不错的嘛!7. 回头把自己的数据放进去试试,简直一塌糊涂,那是当然的。现在就得回去仔细研究论文,看看作者的各种实现细节,然后魔改模型finetune。再次测试,咦,有点效果喔~8. 这时候领导紧急开了个会议,说现在目标有点改变,我们往另一个方向走吧。9. 开始研究这个领域的所有经典论文,每篇论文都看上好几次,看到最后几乎把整个领域的主要脉络摸清了,然后磨刀霍霍向模型!10. 国际惯例先找github,但是很不幸我想要的算法并没有开源实现,那我来做第一个吧!11. 马上照着菜单(论文),啪啪啪构建proposal模型,各种自定义层结构,特殊的loss function,菜单中提到的weight decay、learning rate decrease,几乎把论文所有角落的细节都翻遍了,目前为止进度还行,但是慢着!论文里提到的一个层,作者只是一笔带过了,没详细说明这是怎么实现的!12. 都到这地步了还能放弃?开玩笑,立刻照着related work那一章提到的所有论文寻找线索,于是各种谷歌github知乎stackoverflow,终于弄懂了这个层的数学原理!13. 好不容易把模型复现出来了,好家伙,开始用标注员准备好的数据来训练。14. 慢着,这loss曲线不对劲啊?为啥会是直线,而且一轮收敛?不不不,肯定哪里出了错误,我得把代码重头检查一遍!15. 费好大劲终于找出bug,代码也顺利跑通了,然后进入各种调参无限死循环。16. 老板:那个,我们决定还是换个方向吧,需求变了。17. 。。。。。。。。。算法工程师时常自嘲成调包师,而且外行人听多了就还真以为调包很容易,深度学习和其它机器学习算法不同的是,一篇新论文算法的出现都要写很长的代码去复现,而且前提是你深刻了解作者的思想,蛋疼的是,有时候作者不会把所有细节都告诉你!!!容易吗我!