目录
声明
以下内容均来自B站吴恩达教授的视频以及西瓜书和众多前辈的学习成果总结,仅记录本人的大模型学习过程,如有侵权立马删除。言论仅代表自身理解,如有错误还请指正。
正文
1、简介
我们先来看看百度百科里对计算机视觉的介绍:
计算机视觉是一门研究如何使机器"看"的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取'信息'的人工智能系统。这里所指的信息指Shannon定义的,可以用来帮助做一个"决定"的信息。因为感知可以看作是从感官信号中提取信息,所以计算机视觉也可以看作是研究如何使人工系统从图像或多维数据中"感知"的科学。
先来回顾一下高中生物学的内容:人类是怎么接受到视频图像信息的呢?是先从眼镜晶状体反射到连接的神经元上,然后通过大脑皮层的无数神经元进行处理优化。(所以这里其实有个悖论,因为我们所看到的都是神经元层告诉我们的,所以实际上我们平时看到的景色并不是实际上的景色,但是因为没人知道,所以无从辨别真假)
在人工智能出现之后,通过计算机可以识别文本,进行自然语言处理,从而预测情感文本的抽象问题。那么计算机能否识别图像,对图像进行自主学习预测呢?于是计算机视觉应运而生。目前,计算机视觉主要运用在人脸识别,图像识别等领域,为打工人不能迟到早退和代签到提供了非常大的便利(bushi)
在让计算机识别图像并进行自主学习的整个过程,分为五个问题:1、图像分类 2、目标检测 3、目标跟踪 4、图像分割 5、图像生成
2、步骤
1)图像分类
图像分类,就是给计算机一个图像,计算机如何分析出这个图像的内容,比如这是风景照,照片是否有湖有山有树,这是人物照,照片里是人是狗是猫。就是给定一组图像,计算机通过学习能够将图像按照规定的类别进行分类。
在图像分类中,面临着一些困难和挑战:
视角和尺度变化:相同的物体在不同的视角或大小下会呈现出不同的外观。例如,一个猫的图像可能有不同的角度和大小。这种变化使得设计一个能够在不同视角和尺度下进行准确分类的算法变得困难。
光照条件:光照条件的改变也会导致物体的外观发生变化。例如,在不同的光照条件下,一张脸部图像可能会有不同的明暗程度、阴影等。这使得分类算法很难将其识别为同一类别。
遮挡:图像中的物体可能被其他物体或者遮挡物所遮挡,这使得图像分类变得困难。例如,在一个人脸图像中,可能被发型、眼镜或其他物体遮挡,这会导致分类器难以区分。
类别间的相似性:不同类别的物体可能在外观上非常相似,这增加了分类的难度。例如,狐狸和狗在外观上非常相似,很难通过外观特征来区分它们。
数据不平衡:在实际应用中,不同类别的图像数量可能存在不平衡。例如,在一个猫狗图像分类任务中,狗的图像数量可能远远多于猫的图像数量。这会导致分类器倾向于将图像识别为数量较多的类别。
这些都是每个图像分类任务中都会面临的挑战,那么怎么解决呢?其实看到视角和尺度变化,不知道有没有人觉得很熟悉,其实现在主流的分类方法,就是用到了卷积神经网络(CNN),利用滑动窗口对图像进行分类识别。
如何提高识别效率和效果呢,加高预算啊,加入池化层和多个卷积层,在牺牲效率的同时提高效果,再加入多个内核多线程,提高效率。
2)目标检测(目标定位)
一张图像包含很多信息,而我们关注的只是其中的一部分信息。因此我们要对图像中我们想要的特征进行定位。这里要说明一下,对于多分类任务,我们要同时对多个对象进行检测定位,因此叫做目标检测;对于双分类任务,仅需要知道是或不是,极大程度降低了检测的困难程度,因此叫做目标定位。
当然,对于目标检测,我们可以用卷积神经网络方式进行定位,但是对于一张大图像,划分很多个滑动窗口进行特征提取,对算力要求极高,于是就出现了一系列基于CNN的优化算法:
- Faster R-CNN
- 基于区域的全卷积网络(R-FCN)算法
- You Only Look Once(YOLO)
- Single Shot MultiBox Detector(SSD)
Fast R-CNN是利用选择性搜索算法定义某几个特定窗口进行目标检测,然后将对应窗口进行Rol池化,提高了计算效率。Fast R-CNN还引入了多任务损失,合并了目标分类和边界框回归的损失函数。
相对于传统的R-CNN算法,R-FCN利用全卷积网络实现了端到端的目标检测,避免了全连接层带来的计算复杂度和内存消耗,并且消除了候选区域之间的冗余计算。这使得R-FCN具有更高的计算效率和准确性。
YOLO具有实时性能和较高的检测准确性。它是先预测选出不同的框并进行置信度评分,然后通过改变框来定位目标。它的优势在于能够在一次前向传递中完成目标检测,避免了传统的滑动窗口或区域提议的复杂计算,并且能够检测小目标和密集目标。然而,YOLO在处理小尺寸目标和存在遮挡的目标时可能存在一些困难,并且对于大目标和小目标的平衡难以处理。
SSD其实和YOLO属于同一种方法,不同之处在于SSD采用多个不同层级的特征层进行目标检测,相比YOLO的准确度会更高,但是相对于YOLO仅需要一次前向传播就能处理完成来说,其计算速率会有所降低。
3)目标跟踪
不知道大家有没有看新闻看到过那种视频回放,对于目标人物都会有个框框在跟着他移动的,这就是在目标检测到之后进行的目标跟踪。现在的目标跟踪除了实时跟踪还可以预测其下面的动作。
目标跟踪主要分为两种算法:生成算法和判别算法
判别算法用来区分物体和背景,其性能更稳健,并逐渐成为跟踪对象的主要手段(判别算法也称为 Tracking-by-Detection ,深度学习也属于这一范畴)。
4)图像分割
在确认我们跟踪到的是对应的目标后,我们要对图像不同的像素层进行分割,将目标与周围环境分离开来,便于后续的识别生成。一般图像分割可以分为:普通分割、语义分割和实例分割
普通分割
普通的图像分割方法可以分为基于阈值的方法和基于边缘检测的方法。
-
基于阈值的方法:基于阈值的方法是最简单、最直观的图像分割方法。这种方法通常通过设定一个或多个阈值来将图像中的像素分为不同的区域。例如,可以通过选择一个合适的灰度阈值将图像分为前景和背景。这种方法简单易实现,但对光照、噪声等因素的影响较大,且只适用于简单的场景。
-
基于边缘检测的方法:基于边缘检测的方法通过检测图像中的边缘来进行分割。边缘是图像中不同区域之间的分界线,通常由像素灰度或颜色的不连续性引起。常用的边缘检测算法包括Sobel算子、Canny算子等。这种方法对光照和噪声的鲁棒性较好,但在复杂场景下可能出现边缘不连续或断裂的问题。
语义分割
语义分割是指将图像中的每一个像素标注为其对应的语义类别的图像分割任务。与普通的图像分割不同,语义分割不仅仅是将图像划分为不同的区域,还需要为每个像素分配一个语义类别标签,因此可以实现对图像中每个物体的精确分割。
语义分割方法通常基于深度学习技术,特别是卷积神经网络(CNN)。常用的语义分割网络模型包括FCN(Fully Convolutional Networks)、U-Net、SegNet、DeepLab等。这些网络模型通过使用卷积和上采样操作来获得像素级别的预测结果。训练这些网络模型需要大量的标注数据,其中每个像素都有对应的语义标签,以便网络能够学习到准确的语义分割。
对语义分割的代码实现感兴趣的同学可以参考以下博客
(完结篇)什么是语义分割?原理+手写代码实现?-CSDN博客利用Unet框架非常详细写出了代码复现过程
实例分割
实例分割是计算机视觉中一种高级的图像分割任务,它不仅要对图像进行像素级别的分割,还需要将每个分割区域与原图中的真实物体实例相对应。实例分割不仅要识别出不同的物体,还要准确地分离它们,因此与语义分割相比更具挑战性。
实例分割的目标是对图像中的每个像素进行分类,将其分为不同的物体实例。与语义分割不同,实例分割不仅需要区分不同类别的物体,还需要区分同一类别中的不同实例。因此,实例分割问题是一个像素级别的多实例分类问题。
可以参考Nick大佬的博客实例分割最全综述(入坑一载半,退坑止于此)_实例分割综述-CSDN博客非常详细的描述了实例分割的各大热门算法和入门步骤
5)图像生成
图像生成就是给定计算机一大幅图像其中的一小部分,让计算机自动补全剩下的部分,也就是最近很火的手机AI抠图抠人像,就是用图像生成做到的。(其实是因为GANs的热门才导致图像生成兴起的)
图像生成可以分为两种主要类型:无监督生成和有监督生成。
无监督生成是指通过学习数据的统计特性,从随机噪声中生成新的图像。常见的无监督生成方法包括生成对抗网络(GAN)和自编码器(Autoencoder)。GAN通过训练一个生成器网络和一个判别器网络,通过对抗训练的方式,使得生成器能够生成逼真的图像。自编码器是一种将输入图像编码为低维潜在空间表示,并从这个表示中解码生成图像的模型。
有监督生成是指通过学习已有图像与其对应的标签之间的关系,生成新的图像。常见的有监督生成方法包括条件生成对抗网络(cGAN)和变分自编码器(VAE)。cGAN是GAN的扩展,它将标签信息作为输入,使得生成器能够生成特定类别的图像。VAE结合了自编码器和变分推断的思想,通过学习潜在空间的分布,生成与输入图像相似的新图像。
3、总结
计算机视觉是研究如何使计算机具备理解和解释图像或视频的能力的一门学科。它借鉴了人类视觉系统的原理和方法,通过算法和模型来处理和分析图像数据,从而实现图像识别、目标检测、图像生成等任务。
在计算机视觉中,主要的任务包括图像分类、目标检测、语义分割、实例分割等。
- 图像分类是将输入的图像分为不同的类别,常用的方法包括卷积神经网络(CNN)和深度学习模型。
- 目标检测是在图像中定位并识别出多个不同的目标,常用的方法包括基于区域的CNN(R-CNN)、单步目标检测(YOLO)等。
- 语义分割是将图像中每个像素分类到不同的语义类别,常用的方法包括全卷积网络(FCN)和U-Net等。
- 实例分割是在图像中将每个像素分配到不同的目标实例,常用的方法包括Mask R-CNN等。
此外,计算机视觉还涉及图像生成、图像增强、图像超分辨率、视频分析等方面的研究。图像生成通过计算机程序生成新的图像,常用的方法包括生成对抗网络(GAN)和自编码器(Autoencoder)。图像增强旨在改善图像的质量和细节,常用的方法包括图像去噪、图像增强、图像超分辨率等。图像超分辨率是指通过算法将低分辨率图像提升为高分辨率图像。视频分析涉及到对视频序列进行目标跟踪、视频理解和动作识别等任务。
总之,计算机视觉是通过算法和模型实现图像与视频的理解和分析,可以应用于图像分类、目标检测、图像生成、图像增强等领域,具有广泛的应用前景。