MATLAB基于ResNet18的交通标志识别系统

1. 数据准备

  • 数据集:该数据集包含了大量标注好的交通标志图片,每类标志都有不同的样本。
  • 数据预处理:图像需要进行一些基本的预处理,如调整大小、归一化等,以适应ResNet18的输入要求。

2. 网络设计

  • 使用MATLAB自带的深度学习工具箱,可以直接加载ResNet18模型。ResNet18是一个包含18层的卷积神经网络,适用于图像分类任务。
  • 可以加载预训练的ResNet18模型,并根据交通标志数据集进行微调(fine-tuning)。微调过程中,将预训练的ResNet18模型的前几层保持不变,只修改最后的全连接层,以适应交通标志分类。

3. 训练过程

  • 划分数据集:将数据集分为训练集、验证集和测试集,通常按照80%:10%:10%的比例进行划分。
  • 定义训练选项:设置学习率、批量大小、训练轮次等参数。MATLAB的trainingOptions函数可以用于设置这些超参数。
  • 训练模型:使用trainNetwork函数对模型进行训练,调整学习率等超参数,确保模型能够收敛。
  • 
    
    clc
    clear 
    close all
    % 读取数据
    load('images.mat')
    rng(1)
    % 选取部分数据可视化 前20个
    figure
    for i=1:1:20
        subplot(4,5,i);
        imshow(images(:,:,:,(i-1)*64+7))
    end
    
    
    [M,N] = size(images(:,:,1));%图像大小
    Y = categorical(labels');                       % 标签的数据类型为categorical
    X = images;
    idx = randperm(size(images,4));   % 产生一个和数据个数一致的随机数序列
    num_train = round(0.8*length(X)); % 训练集个数,0.8表示全部数据中随机选取50%作为训练集
    
     
    % 训练集和测试集数据
    X_train = X(:,:,:,idx(1:num_train));
    X_test = X(:,:,:,idx(num_train+1:end));  %这里假设,全部数据中除了
     
    % 训练集和测试集标签
    Y_train = Y(idx(1:num_train),:);
    Y_test = Y(idx(num_train+1:end),:);
    unique(labels)
    
    %% 定义网络层
    %训练网络
    layers = resnet18Layers();
    figure
    plot(layers)
    % options = trainingOptions("sgdm", ...
    %     InitialLearnRate=0.001, ...
    %     LearnRateSchedule="piecewise", ...
    %     L2Regularization=1.0000e-04, ...
    %     MaxEpochs=20, ...
    %     MiniBatchSize=16, ...
    %     ValidationFrequency=20, ...
    %     Plots="training-progress", ...
    %     Metrics="accuracy");
    options = trainingOptions('sgdm', ...      % Adam 梯度下降算法
        'MaxEpochs',20, ...                  % 最大迭代次数 500
        'MiniBatchSize',50, ...              % 批量大小 512
        'InitialLearnRate', 5e-4, ...          % 初始学习率为 0.0005
        'LearnRateSchedule', 'piecewise', ...  % 学习率下降
        'LearnRateDropFactor', 0.1, ...        % 学习率下降因子 0.1
        'LearnRateDropPeriod', 400, ...        % 经过 400 次训练后 学习率为 0.001 * 0.1
        'L2Regularization', 0.0001, ...
        'Shuffle', 'every-epoch', ...          % 打乱数据集
        'Plots', 'training-progress', ...      % 画出曲线
        'Verbose', false);
    net_cnn = trainNetwork(X_train,Y_train,layers,options);
    
    
    % 测试
    testLabel = classify(net_cnn,X_test);
    precision = sum(testLabel==Y_test)/numel(testLabel);
    disp(['测试集分类准确率为',num2str(precision*100),'%'])
    
    save resnet18_checkpoints.mat net_cnn
    
    
    %% 
    %% 混淆矩阵
    
    fig = figure;
    cm = confusionchart(Y_test,testLabel,'RowSummary','row-normalized','ColumnSummary','column-normalized');
    
    fig_Position = fig.Position;
    fig_Position(3) = fig_Position(3)*1.5;
    fig.Position = fig_Position;
    
    
    
    
    
    

4. 模型评估

  • 训练完成后,使用验证集对模型进行评估,查看分类准确率、混淆矩阵等指标。
  • 对测试集进行测试,确保模型的泛化能力。

5. 交通标志识别

  • 使用训练好的模型对新的交通标志图像进行分类预测。可以使用classify函数对图像进行预测,得到该图像属于哪个交通标志类别。

6. 代码获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吐泡泡科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值