基于yolov2的人脸检测

1.训练代码

%%%清除命令窗口的内容;清除工作空间的所有变量;关闭所有打开的图形窗口;关闭警告信息。
clc;clear;close all;warning off;
%%%将当前工作路径添加到搜索路径中
addpath(genpath(pwd));
%%%设置随机数生成器的种子
rng('default')
%%%设置检查点文件夹路径,将当前工作路径与'train'拼接
checkpoint_folder= fullfile(pwd, 'train');
%%%加载存储有标注信息的 GroundTruth.mat 文件
data             = load(fullfile(pwd, 'GroundTruth.mat'));
%%%从数据中提取标注信息
VD               = data.gTruth;
%%%将图像文件路径与当前工作路径拼接
VD.imageFilename = fullfile(VD.imageFilename);

 
%%%打乱数据集索引
sidx             = randperm(size(VD,1));
%%%将75%的数据用作训练集
idx              = floor(0.75 * length(sidx));
%%%选取训练集
train_data       = VD(sidx(1:idx),:);
%%%选取测试集
test_data        = VD(sidx(idx+1:end),:);
%%%设置图像大小为224x224像素,3通道
image_size       = [224 224 3];
%%%计算目标类别数量
num_classes      = size(VD,2)-1;
%%%预定义的锚框大小
anchor_boxes = [
    43 59
    18 22
    23 29
    84 109
    ];


%%%加载预训练的 ResNet-50 模型
load Model_resnet50.mat
%%%用于目标检测的特征层
featureLayer = 'activation_40_relu';
%%%构建 YOLOv2 网络
lgraph       = yolov2Layers(image_size,num_classes,anchor_boxes,Initial_nn,featureLayer);
%%%设置训练选项,包括优化器、批量大小、学习率、最大迭代次数等
options = trainingOptions('sgdm', ...
    'MiniBatchSize', 8, ....
    'InitialLearnRate',1e-3, ...
    'MaxEpochs',100,...
    'CheckpointPath', checkpoint_folder, ...
    'Shuffle','every-epoch', ...
    'ExecutionEnvironment', 'gpu');% 设置训练选项
%%%训练 YOLOv2 目标检测器
[detector,info] = trainYOLOv2ObjectDetector(train_data,lgraph,options);

%%%保存训练好的YOLOv2目标检测器到文件"yolov2.mat"中
save yolov2.mat detector

2.测试代码

%%%清除命令窗口、关闭所有图形窗口、关闭警告信息
clc;clear;close all;warning off;
%%%添加当前工作目录到搜索路径
addpath(genpath(pwd));
%%%设置随机数生成器的种子
rng('default')
%%%加载训练好的目标检测器(yolov2.mat)
load yolov2.mat
%%%设置图像大小为224x224
img_size= [224,224];
%%%设置图像库路径为'train/'。
imgPath = 'train/'; 
%%%遍历图像库中的所有jpg格式文件
imgDir  = dir([imgPath '*.jpg']);
cnt     = 0;
%%%对于每个图像,执行以下操作
cnt     = 0;
for i = 1:36        % 遍历结构体就可以一一处理图片了
    i
    if mod(i,12)==1
       figure
    end
    cnt     = cnt+1;
    subplot(3,4,cnt); 
    %%%读取图像
    img = imread([imgPath imgDir(i).name]); 
    %%%调整图像大小为224x224
    I               = imresize(img,img_size(1:2));
    %%%使用目标检测器进行目标检测,设置阈值为0.15
    [bboxes,scores] = detect(detector,I,'Threshold',0.15);

    [~,II] = max(scores);
    %%%如果检测到目标,则在图像上绘制检测结果
    if ~isempty(bboxes) % 如果检测到目标
        I = insertObjectAnnotation(I,'rectangle',bboxes(II,:),scores(II),LineWidth=3);% 在图像上绘制检测结果
    end
    subplot(3,4,cnt); 
    %%%显示带有检测结果的图像
    imshow(I, []);  
    %%%等待一小段时间,使图像显示更流畅
    pause(0.01);
    if cnt==12
       cnt=0;
    end
end

3.结果

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值