研一上学期实在是太闲了,课少,自学能力又差,一学期下来感觉没学到什么东西。这学期索性就在京东找了个实习。到周五离职的时候,算了算,自己在京东呆了也有半年了。现在想想,这半年真是一晃就过了。半年前自己不知道该干什么、学什么的小白,现在总算是找到了感兴趣的方向。
这半年一直在做图像检测,更准确的说应该是文字检测。印象最深的事儿,想想有那么两件。
之前对图像处理丁点不懂,只能从最基础的一点点开始学。第一个月基本都是在学习。这个项目文字检测的方法主要有FCN和MSER两种。Mentor的意思是想让我负责FCN检测文字这块。所以就开始看FCN的论文,跑通原有的FCN程序,逐步的理解代码。当然,所有的程序都是在Linux服务器上跑的,这让从没用过Linux的我确实头疼了一段时间。当时的项目还是身份证识别。之前由于没有人工的标注数据,所以就用CTPN的方法,标注了两万张身份证数据,训练FCN。CTPN检测横行文字效果还不错,但是检测旋转或者竖行文字奇差无比,而FCN就能克服文字行旋转的问题,这也是为什么选FCN的主要原因。我接手的时候人工标注的数据也陆续到位了,要做的就是用人工标注的新数据重新训练FCN检测模型。用前任的写网络结构,用前任写的代码,直接根据标注数据制作的图片标签,直接用FCN模型预测出的结果。
现在想想第一个月做的事情真的好简单啊,真的没什么难度。可为什么自己刚开始学的时候那么头大、学的那么郁闷、还花费了那么久的时间呢?我觉得主要还是自己的学习方式不太对:对自己要做的事情没有明确的认识,在学习过程中没能跟mentor时时交流。刚开始的时候,mentor告诉了自己大致要做什么,大致的学习步骤。可是我却没能很快的对自己要做有个真正的明确认识。Mentor告诉我123,我就知道123,而不会对123之外的东西发问。当然mentor对某事表述123,这个123其实只能是大概的描述下,更详细的信息就需要我自己去询问他、自己去挖掘。因为他本身已经十分了解这个项目了,没讲到的456可能对要做的事儿影响不太大,但是这些细节最终会影响自己对事情的理解。或者他潜意识的默认为你能想到,可自己根本就没往这边思考。Mentor告诉我123,我知道123,这只能对事情有个大致、浅显的认识。自己对要做的事儿没有明确认识的根本原因,在于自己没有深入的理解和思考mentor所说的123.这是一个思考方式的错误。正确的思考方式应该是:mentor告诉你了123,应该想这个123是否有把事情清晰、明确的完整描述,如果是否的话,哪一部分不清晰,哪一部分不完整。其次思考mentor告诉你123是想让你做什么、完成什么工作,把自己理解的要做的事儿复述给mentor,看是否理解对了,不对的话哪里不对,及时纠正。再大致构思下做这件事情的步骤,可能会遇到哪些困难,将困难说出来。对自己是困难的事儿,对mentor可能只是小菜一碟,即使mentor不能直接解决,给出的建议或大致解决方向也很有参考价值,能大大节约自己私下搜索解决方案的时间。最后再思考mentor做这件事儿的原因是什么,就是把自己要做的事儿放到一个更大的环境里去理解。了解这件事儿在一个更大环境里的位置,明白它产生的原因,知道这件事情的上下游。这样一套思索的过程下来,才算是对事情有了很好认识。认识明确了做的时候才不会拖拖拉拉的。
另一件是同步待标注数据的事儿。当时要做票据识别,没有现成的训练数据,所以跟业务方联系了,他们找了一批实习生用手机拍摄发票、火车票、打车票等票据。因为当时的标注平台功能还不是很完善,没有上传的功能,只能由我们研发这边用程序上传新拍的待标注图片。上传图片这种小活,自然就落在我的头上了。
我要做的就是把业务方帮忙拍摄的图片上传到云空间。具体步骤就是业务方会把拍摄的图片传到内网云盘中,然后发给我们组一个链接,我拿到链接后,从云盘上把图片下载下来,再用程序把图片传到云空间。听起来很简单的样子,没有任何的复杂操作。最初我们和业务方是建了一个群,有什么要求都在群里说,他们拍摄完的图片链接也发在群里。刚开始还好,后来拍摄的多了,群里的聊天也很频繁,链接很容易淹没在群聊中。其次业务方发链接的时间很不规律,有时候一天两次,有时候三四天的攒在一起发。而且有时,由于网络的问题,一整个压缩包下载到1G 多的时候会自动中断,更坑的是这个没下完的压缩包还可以正常打开,虽然可以检查大小看是不是有损的,但是文件一多,很容易就漏掉了。每次发的压缩包里文件夹命名很随意,搞不清楚哪个是什么票据。刚开始的几天真的很烦,天天要写程序,还要整理这些琐碎的图片。还有一次一不小心上传重了几百张,mentor语重心长的跟我说,小心点啊,标注一张发票成本要5块钱呢……嗯,我这手一抖损失了好几千。感觉那一个多星期好心情都全陷在图片中了。也反思过为什么会犯错,不过也只是认为自己工作不够细心,再用心点就不会犯这种简单的错误,从始至终也都没有怀疑是不是这个流程有什么问题。后来跟mentor抱怨,说整理图片太麻烦了。Mentor就说这么做不行,并发邮件跟业务方沟通(注意哦,不是在群里沟通,是邮件):建议业务方实习生拍摄照片后文件夹按一定规则命名,发链接的方式由群里改为邮件;邮件中每个压缩包的拍摄日期,每个压缩包包含哪几种票据,每种票据多少张;邮件抄送群里所有人。其实这样做并没有增加多少业务方的工作量,但是却大大减轻了我的工作。邮件的方式更有序,有迹可查;有序的命名规则,不需要我每次打开文件夹看了图片之后才知道这个文件夹里是什么票据。每次的拍摄日期和每种票据的数据,便于我检查下载的压缩包是否有损,也便于统计业务方上传的总数和我方的接收总数是否一致。其实这本是一件很小的事中的一个很小的改进,但是确这实我之前所不曾关注的。错误的根本原因是流程复杂、不规范。当发生错误时,我的第一反应是反思我自己:自己为什么会做错,自己如何才不能不做错。但是很明显这次的事情是一个协同配合才能完成的,是最开始流程就有问题。是,如果自己更细心、更认真,也能避免错误的发生,但是自己有付出更大的精力;如果改进流程的话,每个环节的人稍微多付出一点精力,就能使整个事情做的更好,这难道不是最好的解决方式吗?这件事给我最大的启示是,当出现问题时,是可以自我反思,但是还应该反思自我之外的流程、制度、环境是不是有问题,有些事情不是自己更仔细、更认真了就能有质的改进,需要参与的所有人协同并进才会更好。
这算是对我的思维方式改变最大的两件小事了。
技术方面,这半年算是图像处理、深度学习简单入门了。前期都是在学习、调模型参数,实际上并没有产生多大质的提升。自己也在看物体检测相关的论文,逐步了解检测领域的基本算法和前沿的通用算法,大致对这一块有了基本的认识。直到后来做营业执照识别的时候,才真正的稍有创新。营业执照文字多,特别是经营范围一块,文字周密,文字行间距小,预测的文字行基本都是粘连在一起。无论怎么调模型参数,都不太能直接分开,只能通过对预测结果的处理把粘连的文字行分隔开。这一部分,自己费了一些功夫。再到发票检测的时候,仅对预测结果进行处理又不可行了,这时开始在制作标签这块动心思,后来取得的效果还不错。实习期间还研究了直线检测和tiny-DNN框架,把前任固定大小的FCN检测模型改成任意大小的。虽然做的一切最终使用效果还行,但总觉得没有质的改变。质的改变是在于模型的改变或者模型结构的改变。自己现在会用FCN,也理解它的原理,却没有改进它的思路,也找不到更好的替代方法,这令我很不开心。究其原因,还是自己对物体检测、文字检测这块了解的不够深入。所以离职,回学校,好好研究下这块。
这半年,学到很多,可是发现自己不知道的更多。
研二这学期有这么几个想法:
1.把Deep learning 的英文版刷完;
2.研究文字检测;
3.研究文字识别,为自己的文字检测结果找个应用的地儿;
4.认真学习一下区块练技术;
5.修身养性,补充补充人文历史的知识,多点人文关怀,让这学期的生活不那么枯燥。