10分钟搭建你的第一个图像识别模型 | 附完整代码
Posted AI科技大本营
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10分钟搭建你的第一个图像识别模型 | 附完整代码相关的知识,希望对你有一定的参考价值。
(图片由AI科技大本营付费下载自视觉中国)
【导读】本文介绍了图像识别的深度学习模型的建立过程,通过陈述实际比赛的问题、介绍模型框架和展示解决方案代码,为初学者提供了解决图像识别问题的基础框架。
序言
“几分钟就可以建立一个深度学习模型?训练就要花几个小时好吗!我甚至没有一台足够好的机器。”我听过无数次有抱负的数据科学家这样说,他们害怕在自己的机器上构建深度学习模型。
其实,你不必在谷歌或其他大型科技公司工作,就可以训练深度学习数据集。你完全可以用几分钟的时间从头搭建起你自己的神经网络,而不需要租谷歌的服务器。Fast.ai的学生花了18分钟设计出了用于ImageNet数据集的一个模型,接下来我将在本文中展示类似的方法。
深度学习是一个广泛的领域,所以我们会缩小我们的关注点在图像分类问题上。而且,我们将使用一个非常简单的深度学习架构来达到一个很好的准确率。
你可以将本文中的Python代码作为构建图像分类模型的基础,一旦你对这些概念有了很好的理解,可以继续编程,参加比赛、登上排行榜。
如果你刚开始深入学习,并且对计算机视觉领域着迷(谁不是呢?!)一定要看一看Computer Vision using Deep Learning的课程,它对这个酷炫的领域进行了全面的介绍,将为你未来进入这个巨大的就业市场奠定基础。
课程链接:
https://trainings.analyticsvidhya.com/courses/course-v1:AnalyticsVidhya+CVDL101+CVDL101_T1/about?utm_source=imageclassarticle&utm_ medium=blog
目录
01 什么是图像分类以及它的应用案例
02 设置图像数据结构
03 分解模型建立过程
04 设置问题定义并认识数据
05 建立图像分类模型的步骤
06 其他挑战
01 什么是图像分类以及它的应用案例
观察以下图片:
你应该可以马上就认出它——是一俩豪华车。退一步来分析一下你是如何得到这个结论的——你被展示了一张图片,然后你将它划分为“车”这个类别(在这个例子中)。简单来说,这个过程就是图像分类。
很多时候,图像会有许多个类别。手动检查并分类图像是一个非常繁琐的过程。尤其当问题变为对10000张甚至1000000张图片的时候,这个任务几乎不可能完成。所以如果我们可以将这个过程自动化的实现并快速的标记图像类别,这该有多大的用处啊。
自动驾驶汽车是一个图像分类在现实世界应用的很好的例子。为了实现自动驾驶,我们可以建立一个图像分类模型来识别道路上的各种物体,如车辆、人、移动物体等。我们将在接下来的部分中看到更多的应用,甚至在我们的身边就有许多的应用。
既然我们已经掌握了主题,那么让我们来深入研究一下如何构建图像分类模型,它的先决条件是什么,以及如何在Python中实现它。
02 设置图像数据结构
我们的数据集需要特殊的结构来解决图像分类问题。我们将在几个部分中看到这一点,但在往下走之前,请记住这些建议。
你应该建立两个文件夹,一个放训练集,另一个放测试集。训练集的文件夹里放一个csv文件和一个图像文件夹:
-
csv文件存储所有训练图片的图片名和它们对应的真实标签 -
图像文件夹存储所有的训练图片
03 分解模型搭建的过程
-
第1步:加载和预处理数据——30%时间 -
第2步:定义模型架构——10%时间 -
第3步:训练模型——50%时间 -
第4步:评价模型表现——10%时间
Basics of Image Processing in Python
https://www.analyticsvidhya.com/blog/2014/12/image-processing-python-basics/
-
需要多少个卷积层? -
每一层的激活函数是什么? -
每一层有多少隐藏单元?
-
训练图像和它们的真实标签。 -
验证集图像和其真实标签。(我们只用验证集的标签进行模型评估,不用于训练)
04 设置问题定义并认识数据
“识别服装”比赛链接:
https://datahack.analyticsvidhya.com/contest/practice-problem-identify-the-apparels/
数据黑客平台:
https://datahack.analyticsvidhya.com/
Google Colab:
https://colab.research.google.com/
05 建立图像分类模型的步骤
-
第1步:设置Google Colab -
第2步:导入库 -
第3步:导入数据预处理数据(3分钟) -
第4步:设置验证集 -
第5步:定义模型结构(1分钟) -
第6步:训练模型(5分钟) -
第7步:预测(1分钟)
!pip install PyDrive
import os
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)
download = drive.CreateFile({'id': '1BZOv422XJvxFUnGh-0xVeSvgFgqVY45q'})
download.GetContentFile('train_LbELtWX.zip')
!unzip train_LbELtWX.zip
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.utils import to_categorical
from keras.preprocessing import image
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from keras.utils import to_categorical
from tqdm import tqdm
train = pd.read_csv('train.csv')
# We have grayscale images, so while loading the images we will keep grayscale=True, if you have RGB images, you should set grayscale as False
train_image = []
for i in tqdm(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/255
train_image.append(img)
X = np.array(train_image)
y=train['label'].values
y = to_categorical(y)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, test_size=0.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))
download = drive.CreateFile({'id': '1KuyWGFEpj7Fr2DgBsW8qsWvjqEzfoJBY'})
download.GetContentFile('test_ScVgIM0.zip')
!unzip test_ScVgIM0.zip
test = pd.read_csv('test.csv')
test_image = []
for i in tqdm(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/255
test_image.append(img)
test = np.array(test_image)
# making predictions
prediction = model.predict_classes(test)
download = drive.CreateFile({'id': '1z4QXy7WravpSj-S4Cs9Fk8ZNaX-qh5HF'})
download.GetContentFile('sample_submission_I5njJSF.csv')
# creating submission file
sample = pd.read_csv('sample_submission_I5njJSF.csv')
sample['label'] = prediction
sample.to_csv('sample_cnn.csv', header=True, index=False)
A Comprehensive Tutorial to learn Convolutional Neural Networks from Scratch https://www.analyticsvidhya.com/blog/2018/12/guide-convolutional-neural-network-cnn/
06 开启一个新的挑战
Identify the Digits比赛链接:
https://datahack.analyticsvidhya.com/contest/practice-problem-identify-the-digits/
# Setting up Colab
!pip install PyDrive
import os
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)
# Replace the id and filename in the below codes
download = drive.CreateFile({'id': '1ZCzHDAfwgLdQke_GNnHp_4OheRRtNPs-'})
download.GetContentFile('Train_UQcUa52.zip')
!unzip Train_UQcUa52.zip
# Importing libraries
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.utils import to_categorical
from keras.preprocessing import image
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from keras.utils import to_categorical
from tqdm import tqdm
train = pd.read_csv('train.csv')
# Reading the training images
train_image = []
for i in tqdm(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/255
train_image.append(img)
X = np.array(train_image)
# Creating the target variable
y=train['label'].values
y = to_categorical(y)
# Creating validation set
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, test_size=0.2)
# Define the model structure
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'))
# Compile the model
model.compile(loss='categorical_crossentropy',optimizer='Adam',metrics=['accuracy'])
# Training the model
model.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_image = []
for i in tqdm(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/255
test_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'] = prediction
sample.to_csv('sample.csv', header=True, index=False)
原文标题:
Build your First Image Classification Model in just 10 Minutes!
原文链接:
https://www.analyticsvidhya.com/blog/2019/01/build-image-classification-model-10-minutes/
译者:王威力,求职狗,在香港科技大学学习大数据科技。感觉数据科学很有难度,也很有意思,还在学(tu)习(tou)中。一个人肝不动的文献,follow大佬一起肝。
◆
精彩推荐
◆
推荐阅读
!
你点的每个“在看”,我都认真当成了喜欢
以上是关于10分钟搭建你的第一个图像识别模型 | 附完整代码的主要内容,如果未能解决你的问题,请参考以下文章
图像分类基于PyTorch搭建LSTM实现MNIST手写数字体识别(单向LSTM,附完整代码和数据集)
图像分类基于PyTorch搭建LSTM实现MNIST手写数字体识别(双向LSTM,附完整代码和数据集)
目标检测(10) Mosaic 数据增强方法,附Python完整代码