最近因为面试,看了一些图像识别目标跟踪的东西,希望记录下来。如有错漏欢迎指正。
深度学习出来之前,目标跟踪和图像识别方面基本上都是被传统图像处理算法统治的,传统算法比如sift ,surf,基于帧间差分的滤波器,等等。2012年,Alexnet横空出世,直到resnet15年拿下了imagenet的图像识别类目冠军,错误率降低到3.57%,深度学习开始出现在媒体和工业界面前。
12年到15年是卷积神经网络(CNN)快速发展的4年,然而16年GANS大火以后,深度学习几乎没有什么亮眼的创新了,深度学习开始进入了工业界的大规模铺陈阶段。
下面进入正题,说一下深度学习在图像识别和目标检测方面的应用。
(补充:hinton17年提出了新的capsule模型,据说不错,还没有工业化,回头得看看)
1.一些概念框架。
图像识别的工业场景比如:人脸识别,车牌识别,指纹识别,医疗界也有做肿瘤的生化图片的诊断的。
图像识别任务有(1)目标分割(target segmentation)、(2)目标识别(target recognition)、(3)目标检测(target detection)、(4)目标追踪(target tracing)。
简述一下(2)(3)(4):
(2)目标识别,是一个分类问题,在给定数据中,分类出哪些sample是目标,哪些不是。比如肿瘤识别如果用目标识别来做,思路就是这张生化图片里,是不是有肿瘤组织,label是 有(1)或者没有(0)。参考链接:https://www.zhihu.com/question/36500536/answer/67939194
解决方案除了CNN,当然是首推ImageNet得奖的网络:Alexnet,vgg,resnet等等。
(3)目标检测,比分类多了一个要求,是需要标记出目标的位置,比如美图软件里,会定位一下嘴唇,眼睛在照片里的位置,然后再进行下一步的美化。
深度学习相关的目标检测方法也可以大致分为两派:
基于区域提名(region proposal)的,如R-CNN、SPP-net、Fast R-CNN、Faster R-CNN、R-FCN;
端到端(End-to-End),无需区域提名的,如YOLO、SSD。
(4)目标追踪,比检测又多了一个要求,需要预测目标的下一刻的位置,或者在上一帧的基础上,对下一时刻(下一帧)对目标快速再定位。目前建立运动模型再预测,用到的都不是深度学习的内容。这里就不展开了。
写到目标检测,可能大多数的工业应用就都是在视频上了。
视频上目标检测与图像上目标检测的不同点在于:https://www.zhihu.com/question/52185576/answer/163435616
2.一些实现方案的总结
图像识别的应用场景,除了路边监控,面部识别密码锁、车载系统(行车记录仪,自动驾驶)-------实时性要求高,有脐带电源,或者医疗图像识别-----------实时性要求低,还有无人机这种实时性要求高,对功耗也有要求的场合。这就需要深度学习框架足够精简,且有软件支持。
目前在移动端上部署深度学习框架的方案有online和offline两种,下面是offline的一些方法:
1.跑阉割版的算法,功耗低,这时的精度就会随之下降。
2.做成深度定制的硬件,比如FPGA,速度和功耗都能得到保障,但是成本高。
3.在功耗要求不是特别严格的情况下,移植TensorFlow、caffe等等,这里是一个TensorFlow 在安卓上部署的例子:
https://link.zhihu.com/?target=https%3A//github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android
4.有听过在系统层写cuda代码的……