通过matlab训练和验证深度学习的目标检测

视频演示:

通过matlab训练和验证深度学习的目标检测_哔哩哔哩_bilibili

大家好,这里是 Coding茶水间 👋。
今天我们来学习如何使用 MATLAB 来进行 深度学习目标检测,并以 RCNN 算法 为例,完成一个交通标志检测的小项目。


一、RCNN 算法简介

在目标检测的发展历程中,RCNN(Region-based Convolutional Neural Network) 是一个非常重要的里程碑。它首次将 深度卷积神经网络(CNN) 引入到了目标检测任务中,大大提升了检测精度。

通过matlab训练和验证深度学习的目标检测

RCNN 的主要创新在于:

  • 使用 CNN 自动提取特征,替代了传统的人工特征工程。
  • 将候选区域(Region Proposal)与 CNN 特征结合,用于分类和回归。

虽然由于计算效率较低,RCNN 现在已经不再主流,但它作为目标检测的开山之作,为后续的 Fast RCNN、Faster RCNN、YOLO、SSD 等高效算法提供了重要的研究基础。


二、实验准备

我们本次实验基于 MATLAB,并准备了一个 比较简单的交通标志数据集,数据集主要包含两类:

  • slow(慢行标志)
  • stop(停车让行标志)

每类数据约 10 张图片左右,本次主要大概跑一下RCNN模型从数据标注到训练和验证的大概流程,所以我们这个数据集并没有准备太多,实际应用中我们需要准备大量的数据集才能尽可能的让模型收敛。

通过matlab训练和验证深度学习的目标检测

通过matlab训练和验证深度学习的目标检测


三、数据标注

MATLAB 提供了便捷的标注工具 Image Labeler,我们可以通过以下步骤完成标注:

  1. 打开 MATLAB,点击 APP → 更多应用 → Image Labeler

通过matlab训练和验证深度学习的目标检测

  1. 在工具界面中点击 Load → Add images from folder,导入我们准备好的两类图片。

通过matlab训练和验证深度学习的目标检测

  1. 在左上角新建类别标签:
    • slow → 对应慢行标志
    • stop → 对应停车让行标志

通过matlab训练和验证深度学习的目标检测

  1. 逐张图片框选目标,并指定类别。

通过matlab训练和验证深度学习的目标检测

  1. 点击 Export → To File,保存为 label_data.mat 文件。

通过matlab训练和验证深度学习的目标检测

标注结果包含:

  • 数据源路径
  • 目标类别
  • 标注框的坐标信息

四、模型训练

接下来进入 RCNN 训练阶段。MATLAB 提供了 trainRCNNObjectDetector 接口,我们只需完成数据准备和参数设置即可。

objectDetectorTrainingData方法可以直接把标注好的数据读取解析出来。

训练代码示例

clc; clear; close all;  % 加载标注数据 load label_data  % 将标注数据转换为RCNN训练所需的格式 trainingData = objectDetectorTrainingData(gTruth);  % 加载预训练的AlexNet网络作为特征提取器 net = alexnet;  % 配置训练参数 options = trainingOptions('sgdm', ...     'MiniBatchSize', 128, ...           % 每批处理128个样本     'InitialLearnRate', 1e-3, ...       % 初始学习率为0.001     'LearnRateSchedule', 'piecewise', ... % 分段学习率策略     'LearnRateDropFactor', 0.1, ...     % 学习率下降因子为0.1     'LearnRateDropPeriod', 100, ...     % 每100轮下降一次学习率     'MaxEpochs', 10, ...                % 最大训练轮数为10     'Plots', 'training-progress', ...   % 显示训练进度图     'Verbose', true);                   % 显示训练详细信息  % 训练RCNN目标检测器 % 设置正负样本的重叠阈值:IOU>0.5为正样本,IOU<0.3为负样本 rcnn = trainRCNNObjectDetector(trainingData, net, options, ...     'NegativeOverlapRange', [0 0.3], 'PositiveOverlapRange', [0.5 1]);   % 保存训练好的模型 save rcnn_stop_slow_detector.mat rcnn;  

训练效果

训练过程中,MATLAB 会显示:

  • 准确率曲线:随着迭代次数增加,准确率逐渐接近 100%。
  • 损失曲线:随着训练推进,loss 趋近于 0。

通过matlab训练和验证深度学习的目标检测


五、模型验证

训练完成后,我们使用 未出现在训练集中的新图片 来验证效果。

clc; clear; close all;  load rcnn_stop_slow_detector % 加载测试图像 I = imread('stop_sign_ch/stopstest.jpg');  % 使用训练好的检测器进行目标检测 [bboxes, scores, labels] = detect(rcnn, I);  % 筛选置信度大于0.9 high_conf_indices = scores > 0.9; bboxes = bboxes(high_conf_indices, :); scores = scores(high_conf_indices); labels = labels(high_conf_indices);  % 在图像上标注检测结果并显示 if ~isempty(bboxes)     % 创建包含标签和分数的标注文本     annotations = string(labels) + ": " + string(scores);          % 在图像上绘制边界框和标注     I = insertObjectAnnotation(I, 'rectangle', bboxes, annotations);      else     fprintf('未检测到任何置信度大于0.9的目标n'); end  % 显示带有检测结果的图像 figure imshow(I) title('RCNN检测结果 - Stop和Slow标志'); 

验证效果:

  • 对于 stop 标志,模型能够高置信度框选目标。
  • 对于 slow 标志,模型同样能准确识别。

通过matlab训练和验证深度学习的目标检测


六、总结

通过本次实验,我们完成了:

  1. 使用 Image Labeler 完成数据标注。
  2. 基于 RCNN 模型和 AlexNet 预训练网络 进行目标检测训练。
  3. 对新图片进行验证,效果准确。

虽然 RCNN 在实际应用中已逐渐被更快的算法(如 YOLO、Faster RCNN)取代,但学习 RCNN 的意义在于:

  • 掌握深度学习引入目标检测的核心思想
  • 理解目标检测算法的发展历程
  • 为后续研究 YOLO、SSD、Mask RCNN 等算法奠定基础
发表评论

评论已关闭。

相关文章