从去年工作到现在,从传统视觉领域到后来的深度学习的研发,也算略有心得。

传统的视觉算法的优点在于有很好的解释性,在现场跟客户交流的时候,什么能够检出,什么不能检出,为什么不能检出,以及通过哪种方法可以改善。缺点也很明显,对环境的要求高,运用范围比较窄,参数多,客户使用极度不方便。

而深度学习算法却恰恰相反,对环境要求不是很高,运用范围比较多,客户使用及其简易。但是可解释性不强,经常有人问我为什么小的目标能够检出,明显的大的目标却无法检出。我哑口无言,虽然算法是我写的,但我也不知道具体的这个网络学到了哪些特征。失去了可解释性后,就出现了客户的不信任,这也许是最大的难点,即使深度学习比传统算法准确率高一些,但不可控的事物,人们总是无法信任。

好了,具体的讲讲计算机视觉吧。

传统算法,没啥好讲的,opencv上基本都有,会用就行(这里介绍一本书《opencv3编程入门》),至于一些其他的传统视觉算法,大都可以借助opencv来实现。

深度学习的算法,目前接触的比较多的是分类,语义分割,目标检测。实例分割我没有接触过,毕竟我做的不是无人驾驶这一领域。先从分类开始谈谈吧,分类网络挺简单的,但是却也是最重要的,是后来分割,检测等深度学习网络的基石。从vgg到resnet,再到现在的xception,这是我比较推荐的三种网络。去掉分类网络的全连接层后的网络,将它称之为基础网络。基础网络关系到一个网络拟合能力的强弱。(拟合能力不等于提特征能力。ps:个人观点)。

语义分割网络,本质上一种基于像素点的密集分类网络,它与分类网络的区别在于将全连接层换成了解码层,就是这么简单!!!如果之前分类网络做过特征热力图分析的,可以更加直观的感受分类网络是如何运用于分割网络的。语义分割中,我比较推荐的是Unet,FCN,deeplab这三种网络。没啥好讲的,懂了分类网络后,再看看上采样,没什么新的知识点可以学的。

目标检测网络,分两种一种是端到端的网络,一种是两端网络。端到端的网络有SSD,yolo这两种,至于其他的看看就行。这两种网络最欣赏的是SSD网络,个人感觉SSD的架构更好,唯一缺点受限于当时的基础网络的理论,基础网络的提取特征的能力偏弱。至于yolov3,个人感觉借鉴了SSD的思路,但是darknet这个基础网络,啥都不说了,都是泪,建议换了吧。两端目标检测集大成者,faster-RCNN,完美!!!RPN层简直鬼斧神工,虽然我一直在拜读他的论文,但依旧没有搞懂,它的ROI层的反向传播机制。何凯明大神是真的厉害!!!

好了,三种网络都讲完了,还想说说深度学习的一些坑点,深度学习千万别什么都相信论文,论文上的一些数据和结论有些是不可信的。多做做实验,别迷信论文,大胆的按照自己的知识,实验的结果,数据集的需求改网络,而不是浮于表面的调调参数!!!

如果想提高算法的预测能力的话,有些时候换算法还不如修改数据集!!!

好了,讲完了,这是对我之前工作的一次总结,我又跳槽了。新的东家没有AI的基础,这也是我最欣赏的一点,我这次去需要独立将Ai架构搭好,将AI的团队组好,挺有挑战的,祝我能成功的平地起高楼。