比赛总结

刚刚参加完第四届高校云计算应用与创新大赛,得了命题赛二的二等奖,作品则是一个依图写诗的应用,按照用户上传的图片识别其中的关键物体,之后生成一首七言或五言诗,并且在网页中展示出来。网址http://neupoet.cn,可能有时会访问不了,因为部署在实验室服务器上,如果服务器不连外网则无法访问。

整个比赛持续时间还是比较长的,而且分为预赛,复赛和决赛。我们参加的命题赛二的比赛,要求完成k8s的搭建过程,mnist手写数字识别训练和测试程序的run以及某种深度学习模型在集群中的运行。

刚刚开始入手的时候完全是懵逼状态,k8s没听说过,集群我都不知道是什么,深度学习刚刚接触,tensorflow只是听说过没用过。实验室本身不是做这个方向的,我们四个人开始多次讨论,现在想想那时还是真挺难为大家的。为了确定具体做哪种深度学习应用我们团队开了不知道多少次会,我记得有一次是周五晚上一直在讨论要做什么,讨论出了一个方向大家也都同意,但是回宿舍一查却发现早就已经有人做了,就此放弃。之后第二天周六一大早就把大家聚集起来再接着想了一个上午,然后决定做按照图片来写诗可能会比较有意思一些。那时已经临近比赛第一次提交设计方案的日子了,我们四个人则是写了一天的报告直到晚上10多才回宿舍。确定题目当然也少不了老师和学长实验室同学的帮助,在后面临近决赛答辩的时候同学们也是起了方向性的指导,确实很感谢他们。期间我们想到的题目包括补全照片,按照图片生成漫画,医学影像分析等方向,当时可能异想天开但是挺有意思的。但那时我们的重心就落在了深度学习应用上而非集群应用上,导致后来答辩之后发现比赛更多的强调kubernetes云平台,可能主要原因在于题目是国内某家做云平台运维优化的公司出的,而他们的意图当然不会是具体跑什么应用,而是平台及其接口的优化和使用。

对于k8s集群,幸运的是集中火力搭了三天的k8s之后集群在自己电脑上的虚拟机里面搭建起来了,当看到kubectl get nodes全都ready时感觉手冰凉冰凉的,看到了些希望。但是后来老天才开始考验我们的耐心好像在和我们开玩笑一样,在实验室物理机上搭建集群却成了后续阶段最大的绊脚石,出现的问题太多太多,而且机器也经常报错,网络中断,版本问题,系统设置,文件缺失等一系列不认为是问题的都成了问题,一点一点地消磨着信心和耐心。起先使用最慢速的方法一个一个组件搭建,docker>>etcd>>flanneld>>k8s-master>>k8s-node,最终搭建的时候是使用kubeadm搭建的,网上的教程又是“深不可测”而且“不可捉摸”,官网有很多方法搭建集群,但是真正搭建时还是得根据自己的机器情况去实践。其实搭建集群花费的时间可能是最长的也是最累心的了。从中学到最多的一个是有问题就看系统日志,因为日志会记录某个组建运行的状态及其报错信息,从中可以看到问题原因;二是出现问题,就去google查,最简单的方法直接把命令行中的报错信息贴到搜索框中查找,始终相信我们遇到的问题可能99%的人已经遇到了而且他们的能力要更高,所以不是停滞不前而是不会就查;三是心理状态,不管昨天如何如何,明天还要继续干,就算从头开始也比停滞不前好。整个比赛让我最担心的就是今天相比于昨天没有任何进展,恐惧不是因为当前状况的差劲而是来源于看不到未来的希望。

有了方向就要开始干了。期间老师又给了一个新方向希望试试,试了两周之后发现不行赶紧换回来,这一段就略去了。既然是依图写诗,就需要图片识别模型和诗词生成模型,这是人的典型的线性思维去想问题。可是模型有很多,使用哪种呢??这成了新的问题。刚开始以为需要RCNN来做图片物体定位识别更符合要求,但是渐渐发现太复杂。一次google的时候发现CNN各代中有一个inception_v3模型,而且可是使用迁移学习来做移植应用。这是个好方法,可以减少训练时间而且识别准确度高因为google开源了她训练好的参数。所以请使用google而非baidu,百度出来的东西内容千篇一律完全一样,要不就是广告而且没有疗效。其实后来我们使用训练好的符合我们数据需求的图片识别模型之后发现,这是做工程而非论文,什么模型实用就用什么模型而不是哪种模型高大上复杂用哪种,复杂的模型不一定适用甚至不一定能用。模型有了但是数据又成了问题,我们要用多标签数据,这是一个想法因为我感觉这会得到更好的效果,但是事实证明这是个很难达到的数据集,因为绝大多数都是单标签图片而且符合古风的更少,在网上下载了很多数据集都被pass掉了,找了找发现南京大学LAMDA实验室公开了2000张多标签图片数据集但是只能识别5个类别,这不够怎么办。我们用了最笨的方法,自己定义古风类的标签之后找图片放入相应的文件夹,后来想想其实我们并不是在做真正的能让千万人实用的产品而是在参加比赛,过于要求数据集大小和类别有些走偏了。作为队长,方向需要去制定,而且要对结果后果负责。渐渐地终于在放寒假之前训练出了模型,预测准确度我记得当时是70%,有点低的原因是计算准确度的程序有问题,但是还是跑出来了,终于可以用了。然后就是放假,放假了比赛也就停滞了。

对于诗词模型,我好像一直认为CNN要比RNN类的简单好用而且好理解,现在依然这么觉得。处理中文自然语言真的挺难。我的想法是让大家自己选取一片论文,这些论文是从这些年生成诗词的论文选出来的比较不错的那些,读过之后相互讲一讲,看看有什么好的方法可以组合起来,事后证明这对我们读论文理解有帮助而对比赛没什么用,对于几个对这个领域并不了解的人去这样做无疑是没有效果的,之后干脆找找有没有能跑的代码,按照我们想要的效果去修改,前提需要读懂,前提的前提是编程能力,这是根本也是基础。找到了能够run的代码,但是需要修改成分布式的。这又成了问题。

然而在过程有很多困难的同时,却是有一个让人感觉很好的却难以察觉的线索,就是随着时间的推移和查得资料的增加我们对题目方向和涉及到的技术内容包括模型,kubernetes和tensorflow框架的了解逐渐加深,这是根本也是比赛最大最隐形的目的。事在人为,虽然谋事在人成事在天但还是需要人去做。渐渐地通过分布式的mnist手写数字识别程序了解到了tensorflow分布式内容,从而可以将诗词生成模型改为分布式版本的,当然也不是一帆风顺的。当分布式的模型可以在k8s集群中基于docker容器进行训练的时候才真正看到了希望。

两个模型之间的链接程序和网页的展示也是关键之处,链接策略可以有多种,通过实验来见分晓。网页展示则可以给人以实用的效果。准备比赛答辩的时候一直以为网站返回速度一定要快,但实际上评委没心情也没动作去试你的网站和二维码的效果。对于比赛来说,或许起先应该分析题目的性质再入手做,就像跑深度学习模型首先想到的不是哪种模型而是数据在哪儿一样。

除了以上这些,最后终将归结于ppt展示上,幸好团队中两个女生是p图和ppt高手。而且ppt是改了又改,直到比赛答辩的早晨还在修改交到了答辩的电脑上。演讲稿则是换了又换一直修改。最终终于还是讲出了想要的效果,也不枉修改的次数和所做的工作。

在整个过程中有很多方向上的偏差,有团队合作的问题,有纷争四起有前途茫茫等等,都是在考验我们的能力和心理。幸好做出来了,还是不错的,最大的感受就是问题是一定会出现的,但是也一定会被解决。当然比赛结束意味着游玩的开始,南京和杭州,拉着女朋友的手,走啊走,虽然她膝盖不好,此处省略很多字。。。。。

网站二维码:




猜你喜欢

转载自blog.csdn.net/ingwfj/article/details/80212664