计算机视觉可能是受深度学习发展影响最大的领域之一。
在计算机视觉领域,利用深度学习来解决问题,并发展和展示能力,可能很困难。人们不清楚该如何入门,哪些是最重要的技术,以及哪些类型的问题和项目能最好地突出深度学习在该领域带来的价值。
一种方法是系统地发展和同时展示在数据处理、建模技术和应用领域的 competence,并通过完成项目的公开作品集来展示您的成果。这种方法允许您从一个项目到另一个项目积累技能。它还为实际项目提供了基础,这些项目可以展示并与潜在雇主讨论,以证明您的能力。
在这篇文章中,您将了解如何发展和展示在计算机视觉问题中应用深度学习的能力。
阅读本文后,你将了解:
- 建立一个小型已完成项目组合,既可以在未来新项目中加以利用,也可以展示您在计算机视觉深度学习项目中的能力。
- 项目范围可以保持较小,但仍能展示系统的问题解决方法和熟练模型开发。
- 可以遵循一个三级能力框架,包括数据处理能力、技术能力和应用能力。
通过我的新书《计算机视觉深度学习》来启动您的项目,其中包括分步教程和所有示例的 Python 源代码文件。
让我们开始吧。

如何培养和展示计算机视觉深度学习能力
图片来自 Sole Perez,保留部分权利。
概述
本教程分为三个部分;它们是:
- 用于计算机视觉的深度学习
- 开发小型项目组合
- 计算机视觉深度学习能力框架
用于计算机视觉的深度学习
深度学习发展影响最大的领域之一可能就是计算机视觉。
计算机视觉是人工智能的一个子领域,主要关注理解图像(如照片和视频)中的数据。
计算机视觉任务,如识别手写数字和照片中的物体,是一些早期案例研究,展示了现代深度学习技术实现最先进结果的能力。
作为一名实践者,您可能希望在计算机视觉领域发展并展示您的深度学习技能。
这确实假定了一些事情,例如
- 您熟悉应用机器学习,这意味着您能够端到端地完成预测建模项目并交付熟练的模型。
- 您熟悉深度学习技术,这意味着您知道主要方法之间的区别以及何时使用它们。
这并不意味着您是专家,仅仅表示您具有实践知识,能够系统地解决问题。
作为机器学习甚至深度学习从业者,您如何展示在计算机视觉应用方面的能力?
想通过深度学习实现计算机视觉成果吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
开发小型项目组合
通过基于项目的方法,可以发展和展示计算机视觉深度学习的能力。
具体来说,通过完成并展示在计算机视觉问题上使用深度学习技术的小型项目,可以逐步建立和展示技能。
这要求您建立一个已完成项目的作品集。作品集在两个方面对您有所帮助
- 技能发展:作品集中的项目代码和研究结果可以被您用于未来的项目,加速您的进步,并让您能够承担更大、更具挑战性的项目。
- 技能展示:项目的公开展示提供了您能力的证明,为与潜在雇主讨论 API、模型选择和设计决策提供了基础。
项目可以专注于标准的公共计算机视觉数据集,例如由学者开发和托管的,或用于机器学习竞赛的数据集。
项目可以系统地完成,包括明确的问题定义、相关文献和模型的审查、模型开发和调整,以及以报告、笔记本甚至幻灯片演示形式呈现结果和发现等各个方面。
项目规模很小,这意味着它们可以在一个工作日内完成,也许会分散到几个晚上和周末。这很重要,因为它限制了项目的范围,使其侧重于工作流程和交付熟练的结果,而不是开发最先进的结果。
计算机视觉深度学习能力框架
项目可以精心选择,以便在挑战或复杂性方面以及在杠杆或技能发展方面都得以提升。
以下是一个三级框架,用于开发和展示计算机视觉深度学习能力,适用于已熟悉应用机器学习基础和深度学习基础的实践者
- 一级:数据处理能力。您知道如何加载和操作图像数据。
- 二级:技术能力。您知道如何定义、拟合和调整卷积神经网络。
- 三级:应用能力。您能够为常见的计算机视觉问题开发熟练的深度学习模型。
一级:数据处理能力
数据处理能力指的是加载和转换数据的能力。
这包括基本的输入/输出操作,例如加载和保存图像或视频数据。
最重要的是,它涉及使用标准 API 来操纵图像数据,以便在为深度学习神经网络建模准备数据时可能有用。
示例包括
- 图像调整大小和插值。
- 图像模糊和锐化。
- 图像仿射变换。
- 图像白化和阈值化。
数据处理可以通过多种图像处理 API 来演示,例如
它可能包括机器学习和深度学习库的基本数据处理能力,例如
您在 Python 中最喜欢的图像处理 API 是什么?
在下面的评论中告诉我。
二级:技术能力
技术能力指的是使用专门用于计算机视觉问题的深度学习模型和方法的能力。
这从高层次包括三类主要方法
- 多层感知器,或 MLP。
- 卷积神经网络,或 CNN。
- 循环神经网络,例如长短期记忆网络,或 LSTM。
更具体地说,这需要展示出如何配置和充分利用 CNN 中使用的层的强大技能,例如
这还可能包括对某些通用有效模型类的技能,例如
- ImageNet CNN,例如 AlexNet、VGG、ResNet、Inception 等。
- CNN-LSTMs、LSTM-CNNs 等。
- R-CNNs、YOLO 等。
您在计算机视觉领域最喜欢的深度学习技术是什么?
在下面的评论中告诉我。
三级:应用能力
应用能力指的是能够解决特定的计算机视觉问题,并使用深度学习方法提供一个熟练的模型。
一个熟练的模型意味着该模型能够做出比朴素基线方法性能更好的预测。这并不意味着达到最先进的结果并复制论文中的模型和结果,尽管如果它们在小型项目的范围内,它们也是不错的项目想法。
项目应系统地完成,包括以下大部分甚至所有步骤
- 问题描述。描述预测建模问题,包括领域和相关背景。
- 文献综述。描述使用深度学习方法解决该问题的标准或常见方法,如开创性研究和/或近期研究论文所述。
- 数据汇总。描述可用数据,包括统计摘要和数据可视化。
- 评估模型。对一系列模型类型、配置、数据准备方案等进行抽样检查,以缩小在该问题上效果良好的范围。
- 提升性能。通过超参数调整和集成方法来提升效果良好的模型或模型的性能。
- 展示结果。展示项目成果。
在此过程之前,第零步,可能是选择适合项目的公开数据集。
计算机视觉深度学习的基石是图像分类,通常称为图像识别或目标检测。这涉及根据图像(通常是照片)预测类别标签。
此类问题应成为焦点。
此类型的两个标准计算机视觉数据集包括
一个相关的计算机视觉任务是识别照片中一个或多个物体的位置,也称为物体识别、物体定位或分割。
- 物体识别与定位(例如 COCO)
还有一些任务涉及计算机视觉和自然语言处理的混合,例如
- 图片字幕(例如 Flickr8k)
最后,还有一些计算机视觉任务可以通过操纵现有标准数据集或照片目录来完成,例如
您最喜欢的深度学习在计算机视觉中的应用是什么?
在下面的评论中告诉我。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
API
- 多维图像处理(scipy.ndimage)API
- 多维图像处理(scipy.ndimage)教程
- scikit-image
- Pillow
- OpenCV
- OpenCV Python 教程
- sklearn.feature_extraction:特征提取 API
- Keras 图像预处理 API
数据集
文章
总结
在这篇文章中,您了解了如何在计算机视觉问题中发展和展示深度学习的能力。
具体来说,你学到了:
- 建立一个小型已完成项目组合,既可以在未来新项目中加以利用,也可以展示您在计算机视觉深度学习项目中的能力。
- 项目范围可以保持较小,但仍能展示系统的问题解决方法和熟练模型的开发。
- 可以遵循一个三级能力框架,包括数据处理能力、技术能力和应用能力。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
一篇文笔流畅、内容充实、易于理解的文章。Brownlee 显然是该领域的专家,并且非常擅长为不同背景和职责的读者提炼重要概念。
谢谢。
嗨,Jason,感谢您撰写如此出色的博客。迫不及待地期待您撰写一本关于使用深度学习进行计算机视觉的书籍 :)
这几乎可以形成一个指导原则,将一个人从初步兴趣培养到能够胜任许多项目。谢谢。
谢谢。
谢谢,我希望能很快发布一本关于这个主题的书——我正在最后定稿。
非常感谢您撰写此文,Jason!
这是关于如何设计计算机视觉项目的一个极好的指导。
初学者需要了解和准备什么。谢谢!
谢谢,很高兴对您有帮助。
谢谢 Jason……很棒的教程!您有计划发布一本关于计算机视觉的书籍吗?一旦发布,我很乐意购买。您的作品太棒了……互联网上最好的机器学习网站!
谢谢。
是的,我目前正在完成一本关于计算机视觉的书。希望下个月初(2019年4月)发布。
这将是一次非常有趣的体验!我对此非常兴奋。
非常感谢您撰写此文!
不客气,我很高兴它有所帮助。
亲爱的杰森,
我正在研究深度学习方法来检测一些疾病问题。但是医学图像处理中的特征是什么?例如在眼病诊断中
您说的特征是什么意思?您是指医学图像的特征吗?
如果是这样,我建议您阅读一些关于该主题的最新论文。
我指的是像宽度、颜色等等
我如何使用深度学习进行降维?请指导我,除了 MNIST 之外,还有哪些数据集可以用于此?
好问题。
也许可以使用自编码器?
尊敬的先生,
在图像分类中,您能推荐一个优于 CNN 的最佳特征提取技术和优于 SVM 的最佳分类器吗?
谢谢
我建议您在您的问题上测试一系列技术,通常没有“最佳”之说,这取决于数据。
感谢这篇精彩的文章。我需要一些建议。在您的文章中,您经常提到可以在几周内完成的小项目。
我想问一下,您会推荐哪些与计算机视觉或自然语言处理相关的项目,可以在一年内完成(一年只做1个项目)?
我问这个问题是因为我正在为我的毕业设计(本科生)寻找想法,这太令人困惑了。
希望您能帮助我。
谢谢
好问题,也许是这些项目中的一个
https://machinelearning.org.cn/applications-of-deep-learning-for-computer-vision/
感谢这篇好文章……我已经关注您一年了……我从您的文章和迷你课程中学到了很多……
谢谢,你做得很好!
如何将输入数据与图像结合起来?
我有图像以及3个值作为输入,1个值作为输出。
我不知道数组维度会是什么样子,而且大多数 CV 示例都有一个类作为输出。
我使用了 img_to_array,它的形状是 [100, 400, 400, 1] —> [图像数量, x轴, y轴, 灰度]
希望您理解我的问题,谢谢并致以最诚挚的问候。
不太确定,但图像和3个值不应该是一个单一的输入,而应该是分开的。您可以像这里的教程一样为图像创建一个 CNN,并为输入值创建另一个网络,然后在网络的后期阶段将它们组合起来。这应该是探索的方向。