第一步:准备数据
五种花卉数据:“雏菊”、“蒲公英”、“玫瑰”、“向日葵”、“郁金香”,总共有2671张图片
将数据以A_B.jpg的格式进行标定,A为花朵名字,B为相应花类别的第几张
第二步:搭建模型
本文选择LeNet/AlexNet/Vgg16常用分类网络作为对比:
由于是五分类问题,直接套用网络肯定是不行,因此会在全连接部分做手脚,参考代码如下:
x = base_model.output x = GlobalAveragePooling2D()(x) x = Dense(256)(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = Dense(64)(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = Dense(5)(x) predictions = Activation('softmax')(x)第三步:训练代码
1)损失函数为:交叉熵损失函数
2)LeNet和AlexNet从头训练都比较好收敛,但vgg16网络从头训练很难收敛,因此我们阔以对vgg16网络进行迁移训练微调:
w = 1 if w: base_model = VGG16(weights='imagenet', include_top=False, input_shape=(width, height, 3)) else: base_model = VGG16(weights=None, include_top=False, input_shape=(width, height, 3)) for layer in base_model.layers: layer.trainable = False第四步:统计正确率
| 名称 | 训练正确率 | 验证正确率 |
| LeNet | 75.5% | 82% |
| AlexNet | 86% | 86.3% |
| vgg16 | 99.3% | 89.1% |
毫无疑问,vgg16胜利
第五步:搭建GUI界面
第六步:整个工程的内容
有训练代码和训练好的模型以及训练过程,提供数据,提供GUI界面代码,主要使用方法可以参考里面的“文档说明_必看.docx”
项目完整文件下载请见演示与介绍视频的简介处给出:➷➷➷
https://www.bilibili.com/video/BV1pMUYY4EuQ/