计算机视觉领域,最常用的算法有哪些

计算机视觉领域一般不同的应用有着不同的算法实现,我主要研究的就是计算机视觉方面的应用,主要是在图像预处理、分类、目标检测等方面。1. 图像分类。图像分类是根据图像的语义信息将不同类别图像区分开来,是计算机视觉中重要的基本问题,也是图像检测、图像分割、物体跟踪、行为分析等其他高层视觉任务的基础。机器学习方面的算法有SVM、Adaboost、决策树以及贝叶斯分类器等;深度学习方面经典的算法有AlexNet、VGG、GoogleNet、ResNet等网络。

2. 目标检测。目标检测就是在复杂场景中检测出我们需要的目标,又用传统机器学习算法实现的,也有用深度学习进行目标检测的。传统机器学习算法比如利用Adaboost进行人脸检测、SVM算法实现行人检测等;深度学习方面目标检测算法,既有基于区域建议的R-CNN、Fast R-CNN、Faster R-CNN等两个阶段的目标检测算法,也有Yolo、SSD等端到端的目标检测算法。

3. 目标跟踪。目标跟踪,是指在特定场景跟踪某一个或多个特定感兴趣对象的过程。我之前做过目标跟踪的实验,利用的是传统的图像处理算法,比如光流法、粒子滤波法、卡尔曼滤波法以及KCF相关滤波算法等。深度学习算法中有DLT、FCNT、MD Net等网络,深度学习目标跟踪算法接触的少,不是很了解。4. 语义分割。

语义分割是计算机视觉中的基本任务,在语义分割中我们需要将视觉输入分为不同的语义可解释类别,「语义的可解释性」即分类类别在真实世界中是有意义的,将整个图像分成一个个像素组,然后对其进行标记和分类。传统的图像分割算法有基于阈值的分割算法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等;现在深度学习算法在语义分割上效果更好,比如现在最常用的全卷机神经网络算法(FCN)。

还有好多应用,比如人脸检测识别,有Adaboost算法、MTCNN网络以及FaceNet网络等;文字识别,智能驾驶,医学图像处理等等,分别有不同的算法实现。计算机视觉编程语言的话需要根据算法以及平台来选择。传统图像处理大都用的是opencv和matlab平台,分别用C 语言和matlab语言;深度学习框架大都是基于Python的API实现的,可以用python语言实现,比如Tensorflow、Caffe、keras以及MxNet等平台,当然Caffe还可以用C 实现。

年薪30万只是中游水平,算法工程师是一种怎样的存在?

算法工程师一直以高薪著称,一般应届毕业生薪资都在20k/月以上。据最新数据显示,2019届硕士应届生的最高年薪已经达到50万,一线城市平均薪资大概在30万左右,二三线城市稍微低一些,但也远超其他专业。那么到底什么是算法工程师呢?它具体又包含哪些岗位呢?作为一名算法工程师,除了必须掌握计算机编程相关知识,熟练使用仿真工具MATLAB等,还必须了解业务背景,像人工智能算法工程师、交通算法工程师、图像处理算法工程师等都需要熟悉公司的业务,有一定业务学习能力。

一般互联网公司的算法工程师,主要涉及这几个领域:推荐算法和协通过滤算法,音频处理,图像处理,深度学习及AI算法,SLAM,VR,AR领域,传统的算法等。1、推荐算法和协通过滤算法,这类工程师主要是解决电商或者与转化率相关问题的工程师。这类工程师需要掌握的就是特征工程、主成分分析、统计学、贝叶斯概率、决策树(GBDT/XGBOOST)、逻辑回归、协同过滤等等围绕着转化概率相关的知识体系。

2、语音信号处理,比如回路噪声抑制什么的,一般用在语音聊天,语音识别的前端检测,像现在做智能音箱的这些公司,多少都需要做一些。3、图像处理,尤其是基于OpenCV的图像处理算法,一般产品里有做美颜,滤镜什么的特别喜欢招这块的人,近一两年有被做深度学习取代的趋势。google出了arcore,所以让不少小公司也能出一些效果很好的换头类应用。

4、SLAM,集中在机器人定位导航上,比如无人车,扫地机器人,这个方向已经很专了,一般需要有好的导师才能带你入门,国内这个方向的团队实验室来来回回就那么几个。5、VR,AR领域,涉及到的包括视频跟踪,SLAM,raytracing,几何投影等等,实际上是一个综合的领域,目前主要是做计算机视觉的转行做这块。

6、深度学习/AI算法工程师,这类工程师说到底要做的事情就是利用深度学习中的卷积网络(CNN)、循环神经网络(LSTM),甚至是深度强化学习(DRL)等新的技术来解决工作中的实际问题。但是方向仍然是前面说的推荐、音视频、自然语言等等。只不过用了深度学习技术以后,很多传统方法解决不了的问题就比较容易解决了,或者有更高的准确率。

mtcnn和yolov3和ssd等目标检测算法各有什么特点或优势?

MTCNN算法是多任务级联卷积神经网络,用于人脸检测和人脸对齐,它是一种级联结构,类似Adaboost算法,主要包括三个子网络:一个是P-Net网络,主要获得人脸区域的候选窗口和边界框的回归向量,并用该回归向量对候选窗口进行校准,然后通过非极大值抑制来合并高度重叠的候选框;第二个子网络是R-Net网络,也是只做检测和边界框回归两个任务;最后一个子网络是O-Net网络,对前面的候选框做进一步的筛选,回归边界框,同时在每个边界框上计算特征点的位置。

而且,MTCNN一种多尺度网络结构,在输入图像数据前,先构建图像金字塔,获得不同尺度的图像再送入P-Net网络。SSD算法是one-stage、端到端的目标检测算法,主要思路是在图片的不同位置进行密集采样,采用不同的尺度比和长宽比,利用卷积神经网络结构提取特征进行分类和回归,其优势是速度快。SSD提取不同尺度的特征图来做检测,前面的大尺度特征图用于检测小目标,后面的小尺度特征图用于检测大目标,采用VGG16作为基础模型。

yolo目标检测算法的基本思想是利用CNN对输入图像提取特征,将输入图像划分成S×S个单元格,如果某个物体的中心位置落入其中一个单元格,那么由该单元格负责检测这个目标。YOLO V3在之前yolo结构的基础上,采用多个尺度融合的方式做预测,加强对小目标检测的精确度。基础分类网络类似ResNet残差网络,分类任务用Logistic取代了softmax,并利用9种尺度的先验框,可以很好的检测大目标和小目标。

MTCNN是专门用于检测人脸的目标检测算法,而yolo和SSD算法是通用的目标检测算法。通用的目标检测算法还有另一种类型,就是two stage的网络模型,先利用一些算法产生候选区域,然后再对候选区域进行分类和回归,这类典型的算法有R-CNN算法、Fast R-CNN算法以及Faster R-CNN算法、FPN算法等。


文章TAG:算法  adaboost  AdaBoost  
下一篇