找回密码
 立即注册
搜索

运用Python代码训练图像辨认详细示例

在本文中,我们将简要引见人工智能范畴,特别是计算机视觉范畴,所触及的应战,针对这些应战的现有古代处理方案以及如何方便,轻松地运用这些处理方案,而无需花费太多工夫和精神。

人工智能几十年来不断是一个研讨范畴,迷信家和工程师都在努力解开让机器和计算机充分感知和了解我们的世界以便正确行事和为人类服务的奥秘感。这项研讨工作最重要的一个方面是让计算机了解我们周围每天产生的视觉信息(图像和视频)。让计算机感知和了解视觉信息的这个范畴被称为计算机视觉。




在20 世纪50年代到80年代人工智能研讨的兴起时期,计算机手动给出了如何辨认图像,图像中的物体以及要留意的特征的指令。这种方法是传统算法,称为专家系统由于他们要求人类为每个独特的对象场景辨认特征的痛苦,这些特征必须被辨认并且在计算机可以了解的数学模型中表示这些特征。这触及到大量繁琐的工作,由于有数百种不同的方式可以表示对象,并且存在数千(甚至数百万)个独特存在的不同场景和对象,因此找到优化且准确的数学模型代表每个对象或场景的一切能够特征,对于一切能够的对象或场景,更多的工作将永远持续。

然后,在20 世纪90年代,机器学习的概念被引入,它迎来了一个时代,在这个时代,我们可以设计算法,而不是告诉计算机在辨认图像和视频中的场景和对象时需求留意什么。学习如何辨认图像中的场景和物体,就像孩子学会经过探求来了解他/她的环境一样。机器学习为计算机学习辨认几乎任何我们想要的场景或对象开拓了道路。




随着英伟达gpu等功能弱小的计算机的出现,以及阿历克斯·克里日夫斯基(Alex Krizhevsky)等人2012年推出的AlexNet等最先进的图像辨认深度学习算法,以及He等人2015年推出的ResNet, Forrest Landola等人2016年推出的squeeze et,我们可以把一些图片放在一同,定义一个人工智能模型,本人去学习这些图片中的场景和对象的特征,并应用学习过程中获得的知识去辨认它之后遇到的场景或对象的一切其他实例。

ImageAI是一个python库,用来让具有各种专业知识的先生、开发人员和研讨人员运用5到15行简单的代码构建具有最先进计算机视觉功能的系统和运用程序。如今,让我们经过创建你的第一个人工智能模型来引导你,它可以辨认你想要的任何东西。




要训​​练您的人工智能模型,您需求一组称为数据集的图像。数据集包含数百到数千个您希望人工智能模型辨认的对象样本图像。但你没有担心!我们如今不会要求您下载数千张图片来训练您的人工智能模型。在本教程中,我们提供了一个名为IdenProf的数据集(https://github.com/OlafenwaMoses/IdenProf)。IdenProf(Identifiable Professionals)是一个数据集,包含10,000 个不同专业人员的11,000张照片,人们可以经过他们的穿衣方式看到并辨认他们的工作。图片在此数据集中的专业人员类别如下:
    ChefDoctorEngineerFarmerFirefighterJudgeMechanicPilotPoliceWaiter

该数据集分为9000(每个行业900张图片) 图片,以训练人工智能模型和2000(每个行业200张图片) 图片,以测试人工智能模型在训练时的功能。IdenProf曾经妥善安排并预备好训练您的人工智能模型,以经过他们的穿衣方式辨认专业人士。出于参考目的,假如您运用本人的图像数据集,则必须为希望人工智能模型辨认的每个对象或场景搜集至少500张图片。要训​​练您运用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 waiters

如今您曾经了解了如何预备本人的图像数据集来训练人工智能模型,如今我们将继续指点您培训人工智能模型,以辨认运用ImageAI的专业人员。

·首先,您必须经过此链接下载IdenProf数据集的zip 。您还可以查看人工智能模型的一切详细信息和样本结果,这些模型经过培训,可以辨认IdenProf GitHub存储库中的专业,其链接位于下方。

https://github.com/OlafenwaMoses/IdenProf

·由于培训人工智能模型需求高功能计算机系统,因此我激烈建议您确保您希望用于此培训的计算机/笔记本电脑具有NVIDIA GPU。或者,您可以运用Google Colab停止此实验,它可以提供收费的NVIDIA K80 GPU停止实验。

·然后您必须安装ImageAI及其依赖项。

1)从官方Python言语网站下载并安装Python 3

2)经过pip安装以下依赖项:

pip install tensorflow

pip install numpy

pip install scipy

pip install opencv-python

pip install pillow

pip install matplotlib

pip install h5py

pip install keras

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

创建一个包含您想要的任何称号的python文件,例如“FirstTraining.py”。

·将IdenProf数据集的zip复制到Python文件所在的文件夹中。然后将其解紧缩到同一个文件夹中。

·然后将下面的代码复制到python文件中(例如FirstTraining.py)。

from imageai.Prediction.Custom import ModelTraining

model_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(有四种可用的模型类型,即SqueezeNet,ResNet,InceptionV3和DenseNet)。在第四行中,我们将数据目录(dataset目录)设置为您解紧缩的数据集 zip文件的文件夹。然后在第五行中,我们调用trainModel函数并指定以下值:
    number_objects :这是指IdenProf数据集中不同类型的专业人员的数量。 num_experiments :这是模型训练idenprof数据集中一切图像以获得最大准确度的次数。 Enhance_data(可选) :这是为了告诉模型训练在IdenProf数据集中创建图像的修正副本,以确保完成最高精度。 batch_size:这是指模型训练一次研讨的图像数,直到它研讨了IdenProf数据集中的一切图像。 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.声明“ 保存到C:\ Users \ User \ PycharmProjects \ FirstTraining \ idenprof \ json \ model_class.json的模型类的JSON映射 ”表示模型训练已为idenprof数据集保存了一个JSON文件,您可以将其用于运用自定义图像预测类辨认其他图片。

2. Epoch 1/200表示网络正在执行目的200的第一次训练

3.1/280 [> ............................] - ETA:52s - 损失:2.3026 - acc:0.2500表示在当前实验中训练的批次数

4.Epoch 00000:保存模型到C:\ Users \ User \ PycharmProjects \ FirstTraining \ idenprof \ models \ model_ex-000_acc-0.100000.h5是指目前训练后保存的模型。该ex_000表示在这个阶段的实验,而ACC 0.100000和VAL ACC:0.1000表示本实验后测试图像上模型的准确度(精度的最大值为1.0)。此结果有助于了解可用于自定义图像预测的最佳执行模型。

完成人工智能模型的训练后,您可以运用“ CustomImagePrediction ”类来执行图像预测,您可以获得最高精度的模型。

接上去,创建另一个Python文件并为其命名,例如FirstCustomImageRecognition.py 。复制您下面的人工智能模型或您获得最高精度的训练模型,并将其粘贴到新python文件所在的文件夹中(例如FirstCustomImageRecognition.py)。同时复制您下载的或由您的训练生成的JSON文件,并将其粘贴到与新python文件相反的文件夹中。将属于IdenProf数据集中的类别的任何专业人员的样本图像复制到与新python文件相反的文件夹中。

然后复制下面的代码并将其放入新的python文件中

from imageai.Prediction.Custom import CustomImagePrediction

import os

execution_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类,用于运用训练模型和python os类预测和辨认图像。第三行代码创建一个变量,该变量保存对包含python文件(在本例中为FirstCustomImageRecognition.py)的途径的援用以及您本人下载或训练的ResNet模型文件。在下面的代码中,我们在第四行创建了一个ImagePrediction()类的实例,然后经过调用,将预测对象的模型类型设置为ResNet .setModelTypeAsResNet()在第五行然后我们将预测对象的模型途径设置为人工智能模型文件(idenprof_061-0.7933.h5)的途径,我们将其复制到第六行的项目文件夹文件夹中。在第七行中,我们设置了我们复制到第七行中的文件夹的JSON文件的途径,并将模型加载到第80行。最后,我们对我们复制到文件夹的图像运转预测,并将结果打印到命令行界面。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

大神点评3

呵呵,低调,低调!
回复

使用道具 举报

sailing 2020-6-22 17:04:35 来自手机 显示全部楼层
专业抢沙发的!哈哈
回复

使用道具 举报

河清香 2020-6-23 15:43:44 显示全部楼层
锄禾日当午,发帖真辛苦。谁知坛中餐,帖帖皆辛苦!
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies