You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB中使用自定义数据集训练YOLOv2ObjectDetector?

基于MATLAB的YOLOv2自定义电路元件目标检测器训练指南

我希望在MATLAB中使用YOLOv2ObjectDetector构建一个实时电路元件目标检测器,但未找到使用自定义数据集训练该网络的相关信息。目前仅在MATLAB文档中找到两个使用该网络的示例,但均基于已训练好的模型。此前我一直使用预训练模型进行测试,现在需要进一步推进,使用自定义数据集训练该网络。

现有预训练模型加载代码

pretrainedURL = "https://www.mathworks.com/supportfiles/vision/data/yolov2IndoorObjectDetector23b.zip";
pretrainedFolder = fullfile(tempdir,"pretrainedNetwork");
pretrainedNetworkZip = fullfile(pretrainedFolder, "yolov2IndoorObjectDetector23b.zip"); 

if ~exist(pretrainedNetworkZip,"file")
    mkdir(pretrainedFolder);
    disp("Downloading pretrained network (6 MB)...");
    websave(pretrainedNetworkZip, pretrainedURL);
end

unzip(pretrainedNetworkZip, pretrainedFolder)

pretrainedNetwork = fullfile(pretrainedFolder, "yolov2IndoorObjectDetector.mat");
pretrained = load(pretrainedNetwork);
detector = pretrained.detector;

自定义数据集训练YOLOv2的完整步骤

1. 准备并标注数据集

  • 收集各类电路元件图像:覆盖不同角度、光照条件、背景场景,保证数据多样性,建议每个类别至少100张图像
  • 使用MATLAB内置的Image Labeler工具标注目标:
    1. 打开APP后导入图像文件夹
    2. 为每个电路元件类别(如电阻、电容、电感)创建专属标签
    3. 用矩形框框选图像中的目标,完成所有标注后导出为groundTruth对象(这是训练所需的标准格式)

2. 构建YOLOv2网络结构

推荐使用迁移学习(基于预训练骨干网络微调),训练效率更高:

% 定义输入图像尺寸(需与数据集图像一致)
imageSize = [416 416 3];
% 加载预训练Darknet-19骨干网络
backbone = darknet19;
% 提取骨干网络的特征提取层(去掉末尾的分类层)
featureExtractor = backbone.Layers(1:end-3);
% 计算适配数据集的锚框(基于标注数据)
anchorBoxes = estimateAnchorBoxes(groundTruthData, imageSize);
% 定义类别数量(替换为你的实际类别数)
numClasses = 3;
% 创建YOLOv2检测层
detectionLayers = yolov2Layers(imageSize, anchorBoxes, numClasses);
% 组合特征提取层与检测层,得到完整YOLOv2网络
yolov2Net = assembleNetwork(featureExtractor, detectionLayers);

3. 配置训练参数

根据硬件配置调整参数,示例如下:

options = trainingOptions('sgdm', ...
    'InitialLearnRate', 1e-3, ...
    'MiniBatchSize', 8, % 显存不足可调小
    'MaxEpochs', 20, ...
    'Shuffle', 'every-epoch', ...
    'Verbose', true, ...
    'Plots', 'training-progress', ...
    'ValidationData', validationData); % 可选:加入验证集监控过拟合

4. 启动训练

调用训练函数开始训练:

detector = trainYOLOv2ObjectDetector(groundTruthData, yolov2Net, options);

5. 测试与优化

  • 用测试图像验证检测器性能:
testImage = imread('test_circuit.jpg');
[bboxes, scores, labels] = detect(detector, testImage);
% 绘制检测结果
detectedImage = insertObjectAnnotation(testImage, 'rectangle', bboxes, labels);
imshow(detectedImage);
  • 优化方向:
    • 若检测精度低:扩充数据集、调整锚框数量/尺寸、增加训练轮数、降低学习率
    • 若实时性不足:减小输入图像尺寸、简化骨干网络、启用GPU加速

内容的提问来源于stack exchange,提问作者Lorenzo Serloni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 17:33:34