计算机视觉的发展历程:从边缘检测到视觉大模型的演进

计算机视觉--历史发展回顾 如今,人工智能带来的技术革命火遍了全球,而计算机视觉作为人工智能的分支,借此机会,重温那些计算机视觉默默发展的岁月。 阅读详情

目录

一、 引言:让机器“看见”与“理解”

二、 萌芽期(1950s-1970s):受神经科学启发的初级感知

三、 多视角几何与早期理论构建期(1970s-1990s):三维重建的数学基础

四、 统计学习与特征工程期(1990s-2010s):从“手工设计”到“数据驱动”

五、 深度学习革命期(2012年至今):端到端学习的崛起

六、 大模型与多模态融合期(2020年至今):走向通用视觉智能

七、 结论与展望


摘要
计算机视觉作为人工智能的核心领域之一,旨在赋予机器“看”和理解世界的能力。本文系统梳理了计算机视觉自20世纪50年代至今的发展历程,将其划分为五个关键阶段:萌芽期(1950s-1970s)、多视角几何与早期理论构建期(1970s-1990s)、统计学习与特征工程期(1990s-2010s)、深度学习革命期(2012年至今) 以及 大模型与多模态融合期(2020年至今)。通过对每个阶段的核心思想、关键技术、里程碑事件及局限性的分析,本文揭示了计算机视觉从简单的边缘检测到能够理解复杂场景并生成逼真内容的巨大飞跃,并对其未来发展趋势进行了展望。

关键词: 计算机视觉;深度学习;卷积神经网络;ImageNet;视觉大模型;发展历程


一、 引言:让机器“看见”与“理解”

人类感知世界的80%以上信息来源于视觉,让机器具备类似的视觉能力是人工智能的终极目标之一。计算机视觉是一门研究如何使人工系统从图像或多维数据中“感知”、“理解”并“重构”客观世界的学科。其最终目标是使机器能够像人类一样解释和处理视觉信息,从而完成各种任务。回顾其超过半个世纪的发展史,计算机视觉走过了一条从受神经科学启发的简单模型,到严谨的数学物理理论,再到数据驱动的深度学习,最终迈向通用视觉智能的波澜壮阔的道路。

二、 萌芽期(1950s-1970s):受神经科学启发的初级感知

计算机视觉的雏形可以追溯到早期的模式识别和神经科学发现。

  • 核心思想: 模仿生物视觉系统的初级处理机制。

  • 关键技术:

    • Hubel & Wiesel的发现(1959): 两位神经科学家发现了猫的视觉皮层中存在对特定方向的边缘敏感的神经元。这一发现直接启发了后来的边缘检测算子。

    • 块世界(Blocks World)研究(1960s): Larry Roberts等人的开创性工作试图让计算机理解由简单几何体(如立方体、棱柱)构成的积木世界。他们通过提取线条、角点等特征来推理物体的三维结构。

    • 边缘检测算子(1970s): 出现了如Roberts、Sobel、Prewitt等算子,通过计算图像亮度的梯度来勾勒出物体的轮廓。这是最早期且最基础的图像特征提取方法。

  • 里程碑: David Marr于1982年出版的《Vision》一书提出了著名的视觉计算理论,将视觉信息处理分为三个层次:计算理论、表征与算法、硬件实现。该理论为整个领域建立了首个系统性的框架,影响深远。

  • 局限性: 处理能力极其有限,只能应对高度简化和约束的场景(如块世界),对真实世界复杂多变的图像无能为力。

人工智能之计算机视觉的发展历程与相关技术内容,相应的模型介绍 计算机视觉是一门多学科交叉的科学,它综合运用了图像处理、机器学习、统计学、计算机图形学等领域的知识和技术,旨在使计算机系统能够“看”并理解环境。这不仅仅是简单地识别图像中的物体,更在于理解这些物体之间的关系、它们的行为以及所处的上下文环境。简而言之,计算机视觉的目标是模拟人类视觉系统,实现对视觉数据的高层次理解。AlexNet是深度学习时代计算机视觉的开山之作,它首次使用GPU加速训练,拥有多达8层的深度结构,展示了深度网络在大规模图像分类上的巨大潜力。 阅读详情

相关推荐

计算机视觉五大核心研究任务全解:分类识别、检测分割、人体分析、三维视觉、视频分析

计算机视觉不仅是一门研究如何使机器理解和解释视觉世界的科学,更是一种追求让机器拥有与人类相近视觉处理能力的技术。它通过分析数字图像和视频,使得机器能够识别、追踪和理解现实世界中的对象和场景。此外,计算机视觉还包括图像恢复、三维重构等深入的研究方向。图像分类与识别作为计算机视觉的基石,其技术演进完美地反映了整个领域的快速进展。从手工设计的特征到复杂的深度学习模型,该领域不仅展示了计算机视觉的强大能力,还为未来的创新和发展奠定了坚实的基础。

2401_85325519的博客 2579

计算机视觉从像素到智能感知的跨时代演进

计算机视觉的目标是赋予机器“看”的能力,即通过摄像头等传感器获取视觉信息,并利用算法进行处理、分析和理解,最终实现对现实世界的智能感知。早期的计算机视觉任务,如边缘检测、轮廓提取,都是直接在这些低层次的像素数据上进行的。例如,看到“一个人拿着刀站在厨房的砧板前”,计算机应能推断出“此人可能在做饭”,而非简单地识别出“人”、“刀”、“厨房”等孤立物体。从简单的像素处理到复杂的智能感知,计算机视觉的演进是一部技术创新的编年史。当代计算机视觉的研究前沿已经超越了简单的物体识别,向着更深层次的场景理解和推理迈进。

jiaojienku的专栏 986

手把手带你编写miniQMT实盘量化执行程序(3) | 交易系统

本文介绍了miniQMT实盘量化执行系统的核心交易系统代码,重点讲解了其模块化设计和工作流程。系统采用主控类LiveSystem管理交易全流程,包含初始化引擎、交易日判断、交易时段划分(开盘前、盘中、收盘等)、主循环调度和异常处理等核心功能。作者详细解析了系统如何实现365天不间断运行、精准判断交易日、分阶段执行交易策略等功能,并强调系统的稳定性和异常处理机制。

1310

【Matlab 传感器布局优化】基于群智能算法的wsn覆盖优化研究

本文主要是对同构和异构传感器在指定空间内的布局进行优化,以最大覆盖率为目标,使用了DBO/SCA/WOA/SSA/NOA等启发式算法,在100x100的空间内,对30,100,200个传感器进行优化,得到最优的布局位置和对应覆盖率。

u013367499的博客 1820

深入解析LinuxCNC源码:从界面开发到硬件交互

本文深入解析LinuxCNC开源数控系统的源码架构与二次开发实践。详细介绍了从GTK+界面定制、Python脚本绑定,到硬件抽象层(HAL)配置与核心运动控制模块的完整开发流程。通过实战案例,帮助开发者掌握如何基于LinuxCNC源码进行界面开发和硬件交互定制,实现个性化数控系统。

weixin_29164843的博客 542

【随机过程】Markov Chain的定义及发展历程与实际应用

本模块书写的初衷:由于在学习张波张景肖等学者所著的《应用随机过程》存在着不甚了解的知识点,经过个人查找资料并整理、分享,希望能够为有同样疑惑的读者贡献绵薄之力,同时如果个人编写内容有错误,恳请读者指正。本文为对《应用随机过程》第42页中Markov Chain基本概念的补充。1.Markov Chain的定义俄国数学家 Andrey Andreyevich Markov 研究并提出一个用数学方法就能解释自然变化的一般规律模型,被命名为马尔科夫链(Markov Chain)。

qq_49657150的博客 3749

SPSS实战:5步搞定多指标联合诊断的ROC曲线分析(附Logistic回归教程)

本文详细介绍了如何使用SPSS软件进行多指标联合诊断的ROC曲线分析。通过5个实战步骤,从数据准备、二元Logistic回归建模生成综合预测概率,到绘制并比较单指标与联合模型的ROC曲线,帮助临床研究者有效整合多个诊断指标,提升模型判别能力(AUC),实现诊断效能的优化。

mqtt6iot的博客 1422

手把手教你用STM32单片机控制双向可控硅调光(附完整代码+电路图)

本文提供了一套完整的STM32单片机控制双向可控硅实现灯光无级调光的实战方案。详细讲解了硬件电路设计,包括过零检测与隔离驱动,并剖析了基于定时器中断的软件核心逻辑,通过精准的相位角计算实现平滑的灯光强度控制。附有完整代码与电路图,适合嵌入式开发者实践。

weixin_29194255的博客 960

智能汽车嘚啵嘚 --- 智能座舱第七稿:智能座舱的升级OTA

智能汽车嘚啵嘚 --- 智能座舱第七稿:智能座舱的升级OTA

Soly_kun的博客 414

【ESP 保姆级教程】玩转emqx数据集成篇④ ——数据桥接之HTTP服务

主要是学习数据桥接功能以及构建自己的http服务器,这是一个非常有用的功能。包括各种传感器上报基本上都需要数据桥接功能支持,所以还是希望认真学习这一块开发,然后结合数据库存储等等知识点进行进一步学习。

单片机菜鸟哥的博客 1307

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 面向资源受限终端的低功耗计算机视觉技术研究:挑战、方法与展望
下一篇: 列车速度预测的价值、应用场景与核心技术研究
交通上的硅基思维
博客等级 码龄4年 2763粉丝 913原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

交通上的硅基思维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值