2017 个人CV项目工作回顾

  此为回忆帖。

17.1–17.7.

    接手的是团队项目,但里队员划水成性。从积极面来考虑,这种处境的好处是能有一股无形的压力,催促自己多方面思考这个项目。
    项目比较基础,主要涉及机器视觉基础、工业照明搭建、相机选型、c++接口移植、初级UI设计。
    首次接触大创,踩坑多。比如VS的版本问题:套用某个activeX插件基于VS2010开发,而VS2010与VS2013工程的指令不兼容,不合理的装卸,导致安装失败,查manual,13为了贴合新win8用户的使用,发生了大面积的指令优化等。

MFC——苦力活

MFC软件界面
    UI是基于MFC(快被淘汰);尝试跨平台,QT、python也写过,相比之下,后者的UI开发优点是难度小很多,封装得很精简,开发周期短;坏处是接触不到编程底层逻辑和资源同步的高效性。举一个例子:

     为克服背景动态贴图覆盖前景和界面闪烁的问题,需要采用双缓冲机制。若用现成UI creator,不会出现这类问题,使用者可能会忽略这些问题。

     大一做的是美编工作,对软件的使用和设计上有点强迫症。当时考虑的是:做软件第一要义理应是便捷、人性化,没有人愿意为了输出一张零件信息还要学个几小时的软件使用流程。因此,应该把自己当成使用软件的用户,从用户的角度出发,思考用户希望有什么样的软件功能和使用体验。当时考虑到的是:

     用户说明书、快捷键(actionlistener)、简约的界面、鼠标消息提醒(msgtick)、错误提醒(msgbox)、菜单栏(menu)、操作逻辑、多拓展功能、进度条、以及多多参考别人写好的界面库

     一个礼拜的连续熬夜爆肝,尽可能地实现脑中的想法,写出相对工整、功能相对人性化的处女座工业软件界面。其中,设置快捷键时,工程代码的复用是不可避免的,如何形成更简洁的工程代码风格,涉及到一个编程积累的过程,我需要不断地实践和努力。

     回顾学mfc期间,也间接接触c++的面向对象特性。这也帮助我在大三上JAVA课轻松高分通过。JAVA的UI课设的精髓换汤不换药,和MFC异曲同工。从c++项目经验的基础上,来听老师上语言课,才更直观地了解老师所教授的JAVA虚拟机安全特性、统一数据类型等对一个工程的意义。

理论的强大生命力

大部分时间用来看理论算法,并付诸实践。从最简单的HOUGH translation、mosaicking、开闭、拟合、划痕检测、model matching、贪婪度、尺寸空间搜索等,现在看起来比较粗浅的入门知识,当时却熬了整整一个多月,边翻雷察冈斯边做算法验证才入门。越做越觉得有趣,因为相当一部分工业视觉的算法因为其工作环境固化,对算法鲁棒性要求很低,所以采用“拍脑袋”的方法解决问题,而不需要采用高深的算法,巧妙地解决问题。亲身实践后,也逐渐理解Lukas-Kanade Flow的两个假设和估计偏差如何优化等有趣的思想,以及最重要的,特征提取在视觉处理中,到底意味着什么。

17.8.

正赶上金工实训,实验室老师临时派任务,一个多月后比赛,要求一个礼拜调通guidance、rplidar a2。白天做金工实训任务,晚上八九点跑回实验室调程序。一切凭用户手册和踩坑的直觉,神奇地完成了任务(传感器融合,不是制作传感器,所以难度不大)。金工实训后,每天气温快40摄氏度,日日出外场做比赛调试。团队十多个人,共渡最困难的时刻,回想起来,苦中带甜。

linux初接触,从此windows是路人。不经意间发现python代码风格的优美,借Gopi Subramanian编著的《python data science cookbook》入坑。一个礼拜后,实现linux与机载电脑间无线挂载和无人机实时轨迹监控。任务比较简单。编程语言不可怕,跟说话一样亲切,平时一定要多“说话”。

参加了IARC和南京全国未来飞行器设计大赛决赛,可以体会到本科生团队和研究生博士生团队间差距比较明显。除了南航和外国友校自己写飞控外,多数队伍都拿大疆现成的m100参赛。 浙大和哈工大战队很强势,从许多同学身上看到了工程师的精益求精的精神,在算法的整体鲁棒性、飞行任务计划与规划、硬件动手的设计方面都有很多值得借鉴的闪光点。让人兴奋的是:linux和ros的潜力。

17.9.
脱离halcon,写opencv脚本。结合理论,复现opencv算法函数。与研三学长谈到手势识别项目,开始构思。翻了一个礼拜的墙,写了几天的摘要,整理了思路。自做一份1G的简单小数据集,做了手部haar检测器,陆续又烧了三天电脑,优化脸部检测器、手部检测器。月底向导师介绍该项目,获得资金支持。

17.10.
趁着国庆,询问在科技部门的大佬,做了硬件选型的排查,否定了树莓、DSP、定制FPGA等方案,项目开始。10月中旬,整体程序完成,算法验证于有限环境下进行手势识别。

17.11.
与自己的思维进行质疑挑战,如果项目目标仅定位于识别手势,比较水。思考leapmotion的技术,搜了更多比赛和论文,开始进入深度学习的坑。最初什么都看不懂,心里瞎着急,静不下心。立了flag,硬着头皮,课业很多,也要坚持每天看份技术报告。提醒自己,数学很重要! 买了小米6,有计划把算法移植到安卓系统。

17.12.
下旬,开始写自己的tf cnn,试了谷歌新出的tf lite,编译过程有点痛苦,刚推出产品会用的人太少,而且bazel尚不完善,和android studio配合各种bug,一切全靠自己摸索,熬到2点,编译了demo,小有成就感。demo app的识别速度60ms+,模型大小20m+,技术含量毋庸置疑。燃起移植安卓系统的信心。同时,在手势识别项目方面,熬夜跑了两个礼拜网络,边跑边学,调整参数,笔记本跑的cpu,训练龟速。ssd开始出现损坏的端倪,及时止损。申请经费,自己装了一台整机。(进入期末)

18.1.
装机使用,1080Ti,考前一天作死装GPU TF,比装CPU版麻烦一点,主要是服务器显卡驱动和内核版本的一些矛盾,而且最近正好cudnn网页在翻新,不提供服务又走了点弯路,还好最终训练效果拔群。笔记本寿终正寝了。网络设计方面相比一开始有经验了,第一次试,一个小时10000-batch,准确率0.99,测试集平均正确率0.97。花了半天写了UDP串口通讯,用手势控制3d简易飞行器的demo。期末考后着手做回归任务。期末考试周来临。

18.1.19 展望:pose estimation、VR、IARC mission 8、身体健康、多陪女朋友

wonderseen | Xiamen University | 2018.01.17