卷积神经网络实现图像识别
基于这个大佬的卷积神经网络
进行网络层的改进,运用ResNet-18进行图像识别,从二分类变成多分类,提高准确率。大佬写的很详细很细致,可以先精读一下。
数据集
下载地址
一共有60多个类的图片
这里用30个类进行实验(电脑带不动了),手动分训练集和测试集。图片比例最好为7:3。
网络层
数据预处理、训练函数、测试函数与大佬的相似。
注意将二分类代码进行修改。
这是修改后的网络层
# 加载预训练的ResNet-18模型
model = resnet18(pretrained=True)
num_classes = len(dataset_train.classes)
# 重置最后一层的输出大小
model.fc = nn.Linear(model.fc.in_features, num_classes)
model = model.to(device)
测试代码
#加载模型
model = resnet18(pretrained=False)
num_classes = 30 # 你的数据集有多少类别
model.fc = nn.Linear(model.fc.in_features, num_classes)
model.load_state_dict(torch.load('你存代码的地址'))
model.eval()
# 类别标签
class_labels = ['你有几个类就写几个标签','']
# 加载图片并进行预测
image_path = '你要进行测试的图片地址'
image = Image.open(image_path)
image = transform(image).unsqueeze(0) # 增加一个维度表示batch size
output = model(image)
_, predicted = torch.max(output, 1)
predicted_label = class_labels[predicted.item()]
# 输出预测结果
print('Predicted label:', predicted_label)
结果
一般测试的准确率都有80%以上,多迭代几次可以达到90%
也能准确识别出图片