热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

计算机视觉入门:我推荐你这样学习!【转】

近年来,计算机视觉取得了很大进展。这些是我将在这里提到的主题内容:技术:应用:关注的人:重要的深度学习创始人:Andrewng,Yannlecun,Bengioyoshua,Hin

近年来,计算机视觉取得了很大进展。这些是我将在这里提到的主题内容:

技术:

  1. 人脸检测:Haar,HOG,MTCNN,Mobilenet
  2. 面部识别:CNN,Facenet
  3. 对象识别:alexnet,inceptionnet,resnet
  4. 迁移学习:在一个新主题上用很少的资源重新训练大型神经网络
  5. 图像分割:rcnn
  6. GAN
  7. 计算机视觉硬件:选择什么,GPU很重要
  8. 集成视觉的UI应用程序:ownphotos

应用:

  1. 个人照片组织
  2. 自动驾驶汽车
  3. 自主无人机
  4. 解决验证码/ OCR
  5. 过滤基于图片的网站/应用程序的图片
  6. 自动标记应用的图片
  7. 从视频中提取信息(电视节目、电影)
  8. 视觉问题回答
  9. 艺术

关注的人:

  重要的深度学习创始人:Andrew ng,Yann lecun,Bengio yoshua,Hinton joffrey

课程 :

  1. deep learning@ coursera
  2. machine learning@ coursera

相关领域:

  • 深度强化学习:使用cnn作为输入层,查看ppo和dqn
  • 与nlp的交互:lstm 2 cnn

人脸检测

技术分享图片

面部检测是关于在面部周围放置盒子

人脸检测是检测人脸的其中一项任务。有几种算法可以做到这一点。

https://github.com/nodefluxio/face-detector-benchmark提供了这些方法的速度基准,并且有易于重用的实现代码。

Haar 分类器

技术分享图片

Haar 特征

它们是自2000年以来在opencv中出现的旧计算机视觉方法。

它是一种机器学习模型,具有专门用于对象检测的功能。 Haar 分类器速度快但准确度低。

请参阅https://docs.opencv.org/3.4.3/d7/d8b/tutorial_py_face_detection.html中有关如何使用它的更长解释和示例

HOG:方向梯度直方图

技术分享图片

方向梯度直方图

HOG是一种新的生成对象检测功能的方法:它自2005年开始使用。它基于计算图像像素的梯度,然后将这些特征馈送到机器学习算法中,例如SVM。它具有比haar分类器更好的精度。

它的一个实现在dlib中。这是在face_recognition(https://github.com/ageitgey/face_recognition)库中。

MTCNN

一种使用CNN变化来检测图像的新方法,精度更高但速度稍慢。请参阅https://kpzhang93.github.io/MTCNN_face_detection_alignment/index.html

MobileNet

这是我这些天用于面部检测的最好和最快的方法,基于通用移动网络架构。请参阅https://arxiv.org/abs/1704.04861

物体检测

技术分享图片

对许多物体进行物体检测

可以使用与面部检测类似的方法来实现对象检测。

这里有2篇文章介绍了实现它的最新方法。这些方法有时也提供了对象类(实现对象识别):

  • (https://towardsdatascience.com/review-r-fcn-positive-sensitive-score-maps-object-detection-91cd2389345c r-fcn
  • https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e a comparison of r-cnn, fast r-cnn, faster r-cnn and yolo)

卷积神经网络

最近深度学习的进展使新架构取得了很大成功。

使用许多卷积层的神经网络就是其中之一。卷积层利用图像的2D结构在神经网络的下一层中生成有用信息。有关什么是卷积的详细说明,请参阅https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1。

技术分享图片

卷积层

物体识别

对象识别是将对象分类为类别(如猫,狗,......)的一般问题

基于卷积的深度神经网络已被用于在此任务上取得很好的效果。

ILSVR会议一直在ImageNet上举办竞赛(http://www.image-net.org/许多图片的数据库,包括猫、狗等物品标签)

更成功的神经网络现在已经使用越来越多的层。

技术分享图片

 

ResNet架构是迄今为止对对象进行分类的最佳选择。

技术分享图片

Resnet架构

要正确地训练它,需要使用数百万张图像,即使使用数十个昂贵的GPU也仍然需要花费大量时间。

这就是为什么每次都不需要在这些大数据集上进行重新训练的方法非常有用的原因。迁移学习和嵌入就是采用的这样的方法。

有关resnet的预训练模型,请访问https://github.com/tensorflow/tensor2tensor#image-classification

人脸识别

面部识别就是要弄清楚谁是一张脸。

历史方法

解决该任务的历史方法是将特征工程应用于标准机器学习(例如svm)或应用深度学习方法进行对象识别。

这些方法的问题是它们需要每个人的大量数据。实际上,数据并不总是可用的。

Facenet

谷歌研究人员在2015年推出了Facenet( https://arxiv.org/abs/1503.03832)。它提出了一种识别面部的方法,但却不需要为每个人提供大量的面部样本。

它的工作方式是拍摄大量面孔的图片数据集(例如http://vis-www.cs.umass.edu/lfw/)。

然后采用现有的计算机视觉架构,例如初始(或resnet),然后用计算面部嵌入的层替换对象识别NN的最后一层。

对于数据集中的每个人,(负样本、正样本、第二正样本)选择三个面(使用启发法)并将其馈送到神经网络,这产生了3个嵌入。在这3次嵌入中,计算三重态损失,这使得正样本与任何其他正样本之间的距离最小化,并且最大化位置样本与任何其他负样本之间的距离。

技术分享图片

三元组损失

技术分享图片

 

最终结果是每个面(即使在原始训练集中不存在的面)现在也可以表示为一个嵌入,它与其他人的面部嵌入有很大距离的嵌入(128数字的向量)。

然后,这些嵌入可以与任何机器学习模型(甚至简单的诸如knn)一起使用来识别人。

关于facenet和face embedding非常有趣的事情就是使用它你可以识别只有几张照片或者只有一张照片的人。

这是它的一个tensorflow实现:https://github.com/davidsandberg/facenet

这是人脸识别管道背后的思想的一个很酷的应用,而不是识别熊脸:https://hypraptive.github.io/2017/01/21/facenet-for-bears.html

迁移学习

技术分享图片

在自定义数据集上快速重新构建精确的神经网络

训练非常深的神经网络(如resnet)是非常耗费资源的,需要大量数据。

计算机视觉是高度计算密集型的(对多个gpu进行数周的训练)并且需要大量数据。为了解决这个问题,我们已经讨论过为面部计算通用嵌入。另一种方法是采用现有网络并仅在其他数据集上重新训练其几个层。

这是一个教程:codelab教程。它建议你重新训练一个初始模型,训练未知的花类。

https://medium.com/@14prakash/transfer-learning-using-keras-d804b2e04ef8提供了在进行迁移学习时应该对哪一层进行再训练的良好指导。

图像分割

技术分享图片

用于自动驾驶的图像分割

近年来,图像分割成为了一项令人印象深刻的新任务。它包括识别图像的每个像素。

此任务与对象检测有关。实现它的一种算法是mask r-cnn。

GAN

技术分享图片

大规模的GAN

由ian goodfellow引入的Generative Adversial Networks是一个神经网络架构,分为两部分:鉴别器和发生器。

  • 鉴别器检测图片是否是类,它通常在对象分类数据集上预先训练。
  • 生成器为给定的类生成图像

在学习期间调整发生器的权重,以便产生鉴别器无法与该类的真实图像区分的图像。

以下是最大的GAN(https://arxiv.org/abs/1809.11096)生成的图像示例

请参阅https://github.com/eriklindernoren/Keras-GAN在keras中的GAN实现

计算机视觉硬件

技术分享图片

 

要训??练大型模型,需要大量资源。实现这一目标有两种方法。首先是使用云服务,例如google cloud或aws。第二种方法是自己构建一台带有GPU的计算机。

只需1000美元,就可以构建一台体面的机器来训练深度学习模型。

视觉界面

技术分享图片

面对自己的照片仪表板

Ownphotos是一个令人惊叹的用户界面,您可以导入照片并自动计算面部嵌入,进行物体识别和识别面部。

它用 :

  • 面部识别:face_recognition
  • 物体检测:densecap,places365

应用

技术分享图片

视觉问题回答

计算机视觉有很多应用:

  • 个人照片组织
  • 自动驾驶汽车
  • 自动无人机
  • 解决验证码/ OCR
  • 过滤基于图片的网站/应用程序的图片
  • 自动标记应用的图片
  • 从视频中提取信息(电视节目,电影)
  • 视觉问题解答:结合NLP和计算机视觉
  • 艺术:GAN

结论

正如我们在这里看到的,这里有许多新的有趣的方法和应用程序。

我认为人工智能在一般情况下最有趣的是特别是在可以重复使用的学习算法中,能够将这些方法应用于越来越多的任务,而不需要太多的处理能力和数据:

  • 迁移学习:它可以使得重新利用预训练的大型神经网络成为可能
  • 嵌入(例如facenet):可以识别许多类而无需对这些类中的任何类进行训练

转自:https://www.toutiao.com/i6628041041964433934/?iid=52489949221&app=news_article&group_id=6628041041964433934×tamp=1543476801

计算机视觉入门:我推荐你这样学习!【转】


推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • 本文详细介绍了DMA控制器如何通过映射表处理来自外设的请求,包括映射表的设计和实现方法。 ... [详细]
  • Spark中使用map或flatMap将DataSet[A]转换为DataSet[B]时Schema变为Binary的问题及解决方案
    本文探讨了在使用Spark的map或flatMap算子将一个数据集转换为另一个数据集时,遇到的Schema变为Binary的问题,并提供了详细的解决方案。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 使用Jsoup解析并遍历HTML文档时,该库能够高效地生成一个清晰、规范的解析树,即使源HTML文档存在格式问题。Jsoup具备强大的容错能力,能够处理多种异常情况,如未闭合的标签等,确保解析结果的准确性和完整性。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • 在 LeetCode 的“有效回文串 II”问题中,给定一个非空字符串 `s`,允许删除最多一个字符。本篇深入解析了如何判断删除一个字符后,字符串是否能成为回文串,并提出了高效的优化算法。通过详细的分析和代码实现,本文提供了多种解决方案,帮助读者更好地理解和应用这一算法。 ... [详细]
  • 系统数据实体验证异常:多个实体验证失败的错误处理与分析
    在使用MVC和EF框架进行数据保存时,遇到了 `System.Data.Entity.Validation.DbEntityValidationException` 错误,表明存在一个或多个实体验证失败的情况。本文详细分析了该错误的成因,并提出了有效的处理方法,包括检查实体属性的约束条件、调试日志的使用以及优化数据验证逻辑,以确保数据的一致性和完整性。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 本项目通过Python编程实现了一个简单的汇率转换器v1.02。主要内容包括:1. Python的基本语法元素:(1)缩进:用于表示代码的层次结构,是Python中定义程序框架的唯一方式;(2)注释:提供开发者说明信息,不参与实际运行,通常每个代码块添加一个注释;(3)常量和变量:用于存储和操作数据,是程序执行过程中的重要组成部分。此外,项目还涉及了函数定义、用户输入处理和异常捕获等高级特性,以确保程序的健壮性和易用性。 ... [详细]
  • 本文详细解析了Autofac在高级应用场景中的具体实现,特别是如何通过注册泛型接口的类来优化依赖注入。示例代码展示了如何使用 `builder.RegisterAssemblyTypes` 方法,结合 `typeof(IEventHandler).Assembly` 和 `Where` 过滤条件,动态注册所有符合条件的类,从而简化配置并提高代码的可维护性。此外,文章还探讨了这一方法在复杂系统中的实际应用及其优势。 ... [详细]
author-avatar
2d15064efa_556
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有