随着人工智能热潮的发展,图像识别已经成为了其中非常重要的一部分。图像识别是指计算机对图像进行处理、分析,以识别其中所含目标的类别及其位置(即目标检测和分类)的技术。其中图像分类是图像识别的一个类,是给定一幅测试图像,利用训练好的分类器判定它所属的类别。
该项目分为三部分:
- 第一部分:系统驱动的安装与环境的搭建
- 第二部分:利用VGG16网络进行模型训练与预测
- 第三部分:通过模型算法的部署,实现模型预测的页面可视化
本文主要讲解的是项目中的第二部分,其余两部分可通过Github了解
项目中所有的代码及数据集已放入Github
数据集的获取
本文的数据集中包含五个类,分别是Animal(动物)、Architecture(建筑)、people(人)、plane(飞机)、Scenery(风景)。由于身边条件的欠缺,数据集的获取途径主要通过爬取百度图片的方式获取,并将相同类的图片放在同一文件夹(代码:Reptile_img.py
)。
爬取一个类示例:
注意:保存的图片采用英文格式,不然后续无法利用OpenCV读入。
数据集的清洗及读取
由于获取的图片数据集较为杂乱,所以我们需要人为清洗数据,以提高数据集的准确性。而后,数据集中可能会存在无法利用OpenCV读取的图片,我们采取遍历所有文件,并将其读入,将无法读入显示的图片删除,保证数据集的正确性(代码:open_img.py
)。
将所有图片读取示例:
出现下方错误证明是爬取的图片无法读入,找到相对应的图片删除就好。
数据增强
清洗处理以后,我们五个类的图片集数量分别为:
类别 | 数量 |
---|---|
Animal | 500张 |
Architecture | 500张 |
people | 700张 |
plane | 500张 |
Scenery | 700张 |
总体来说,数据集的数量太少,得出的模型可能存在模型泛化能力不强的情况。所以利用数据增强,对图片集进行随即旋转、平移变换、缩放变换、剪切变换、水平翻转等等操作,使得每张数据集得到50张处理后的图片,并保存在原本的文件夹下,整个数据集得到扩大(代码:data_augmentation.py
)。
代码示例:
from keras.preprocessing.image import ImageDataGenerator
import os
import cv2
datagen = ImageDataGenerator(
rotation_range=20,
width_shift_range=0.15,
height_shift_range=0.15,
zoom_range=0.