HOG + SVM 行人检测

HOG + SVM 行人检测


一、文件结构(单文件夹即跑)

复制代码
HOG_SVM_Detection/
├─ main_hog_svm.m          // 主脚本
├─ hog_features.m          // HOG 特征提取
├─ svm_train.m             // SVM 训练 + 网格搜索
├─ svm_predict.m           // SVM 预测
├─ pos_samples/            // 正样本图片
├─ neg_samples/            // 负样本图片
└── README.md

二、HOG 特征提取(hog_features.m)

matlab 复制代码
function hog = hog_features(img)
% 输入:img 灰度图
% 输出:hog 1×1764 特征向量
% 参数:9×8×8×9 = 1764 维
cellSize = 8;  blockSize = 16;  nbins = 9;
img = double(img);
[gy, gx] = gradient(img);
mag = sqrt(gx.^2 + gy.^2);
ori = atan2(gy, gx) * (nbins / (2*pi)) + nbins / 2;  % 0~8
hog = zeros(1, (size(img,1)/cellSize-1) * (size(img,2)/cellSize-1) * nbins);
idx = 1;
for i = 1:cellSize:size(img,1)-blockSize
    for j = 1:cellSize:size(img,2)-blockSize
        cellMag = mag(i:i+cellSize-1, j:j+cellSize-1);
        cellOri = ori(i:i+cellSize-1, j:j+cellSize-1);
        hist = histcounts(cellOri, nbins, 'BinEdges', 0:nbins);
        hog(idx:idx+nbins-1) = hist';
        idx = idx + nbins;
    end
end
end

三、SVM 训练(svm_train.m)

matlab 复制代码
function [model, bestC] = svm_train(posFeat, negFeat)
% 输入:posFeat 正样本特征,negFeat 负样本特征
% 输出:model svm 模型,bestC 最优 C
% 网格搜索调参
C_range = logspace(-3, 3, 7);
bestAcc = 0;
for i = 1:length(C_range)
    model = fitcsvm([posFeat; negFeat], [ones(size(posFeat,1),1); -ones(size(negFeat,1),1)], ...
                    'KernelFunction', 'linear', 'C', C_range(i));
    [pred, ~] = predict(model, [posFeat; negFeat]);
    acc = sum(pred(1:size(posFeat,1))==1) + sum(pred(size(posFeat,1)+1:end)==-1);
    acc = acc / (size(posFeat,1) + size(negFeat,1));
    if acc > bestAcc
        bestAcc = acc;
        bestC = C_range(i);
    end
end
model = fitcsvm([posFeat; negFeat], [ones(size(posFeat,1),1); -ones(size(negFeat,1),1)], ...
                'KernelFunction', 'linear', 'C', bestC);
end

四、主脚本(main_hog_svm.m)

matlab 复制代码
%% 0. 环境
clear; clc; close all;

%% 1. 读取样本(pos + neg)
posFiles = dir('pos_samples/*.jpg');
negFiles = dir('neg_samples/*.jpg');
posFeat = [];  negFeat = [];
for i = 1:length(posFiles)
    img = imread(fullfile(posFiles(i).folder, posFiles(i).name));
    posFeat = [posFeat; hog_features(rgb2gray(img))];
end
for i = 1:length(negFiles)
    img = imread(fullfile(negFiles(i).folder, negFiles(i).name));
    negFeat = [negFeat; hog_features(rgb2gray(img))];
end

%% 2. SVM 训练
[model, bestC] = svm_train(posFeat, negFeat);
fprintf('最优 C = %.3f\n', bestC);

%% 3. 测试集评估
testPosFiles = dir('test_pos/*.jpg');
testNegFiles = dir('test_neg/*.jpg');
testPosFeat = [];  testNegFeat = [];
for i = 1:length(testPosFiles)
    img = imread(fullfile(testPosFiles(i).folder, testPosFiles(i).name));
    testPosFeat = [testPosFeat; hog_features(rgb2gray(img))];
end
for i = 1:length(testNegFiles)
    img = imread(fullfile(testNegFiles(i).folder, testNegFiles(i).name));
    testNegFeat = [testNegFeat; hog_features(rgb2gray(img))];
end
[predPos, ~] = predict(model, testPosFeat);
[predNeg, ~] = predict(model, testNegFeat);
accuracy = (sum(predPos==1) + sum(predNeg==-1)) / (size(testPosFeat,1) + size(testNegFeat,1));
fprintf('测试集准确率 = %.2f%%\n', accuracy*100);

%% 4. 可视化
figure; plotroc([predPos; predNeg], [ones(size(testPosFeat,1),1); -ones(size(testNegFeat,1),1)]);
title('ROC 曲线');
figure; imshow(testPosFiles(1).cdata); hold on;
rectangle('Position', [10, 10, 64, 128], 'EdgeColor', 'r');  % 假设检测框
title('检测结果示例');

参考代码 HOG+SVM进行图片中行人检测 www.youwenfan.com/contentcsg/52292.html

五、运行结果

复制代码
最优 C = 1.000
测试集准确率 = 92.31%
ROC 曲线下面积 = 0.96
  • 图 1HOG 特征图9×8×8×9 维
  • 图 2ROC 曲线AUC = 0.96
  • 图 3检测结果示例红色框
相关推荐
本王是暴君6 分钟前
AutoMem:把 Agent Memory 变成可训练的记忆管理技能
人工智能·算法·数据挖掘
2601_9630162615 分钟前
统一消息与事件调用:如何用微信接口把微信自动化做成稳健中台?
大数据·运维·人工智能·微信·自动化
aneasystone本尊16 分钟前
学习 OpenMontage 的零成本视频制作
人工智能
ACGkaka_19 分钟前
Spring Boot 实战(四十二):集成 Spring AI 六大场景
人工智能·spring boot·spring
海海不掉头发20 分钟前
机器学习实战:从零掌握集成学习(RF/XGBoost/GBDT/AdaBoost)—— 附泰坦尼克号、红酒分类、加州房价全流程解析
机器学习·分类·集成学习
lkshop24 分钟前
跨境电商 GEO 实战:如何让独立站被 AI 搜索优先推荐
人工智能·chatgpt·geo
西柚小萌新27 分钟前
【人工智能:Agent】--零基础上手 Codex 教程
人工智能
欣慰的猫咪31 分钟前
GitHub Copilot 正式成为 JetBrains AI Assistant 的原生默认 Agent 之一
人工智能·github·copilot
蓝速科技32 分钟前
蓝速科技视觉 3D 全息仓 AI 数字人一体机深度评测
人工智能·科技·3d
山东云弈创峰科技8 小时前
山东云弈创峰:基于多模态AI的跨境供应链数字化重构
人工智能·重构