2016年终总结
这是我的2016年终总结,也是我第一次写技术相关的总结,希望以后每年我都能写一个总结,总结这一年来做的工作,反思有哪些做的不够好的地方,在新的一年里加油做好。
在2016这一年来,我做了一些项目,给开源社区贡献了一些代码(大多数都是简单的代码格式和规范方面的改进),学习了一些新的技术。同时,在实验室的科研项目上,却没有太大的进展,我做的视频中动作识别的方向没有成果,实在是很担心下一年的情形。下面,我从开源贡献、自己做的项目、学习的技能、阅读的书籍、实验室研究进展5个方面做详细的总结。
1. 开源贡献
在这一年里,我在GitHub上总共贡献了642个Contribution,如下图所示。
给包括tensorflow、Paddle、C3D、tflearn等项目提交来一些代码,主要都是typo、格式上的问题,虽然实际意义不是很大,但总算开始能够参与到开源社区的活动中去, 这也是很值得高兴的事情。最激动的是在Tensorflow的0.10.0 RC0 和0.11.0 RC0发布的贡献者感谢中提到了我的名字,感觉还是挺有成就感的。
下面是今年我在开源项目中所做的代码修改(点击链接即可跳转到我的Commit):
- tensorflow
- Paddle
- tflearn
- facebook/C3D
- cs231n.github.io
- tensorflow/models
- openai/universe
- githug
- docker_practice
- Ruby-tutorial
- learnxinyminutes-docs
- TensorFlow-Examples
参与开源社区的活动,既可以提高自己的编程水平,也可以和世界各地的人们一起交流,提高自己的英语水平,也能了解到最新的技术,所以我觉得是一件很有意义的事情。但由于我水平有限,实质的改进并不多,希望在2017年努力提高自身水平,更多地参与到开源社区的活动中去。
2. 我和小伙伴们做的项目
1. CaptchaLess
研一上学期在上《视频技术基础》课程的时候,我和蒲俊福、黄志华三个人做了一个Chrome插件CaptchaLess,来完成我们学校网站的验证码的自动识别,蒲俊福负责算法,黄志华负责将算法部署到Django搭建的后台,我负责前端的Chrome的插件,包括和用户交互、验证码图片的提取、发送到服务器端、将服务器端识别的结果返回给网页、渲染出结果。
一开始我们针对比较简单的验证码(只有0-9这10个数字),采用来模板匹配的算法,即爬取一些验证码图片,手工标记是什么字符并保存为模板,当识别验证码的时候,先进行二值化、高斯模糊等处理,去除噪声,将验证码图片和标记好的图片进行比较,寻找模板中最相似的,作为识别结果。由于这一类验证码几乎没有形变,只有少量的噪声,所以使用这种方法就足够了,识别结果几乎是100%(到现在为止貌似我只遇到1,2次)。
然后我们又考察了另一类比较复杂的验证码,其中包含0-9和24个字母(为了避免和某些数字混淆,删去了一些字母),而且有比较大的旋转。我们是了一些基于匹配的改进算法,但识别率还是不高。当时由于时间比较紧,需要在课程结束前进行答辩,我们就先没有完善这部分。
$后来我又想起这回事,尝试来一次,没有成功。又过了很长时间,我又想起这个事,又尝试了一些方法,发现采用局部二值匹配能够较好地解决后面一种验证码的问题,所以改进了下代码,更新了插件。测试的时候,在比较复杂的验证码上,能够达到67%的准确率,单个字符的识别更高些,算是一个比较好的结果。当然还是可以再改进的。
所以从这个项目中,我发现对于一个暂时没能搞定问题,可能需要时不时地去思考怎么解决,有的时候思维比较局限,想不出法子来解决,可以先放一放,但不要忘掉,等思维比较活跃的时候再来看看,说不定可以很快就解决掉。正所谓“念念不忘,必有回响”,就是这个道理吧。
2. EasyDict
在做CaptchaLess项目的过程中,我熟悉了Chrome插件的开发方法,所以在后来用扇贝背单词的时候,看了看扇贝网的API,突然想,能不能做一个基于扇贝网的Chrome查词插件呢?于是这个功能简单的查词工具EasyDict就产生了。目前提供的功能比较少,仅仅包括中文释义、英文释义、英式发音、美式发音。期望的后续工作还包括:增加浏划词查询,鼠标右键查询。
3. cool_certificate
某次有同学给我发了一个网页,上面时一张无人机驾驶证的图片,只要在网页下面的输入框上写上你的名字,就可以生成专属于自己的驾驶证,确实挺装逼的哈哈。我在想,能不能自己做一个呢?于是想了想,其实比较简单,只需要将用户输入的名字写入到照片上,然后生成新的照片即可。于是我立即动手,采用Python的PIL包和Django网站架构,制作了一个可以公开访问的站点,输入名字就可以生成酷酷的照片,包括无人机驾驶证,潜水证和帅哥证,你可以在这里试着玩一玩。
总体来说这个项目比较简单,比较好玩。还有两个可以改进的地方:一是字体写入到照片的时候可以进行一定的旋转,以显得更真实。二是采用与图片文字更相似的字体,同样可以提高真实性。
4. travel_record
某天实验室的小伙伴告诉我有个叫ClustrMaps的工具,可以记录你的网站上的访客的IP地址,然后他说,能不能用这个来记录旅行的足迹呢?比如建立一个只有自己可以访问的网站,每到一个新的地方,就访问这个网站,这样地图上就可以显示自己的IP的所在地,这样等周有完世界后,就可以看到世界各地的属于自己的足迹了。于是我们就开始做了,采用Django框架,制作了一个简单的登录页面,输入正确的密码就跳转到一个包含ClustrMaps的代码的页面,就可以实现签到;如果输入密码不对,就一直跳转到登录页面,这样别人的IP就显示不到ClustrMaps地图上。
5. HackxFDU 黑客马拉松比赛
有一次在微博上我偶然看到了GitHub赞助的HackxFDU黑客马拉松比赛,在复旦大学举办,于是和伟哥一起报名,希望能组队取参加一下,增加一些项目经验。最后只有我入选了,去上海临时和4位复旦的学生组了队,想做一个基于大疆无人机和深度学习的行人跟踪应用。因为无人机是通过手机控制的,所以我们开始的设想是在手机上完成整个深度学习的计算,包括采集无人机发送的图片,将图片输入到深度学习的网络中,识别图片中的行人,对其进行tracking。
因为我们听过tensorflow可以在Android设备上运行,所以在讨论方案的时候,我们觉得这个方案是可行的。后来在实现的时候,才发现有很多问题。一是Tensorflow在Android上面的程序也是在电脑上训练好model后,将model导入到Android应用中,所以在Android端是没有训练过程的。二是tensorflow从PC到Android的迁移问题很多,没有成熟的解决方案,向Bazel的编译很容易出错,而且错误不好解决。最后我们的很多时间都是花费在了解决各种奇怪的问题上,到项目结束的时候,我们组的完成度很低,几乎没办法展示,在最后的展示阶段,显得特别尴尬。不过最后我们组因为创意比较好,获得来大疆的企业奖,奖品是一个Osmo+手持拍摄云台。
这个项目过后,我思考了挺多东西,觉得要做好一个项目,我还有很长的路要走。
首先是“领导力”和自身想法的缺乏。因为在团队中,我是年级最高的,而且技术了解比其他几位队友稍微多一点,如果在选择项目的时候,说出自己的想法,选择比较成熟的方法,可能后面做起来会容易些。因为我平时习惯了听别人的做法,没有思考过自己的想法,很多时候都是选择沉默或者跟随别人的意见,所以在关键时刻也没能站出来,这是我以后一定要改进的地方,否则真的成不了大事。
还有和队友沟通太少或者沟通效果不佳。因为我们是当时才组建的队伍,之间大家相互都不认识,所以在讨论项目的时候都比较含蓄,没有太直接地提出自己的想法。这也是我以后应该改善的地方。
还有最重要的是,对目标的坚持程度。整个黑客马拉松共经历了2天2夜,第一天晚上,在半夜2,3点,实在不知道接下来该怎么做的时候,开始思考人生了。从大学期间开始,我陆陆续续做了一些项目,有大有小,大多数项目都算失败了,做着做着就没有下文了,我想这次也估计是这样了。为什么最后都做不下去呢?有各种各样的表面上的原因,但归根结底,还是自己对目标的坚持程度不够吧,习惯了惰性心理,不肯花太多时间,习惯避重就轻,遇到困难很容易退缩,没有坚持下去的决心。想想确实挺担心,如果一直这样下去的话,我这一辈子肯定做不成什么大事。更悲哀的是,在平日许许多多的日子里,我完全每想过这些事情,而是在茫茫小事中度过了一年又一年。新的一年里面,改进这些方面吧。
3. 学习到的技能
其实想了想,我几年没有学到特别多的大的技能,所以将一些细小的方面也都列出来吧。
- Chrome 插件开发,只能算是简单了解
- TensorFlow, 只能算简单了解
- RCNN, fast RCNN, faster RCNN, 了解了论文,大概看懂了代码
- Torch, 只知道怎么安装,跑了简单的示例程序
- Paddle, 只会安装
- Ruby, 学习了一段时间,现在又忘记了……
- Ruby on Rails, 学习来一段时间
- Lua, 在看Torch的时候学习了一下,现在忘差不多了……
- PIL, 大概了解简单用法
- Numpy, 了解基本数据类型和简单用法
- Git, 了解比之前加深了一些
- GAN, 了解了概念
- CUDA, 了解一些
- Spark, 跑了跑教程里面的例子
- OpenMP和MPI, 也是大概了解
发现我基本都是只了解一些,没有完全地静下心去掌握……
4. 阅读的书籍
今年偶然的机会了解到了微信读书这个app,用了一段时间后发现很不错,在手机上读书比读纸质书更方便,随时随地都可以看书,毕竟手机已经完全融入到每时每刻的生活中了。下面就是今年我所读完的书籍(包括微信读书上看的和电脑上看的PDF版和纸质版)。
- 《Pro Git中文版》, 非常棒的一本介绍Git的书,写的特别清楚,个人认为和《The Django Book中文版》是我看过的写得最好的技术书籍
- 《白鹿原》,熟悉的西北地域,陌生的魔幻现实风格
- 《呼兰河传》: 小孩子童年的记忆,小城里小人物的故事,和风土人情。全书笼罩在悲凉的气氛下
- 《边城》: 湘西风情画,赛舟,吊脚楼,山歌,河流,淳朴的水乡人民,单纯的爱情故事,描写方式很独特,所有的故事发展好像都是从写环境来展开的
- 《查令十字街84号》: 落魄美国女作家和英国书店绅士因购买书籍而开始的的书信集,活泼的女作家和谦谦有礼的已婚男绅士的反差很有趣,困境中相互帮助和美好的心灵。
- 《芙蓉镇》: 南方小镇的文革风云。
- 《追风筝的人》:阿富汗风情录,在历史变幻下的一个人的救赎之路,看完之后就会明白为什么评价这么高了
2017年继续坚持阅读,希望能读一些关于商业和理财知识方面的书籍,了解基本知识,拓展视野。
5. 实验室的进展
其实这一年来实验室的工作进展很小,这一年里沿着2个思路做了工作,但结果都不好,实在不知道接下来该怎么走。
6. 总结
新的一年,继续加油,努力做好每件小事,改正前面提到的问题,相信肯定会有收获的。