文章目录
选题背景
目前随着猫咖、猫店等网红店铺的兴起,养猫这一爱好逐渐进入了大众的视野。从原本小众化的兴趣爱好变身为时尚潮流,意味着越来越多的爱猫养猫人士其实对猫咪品种其实并不熟悉。
猫咪品种种类纷繁复杂,对于刚刚接触的人来说,想要分清并不容易。一方面可能在买猫时会被店家宰割,本来是一只较便宜的土猫,在店家的口中摇身一变变成了进口的波斯猫。另一方面,猫的品种也决定了猫的生活习性和喜好,我们应该根据猫的品种来对猫咪进行照顾。
这一系列的现实原因使得我们萌生了通过开发软件,来对猫的种类进行识别的想法,从而解决了猫咪主人与店家的信息不对称和如何更好的照顾猫咪等问题。
意义分析
对于顾客方面,我们想要开发的软件解决了猫咪主人与店家的信息不对称和如何根据猫的品种更好的照顾猫咪的问题。我们可以对识别出的猫咪快速在系统内实现备案,方便用户记录猫咪的生活照顾情况。
对于店家方面,通过识别系统店家可以快速对店内的猫咪实现管理,对于用户或进货方送往店家的猫咪可以快速进行档案的建立和修改,从而满足管理的需要。
我们选用迁移学习这一训练方法的意义:
-
训练成本可以很低:如果采用导出特征向量的方法进行迁移学习,后期的训练成本非常低,用 CPU 都完全无压力,没有深度学习机器也可以做。
-
适用于小数据集:对于数据集本身很小的情况,从头开始训练具有几千万参数的大型神经网络是不现实的,因为越大的模型对数据量的要求越大,过拟合无法避免。这时候如果还想用上大型神经网络的超强特征提取能力,只能靠迁移学习。
第一阶段进展
-
爬取数据
利用爬虫在Google image 爬取到1500张图片作为数据集,计划将数据集8:2分为训练集和测试集,以防止大型的网络由于数据集过小而出现过拟合的情况 。
-
数据增强
在深度学习训练过程中,训练数据是很重要的,在样本量方便,一是要有尽量多的训练样本,二是要保证样本的分布够均匀,也就是各个类别下的样本量都要足够,不能有的很多,有的特别少。但是在我们实际采集猫数据的过程中,虽然已经找到了约1500张,但还是不够多,这就很容易导致训练出的模型过拟合,泛化能力不足。
于是我们使用了数据增强方法,从已有的图像样本中生造出更多的样本数据,使用一些方法,来随机变换生成一些可信图像,这些通过随机变换生成的图像,要保证从逻辑上不会给模型辨认带来困扰,也就是从分类的角度应该依然属于其原本图像同一类,但是又要与原本的图像有一些区别,这样模型在训练时就不会两次看到完全相同的图像,这样就能够观察到更多的内容,也就提升了泛化能力。
ImageDataGenerator是keras.preprocessing.image包下的一个类,可以设置图像的这些随机扰动来生成新的图像数据,简单的代码如下所示:
# -- coding: utf-8 -- import numpy as np from keras.preprocessing import Image from keras.preprocessing.image import ImageDataGenerator import cv2 as cv import os img = cv.imread("./photo.png") img = Image.img_to_array(img) img = img.reshape((1,) + img.shape) datagen = ImageDataGenerator