发表时间:2022-03-25来源:网络
不小心刷到,结合我的学习及工程化落地AI项目的过程,强答一波。
既然是自学,标准回答的话,其实要准确回答这个问题其实还应该需要更多背景资料:
教育背景?当前是学习还是工作状态,用于自学的时间有多少?
自学的目标是仅仅爱好,还是为工作所需,还是为了下一次 offer 的 high salary?
计算机编程相关背景知识水平及比较熟练的语言是?
线性代数以上的数学知识还有多少能记住的?
毅力有多大?能吃多少苦?
以上背景信息对于准确回答问题很重要,或许除了最后一条,其他的也不那么重要,下面开始我的故事。
先简单的说下个人背景情况:
77年生人,2000年大学毕业,本科,工业自动化专业。
自认为高考发挥失常(在当地属于重点中学,平时数理化稳居全班前五水平,文科有点偏,但保证及格以上没问题,高考结束,估分后物理、化学老师异口同声的问我“你是不是把A/B卷记错了,有没有换过来估一下”)勉强上了甘肃工业大学(现在叫:兰州理工),非985/211 。
工作后,先做的PLC组态这些专业对口的工作,后来公司要做软件,逼我改了方向,转行软件。但是,公司看重的是我“机灵、学东西快”,而不是指望我去撸代码,所以我离技术很近,又离核心代码很远。真实定位,好听一点叫:咨询顾问,正常一点叫:需求顾问(现在流行叫:产品经理),通俗一点叫:实施工程师。项目管理、需求、现场改改Bug,加点莫名其妙的需求,就这样眉毛胡子一把抓的工作任务干了几年。
鉴于我的“机灵”,没把自己干“废了”。不让写代码,不见得我不能自己学么;不碰核心代码,不代表我不能研究设计和架构的事情么。程序就是为了解决问题,那我就把问题(需求)理解透彻,确保需求不反复,我在给你交需求的时候,还能告诉你这个需求怎么实现,要注意什么,需要同步动别的哪些部分,加什么字段,状态流转怎么定义,哪些要状态要做互锁……于是,我不小心练就了公司程序员口中的“神功”:出了Bug,直接能“猜”到看什么地方的代码,大概是哪里的处理逻辑有问题,或者哪里处理不对,加个判断就好了。所以,他们喜欢写我提的需求(反复几率非常低),改Bug喜欢拉着我一起。
再后来,鉴于这种“用户、项目、产品、设计、技术、运营”都懂的“复合型”,必然的走向了技术管理这条路。
再交代下自学AI的背景及动机:
16年入职公司,视频相关的方向,产品/项目上都有算法的需求,公司之前的算法都是拿来主义或者买来主义,SDK/DLL/API无所谓,不求最好但求成本低。但是由于行业特殊,项目上需要定制的算法,公开市场是没有的,找人合作对价太高,整个团队就在讨论这个有问题、哪个没测试、还有几个算法没着落,没有结论,人心要散。
入职是总助,协助总经理管研发(避免空降没法开展工作,可以扛着老大的旗帜),然后是产品研发总。也就是说从入职开始,上面的这些问题,基本就是我的问题了,不管别人是看笑话、看热闹还是隔岸观火,我的选择只有两个:要么干出来,要么滚。
更不幸的是,我之前并未很深的接触过视频行业,更别提视频相关的算法问题。
人都倾向于自保,面对这种局面,正常的管理者的做法:梳理任务、分解任务、安排工作、定KPI,要结果。安排的人搞不定,那就向上要HC,招能搞定的人进来搞定。
但这种“套路”化的管理“艺术”不是我的风格和做事方法,我选择的是“寻死”的一条路。
项目情况:
时任项目经理的同学,内部开会张嘴就是“你tmd的……、我tmd的……”搞不下去了,要辞职,合同上的“项目经理”往后缩,死活不顶上去,那行啊,项目经理我来。
给这个“小组长”安排点活,不干:你让我干我就辞职,我只干自己选的这点事。不干就不干,你选的这点事我也能干,你走呗。
换下一个“小组长”安排活(人家的靠山是另一个销售副总,研发总监人家都都不鸟),这个一看形势不对啊,新人这么硬刚不吃威胁这一套啊,半推半就接招了(过了几个月,找到工作了,还是辞职了,但是给我了非常重要的缓冲时间)。
再换下一个安排活,这个更看明白形势了,只能主动表态干了(嗯,三个月后找到工作辞职)。
赢得了时间,我就一边跟项目,参加用户那边的项目每周例会和日常交流,深度的去了解、理解这个项目。白天干工作,晚上再精读多遍项目合同和技术协议,所有不懂的关键点全部Google弄清楚是什么。
就这样,摸清楚了项目的任务,视频领域的核心知识点和专有技术名词都是什么,也基本弄清楚了公司有什么“家底”,有哪些可选方案。
最后发现,大多数的算法基于现有合作伙伴提供的东西,是大概率可以实现的,但是问题是:因为是新东西,之前研发内部各山头在扯皮,怕搞不定担责任,都往后躲。
那只能让你无处可躲才有可能把这事解决了。
明确到某个组,明确时间,要什么资源我去协调,你负责做事,搞定功劳是你的,搞不定所有责任我来扛。然后,果不其然,验证结果是搞得定的,而且证明自己没必要再写MQ的服务,人家那边提供了。
然后,技术总监和我有一个让我心惊肉跳的对话:没想到他们还真搞定了啊,MQ我早就知道有,他们弄是已经确定不用的另一家没有,所以定的方案里要自己实现。
技术总监啊,一个公司技术一把手,项目眼看要砸锅了,心安理得的在看热闹。
有解的问题基本都有解了,下面就是无解的问题怎么变得有解了,也就是我入坑AI的开始。
下面说说我做了哪些事情。
16年国内的人脸AI公司创业已经比较火了,AI也逐渐接替了AR/VR成为了新的风口。
随着对项目需求的理解,对视频行业的理解,对视频分析技术现状的认识,再加上过去多年稀奇古怪的自学的一些看似不相关的乱七八糟的知识积累,就Google(不要问我为什么Google,以及怎么Google,我又不是去找医院,怎么能用主流搜索引擎呢。)各种能想到的关键词,了解有没有能借鉴的,不小心找到了yolo,SSD,茅塞顿开,那一刻似乎一缕阳光照进了我办公室(帝都,办公室窗户朝正北,哪里有阳光照进啊)。
项目上需要解决的问题,似乎可以抽象为:目标检测+OCR+目标状态变化检测。这就算遁入AI之门的契机。
但是,AI这么高大上的,而且都是PhD在玩耍的事情,有那个本事去搞一搞么???
花了一个多月的时间,每天下班看到12点左右再撤退,算是弄大概猜明白了什么是:目标检测、机器学习、深度学习、模型、训练、数据集、lr、深度学习框架,计算机视觉又解决了哪些问题。16、17年不像19年啊,别说中文的入门学习资料,就是英文的能让小白入门的资料都不多,而且我还面临一个问题:
项目是有时间限制的!(这句话不理解,请搜搜PMP的东西)
Caffe虽好,但是开发语言要新学,而且是学术界用的多,死活没找到怎么去项目落地工程使用的案例;
Darknet虽快,也是CPP的,但是资源少啊。
嗯,基本上我估计就是这样:沙漠中看见了一个水源,但是是海市蜃楼的那种感觉。看得见,得不到。
开始试着去深入看Caffe,准备用Caffe去尝试的时候,时间也到了17年初,不死心的还是在花时间去找更多的可能性,看到了Tensorflow,看到了官网的入门教程。几个月的努力和积攒的那点深度学习的名词和模糊的概念,发现Tensorflow简直对小白太友好了,总算有能多少看懂点的东西了,而且关键的是还有比较完整的Demo教程。
Google出品,又那么新手友好,果断决定了就入此坑,别的先不看了。
PS:在这里插一句:这几年看着http://tensorflow.org的一遍遍的改版和增加的内容,还有Google技术博客等官方平台增加的内容,对于Google真的只能用“卧槽”来形容。不去争论作恶不作恶的问题,人家为未来商业化铺路控制领域话语权的问题,就讲对于开源的投入和热情,只能打开一次,卧槽,又更新了,卧槽,又增加新的内容了,卧槽,老内容又改动的更友好了。
再想想,前几天回答的一个问题,一个企业的“高度”真是那么简单就能达到么?
基本觉得想明白了问题的抽象,也选好了技术框架,下面面临的问题就是:
让谁来干?大半年和团队的磨合和熟悉,也基本清楚了能力及性格,我的判断是这事情交出去,不管安排给谁,基本都面临两个问题:
1、不会啊要从头学,你让我干,我就辞职;基于这个认识和判断,我做了一个决定:谁都不安排,就我一个人自己干。能干出来,算我狠,干不出来,我认怂,说明视频和算法这碗饭我吃不了,该滚蛋就滚蛋。
我学习的顺序:
首先要说的,我去入坑学习深度学习这件事,第一是工作需要,第二有极大压力,第三不求甚解关键是先弄出来,第四时间是我的敌人(项目我要参与管理,研发/产品还要要管,日常事务性工作要做,项目上线的日子就不远了),所以我的学习顺序应该是不算非常合理,但又不是没道理的。
基于自己对任务的定义,要做可行不可行的验证,第一步我先尝试去做分类。
整个过程,和所有当时知道的知识点,就是参考了一篇博客(好像是google技术博客,记不清了),名字大概是:“learning deep learning without a phd”,呵呵,我恰好是渣渣本科,without PhD。
百度/Google了大概600张图片(这就是行业应用的特殊性,找点图片都挺难),照这最简单的图像分类的教程,就靠这点图片,分了4类开始做转移学习,翻朋友圈翻出来点当时的记录(这些图是夏天的了,好像是准备DD的PPT用的了,已经增加了OCR部分的Demo):



当时为了“显摆”自己训练的模型还是靠谱的,特意拿google的1000分类的模型做了对比,最后一张也加了OCR的Demo测试。
嗯,就是这么无知无畏,目标检测还没弄明白呢,OCR也同步下手整了。
可以看到,当时的图片都是大小不一的,为啥呢?因为我当时根本不懂还有归一化这事情。
硬件平台么,自己的12年的8G+i7 2.0的Macbook Air(当年高配哦),为啥不用GPU,心里就没底,哪里好意思向公司伸手要钱配硬件?
识别搞定,下一步就是目标检测了。
在公司高管群里把做出来的东西show了下,然后就提要求了:要销售、工程、实施人员在现场给我拍点集装箱的照片回来,数量越多越好,怎么也要来个3000张(嗯,这就是多,再多我也不敢提要求啊)。
对了,Python之前算是看过,也学过一点,基本代码还是能写的(这也算是好奇心重,稀里糊涂做了点技术储备吧。)
等啊等,终于等到了一批照片,照片来了我发现傻逼了。
因为我自己都不知道对数据集的要求,自然没法对照片提要求,拿回来一看五花八门。
虽然我不知道归一化,但是凭直觉我觉得照片大小不一致肯定不是一件好事,于是就先把图片resize到一样尺度(Mac好啊,这种事脚本都不用,一个工作流就搞定)
如果从头跟着tensorflow官网教程跑过的同学,就应该知道上面的这个分类的转移学习,是直接把原图片丢进去训练的,并没有转成TFRecord。标注工具么,找了LabelImg,标成VOC格式,然后再转呗。
就那点Python水平,也很久没有正经写代码,过程还是有点心塞啊。这时候就体现出来有独立办公室的好处了(嗯,咱是高管,领导呢),有沙发,再买个行军床回来,带过来一套出差用的洗漱用品,完美。于是就开始了一段时间的白天上班晚上炼丹的日子。
老旧MBA,那点CPU的算力,训练迭代简直就是煎熬,看着CPU温度没事干就飙到快100度,手都不敢摸了,太烫了。

嗯,在我设计的场景中,我觉得是需要有这4类。
做到这个份上,我已经听到了办公室外的“声音”:没想到还真给他做出来看起来能用的样子了啊。
毕竟要做实时视频流的验证才行啊,申请弄了个双1080Ti的机子,京东两万多搞定,回来享受了一把组装机子的快乐。

然后弄了点视频回来,做视频流的验证:




我的从0开始入门AI的过程大体如此。
40岁,0基础,代码还是渣渣水平,也不是什么名校学霸,就一个本科,这个起步基础真不高吧。
我也不是一点优势没有,多年的摸爬滚打,对于软件工程的深刻理解,思考能力,对于问题的抽象能力,时间管理能力,解决问题能力以及带兵打仗的能力(如果我没有及时、快速解决团队战斗力的问题,哪里能有心思去无数个通宵尝试解决有可能失败的问题)。这些软实力,是时间积累的财富。(顺便喷一下35岁就是裁员目标的问题,软实力都是靠时间和无数战斗积累,年龄不到,很多事情不是不能干,但是谁去承担年轻带来的风险)
正式回答题主问题:
除本题目下各高赞答案给出的学习路线、方法以及参考资料外,学习任何新知识,最重要的都是:
动机以及毅力,
付出以及方法,
解决什么问题。
毕竟,技术的本质是为了解决问题,而不是为了“炫技”。
下一篇:零基础学习编程,应该做什么?
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14