神操作!只需5行代码,就能做出一个图像识别AI
在本文中,我们将简要介绍人工智能领域,特别是在计算机视觉领域,所涉及的挑战,针对这些挑战的现有现代解决方案以及如何方便,轻松地应用这些解决方案而无需花费大量时间和精力。
图像识别的发展
几十年来,人工智能一直是一个研究领域,科学家和工程师一直在努力探索使机器和计算机更好地感知和理解我们的世界以正确采取行动并为人类服务的奥秘。 这项研究工作最重要的方面之一就是使计算机了解我们周围每天产生的视觉信息(图像和视频)。 使计算机感知和理解视觉信息的领域称为计算机视觉。
在1950年代至1980年代人工智能研究兴起的过程中,手动为计算机提供了有关如何识别图像,图像中的对象以及要注意的功能的说明。这种方法是传统算法,被称为专家系统,因为它们要求人类为必须识别的物体的每个唯一场景识别特征并在计算机可以理解的数学模型中表示这些特征。这涉及很多繁琐的工作,因为可以用成千上万种不同的方式表示对象,并且存在成千上万(甚至数百万)种不同的场景和对象,从而找到了最优且准确的数学模型来代表每个对象或场景的所有可能特征,并且对于所有可能的对象或场景而言,更多的工作将永远持续下去。
然后,在1990年代,引入了机器学习的概念,并开创了一个时代,在这个时代中,我们不需告诉计算机在识别图像和视频中的场景和对象时要注意什么,而可以设计算法,使计算机能够学习如何独自识别图像中的场景和物体,就像孩子通过探索来了解自己的环境一样。机器学习为计算机学习识别几乎我们想要的任何场景或物体开辟了道路。
随着功能强大的计算机(如GPU)和先进的深度学习算法用于图像识别的出现,如Alex Krizhevsky等人于2012年提出的AlexNet,Kaeming He等人于2015年提出的ResNet,Forrest于2016年提出的SqueezeNet Landola等人(由Gao Huang等人于2016年提出的DenseNet)仅举几例,就可以将许多图片(更像是计算机的图像书)放在一起,并定义一个人工智能模型来学习场景和物体的特征这些图片本身,并使用从学习过程中获得的知识来识别其后将遇到的场景或对象类型的所有其他实例。
为了训练一个可以识别你想要在图片中识别出什么内容的人工智能模型,传统上它涉及应用数学和深度学习库的大量专业知识,更不用说需要花费的时间和压力了。编写算法代码,然后将代码适配你的图像。这是我们提供解决方案的地方。
AI Commons的团队开发了一个python库,可让你训练一个人工智能模型,该模型只需5条简单的python代码就能识别出你希望图像识别的任何对象。 python库是ImageAI,它是一个库,旨在让学生,开发人员和研究人员具备各种专业知识,可以使用5至15条简单的代码行来构建具有最新计算机视觉功能的系统和应用程序。现在,让我们引导你创建可以识别您想要的任何东西的第一个人工智能模型。
要训练你的人工智能模型,你需要一个称为数据集的图像集合。 数据集包含您你要让你的人工智能模型识别的对象的成百上千的样本图像。 但是你不用担心! 我们不是说要你现在就去下载数千张图片,只是为了训练你的人工智能模型。 在本教程中,我们提供了一个名为IdenProf的数据集。
IdenProf(可识别专业人士)是一个数据集,其中包含11,000张10位不同专业人士的照片,人类可以通过穿着方式看到并识别他们的工作。 图片在此数据集中的专业人员类别如下:
- Chef(厨师)
- Doctor(医生)
- Engineer(工程师)
- Farmer(农民)
- Firefighter(消防员)
- Judge(法官)
- Mechanic(机械师)
- Pilot(飞行员)
- Police(警察)
- Waiter(服务员)
该数据集被分为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。 另外,如果你提供免费的NVIDIA K80 GPU进行实验,则可以使用Google Colab进行此实验。
- 然后,你必须安装ImageAI及其依赖项。
1)从Python语言官方网站下载并安装Python 3
https://python.org
2)通过pip安装以下pip:
i. TensorFlow
- pip3 install tensorflow
ii. OpenCV
- pip3 install opencv-python
iii. Keras
- pip3 install keras
iv. ImageAI
- pip3 install imageai --upgrade
- 用你想要给它的任何名称创建一个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)。在第四行中,我们将数据目录(数据集目录)设置为你解压缩的数据集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.第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代表此阶段的实验,而acc0.100000和valacc:0.1000代表本实验后模型在测试图像上的准确性(准确性的最大值为1.0)。此结果有助于了解可用于自定义图像预测的最佳性能模型。
训练完人工智能模型后,你可以使用“ CustomImagePrediction”类对获得最高准确性的模型进行图像预测。
万一由于无法访问NVIDIA GPU而无法自行训练人工智能模型,就本教程而言,我们提供了我们在IdenProf数据集上训练的人工智能模型,你可以使用它现在可以预测数据集中10位专业人员中任何一位的新图像。经过61次训练实验,该模型的准确率超过79%。另外,如果你自己还没有进行培训,还可以通过此链接下载idenprof模型的JSON文件。然后,你准备好使用受过训练的人工智能模型开始认可专业人员。请按照以下说明进行操作。
接下来,创建另一个Python文件并为其命名,例如FirstCustomImageRecognition.py。 复制上面下载的人工智能模型或获得最高准确性的训练模型,并将其粘贴到新python文件的文件夹(例如FirstCustomImageRecognition.py)中。 还要复制您下载的或由培训生成的JSON文件,并将其粘贴到与新python文件相同的文件夹中。 将属于IdenProf数据集中类别的任何专业人士的示例图像复制到与新python文件相同的文件夹中。
然后复制下面的代码,并将其放入新的python文件中:
- from imageai.Prediction.Custom import CustomImagePredictionimport 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()类的实例,然后通过在第五行中调用.setModelTypeAsResNet()将预测对象的模型类型设置为ResNet,然后设置模型路径预测对象到人工智能模型文件(idenprof_061–0.7933.h5)的路径,我们将其复制到第六行的项目文件夹文件夹中。
在第七行中,我们设置复制到第七行中的文件夹的JSON文件的路径,并在第八十行中加载模型。最后,我们对复制到文件夹中的图像进行预测,然后将结果打印到命令行界面。
到目前为止,你已经学习了如何使用ImageAI轻松训练自己的人工智能模型,该模型可以预测图像中的任何类型的对象或对象集。
当然,除了以上教程,笔者顺便提一下钛灵AIX,一款集计算机视觉与智能语音交互两大核心功能为一体的迷你人工智能硬件。基于 Intel Movidius AI加速芯片的强大算力支持与内置的语音 SDK 和 API,钛灵 AIX可以兼容AI模型资源平台——Model Play。Model Play面向全球开发者,内置多样化AI模型,更是支持谷歌 Edge TPU边缘人工智能计算芯片以及更多AI硬件,可以帮助开发者加速专业级开发。
此外,Model Play提供完整易用的迁移学习模型训练工具及丰富模型实例。基于Google开源神经网络架构及算法,构建自主迁移学习功能,用户无需写代码,通过选择图片、定义模型和类别名称即可完成AI模型训练,实现人工智能的易学易开发。
时间:2020-02-06 21:46 来源:可思数据 转发量:次
声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。
相关文章:
相关推荐:
网友评论: