利用VGG16做花数据集的识别

本文介绍了利用预训练的VGG16模型进行花的识别任务,通过添加三层全连接层,经过50个epoch训练后在验证集上达到87.63%的准确率。实验数据来源于Kaggle,VGG16模型因其特定的卷积和池化层结构而具有较高的识别能力。尽管训练效果还有提升空间,但考虑到计算资源限制,已达到可接受水平。
摘要由CSDN通过智能技术生成

前言

刚完成机器视觉的作业(利用预训练好的模型,对花的数据集进行识别),所以就记录一下。本次实验中,我使用的是keras的vgg16模型,然后再添加了三层全连接层对花进行识别,50个epoch后在验证集中的准确率为87.63,不算很好,但有由于确实太耗费时间了,就不太想去重新调参然后训练了,就只能勉强接受了。
我的实验数据是直接在kaggle上下的,链接:Flowers Recognition

VGG16

VGG是Oxford的Visual Geometry Group的组提出的。该网络是在ILSVRC 2014上的相关工作,主要工作是证明了增加网络的深度能够在一定程度上影响网络最终的性能。VGG16共包含16个卷积层(Convolutional Layer),3个全连接层(Fully connected Layer),以及5个池化层(Pool layer),其中,卷积层和全连接层具有权重系数,因此也被称为权重层,总数目为13+3=16,这即是VGG16中16的来源。
VGG16的突出特点是:
1.卷积层均采用相同的卷积核参数。卷积层均表示为conv3-XXX,其中conv3说明该卷积层采用的卷积核的尺寸(kernel size)是3,即宽(width)和高(height)均为3,3*3是很小的卷积核尺寸,结合其它参数(步幅stride=1,填充方式padding=same),这样就能够使得每一个卷积层(张量)与前一层(张量)保持相同的宽和高。XXX代表卷积层的通道数。
2.池化层均采用相同的池化核参数。池化层的参数均为2×。
3.模型是由若干卷积层和池化层堆叠(stack)的方式构成,比较容易形成较深的网络结构(在2014年,16层已经被认为很深了)。
VGG16网络结构:
在这里插入图片描述

实验源码及结果展示

源码

其实也很简单,就是直接在keras上调取VGG16模型就行了,不过模型比较大,可能需要下载一会。

import os
import cv2
import random
from tensorflow.python.keras.applications import VGG16, VGG19
from tensorflow.python.keras import Sequential
from tensorflow.python.keras import layers
from tensorflow.python.keras.optimizers import SGD
from tensorflow.python.keras.models import Model
import matplotlib.pyplot as plt
import numpy as np

def get_data():
    data = []
    labels = []
    types = os.listdir('./flowers')
    for name in types:
        flowers = os.listdir('./flowers' + '/' + name)
        for flower in flowers:
            img = cv2.imread('./flowers' + '/' + name + '/' + flower)
            img 
利用VGG(Visual Geometry Group)网络来训练自己的数据集通常涉及到深度学习中的图像分类任务。VGG是一系列预训练的卷积神经网络模型,特别是VGG16VGG19,在ImageNet大型视觉识别挑战赛中取得了优异成绩,它们的特点是结构层次分明,有许多小卷积核。 以下是使用VGG进行自定义数据集训练的基本步骤: 1. **数据准备**:首先,你需要准备一个标注好的数据集,包含图片及其对应的类别标签。这些图片需要按照训练、验证和测试集进行划分,并进行必要的预处理,如调整尺寸、归一化等。 2. **下载预训练模型**:从官方GitHub库或其他来源下载已经预训练好的VGG模型,通常是权重文件,这将作为我们迁移学习的基础。 3. **修改模型架构**:将VGG的顶部几层(即全连接层)去掉,因为这些层是针对特定的ImageNet数据集设计的,然后添加一个新的分类器,它适应于你的数据集的类别数。 4. **冻结低层卷积层**:在训练初期,可以冻结合成部分或全部的卷积层,只训练新的分类层,防止过拟合同时加快训练速度。 5. **训练过程**:使用你的数据集对模型进行训练,通过反向传播更新新添加的分类器参数,同时也可能会微调一部分低层特征以适应你的任务。 6. **评估和优化**:定期检查模型在验证集上的性能,调整超参数(如学习率、批大小等),直到达到满意的精度为止。 7. **保存和部署**:最后,使用测试集评估模型泛化能力,并将模型保存以便将来应用到实际场景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值