基于GoogleNet深度学习网络的花朵类型识别matlab仿真

1.算法运行效果图预览

 

2.算法运行软件版本

matlab2022a

 

3.算法理论概述

       花朵类型识别是计算机视觉领域中的一个重要任务。它在植物学研究、农业、园艺等领域有着广泛的应用。传统的花朵类型识别方法通常基于手工设计的特征提取器,这些方法的效果受限于特征提取器的设计。近年来,深度学习在许多计算机视觉任务中取得了显著的成功。其中,GoogleNet是一种深度学习网络结构,它在图像分类任务中具有优异的性能。

 

3.1. GoogleNet网络结构

        GoogleNet是一种基于Inception模块的深度学习网络结构。它通过引入Inception模块,增加了网络的宽度,并减少了网络的参数数量。GoogleNet的主要创新点包括:

 

Factorization into small convolutions:这种思想通过将一个较大的卷积核分解为多个较小的卷积核,减少了参数数量,并增加了网络的非线性表达能力。例如,将7x7的卷积核分解为1x7和7x1的卷积核,不仅可以减少参数数量,还可以增加网络的深度。

Inception Module:这个模块通过使用多个不同大小的卷积核并行地进行卷积操作,能够提取不同抽象程度的高阶特征。这些特征被拼接在一起,形成了更加丰富的特征表示。Inception Module的结构在网络的后部分出现,前面仍然是普通的卷积层。

去除全连接层:GoogleNet去除了传统CNN中的全连接层,使用1x1的卷积层来进行特征的降维和分类。这样可以大大减少参数数量,减轻过拟合的风险。

3.2. 基于GoogleNet的花朵类型识别

        花朵类型识别的任务是将输入的花朵图像分类为不同的类别。使用GoogleNet进行花朵类型识别的步骤如下:

 

      数据准备:收集不同类别的花朵图像数据集,并对图像进行预处理,如归一化、尺寸调整等。

 

       网络训练:使用花朵图像数据集训练GoogleNet网络。在训练过程中,通过反向传播算法优化网络的参数,使得网络能够学习到花朵图像的特征表示。

 

       特征提取:训练完成后,可以使用GoogleNet网络对输入的花朵图像进行特征提取。通过前向传播,将图像输入到网络中,并提取出最后一层的特征表示。

 

      分类器设计:在得到花朵图像的特征表示后,可以设计一个分类器对其进行分类。可以使用简单的分类器,如softmax分类器。

 

       类别预测:使用训练好的分类器对测试集中的花朵图像进行类别预测,并评估模型的性能。

 

       通过基于GoogleNet的深度学习方法,我们可以有效地识别花朵的类型,为植物学研究、农业、园艺等领域提供有力的支持。

 

 

 

 

4.部分核心程序

Resized_Training_Dataset   = augmentedImageDatastore(Input_Layer_Size ,Dataset);
 
%显示各个花朵的整体识别率
% 使用训练好的模型进行分类预测
[Predicted_Label, Probability] = classify(net, Resized_Training_Dataset);
% 计算分类准确率
accuracy = mean(Predicted_Label == Dataset.Labels);
 
lab1 = [];
for i = 1:length(Dataset.Labels)
    if Dataset.Labels(i) == 'daisy'
       lab1 = [lab1,1];
    end
    if Dataset.Labels(i) == 'dandelion'
       lab1 = [lab1,2];
    end
    if Dataset.Labels(i) == 'roses'
       lab1 = [lab1,3];
    end
    if Dataset.Labels(i) == 'sunflowers'
       lab1 = [lab1,4];
    end
    if Dataset.Labels(i) == 'tulips'
       lab1 = [lab1,5];
    end
end
 
lab2 = [];
for i = 1:length(Predicted_Label)
    if Predicted_Label(i) == 'daisy'
       lab2 = [lab2,1];
    end
    if Predicted_Label(i) == 'dandelion'
       lab2 = [lab2,2];
    end
    if Predicted_Label(i) == 'roses'
       lab2 = [lab2,3];
    end
    if Predicted_Label(i) == 'sunflowers'
       lab2 = [lab2,4];
    end
    if Predicted_Label(i) == 'tulips'
       lab2 = [lab2,5];
    end
end
 
figure;
plot(lab1,'b-s',...
    'LineWidth',1,...
    'MarkerSize',8,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
plot(lab2,'r-->',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
hold on
title(['识别率',num2str(100*accuracy),'%']);
legend('真实种类','识别种类');
title('1:daisy, 2:dandelion, 3:roses, 4:sunflowers, 5:tulips');
 
% 随机选择16张测试图像进行展示
index = randperm(numel(Resized_Training_Dataset.Files), 12);
 
figure
for i = 1:12% 在子图中展示每张图像、预测标签和概率
    subplot(3,4,i)
    I = readimage(Dataset, index(i));% 读取图像
    imshow(I) % 显示图像
    label = Predicted_Label(index(i));% 预测标签
    title(string(label) + ", " + num2str(100*max(Probability(index(i), :)), 3) + "%");
end

  

posted @ 2024-01-24 23:39  简简单单做算法  阅读(36)  评论(0编辑  收藏  举报