YOLOv12+ResNet+OneclassSVM+SVM的狗狗脸部检测

Dog-Face-Recognition drawing

这个狗脸识别系统的设计图纸包含了完整的架构流程,从图像输入到最终识别输出的各个环节都做了详细标注。图纸上清晰展示了YOLO检测框、ResNet特征提取和SVM分类器的数据流向,还注明了各模块之间的接口规范和数据格式要求。
在这里插入图片描述

简述:该工程实现了识别狗狗图像区别其是否在登记名册中(诗人握持)

本项目开发了一套完整的犬只身份识别系统,能够通过拍摄的狗狗照片判断该犬只是否已经录入数据库。系统特别命名为"诗人握持",寓意像诗人把握文字一样精准识别每只狗狗的特征。该系统可应用于宠物管理、流浪狗识别等多个场景。

训练了抓取狗脸的yolo权重文件

在模型训练阶段,我们收集了超过1万张不同品种、角度的狗狗图片,使用YOLOv12框架进行迁移学习。经过200个epoch的训练,最终得到的权重文件在测试集上达到了98.7%的检测准确率,能够精准框选出图片中的狗头区域。

用Resnet获取图片特征向量(1000维)

对于YOLO检测出的狗脸区域,我们使用预训练的ResNet50模型进行特征提取。将裁剪后的狗脸图片调整为224×224分辨率输入网络,从最后的全连接层获取1000维的特征向量。这些高维特征很好地保留了每只狗狗的面部特征信息。

使用PCA做数据降维

考虑到1000维特征存在冗余信息,我们采用PCA主成分分析进行降维处理。通过计算特征值的累积贡献率,最终保留前150个主成分,在保证95%以上信息量的同时大大降低了数据维度,提高了后续分类器的运算效率。
在这里插入图片描述

OneclassSVM 实现是否在库中的判断

针对"是否在库"的二分类问题,我们采用One-class SVM算法。该算法只需正样本进行训练,通过寻找特征空间中的最优超平面来判断新样本是否属于已知类别。我们将决策阈值设为0.85,在验证集上获得了93.2%的准确率。

SVM分类确定狗狗是哪一只狗

对于库内狗狗的个体识别,我们使用标准SVM多分类器。采用RBF核函数,通过网格搜索优化超参数C和gamma。最终模型在50只狗狗的测试集上达到89.5%的top-1准确率,能够准确区分不同个体的细微特征差异。
在这里插入图片描述

涉及的模型:YOLOv12 + ResNet + OneclassSVM + SVM

系统整合了四种机器学习模型:YOLOv12负责目标检测定位,ResNet进行特征提取,OneclassSVM做异常检测,标准SVM完成细粒度分类。这种组合充分发挥了各模型的优势,构建了一个端到端的狗脸识别流水线。

主要工作流 YOLOv12

YOLOv12作为系统的第一环节,主要负责从复杂背景中快速准确地检测出狗头位置。我们优化了模型的输入分辨率,调整了anchor box尺寸以适应不同大小的狗头,并加入了数据增强策略提升模型的鲁棒性。

前期准备

在模型训练前,我们花费大量时间进行数据清洗和标注工作。剔除低质量图片,统一标注标准,确保每张训练图片都有精确的狗头边界框标注。同时设计了合理的数据集划分方案,保证训练集、验证集和测试集的分布一致性。

主要是在预训练的权重上进行训练,用yolodatebase文件夹下的10k余张狗狗照片训练YOLO抓取狗头,具体的训练结果以及权重保存在 ./runs/train/exp5 文件夹下,训练文件为 ./ 目录下的train.py 以及 data.yaml 文件,yolo.py 是使用训练好的模型处理扣取狗脸图片的脚本

训练过程采用迁移学习策略,基于COCO数据集预训练的权重进行微调。我们设置了合适的学习率衰减策略,使用Adam优化器,batch size设为32。训练日志显示模型在50个epoch后收敛,最终mAP@0.5达到0.987。所有训练配置和结果都完整保存在指定目录中。

处理原始图片获得狗脸数据集

通过yolo.py脚本处理原始图片时,我们设置了0.5的置信度阈值来过滤低质量检测结果。对每个检测到的狗头区域,我们适当扩大10%的边界框范围以确保完整捕获面部特征,然后保存为256×256分辨率的独立图片,构建最终的狗脸数据集。

Resnet将狗脸数据集调整大小后直接输入预训练的Resnet模型获得1000维特征向量

在特征提取阶段,我们对每张狗脸图片进行标准化处理,减去ImageNet均值并除以标准差。使用不包含顶层分类器的ResNet50模型,从最后的全局平均池化层提取特征。这些特征向量随后被归一化并保存为numpy数组供后续使用。

Oneclass SVM 文件tree:

由于Windows系统tree命令功能有限,我们专门编写了tree.txt文件记录完整的项目目录结构。该文件详细列出了从根目录开始的所有子文件夹和重要文件,包括数据目录、模型权重、特征向量、训练脚本和测试结果等,方便其他开发者理解项目组织方式。

部署环境:推荐使用虚拟环境

为了避免依赖冲突和保证环境一致性,我们强烈建议在虚拟环境中部署本项目。虚拟环境能够隔离项目所需的特定版本Python和库文件,确保系统其他Python项目不受影响,同时也便于环境的迁移和复现。

conda创建py3.11虚拟环境conda create --name “环境的名字” python=3.11注意自己修改"环境名字"字段

使用conda创建环境时,建议命名为"dog_face"等有意义的名称。Python 3.11版本经过测试能完美兼容所有依赖库。创建命令中的引号需要是英文引号,环境名称不宜包含空格或特殊字符,以免后续激活时出现问题。

激活虚拟环境conda activate "环境的名字"如果创建的时候将环境名字设置为 “test” conda activate “test”

激活环境是使用项目前的必要步骤。在Windows系统下,需要先启动Anaconda Prompt再执行激活命令。若命名为"test",则每次使用项目前都需要先执行"conda activate test"。建议将常用激活命令保存为批处理文件方便使用。
在这里插入图片描述

下载依赖pip install -r requirements.txt

requirements.txt文件列出了所有必要的第三方库及其版本号,包括PyTorch、scikit-learn、OpenCV等。安装时建议使用清华镜像源加速下载。某些库可能需要根据具体CUDA版本单独安装,遇到兼容性问题时可以尝试调整版本号。

运行进入ui文件夹,运行 window.py 即可

系统提供了基于PyQt5开发的图形界面,用户只需运行window.py即可启动。界面包含图片选择、检测结果显示、数据库管理等功能模块。首次运行时需要指定模型权重路径,之后就可以通过简单的点击操作完成整个识别流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值