这个基于深度学习的鞋类分类系统是一个典型的计算机视觉应用项目,主要面向计算机相关专业的课程设计和毕业设计需求。系统采用卷积神经网络(CNN)作为核心算法,结合Spring Boot+Vue的前后端分离架构,实现了一个完整的鞋类图像识别与分类平台。
在实际开发过程中,我发现很多同学在完成这类项目时常常会遇到几个典型问题:首先是数据集获取和处理困难,其次是模型训练调参经验不足,最后是前后端集成时接口对接容易出错。这个项目特别针对这些痛点进行了优化设计,提供了完整的数据集和预处理代码,模型训练部分加入了详细的参数说明和调优建议,前后端接口也做了标准化设计。
系统采用B/S架构,基于MVC设计模式,主要分为以下几个层次:
选择Spring Boot+Vue的组合主要基于以下考虑:
在深度学习框架选择上,使用Keras而非原生TensorFlow,因为:
项目使用了包含6类鞋子的数据集(运动鞋、凉鞋、靴子等),总计约5000张图片。为提高模型泛化能力,我们进行了以下预处理:
python复制from tensorflow.keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True,
validation_split=0.2)
train_generator = train_datagen.flow_from_directory(
'dataset/train',
target_size=(150, 150),
batch_size=32,
class_mode='categorical',
subset='training')
采用经典的CNN架构,包含多个卷积层和池化层:
python复制from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
model = Sequential([
Conv2D(32, (3,3), activation='relu', input_shape=(150,150,3)),
MaxPooling2D(2,2),
Conv2D(64, (3,3), activation='relu'),
MaxPooling2D(2,2),
Conv2D(128, (3,3), activation='relu'),
MaxPooling2D(2,2),
Flatten(),
Dense(512, activation='relu'),
Dense(6, activation='softmax')
])
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
前端通过axios发送图片到后端:
javascript复制uploadImage(file) {
let formData = new FormData();
formData.append('file', file);
return axios.post('/api/classify', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
});
}
后端Spring Boot控制器:
java复制@PostMapping("/classify")
public ResponseEntity<Result> classify(@RequestParam("file") MultipartFile file) {
try {
// 调用Python服务
String result = pythonService.classifyImage(file);
return ResponseEntity.ok(new Result(true, result));
} catch (Exception e) {
return ResponseEntity.status(500).body(new Result(false, e.getMessage()));
}
}
推荐使用以下环境配置:
在测试集上达到了92.3%的准确率,主要混淆发生在相似鞋型之间:
| 实际类别 | 预测为运动鞋 | 预测为休闲鞋 | 预测为凉鞋 |
|---|---|---|---|
| 运动鞋 | 95% | 4% | 1% |
| 休闲鞋 | 6% | 90% | 4% |
| 凉鞋 | 2% | 3% | 95% |
问题1:训练准确率高但测试准确率低
解决方案:
问题2:训练速度慢
解决方案:
问题:图片上传后无法正确分类
排查步骤:
在实际教学中,我发现学生最容易忽视的是数据预处理环节。很多同学直接使用原始图片训练,导致模型效果不佳。建议在项目开始阶段就要花足够时间做好数据清洗和增强,这是提升模型性能最有效的方法之一。