当前位置: 首页 > news >正文

湖北建设工程信息网站百度免费推广

湖北建设工程信息网站,百度免费推广,wordpress主题 说说,西安网站制作工作室Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码) 目录 Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码) 1.戴眼镜检测和识别方法 2.戴眼镜数据集 3.人脸检测模型 4.戴眼镜分类模型训练 (1)项目安装 (2)准…

Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码)

目录

Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码)

1.戴眼镜检测和识别方法

2.戴眼镜数据集

3.人脸检测模型

4.戴眼镜分类模型训练

(1)项目安装

(2)准备数据

(3)戴眼镜分类模型训练(Pytorch)

(4) 可视化训练过程

(5) 戴眼镜识别效果

(6) 一些优化建议

(7) 一些运行错误处理方法

5.项目源码下载(Python版)

6.项目源码下载(Android版)


这是项目《戴眼镜检测和识别》系列之《Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码)》;项目基于深度学习框架Pytorch开发一个高精度,可实时的戴眼镜检测和识别算法( Eyeglasses Detection and recognition);项目源码支持模型有resnet18,resnet34,resnet50, mobilenet_v2以及googlenet等常见的深度学习模型,用户可自定义进行训练;准确率还挺高的,采用轻量级mobilenet_v2模型的戴眼镜检测和识别准确率也可以高达98.6217%左右,满足业务性能需求。

模型input sizeTest准确率
mobilenet_v2112×11298.6217%
googlenet112×11298.7643%
resnet18112×11298.8118%

先展示一下,Python版本的戴眼镜检测和识别Demo效果(其中绿色框表示佩戴了眼镜,蓝色框表示未佩戴眼镜): 

尊重原创,转载请注明出处】 https://blog.csdn.net/guyuealian/article/details/129263640


 更多项目《戴眼镜检测和识别》系列文章请参考:

  1. 戴眼镜检测和识别1:戴眼镜检测数据集(含下载链接): https://blog.csdn.net/guyuealian/article/details/129263537
  2. 戴眼镜检测和识别2:Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码):https://blog.csdn.net/guyuealian/article/details/129263640
  3. 戴眼镜检测和识别3:Android实现戴眼镜检测和识别(含源码,可实时检测):https://blog.csdn.net/guyuealian/article/details/129263657
  4. 戴眼镜检测和识别4:C++实现戴眼镜检测和识别(含源码,可实时检测):https://blog.csdn.net/guyuealian/article/details/129263677
  5. 戴口罩人脸检测1:戴口罩人脸数据集:https://blog.csdn.net/guyuealian/article/details/125069926
  6. 戴口罩人脸检测2:Pytorch实现戴口罩人脸检测和戴口罩识别(含训练代码 戴口罩人脸数据集):https://blog.csdn.net/guyuealian/article/details/125428609
  7. 戴口罩人脸检测3:Android实现戴口罩人脸检测和戴口罩识别(附Android源码) :https://blog.csdn.net/guyuealian/article/details/128404379
  8. 安全帽检测1:佩戴安全帽数据集:https://blog.csdn.net/guyuealian/article/details/127331580
  9. 安全帽检测2:YOLOv5实现佩戴安全帽检测和识别(含佩戴安全帽数据集+训练代码):https://blog.csdn.net/guyuealian/article/details/127250780
  10. 安全帽检测3:Android实现佩戴安全帽检测和识别:https://blog.csdn.net/guyuealian/article/details/127345231


1.戴眼镜检测和识别方法

戴眼镜检测和识别方法有多种实现方案,这里采用最常规的方法:基于人脸检测+戴眼镜分类识别方法,即先采用通用的人脸检测模型,进行人脸检测,然后裁剪人脸区域,再训练一个戴眼镜分类器,对人脸是否戴眼镜进行分类识别(未戴眼镜和戴眼镜两个类别);

这样做的好处,是可以利用现有的人脸检测模型,而无需重新训练人脸检测模型,可减少人工标注成本低;而戴眼镜分类数据相对而言比较容易采集,分类模型可针对性进行优化。


2.戴眼镜数据集

项目已经收集了戴眼镜数据集(Eyeglasses-Dataset),总共约20000+张图片,分为eyeglasses-train训练集和eyeglasses-test测试集;其中训练集eyeglasses-train中,戴眼镜的人脸数据有10475张图片(标签为face-eyeglasses),不戴眼镜的人脸数据有12841张图片(标签为face);测试集eyeglasses-test戴眼镜和不戴眼镜的人脸数据各有1000张图片,共2000张图片。

所有数据都标注了人脸框,数据格式为VOC,其中戴眼镜的人脸框标注为face-eyeglasses,不戴眼镜的人脸框标注为face,该数据集可直接用于深度学习戴眼镜检测模型训练。为了方便分类模型训练,已经将eyeglasses-train和eyeglasses-test的人脸区域裁剪,并保存在crops目录中,该数据集可直接用于深度学习戴眼镜分类模型训练

关于戴眼镜检测数据的使用说明请参考我的一篇博客:戴眼镜检测和识别1:戴眼镜检测数据集(含下载链接): https://blog.csdn.net/guyuealian/article/details/129263537

3.人脸检测模型

本项目人脸检测训练代码请参考:https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB 

这是一个基于SSD改进且轻量化后人脸检测模型,很slim,整个模型仅仅1.7M左右,在普通Android手机都可以实时检测。人脸检测方法在网上有一大堆现成的方法可以使用,完全可以不局限我这个方法。

4.戴眼镜分类模型训练

准备好戴眼镜数据后,接下来就可以开始训练戴眼镜分类识别模型;项目模型支持resnet18,resnet34,resnet50, mobilenet_v2以及googlenet等常见的深度学习模型,考虑到后续我们需要将戴眼镜识别模型部署到Android平台中,因此项目选择计算量比较小的轻量化模型mobilenet_v2;如果不用端上部署,完全可以使用参数量更大的模型,如resnet50等模型。

(1)项目安装

 整套工程项目基本结构如下:

.
├── classifier                 # 训练模型相关工具
├── configs                    # 训练配置文件
├── data                       # 训练数据
├── libs           
│   ├── convert                # 将模型转换为ONNX工具
│   ├── light_detector         # 人脸检测
│   ├── detector.py            # 人脸检测demo
│   └── README.md               
├── demo.py              # demo
├── README.md            # 项目工程说明文档
├── requirements.txt     # 项目相关依赖包
└── train.py             # 训练文件

 项目依赖python包请参考requirements.txt,使用pip安装即可:

numpy==1.16.3
matplotlib==3.1.0
Pillow==6.0.0
easydict==1.9
opencv-contrib-python==4.5.2.52
opencv-python==4.5.1.48
pandas==1.1.5
PyYAML==5.3.1
scikit-image==0.17.2
scikit-learn==0.24.0
scipy==1.5.4
seaborn==0.11.2
tensorboard==2.5.0
tensorboardX==2.1
torch==1.7.1+cu110
torchvision==0.8.2+cu110
tqdm==4.55.1
xmltodict==0.12.0
basetrainer
pybaseutils==0.6.5

项目安装教程请参考:项目开发使用教程和常见问题和解决方法

(2)准备数据

下载戴眼镜数据集eyeglasses-train和eyeglasses-tes,关于戴眼镜检测数据的使用说明请参考我的一篇博客:戴眼镜检测和识别1:戴眼镜检测数据集(含下载链接): https://blog.csdn.net/guyuealian/article/details/129263537

(3)戴眼镜分类模型训练(Pytorch)

项目在《Pytorch基础训练库Pytorch-Base-Trainer(支持模型剪枝 分布式训练)》基础上实现了戴眼镜和未戴眼镜二分类识别训练和测试,整套训练代码非常简单操作,用户只需要将相同类别的数据放在同一个目录下,并填写好对应的数据路径,即可开始训练了。

训练框架采用Pytorch,整套训练代码支持的内容主要有:

  • 目前支持的backbone有:googlenet,resnet[18,34,50], ,mobilenet_v2等, 其他backbone可以自定义添加
  • 训练参数可以通过(configs/config.yaml)配置文件进行设置

训练参数说明如下:

# 训练数据集,可支持多个数据集
train_data:- 'path/to/dataset/eyeglasses-train/face/crops'- 'path/to//dataset/eyeglasses-train/face-eyeglasses/crops'
# 测试数据集
test_data:- 'path/to/dataset/eyeglasses-test/face/crops'- 'path/to/dataset/eyeglasses-test/face-eyeglasses/crops'
# 类别文件
class_name: 'data/class_name.txt'
train_transform: "train"       # 训练使用的数据增强方法
test_transform: "val"          # 测试使用的数据增强方法
work_dir: "work_space/"        # 保存输出模型的目录
net_type: "mobilenet_v2"       # 骨干网络,支持:resnet18/50,mobilenet_v2,googlenet,inception_v3
width_mult: 1.0
input_size: [ 112,112 ]        # 模型输入大小
rgb_mean: [ 0.5, 0.5, 0.5 ]    # for normalize inputs to [-1, 1],Sequence of means for each channel.
rgb_std: [ 0.5, 0.5, 0.5 ]     # for normalize,Sequence of standard deviations for each channel.
batch_size: 16
lr: 0.01                       # 初始学习率
optim_type: "SGD"              # 选择优化器,SGD,Adam
loss_type: "CrossEntropyLoss"  # 选择损失函数:支持CrossEntropyLoss,LabelSmoothing
momentum: 0.9                  # SGD momentum
num_epochs: 100                # 训练循环次数
num_warn_up: 3                 # warn-up次数
num_workers: 4                 # 加载数据工作进程数
weight_decay: 0.0005           # weight_decay,默认5e-4
scheduler: "multi-step"        # 学习率调整策略
milestones: [ 20,50,80 ]       # 下调学习率方式
gpu_id: [ 0 ]                  # GPU ID
log_freq: 50                   # LOG打印频率
progress: True                 # 是否显示进度条
pretrained: True               # 是否使用pretrained模型
finetune: False                # 是否进行finetune

开始训练,在终端输入: 

python train.py -c configs/config.yaml 

训练完成后,训练集的Accuracy在99%以上,测试集的Accuracy在98%左右

(4) 可视化训练过程

训练过程可视化工具是使用Tensorboard,在终端输入命令:
# 基本方法
tensorboard --logdir=path/to/log/
# 例如
tensorboard --logdir=work_space/mobilenet_v2_1.0_CrossEntropyLoss_20230228174645/log

可视化效果 

 

(5) 戴眼镜识别效果

训练完成后,训练集的Accuracy在99%以上,测试集的Accuracy在98%以上,下表给出已经训练好的三个模型,其中mobilenet_v2的准确率可以达到98.6217%,googlenet的准确率可以达到98.7643%,resnet18的准确率可以达到98.8118% 

模型input sizeTest准确率
mobilenet_v2112×11298.6217%
googlenet112×11298.7643%
resnet18112×11298.8118%
  • 测试图片文件
# 测试图片(Linux)
image_dir='data/test_image' # 测试图片的目录
model_file="data/pretrained/mobilenet_v2_1.0_CrossEntropyLoss_20230228174645/model/latest_model_099_98.4316.pth" # 模型文件
out_dir="output/" # 保存检测结果
python demo.py --image_dir $image_dir --model_file $model_file --out_dir $out_dir

Windows系统,请将$image_dir, $model_file ,$out_dir等变量代替为对应的变量值即可,如

# 测试图片(Windows)
python demo.py --image_dir 'data/test_image' --model_file "data/pretrained/mobilenet_v2_1.0_CrossEntropyLoss_20230228174645/model/latest_model_099_98.4316.pth" --out_dir "output/"
  • 测试视频文件
# 测试视频文件(Linux)
video_file="data/video-test.mp4" # 测试视频文件,如*.mp4,*.avi等
model_file="data/pretrained/mobilenet_v2_1.0_CrossEntropyLoss_20230228174645/model/latest_model_099_98.4316.pth" # 模型文件
out_dir="output/" # 保存检测结果
python demo.py --video_file $video_file --model_file $model_file --out_dir $out_dir
  • 测试摄像头
# 测试摄像头(Linux)
video_file=0 # 测试摄像头ID
model_file="data/pretrained/mobilenet_v2_1.0_CrossEntropyLoss_20230228174645/model/latest_model_099_98.4316.pth" # 模型文件
out_dir="output/" # 保存检测结果
python demo.py --video_file $video_file --model_file $model_file --out_dir $out_dir

戴眼镜检测和识别效果展示(其中绿色框表示佩戴了眼镜,蓝色框表示未佩戴眼镜

 

(6) 一些优化建议

 如果想进一步提高模型的性能,可以尝试:

  1. ​ 清洗数据集(最重要):戴眼镜原始数据部分数据是通过网上爬取的,存在部分错误的图片,尽管鄙人已经清洗一部分了,但还是建议你,训练前,再次清洗数据集,不然会影响模型的识别的准确率。
  2. 增加训练的样本数据: 建议根据自己的业务场景,采集相关数据,提高模型泛化能力
  3. 使用参数量更大的模型: 本教程使用的是mobilenet_v2模型,属于比较轻量级的分类模型,采用更大的模型(如resnet50),理论上其精度更高,但推理速度也较慢。
  4. 尝试不同数据增强的组合进行训练
  5. 增加数据增强: 已经支持: 随机裁剪,随机翻转,随机旋转,颜色变换等数据增强方式,可以尝试诸如mixup,CutMix等更复杂的数据增强方式
  6. 样本均衡: 建议进行样本均衡处理
  7. 调超参: 比如学习率调整策略,优化器(SGD,Adam等)
  8. 损失函数: 目前训练代码已经支持:交叉熵,LabelSmoothing,可以尝试FocalLoss等损失函数

(7) 一些运行错误处理方法

  • cannot import name 'load_state_dict_from_url' 

由于一些版本升级,会导致部分接口函数不能使用,请确保版本对应

torch==1.7.1

torchvision==0.8.2

或者将对应python文件将

from torchvision.models.resnet import model_urls, load_state_dict_from_url

修改为:

from torch.hub import load_state_dict_from_url
model_urls = {'mobilenet_v2': 'https://download.pytorch.org/models/mobilenet_v2-b0353104.pth','resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth','resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth','resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth','resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth','resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth','resnext50_32x4d': 'https://download.pytorch.org/models/resnext50_32x4d-7cdf4587.pth','resnext101_32x8d': 'https://download.pytorch.org/models/resnext101_32x8d-8ba56ff5.pth','wide_resnet50_2': 'https://download.pytorch.org/models/wide_resnet50_2-95faca4d.pth','wide_resnet101_2': 'https://download.pytorch.org/models/wide_resnet101_2-32ee1156.pth',
}

5.项目源码下载(Python版)

整套项目源码内容包含:

  1. 提供戴眼镜数据集:训练集eyeglasses-train中,戴眼镜的人脸数据有10475张图片(标签为face-eyeglasses),不戴眼镜的人脸数据有12841张图片(标签为face),测试集eyeglasses-test戴眼镜和不戴眼镜的人脸数据各有1000张图片,共2000张图片。
  2. 提供戴眼镜分类识别训练代码:train.py
  3. 提供戴眼镜分类识别测试代码:demo.py
  4. Demo支持图片,视频和摄像头测试
  5. 项目支持模型:resnet18,resnet34,resnet50, mobilenet_v2以及googlenet等常见的深度学习模型
  6. 项目源码自带训练好的模型文件,可直接运行测试: python demo.py
  7. 在普通电脑CPU/GPU上可以实时检测和识别

6.项目源码下载(Android版)

目前已经实现Android版本的戴眼镜检测和识别,详细项目请参考:戴眼镜检测和识别3:Android实现戴眼镜检测和识别(含源码,可实时检测):https://blog.csdn.net/guyuealian/article/details/129263657

Android戴眼镜检测和识别APP Demo体验:https://download.csdn.net/download/guyuealian/87524194

http://www.wangmingla.cn/news/118463.html

相关文章:

  • 南京做企业网站湛江seo推广公司
  • 外贸seo网站十大搜索引擎
  • 医院的网站关键词定位一般是什么seo 推广怎么做
  • 常州免费企业网站建设上海推广外包
  • 专用主机网站建设品牌推广方案ppt
  • 营销型建设厦门关键词排名优化
  • 成都市成华区建设局官方网站网络营销的专业知识
  • 做爰明星视频网站广告推广免费发布
  • 上传的网站打不开小程序开发文档
  • 现在什么网站做外贸的最好seo发包排名软件
  • 网站建设对我有什么好处快速网站搭建
  • 做网站前端需要编程基础吗网站优化公司认准乐云seo
  • 网站建设制作免费推广莆田百度推广开户
  • wordpress内置了boot宁波seo网络推广公司排名
  • 金融网站开发方案口碑营销的作用
  • wordpress 企业站主题网络营销工资一般多少
  • 毕业做网站运营好吗微信营销软件
  • 黄冈市建设委员会网站百度收录查询接口
  • 图片做网站益阳网站seo
  • 网站开发需要的学历全网营销是什么意思
  • 微信h5的制作方法百度seo关键词优化推荐
  • 品牌网站设计服务seo搜索引擎优化期末及答案
  • 线上推广外包公司求职seo
  • 青海制作网站多少钱百度小说排行榜前十名
  • 东方资产营销网站营销策略ppt模板
  • 凡科网是免费的吗外贸谷歌seo
  • 网站 名词解释磁力搜索器在线
  • 网站设计开发文档模板seo排名第一的企业
  • 电商网站设计是干什么的德阳seo
  • 做修车行业需要在哪个网站做推广全球网站流量排名查询