10分钟搭建你的第一个图像识别模型(附步骤代码)机器之心

本文介绍了图像识别的深度学习模型的建立过程,通过陈述实际比赛的问题、介绍模型框架和展示解决方案代码,为初学者提供了解决图像识别问题的基础框架。

序言

“几分钟就可以建立一个深度学习模型?训练就要花几个小时好吗!我甚至没有一台足够好的机器。”我听过无数次有抱负的数据科学家这样说,他们害怕在自己的机器上构建深度学习模型。

你可以将本文中的Python代码作为构建图像分类模型的基础,一旦你对这些概念有了很好的理解,可以继续编程,参加比赛、登上排行榜。

如果你刚开始深入学习,并且对计算机视觉领域着迷(谁不是呢?!)一定要看一看ComputerVisionusingDeepLearning的课程,它对这个酷炫的领域进行了全面的介绍,将为你未来进入这个巨大的就业市场奠定基础。

课程链接:

目录

一、什么是图像分类以及它的应用案例

二、设置图像数据结构

三、分解模型建立过程

四、设置问题定义并认识数据

五、建立图像分类模型的步骤

六、开始其他挑战

观察以下图片:

你应该可以马上就认出它——是一俩豪华车。退一步来分析一下你是如何得到这个结论的——你被展示了一张图片,然后你将它划分为“车”这个类别(在这个例子中)。简单来说,这个过程就是图像分类。

很多时候,图像会有许多个类别。手动检查并分类图像是一个非常繁琐的过程。尤其当问题变为对10000张甚至1000000张图片的时候,这个任务几乎不可能完成。所以如果我们可以将这个过程自动化的实现并快速的标记图像类别,这该有多大的用处啊。

自动驾驶汽车是一个图像分类在现实世界应用的很好的例子。为了实现自动驾驶,我们可以建立一个图像分类模型来识别道路上的各种物体,如车辆、人、移动物体等。我们将在接下来的部分中看到更多的应用,甚至在我们的身边就有许多的应用。

既然我们已经掌握了主题,那么让我们来深入研究一下如何构建图像分类模型,它的先决条件是什么,以及如何在Python中实现它。

我们的数据集需要特殊的结构来解决图像分类问题。我们将在几个部分中看到这一点,但在往下走之前,请记住这些建议。

你应该建立两个文件夹,一个放训练集,另一个放测试集。训练集的文件夹里放一个csv文件和一个图像文件夹:

测试集文件夹中的csv文件和训练集文件夹中的csv文件不同,测试集文件夹中的csv文件只包含测试图像的图片名,不包括它们的真实标签。因为我们要通过训练训练集中的图片来对测试集中的图片进行预测。

如果你的数据集不是这样的格式,你需要进行转换,否则的话预测结果可能有错误。

接下来我会更详细地解释一下上面的每一个步骤。这一部分非常重要,因为并非所有模型都是在第一步构建的。你需要在每次迭代之后返回,对步骤进行微调,然后再次运行它。对基础概念有一个扎实的理解,对于加速整个过程将有很大的帮助。

就深度学习模型而言,数据非常关键。如果训练集中有大量的图像,你的图像分类模型也会有更大的可能实现更好的分类效果。此外,根据所用的框架不同,数据的维度不同,效果也不一样。

BasicsofImageProcessinginPython

但我们还没完全到数据预处理这一步,为了了解我们的数据在新的之前没见过的数据集中的表现(在预测测试集之前),我们需要先从训练集中划分出一部分为验证集。

简而言之,我们在训练集上训练模型然后在验证集上进行验证。如果我们对在验证集上的结果满意,就可以用来预测测试集的数据。

这是深度学习模型建立过程中的另一个重要的步骤。在这个过程中,需要思考这样几个问题:

还有其他一些问题。但这些基本上是模型的超参数,它们对预测结果起着重要作用。

如何确定这些超参的值?好问题!一个方法是根据现有的研究选择这些值。另一个想法是不断尝试这些值,直到找到最好的,但这可能是一个非常耗时的过程。

对模型训练,我们需要:

我们还需要定义迭代次数(epoch)。开始阶段,我们训练10次(你可以再更改)。

最后,我们加载测试数据(图像)并完成预处理步骤。然后我们使用训练模型预测这些图像的类别。

我们将尝试一个非常酷的挑战来理解图像分类。我们需要建立一个模型,可以对给定的图像进行分类(衬衫、裤子、鞋子、袜子等)。这实际上是许多电子商务零售商面临的一个问题,这使得它成为一个更有趣的计算机视觉问题。

这个挑战被称为“识别服装”,是我们在数据黑客平台上遇到的实践问题之一。你必须注册并从上面的链接下载数据集。

“识别服装”比赛链接:

数据黑客平台:

一共有70000图像(28x28维),其中60000来自训练集,10000来自测试集。训练图像已经预先被打上了衣服类别的标签,一共10个类别。测试集没有标签。这个比赛是对测试集的图像进行识别。

我们将在GoogleColab搭建模型,因为它提供免费的GPU。

GoogleColab:

接下来是时候展示你的Python技巧啦,最终我们到了执行阶段!

主要步骤如下:

下面详细介绍以上步骤。

因为我们将从GoogleDrivelink导入数据,我们需要在GoogleColabnotebook上增加几条代码。新建Python3notebook,写下下面的代码:

!pipinstallPyDrive这一步是安装PyDrive。下面导入需要的库:

importosfrompydrive.authimportGoogleAuthfrompydrive.driveimportGoogleDrivefromgoogle.colabimportauthfromoauth2client.clientimportGoogleCredentials

下面创建drive变量访问GoogleDrive:

auth.authenticate_user()gauth=GoogleAuth()gauth.credentials=GoogleCredentials.get_application_default()drive=GoogleDrive(gauth)

需要用GoogleDrive上传文件的ID来下载数据集:

download=drive.CreateFile({'id':'1BZOv422XJvxFUnGh-0xVeSvgFgqVY45q'})

把id的部分替换为你的文件夹的ID。接下来将下载文件夹并解压。

download.GetContentFile('train_LbELtWX.zip')!unziptrain_LbELtWX.zip

每次启动notebook都需要运行以上代码。

importkerasfromkeras.modelsimportSequentialfromkeras.layersimportDense,Dropout,Flattenfromkeras.layersimportConv2D,MaxPooling2Dfromkeras.utilsimportto_categoricalfromkeras.preprocessingimportimageimportnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromsklearn.model_selectionimporttrain_test_splitfromkeras.utilsimportto_categoricalfromtqdmimporttqdm

train=pd.read_csv('train.csv')

接下来,我们将读入训练集,存储为list,最终转换为numpyarray。

#Wehavegrayscaleimages,sowhileloadingtheimageswewillkeepgrayscale=True,ifyouhaveRGBimages,youshouldsetgrayscaleasFalsetrain_image=[]foriintqdm(range(train.shape[0])):img=image.load_img('train/'+train['id'][i].astype('str')+'.png',target_size=(28,28,1),grayscale=True)img=image.img_to_array(img)img=img/255train_image.append(img)X=np.array(train_image)

这是一个多分类问题(10个类别),需要对标签变量进行one-hot编码。

y=train['label'].valuesy=to_categorical(y)

X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=42,test_size=0.2)

我们将建立一个简单的结构,有2个卷积层,一个隐藏层一个输出层。

model=Sequential()model.add(Conv2D(32,kernel_size=(3,3),activation='relu',input_shape=(28,28,1)))model.add(Conv2D(64,(3,3),activation='relu'))model.add(MaxPooling2D(pool_size=(2,2)))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(128,activation='relu'))model.add(Dropout(0.5))model.add(Dense(10,activation='softmax'))

接下来编译模型。

model.compile(loss='categorical_crossentropy',optimizer='Adam',metrics=['accuracy'])

在这一步,我们将训练训练集的数据,在验证集上进行验证。

model.fit(X_train,y_train,epochs=10,validation_data=(X_test,y_test))

我们将首先遵循处理训练数据集时执行的步骤。加载测试图像并预测分类结果,用model.predict_classes()函数预测它们的类。

download=drive.CreateFile({'id':'1KuyWGFEpj7Fr2DgBsW8qsWvjqEzfoJBY'})download.GetContentFile('test_ScVgIM0.zip')!unziptest_ScVgIM0.zip

首先导入测试集:

test=pd.read_csv('test.csv')

接下来,读于数据并存储测试集:

test_image=[]foriintqdm(range(test.shape[0])):img=image.load_img('test/'+test['id'][i].astype('str')+'.png',target_size=(28,28,1),grayscale=True)img=image.img_to_array(img)img=img/255test_image.append(img)test=np.array(test_image)

#makingpredictionsprediction=model.predict_classes(test)

还需要新建一个提交文件夹,用来上传DataHack平台。

download=drive.CreateFile({'id':'1z4QXy7WravpSj-S4Cs9Fk8ZNaX-qh5HF'})download.GetContentFile('sample_submission_I5njJSF.csv')

#creatingsubmissionfilesample=pd.read_csv('sample_submission_I5njJSF.csv')sample['label']=predictionsample.to_csv('sample_cnn.csv',header=True,index=False)

下载sample_cnn.csv文件并上传到比赛的页面,生成你的排名。这提供了一个帮助你开始解决图像分类问题的基础方案。

AComprehensiveTutorialtolearnConvolutionalNeuralNetworksfromScratch

IdentifytheDigits比赛链接:

在你往下看之前,请尝试自己来解决这个挑战。你已经收获了解决问题的工具,只需要使用它们。当你遇到困难的时候可以再回来检查你的过程和结果。

在这个挑战中,我们需要识别给定图像中的数字。一共有70000张图片,49000张训练图像有标签,剩下的21000张为测试图片无标签。

准备好了吗?好!打开新的Python3notebook,运行下面的代码:

#SettingupColab!pipinstallPyDrive

#Replacetheidandfilenameinthebelowcodesdownload=drive.CreateFile({'id':'1ZCzHDAfwgLdQke_GNnHp_4OheRRtNPs-'})download.GetContentFile('Train_UQcUa52.zip')!unzipTrain_UQcUa52.zip

#Importinglibrariesimportkerasfromkeras.modelsimportSequentialfromkeras.layersimportDense,Dropout,Flattenfromkeras.layersimportConv2D,MaxPooling2Dfromkeras.utilsimportto_categoricalfromkeras.preprocessingimportimageimportnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromsklearn.model_selectionimporttrain_test_splitfromkeras.utilsimportto_categoricalfromtqdmimporttqdm

#Readingthetrainingimagestrain_image=[]foriintqdm(range(train.shape[0])):img=image.load_img('Images/train/'+train['filename'][i],target_size=(28,28,1),grayscale=True)img=image.img_to_array(img)img=img/255train_image.append(img)X=np.array(train_image)

#Creatingthetargetvariabley=train['label'].valuesy=to_categorical(y)

#CreatingvalidationsetX_train,X_test,y_train,y_test=train_test_split(X,y,random_state=42,test_size=0.2)

#Definethemodelstructuremodel=Sequential()model.add(Conv2D(32,kernel_size=(3,3),activation='relu',input_shape=(28,28,1)))model.add(Conv2D(64,(3,3),activation='relu'))model.add(MaxPooling2D(pool_size=(2,2)))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(128,activation='relu'))model.add(Dropout(0.5))model.add(Dense(10,activation='softmax'))

#Compilethemodelmodel.compile(loss='categorical_crossentropy',optimizer='Adam',metrics=['accuracy'])

#Trainingthemodelmodel.fit(X_train,y_train,epochs=10,validation_data=(X_test,y_test))

download=drive.CreateFile({'id':'1zHJR6yiI06ao-UAh_LXZQRIOzBO3sNDq'})download.GetContentFile('Test_fCbTej3.csv')

test_file=pd.read_csv('Test_fCbTej3.csv')

test_image=[]foriintqdm(range(test_file.shape[0])):img=image.load_img('Images/test/'+test_file['filename'][i],target_size=(28,28,1),grayscale=True)img=image.img_to_array(img)img=img/255test_image.append(img)test=np.array(test_image)

prediction=model.predict_classes(test)

download=drive.CreateFile({'id':'1nRz5bD7ReGrdinpdFcHVIEyjqtPGPyHx'})download.GetContentFile('Sample_Submission_lxuyBuB.csv')

sample=pd.read_csv('Sample_Submission_lxuyBuB.csv')sample['filename']=test_file['filename']sample['label']=predictionsample.to_csv('sample.csv',header=True,index=False)

在练习题页面上提交这个文件,你会得到一个相当不错的准确率。这是一个好的开端,但总有改进的余地。继续肝,看看你是否可以改进我们的基本模型。

尾声

顶尖的数据科学家和分析师甚至在黑客比赛开始之前就已经准备好了这些代码。他们使用这些代码在深入详细分析之前提前提交。先给出基准解决方案,然后使用不同的技术改进模型。

原文标题:

BuildyourFirstImageClassificationModelinjust10Minutes!

原文链接:

编辑:黄继彦

译者简介

深度学习(deeplearning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

从20世纪80年代首次成功演示以来(Dickmanns&Mysliwetz(1992);Dickmanns&Graefe(1988);Thorpeetal.(1988)),自动驾驶汽车领域已经取得了巨大进展。尽管有了这些进展,但在任意复杂环境中实现完全自动驾驶导航仍被认为还需要数十年的发展。原因有两个:首先,在复杂的动态环境中运行的自动驾驶系统需要人工智能归纳不可预测的情境,从而进行实时推论。第二,信息性决策需要准确的感知,目前大部分已有的计算机视觉系统有一定的错误率,这是自动驾驶导航所无法接受的。

在计算网络中,一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。一种函数(例如ReLU或S型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

神经网络训练中防止过拟合的一种技术

一种简单的模型或启发法,用作比较模型效果时的参考点。基准有助于模型开发者针对特定问题量化最低预期效果。

自动驾驶汽车,又称为无人驾驶汽车、电脑驾驶汽车或轮式移动机器人,是自动化载具的一种,具有传统汽车的运输能力。作为自动化载具,自动驾驶汽车不需要人为操作即能感测其环境及导航。

在机器学习中,超参数是在学习过程开始之前设置其值的参数。相反,其他参数的值是通过训练得出的。不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

验证数据集是用于调整分类器超参数(即模型结构)的一组数据集,它有时也被称为开发集(devset)。

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

(人工)神经网络是一种起源于20世纪50年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中RNN又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

分类问题是数据挖掘处理的一个重要组成部分,在机器学习领域,分类问题通常被认为属于监督式学习(supervisedlearning),也就是说,分类问题的目标是根据已知样本的某些特征,判断一个新的样本属于哪种已知的样本类。根据类别的数量还可以进一步将分类问题划分为二元分类(binaryclassification)和多元分类(multiclassclassification)。

当模型的复杂度增大时,训练误差会逐渐减小并趋向于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。这样,在学习时就要防止过拟合。进行最优模型的选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。

图像分类,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法。它利用计算机对图像进行定量分析,把图像或图像中的每个像元或区域划归为若干个类别中的某一种,以代替人的视觉判读。

THE END
1.模板匹配——图像识别概述文章浏览阅读129次,点赞9次,收藏2次。图像识别,是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。图像识别的发展经历了三个阶段:文字识别、数字图像处理与识别、物体识别。文字识别的研究是从1950年开始的,一般是识别字母、数字和符https://blog.csdn.net/weixin_42291376/article/details/143456894
2.机器视觉系统高效的图像识别与处理技术机器视觉系统作为一种高效的图像识别与处理技术,在现代计算机视觉领域占据了重要地位。它通过模仿人类的视觉功能,能够分析和理解图像中的信息,为工业自动化、医疗诊断、交通监控等多个领域提供强大的支持。那么,我们如何才能提高这套复杂系统的性能呢? 如何有效学习图像特征? https://www.bcioqpgw.cn/cai-dian/349872.html
3.机器视觉技术人工智能在图像识别和分析中的作用人工智能的范围无处不在,它正在改变我们生活的方方面面,尤其是在图像识别和分析领域。机器视觉技术是人工智能的一个重要分支,它使得计算机能够通过摄像头或其他传感器捕捉到世界,并理解其中所包含的信息。 1. 什么是机器视觉? 机器视觉是一门科学与工程,旨在为计算机系统提供“看到”能力,使它们能够处理、解释并从图像https://www.iktpfbwjvk.cn/zhi-neng/552291.html
4.java版图像识别mob64ca12d94299的技术博客java版图像识别,#Java版图像识别的科普图像识别技术是计算机视觉领域中的一项重要任务,它使得计算机能够“看懂”图像并从中提取出有用的信息。在Java中,我们可以利用一些常用的库来实现图像识别功能。本文将介绍一种简单的图像识别实现方法,并通过代码示例阐明其核心概https://blog.51cto.com/u_16213336/12722140
5.什么是图像识别与理解?图像识别与理解是指通过对图像中各种不同的物体特征进行定量化描述后,将其所期望获得的目标物进行提取,并且对所提取的目标物进行一定的定量分析。比如要从一幅照片上确定是否包含某个犯罪分子的人脸信息,就需要先将照片上的人脸检测出来,进而将检测出来的人脸区域进行分析,确定其是否是该犯罪分子。https://www.shuashuati.com/ti/76cb0bcf35ab43f68bd363ad77bd7b67.html
6.什么是图像识别,图像识别的知识介绍图像识别是指利用计算机视觉技术对图像进行分析、识别和理解的过程。这种技术可以帮助计算机“看懂”图像,从而实现自动化处理、智能化判断等功能。随着深度学习等技术的不断发展,图像识别已经逐渐成为人工智能领域中的一个重要研究方向。 1.图像识别是什么 图像识别是一种利用计算机软件对数字图像进行分析、识别和理解的https://www.eefocus.com/baike/1545801.html
7.机器学习零基础?手把手教你用TensorFlow搭建图像识别系统(一)导语:这是Wolfgang Beyer的一篇博文,详细介绍了如何使用TensorFlow搭建一个简单的图像识别系统。本篇主要介绍图像识别和本试验中会遇到的一些概念。 如果你觉得这是一篇简单介绍人工智能、机器学习和深度学习的文章,那就错啦。你可以在网上搜罗到一大堆相关话题的文章,而这篇文章也并不是讨论人工智能是否会奴役人类或抢走https://www.leiphone.com/category/ai/Y4uyEktkkwb5YhJM.html
8.科学网—如何用Python和深度神经网络识别图像?你早已听说过自动驾驶汽车的神奇吧?没有机器对图像的辨识,能做到吗? 你的好友可能(不止一次)给你演示如何用新买的iPhone X做面部识别解锁了吧?没有机器对图像的辨识,能做到吗? 医学领域里,计算机对于科学影像(如X光片)的分析能力,已经超过有多年从业经验的医生了。没有机器对图像的辨识,能做到吗? https://wap.sciencenet.cn/blog-377709-1091943.html
9.ni图像识别linuxninilinux腾讯云开发者社区图像识别之augmix augmix: https://github.com/google-research/augmix 5.3K10 图像识别——突破与应用 最近,图像识别领域发布了白皮书,简单翻译一下做个总结。--- [2]图像识别图像识别的目标是识别图像中的对象和人,并理解上下文。图像识别属于机器知觉,机器知觉是机器学习(ML)和人工智能(AI)的一部分。https://cloud.tencent.cn/developer/information/ni%E5%9B%BE%E5%83%8F%E8%AF%86%E5%88%AB
10.ocr图片识别技术是什么?OCR的作用有哪些?可以放进口袋的扫描大师 ocr图片识别技术是什么?OCR的作用有哪些? ocr图片识别技术存在于很多地方,例如的银行的人脸识别系统,二维码识别系统。福昕全能王也运用了ocr图片识别技术进行工作,大家可以使用福昕全能王进行身份证的识别。 ocr图片识别技术是什么? ocr图像识别,是指利用计算机对图像进行处理、分析和理解,以识别https://www.foxitsoftware.cn/scanner/jiaocheng/691.html
11.图像识别模型袋鼠社区图像识别模型 - 图像识别模型是专门设计用于处理图像数据的机器学习模型,其目的是从给定的图像中提取特征、识别特定对象、场景、行为、属性或进行更复杂的视觉理解任务。这类模型广泛应用于诸多领域,如安防、自动驾驶、医疗诊断、零售分析、社交媒体、遥感、艺术与文化遗https://www.dtstack.com/bbs/article/16443
12.图像识别和chatgpt图像识别和ChatGPT:当AI遇上AI 当图像识别技术和机器学习交织在一起,我们迎来了一个新的智能时代。图像识别算法的发展和应用为我们提供了更多的机会,使我们能够以前所未有的方式与计算机进行交互https://tool.a5.cn/article/show/25254.html
13.图像识别图像识别,什么是图像识别,图像识别是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对象的技术,是应用深度学习算法的一种实践应用,应用场景,包括电子商务,游戏,汽车,制造业和教育。现阶段图像识别技术一般分为人脸识别与商品识别,人脸识别主要https://baike.c114.com.cn/view.php?id=28373-30A559E6
14.计算机视觉与图像识别考试.pdfD.实现图像超分辨率的技术通常不直接依赖于这些方法 9.计算机视觉中的场景理解技术中,哪种技术可以用于分析和理解图像中的内容及其上下 文关系? A.语义分割 B.实例分割 C.人脸识别 D.目标检测和识别 10.在计算机视觉中,哪种技术可以用于将二维图像转换为三维立体信息? https://m.book118.com/html/2024/1002/8074076035006132.shtm