知物由学 | 只要5行代码,就可以实现AI图像识别

2023-10-28 05:30

本文主要是介绍知物由学 | 只要5行代码,就可以实现AI图像识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

“知物由学”是网易云易盾打造的一个品牌栏目,词语出自汉·王充《论衡·实知》。人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道。“知物由学”希望通过一篇篇技术干货、趋势解读、人物思考和沉淀给你带来收获的同时,也希望打开你的眼界,成就不一样的你。当然,如果你有不错的认知或分享,也欢迎通过邮件投稿 :zhangyong02@corp.netease.com

 

本文作者:Moses Olafenwa,DeepQuest AI的联合创始人和CEO;译者:徐驰骋。

 

导语:在这篇文章中,我们将简要介绍人工智能领域,特别是计算机视觉领域中遇到的挑战,这些挑战的现有解决方法以及如何快捷地使用这些方法。

 

人工智能作为一个科学和工程的研究领域已经有数十年的历史了。它试图揭开机器和计算机感知世界的奥秘,以此来更好地为人类工作服务。这个研究工作最重要的部分是使得计算机理解我们周围每天产生的视觉信息(图像和视频)。这个使得计算机感知理解视觉信息的领域就是所谓的计算机视觉。

在人工智能兴起的二十世纪五十年代到八十年代,通过手动给计算机输入指令来识别图片中的事物以及需要关注的特征。这种方法使用传统算法,要求使用者必须识别物体在每一个独特场景中的特征,并用计算机可以理解的数学模型表示这些特征,因此被称为专家系统。这涉及到很多繁琐的工作,因为一个物体的表示方法有成百上千种,独立存在的不同场景和对象也有数千种甚至数百万种,找到优化准确的数学模型来表示每个物体和场景以及它们所有可能的特征是一个无止境的工作。

 

到了二十世纪九十年代,机器学习的概念被提出,它开创了计算机自主识别代替手工输入指令识别图像的新时代。就像一个孩子通过学习来认识他/她周围的环境,我们让计算机通过算法来自主学习认知事物。也就是说,机器学习开辟了计算机学习认知事物的新道路。

 

 

随着性能强大的计算机芯片比如NVIDIA GPU和顶尖的图像识别深度学习算法的出现,比如Alex Krizhevsky等在2012年创造的AlexNet 算法、Kaeming He等在2015年创造的ResNet 算法、Forrest Landola等在2016年创造的SqueezeNet 算法、Gao Huang等在2016年创造的DenseNet 算法等,让自定义人工智能模型通过学习一组图片中的事物进而识别其他同类型事物成为可能。

 

训练一个可以识别图片中事物的人工智能模型涉及到很多应用数学和深度学习库的专业知识,更别说还要花费大量时间和承受巨大压力去写实现这种算法的代码以及使其和图像相匹配。这就是我们要解决的问题所在。

 

我们在AI Common的小组已经建立了一个只要五行代码就可以训练人工智能模型来识别任何物体的Python库,这个python库叫作ImageAI。建立这个库是为了让学生、开发者、研究人员等不同专业水平的人只用五行代码就能建立起拥有最顶尖的计算机视觉功能的系统和应用。现在,让我们开始建立你的第一个图像识别人工智能模型。

idenprof//train//chef// 900 images of chefs
idenprof//train//doctor// 900 images of doctors
idenprof//train//engineer// 900 images of engineer
idenprof//train//farmer// 900 images of farmers
idenprof//train//firefighter// 900 images of firefighters
idenprof//train//judge// 900 images of judges
idenprof//train//mechanic// 900 images of mechanics
idenprof//train//pilot// 900 images of pilots
idenprof//train//chef// 900 images of chef
idenprof//train//police// 900 images of police
idenprof//train//waiter// 900 images of waiters
idenprof//test//chef// 200 images of chefs
idenprof//test//doctor// 200 images of doctors
idenprof//test//engineer// 200 images of engineer
idenprof//test//farmer// 200 images of farmers
idenprof//test//firefighter// 200 images of firefighters
idenprof//test//judge// 200 images of judges
idenprof//test//mechanic// 200 images of mechanics
idenprof//test//pilot// 200 images of pilots
idenprof//test//chef// 200 images of chef
idenprof//test//police// 200 images of police
idenprof//test//waiter// 200 images of waiter

既然你已经明白如何准备用于训练人工智能模型的图片数据集,我们将继续指导你使用ImageAI训练一个人用于识别职业的工智能模型。

 

首先你必须通过这个链接下载IdenProf 数据集压缩包。你也可以用下面的链接查看用于识别职业的人工智能模型的所有细节和样本结果。


https://github.com/OlafenwaMoses/IdenProf

 

因为训练人工智能模型需要高性能计算机系统,我强烈建议你确保用来做模型训练的计算机拥有NVIDIA GPU。你也可以使用Google Colab(谷歌实验室)来做这次实验,它可以提供一个免费的NVIDIA K80 GPU。

 

接下来你必须安装ImageAI 和它的依赖模块。

 

1)从Python官网下载和安装Pyhton3

 

https://python.org

 

2)使用pip安装如下依赖包

 

i. Tensorflow

 

pip install tensorflow

 

ii. Numpy

 

pip install numpy

 

iii. SciPy

 

pip install scipy

 

iv. OpenCV

 

pip install opencv-python

 

v. Pillow

 

pip install pillow

 

vi. Matplotlib

 

pip install matplotlib

 

vii. H5py

 

pip install h5py

 

viii. Keras

 

pip install keras

 

ix. ImageAI

 

pip3 install https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.2/imageai-2.0.2-py3-none-any.whl

 

新建一个python文件,比如“FirstTraining.py”,将IdenProf数据集压缩包拷贝到你的Python文件所在目录并解压。然后拷贝下面的代码到python文件。(比如FirstTraining.py)

from imageai.Prediction.Custom import ModelTrainingmodel_trainer = ModelTraining()
model_trainer.setModelTypeAsResNet()
model_trainer.setDataDirectory("idenprof")
model_trainer.trainModel(num_objects=10, num_experiments=200, enhance_data=True, batch_size=32, show_network_summary=True)

就是它!那是你训练人工智能模型所需的所有代码。运行前,让我们来解释下这些代码。

 

在第一行,导入ImageAI的模型训练类。在第二行,创建一个模型训练类实例。在第三行,我们设置模型类型为ResNet(这里有4个模型类型可供选择,分别为SqueezeNet, ResNet, InceptionV3 和DenseNet)。在第四行,设置数据目录(数据集目录)为你解压的数据集文件夹。然后第五行,我们调用trainModel 函数,并给下列参数赋值:

 

  • number_objects :数据集中不同职业的分类数;
  • num_experiments :为了获得最大准确率,模型学习数据集中所有图片的次数;
  • Enhance_data (可选) :用来告诉模型训练器创建数据集中修改好图片的副本来确保获得最大准确率;
  • batch_size:直到学习完所有图片前,训练器一次学习的图片数;
  • Show_network_summary (可选):用于显示你当前使用训练人工智能模型的类型结构;
  • 现在你可以开始运行Python文件开始训练了。当训练开始时,你可以看到如下的结果:
=====================================

Total params: 23,608,202

Trainable params: 23,555,082

Non-trainable params: 53,120

___________________________________ ___

Using Enhanced Data Generation

Found 4000 images belonging to 4 classes.

Found 800 images belonging to 4 classes.

JSON Mapping for the model classes saved to C:\Users\User\PycharmProjects\FirstTraining\idenprof\json\model_class.json

Number of experiments (Epochs) : 200

Epoch 1/100

1/280 [>.............................] - ETA: 52s - loss: 2.3026 - acc: 0.2500

2/280 [>.............................] - ETA: 52s - loss: 2.3026 - acc: 0.2500

3/280 [>.............................] - ETA: 52s - loss: 2.3026 - acc: 0.2500

..............................,
..............................,
..............................,

279/280 [===========================>..] - ETA: 1s - loss: 2.3097 - acc: 0.0625Epoch 00000: saving model to C:\Users\User\PycharmProjects\FirstTraining\idenprof\models\model _ex-000_acc-0.100000.h5


280/280 [==============================] - 51s - loss: 2.3095 - acc: 0.0600 - val _loss: 2.3026 - val_acc: 0.1000

 

让我们详细解释下以上内容:

 

1.“JSON Mapping for the model classes saved to C:\Users\User\PycharmProjects\FirstTraining\idenprof\json\model_class.json”这段话表示模型训练器已经被保存为JSON文件,可以使用自定义图像预测类来识别其他图片(后面将对其进一步解释)。

 

2.Epoch 1/200这行表示网络执行了目标值200个训练的第一个训练。

 

3.1/280 [>………………………..] — ETA: 52s — loss: 2.3026 — acc: 0.2500 这行表示当前实验已经训练的批次。

 

4.Epoch 00000: saving model to C:\Users\User\PycharmProjects\FirstTraining\idenprof\models\model_ex-000_acc-0.100000.h5这行表示当前训练后保存的模型。ex_000表示当前阶段的实验,acc0.100000和valacc表示当前实验后的模型准确率(最高准确率为1.0)。这个结果帮助我们知道哪个图像预测模型是表现最好的。训练完模型后,你可以使用准确率最高模型的“CustomImagePrediction”类进行图片预测。

 

以防你缺少NVIDIA GPU而无法进行人工智能模型训练,出于本教程的目标,我们提供了一个用IdenProf数据集训练好的人工智能模型,你可以用它来进行数据集中图片的职业预测。

 

这个模型在训练61次后已经取得了79%的准确率。点击此链接下载该模型。
同样,如果你没有进行模型训练,通过链接下载IdenProf模型的JSON文件。然后,你就可以跟随如下指令,使用模型进行图像识别了。

 

下一步,创建一个Python文件并命名比如FirstCustomImageRecognition.py ,拷贝你下载的人工智能模型或者你训练的准确率最高的模型,将其复制到你新建Python文件所在目录。同样拷贝下载的或者训练产生的JSON文件,将其复制到新建Python文件所在目录。

 

拷贝一个或多个属于IdenProf数据集中职业种类的图片到新建Python文件所在目录。然后拷贝下面的代码到你的Python文件中。

from imageai.Prediction.Custom import CustomImagePrediction
import osexecution_path = os.getcwd()prediction = CustomImagePrediction()
prediction.setModelTypeAsResNet()
prediction.setModelPath("idenprof_061-0.7933.h5")
prediction.setJsonPath("idenprof_model_class.json")
prediction.loadModel(num_objects=10)predictions, probabilities = prediction.predictImage("image.jpg", result_count=3)for eachPrediction, eachProbability in zip(predictions, probabilities):
print(eachPrediction , " : " , eachProbability)

请看如下的样本图片和结果。

  • Waiter(服务员):99.99997615814209
  • Chef(厨师):1.568847380895022e-05
  • Judge(法官):1.0255866556008186e-05

 

是不是很简单!现在让我们解释上面产生这个预测结果的代码。

 

第一和第二行代码分别导入了ImageAI中用于图像识别的CustomImagePrediction 类(自定义图像预测类)和os类。第三行代码创建了一个变量并赋值了一个路径,该路径下包含Python文件(比如FirstCustomImageRecognition.py文件)和下载或训练的ResNet模型文件。

 

以上,我们用第4行代码创建了一个ImagePrediction()类实例,然后在第5行代码通过调用.setModelTypeAsResNet() 来设置预测对象的模型类型为ResNet 。然后在第6行,我们设置模型路径为拷贝到项目文件夹的人工智能模型路径(idenprof_061–0.7933.h5)。在第7行,我们设置JSON文件路径,在第8行加载模型。最后进行图像预测并打印结果到命令行。

 

自此,你已经学会了如何使用ImageAI 便捷地训练你的人工智能模型,用于预测图片中的对象或对象集合。

 

你可以在官方GitHub资源库找到所有使用ImageAI 训练自定义人工智能模型以及其他包含在ImageAI 中的计算机视觉特性的详细信息和文档:https://github.com/OlafenwaMoses/ImageAI

 

如果你是中小创业公司,在内容安全上觉得投入成本过高,无运营经验,也担心相关政策理解不到位,更担心投入了那么多没效果,那么你可以尝试用下易盾的内容安全业务,可点击一键接入专业的易盾内容安全解决方案

这篇关于知物由学 | 只要5行代码,就可以实现AI图像识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/291010

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形