CV即计算机视觉,简单的来说:计算机模拟人来理解图像所表达的意思,或对图像进行一些理智的操作,比如分割,分类等等。

目前接触到的计算机视觉主要有:

    图像分类(包括细粒度特征分类):将图像进行分类,该图像是飞机 ?汽车?狗?或者什么

    目标定位和识别(如yolo ssd等神经网络):图像中的目标物体的位置(用框就行标注),框中物体的种类,是什么

    图像分割:比如一张CT照片中,要求准确的将胃和肺切割出来

    图像生产(主要利用的是GAN):可以随机产生一张特定的图像(该图像现实中不存在),比如神经网络自己根据对狗的学习,自己会自动生产一张狗的图像,该张图像人类和机器没有办法判断它不是狗,这时候他就成功了,成功的骗了机器和人类,还包括根据意境的描述生产图像等

用到的方法主要分为传统机器学习方法和深度学习:

1、传统机器学习方法:

       为什么还有传统机器学习的存在--(传统机器学习方法的好处在于这些方法都已经被数学推导成立的,我们做的每一步都是有理可循,可逆向推导的,但是深度学习的神经网络就不一样了,当你的网络搭建的比较深时,其内部就像是一个黑盒子,你不知道里面是如何进行运行的,也不知道每一步的输出,比如:当你查看卷积后每一层的输出,第一层的输出可能是提取的边缘特征,那么到了第四层你根本无法理解他所表示的是什么,所以传统机器学习方法目前虽然不如神经网络的效果好,但也不可舍去,并且其中的思想很多可以被深度学习所借鉴)

      传统的机器学习方法主要依赖SVM、LR、XGboost等传统的机器学习方法,这种方式也是出现比较早的方法,那么我们使用这些方法,又有一个问题了,图像是不能被这些方法所使用的,所以我们需要将图像进行转换,通常是将图像转换为一个向量,那么最简单的转换就是将图像直接展开,比如200*300*3的图像直接展开为一个(200*300*3)大小的向量,这是一种最简单的方式,但是实际效果中这样很差,制作的向量不仅表达性不好,而且又很大,对计算造成了很大的负担,那么这时候就有人提出来各种对图像做处理的方法了,最有名的是对图像做特征描述,其根本思想就是:图像的大部分信息存在于图像的边缘处,而图像的边缘信息可以被梯度来表示出来,所以就有了一种数学方式来解析图像了,其代表性的算法包括 SIFT HOG等,具体的分析可以见我之前的一个博客:Opencv SIFT SURF ORB FAST 代码以及效果对比

     那么当图像可以被向量所有效的表示的时候,这时候在做一些处理就很方便了,这里简单的举两个例子:

(1)、hog+svm(或者其他分类器)

    当一个图像通过hog算法可以返回一个向量,这个向量的大小和你设置的cell和block的大小有关系,假如返回的是一个(1900)的一个向量,此时面对这样大小的向量,你的第一反应该是做一下PCA,看看压缩后还可以保存的信息量,如果可以的话,就应该做降维,便于以后的计算,然后每个图像都用一个统一的合适大小的向量表示,最后直接将此作为特征送入到分类器就可以了

(2)、sift+kmeans+svm 

     不同于hog特征提取方法的是,sift方法返回的是描述子,也就是一个一幅图像是由多个描述子组成的,而每个描述子又是一个向量,比如一张图像可以表示为128*64,意思为该图像可以由128个描述子来描述,而每个描述子又是一个64长度的向量。

具体见我这个博客:SIFT+词袋+SVM的深入理解

2、深度学习

     深度学习就相对来说比较复杂了,就目前来看已经有很多不同的网络了,这些网络也都是在CNN的基础上发展的,目前发展的趋势更倾向于一个端到端的学习,这些神经网络主要通过改变网络结构或者改变损失函数等来实现不同功能(分类,识别,切割等)。比如SSD,一个目标检测网络,其后端网络的实现也cnn,或者是摘选自某个经典网络(VGG16、Resnet)的一部分,其创新较yolo等目标检测网络主要创新在于增加了多个尺度下的feature map,提高了小物体的检测准确率。

 

    持更。。。  

 

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐