如何用Python和深度神经网络识别图像?

简介:

只需要10几行Python代码,你就能自己构建机器视觉模型,对图片做出准确辨识和分类。快来试试吧!


视觉


进化的作用,让人类对图像的处理非常高效。


这里,我给你展示一张照片。


0?wx_fmt=jpeg


如果我这样问你:


你能否分辨出图片中哪个是猫,哪个是狗?


你可能立即会觉得自己遭受到了莫大的侮辱。并且大声质问我:你觉得我智商有问题吗?!


息怒。


换一个问法:


你能否把自己分辨猫狗图片的方法,描述成严格的规则,教给计算机,以便让它替我们人类分辨成千上万张图片呢?


对大多数人来说,此时感受到的,就不是羞辱,而是压力了。


如果你是个有毅力的人,可能会尝试各种判别标准:图片某个位置的像素颜色、某个局部的边缘形状、某个水平位置的连续颜色长度……


你把这些描述告诉计算机,它果然就可以判断出左边的猫和右边的狗了。


问题是,计算机真的会分辨猫狗图片了吗?


我又拿出一张照片给你。


0?wx_fmt=jpeg


你会发现,几乎所有的规则定义,都需要改写。


当机器好不容易可以用近似投机取巧的方法正确分辨了这两张图片里面的动物时,我又拿出来一张新图片……


0?wx_fmt=png


几个小时以后,你决定放弃。


别气馁。


你遭遇到的,并不是新问题。就连大法官,也有过同样的烦恼。


0?wx_fmt=jpeg


1964年,美国最高法院的大法官Potter Stewart在“Jacobellis v. Ohio”一案中,曾经就某部电影中出现的某种具体图像分类问题,说过一句名言“我不准备就其概念给出简短而明确的定义……但是,我看见的时候自然会知道”(I know it when I see it)。


原文如下:


I shall not today attempt further to define the kinds of material I understand to be embraced within that shorthand description (“hard-core pornography”), and perhaps I could never succeed in intelligibly doing so. But I know it when I see it, and the motion picture involved in this case is not that.


考虑到精神文明建设的需要,这一段就不翻译了。


人类没法把图片分辨的规则详细、具体而准确地描述给计算机,是不是意味着计算机不能辨识图片呢?


当然不是。


2017年12月份的《科学美国人》杂志,就把“视觉人工智能”(AI that sees like humans)定义为2017年新兴技术之一。


0?wx_fmt=jpeg


你早已听说过自动驾驶汽车的神奇吧?没有机器对图像的辨识,能做到吗?


你的好友可能(不止一次)给你演示如何用新买的iPhone X做面部识别解锁了吧?没有机器对图像的辨识,能做到吗?


0?wx_fmt=jpeg


医学领域里,计算机对于科学影像(如X光片)的分析能力,已经超过有多年从业经验的医生了。没有机器对图像的辨识,能做到吗?


0?wx_fmt=png


你可能一下子觉得有些迷茫了——这难道是奇迹?


不是。


计算机所做的,是学习。


通过学习足够数量的样本,机器可以从数据中自己构建模型。其中,可能涉及大量的判断准则。但是,人类不需要告诉机器任何一条。它是完全自己领悟和掌握的。


你可能会觉得很兴奋。


那么,下面我来告诉你一个更令你兴奋的消息——你自己也能很轻易地构建图片分类系统!


不信?请跟着我下面的介绍,来试试看。


数据


咱们就不辨识猫和狗了,这个问题有点不够新鲜。


咱们来分辨机器猫,好不好?


对,我说的就是哆啦a梦。


0?wx_fmt=png


把它和谁进行区分呢?


一开始我想找霸王龙,后来觉得这样简直是作弊,因为他俩长得实在差别太大。


0?wx_fmt=png


既然哆啦a梦是机器人,咱们就另外找个机器人来区分吧。


一提到机器人,我立刻就想起来了它。


0?wx_fmt=png


对,机器人瓦力(WALLE)。


我给你准备好了119张哆啦a梦的照片,和80张瓦力的照片。图片已经上传到了这个Github项目(https://github.com/wshuyi/demo-python-image-classification)。


请点击这个链接(https://link.jianshu.com/?t=https%3A%2F%2Fgithub.com%2Fwshuyi%2Fdemo-python-image-classification%2Farchive%2Fmaster.zip),下载压缩包。然后在本地解压。作为咱们的演示目录。


解压后,你会看到目录下有个image文件夹,其中包含两个子目录,分别是doraemon和walle。


0?wx_fmt=png


打开其中doraemon的目录,我们看看都有哪些图片。


0?wx_fmt=png


可以看到,哆啦a梦的图片真是五花八门。各种场景、背景颜色、表情、动作、角度……不一而足。


这些图片,大小不一,长宽比例也各不相同。


我们再来看看瓦力,也是类似的状况。


0?wx_fmt=png


数据已经有了,下面我们来准备一下环境配置。


环境


我们使用Python集成运行环境Anaconda。


请到这个网址(https://www.anaconda.com/downloads)下载最新版的Anaconda。下拉页面,找到下载位置。根据你目前使用的系统,网站会自动推荐给你适合的版本下载。我使用的是macOS,下载文件格式为pkg。


0?wx_fmt=png


下载页面区左侧是Python 3.6版,右侧是2.7版。请选择2.7版本。


双击下载后的pkg文件,根据中文提示一步步安装即可。


0?wx_fmt=png


安装好Anaconda后,我们需要安装TuriCreate。


请到你的“终端”(Linux, macOS)或者“命令提示符”(Windows)下面,进入咱们刚刚下载解压后的样例目录。


执行以下命令,我们来创建一个Anaconda虚拟环境,名字叫做turi。


conda create -n turi python=2.7 anaconda


然后,我们激活turi虚拟环境。


source activate turi


在这个环境中,我们安装最新版的TuriCreate。


pip install -U turicreate



转自:http://blog.csdn.net/nkwshuyi/article/details/78956890


目录
相关文章
|
1天前
|
机器学习/深度学习 PyTorch TensorFlow
【Python机器学习专栏】循环神经网络(RNN)与LSTM详解
【4月更文挑战第30天】本文探讨了处理序列数据的关键模型——循环神经网络(RNN)及其优化版长短期记忆网络(LSTM)。RNN利用循环结构处理序列依赖,但遭遇梯度消失/爆炸问题。LSTM通过门控机制解决了这一问题,有效捕捉长距离依赖。在Python中,可使用深度学习框架如PyTorch实现LSTM。示例代码展示了如何定义和初始化一个简单的LSTM网络结构,强调了RNN和LSTM在序列任务中的应用价值。
|
1天前
|
机器学习/深度学习 PyTorch TensorFlow
【Python机器学习专栏】卷积神经网络(CNN)的原理与应用
【4月更文挑战第30天】本文介绍了卷积神经网络(CNN)的基本原理和结构组成,包括卷积层、激活函数、池化层和全连接层。CNN在图像识别等领域表现出色,其层次结构能逐步提取特征。在Python中,可利用TensorFlow或PyTorch构建CNN模型,示例代码展示了使用TensorFlow Keras API创建简单CNN的过程。CNN作为强大深度学习模型,未来仍有广阔发展空间。
|
1天前
|
机器学习/深度学习 自然语言处理 语音技术
【Python 机器学习专栏】Python 深度学习入门:神经网络基础
【4月更文挑战第30天】本文介绍了Python在深度学习中应用于神经网络的基础知识,包括神经网络概念、基本结构、训练过程,以及Python中的深度学习库TensorFlow和PyTorch。通过示例展示了如何使用Python实现神经网络,并提及优化技巧如正则化和Dropout。最后,概述了神经网络在图像识别、语音识别和自然语言处理等领域的应用,并强调掌握这些知识对深度学习的重要性。随着技术进步,神经网络的应用将持续扩展,期待更多创新。
|
1天前
|
机器学习/深度学习 计算机视觉 Python
【Python 机器学习专栏】图像数据的特征提取与预处理
【4月更文挑战第30天】本文探讨了图像数据的特征提取与预处理在机器学习中的重要性。图像数据具有大容量、信息丰富和冗余性高的特点。特征提取涉及颜色、纹理和形状特征;预处理包括图像增强、去噪和分割。Python的OpenCV和Scikit-image库在处理这些任务时非常有用。常见的特征提取方法有统计、变换和基于模型的方法,而预处理应注意保持图像真实性、适应性调整及验证评估。有效的特征提取和预处理能提升模型性能,Python工具使其更高效。
|
1天前
|
机器学习/深度学习 数据可视化 TensorFlow
Python用线性回归和TensorFlow非线性概率神经网络不同激活函数分析可视化
Python用线性回归和TensorFlow非线性概率神经网络不同激活函数分析可视化
|
2天前
|
机器学习/深度学习 PyTorch 算法框架/工具
Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化
Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化
|
2天前
|
机器学习/深度学习 人工智能 计算机视觉
使用Python实现简单的图像识别应用
本文介绍了如何使用Python编写一个简单的图像识别应用程序。通过结合Python的图像处理库和机器学习库,我们可以轻松地构建一个能够识别特定物体或图案的程序。本文将从安装必要的库开始,然后逐步介绍如何编写代码来实现图像的加载、处理和识别。
|
3天前
|
网络协议 算法 网络架构
Python网络编程之udp编程、黏包以及解决方案、tcpserver
Python网络编程之udp编程、黏包以及解决方案、tcpserver
|
5天前
|
网络协议 算法 Linux
【Linux】深入探索:Linux网络调试、追踪与优化
【Linux】深入探索:Linux网络调试、追踪与优化
|
1天前
|
JSON 网络协议 Linux
Linux ip命令:网络的瑞士军刀
【4月更文挑战第25天】
8 1