yolov5-face是基于yolov5基础上的人脸识别,
感兴趣的朋友可以先看看yolov5相关,yolov5没有论文,
yolo5-face 的论文:
[2105.12931] YOLO5Face: Why Reinventing a Face Detector (arxiv.org)https://arxiv.org/abs/2105.12931yolov5-face的项目地址:
**************************************************************************************************************
YOLOv5-face代码运行
**************************************************************************************************************
第一步:下载yolo5-face
(环境我用的是之前配置yolov5的同样环境)
第二步:下载数据集 widerface数据集。
下载网址:
下载如下压缩包
解压缩到yolo5-face项目下data下新建的widerface文件夹下。
手动把WIDER_train,WIDER_test,WIDER_val,改成train,test,val.wider_face_split不变。(wider_face_split不下载也可以。)
这是单纯只有图片。
https://drive.google.com/file/d/1tU_IjyOwGQfGNUvZGwWWM4SwxKp2PUQ8/view?usp=sharing
下载的是widerface图片的label.txt文件。
全部解压完事后,再去压缩retinaface_gt_v1.1,解压缩位置放到yolov5-face-master项目里data文件夹下新建的widerface文件夹下。
这样的话就会直接放到对应的标签里。
(如果不手动改上面的test/train/val的话,压缩retinaface_gt_v1.1后,会多出test/train/val的文件夹)
第三步:运行train2yolo.py和val2yolo.py
接着运行train2yolo.py和val2yolo.py文件,这俩个文件是把数据集转成yolo训练用的格式。
直接运行会出错,如图二,
(需要改变文件路径。一开始我找了train2yolo.py中没有读取和存储路径,以为写在retinaface2yolo.py中,然后就改变retinaface2yolo.py中103和104行,如图三,
换成自己的存放地址运行后在widerface文件夹train文件夹下出现照片对应的.txt文件。项目中没有要求运行retinaface2yolo.py,先略过。)
在data文件夹下新建widerfaceyolo文件夹,放widerface文件夹对应的yolo所需的文件。
wideryolo下新建train文件夹。
修改train2yolo.py文件:注释掉104-126行,修改读取路径和保存路径,如图:
修改代码可复制,记得换成自己的保存路径:
original_path = r'F:/YOLOv5projects/yolov5-face-master/data/widerface/train'
save_path = r'F:/YOLOv5projects/yolov5-face-master/data/widerfaceyolo/train'
aa = WiderFaceDetection(os.path.join(original_path, 'label.txt'))
运行train2yolo.py后,出现图五:
这时在widerfaceyolo文件夹下就有如图
(没细看代码,暂时觉得train2yolo.py和retinaface2yolo.py运行后结果一样,以后有机会看看,现在先忙着把程序运行出来。)
接着修改 val2yolo.py文件:
注释掉54-76行,修改到自己的读存取路径如图:
运行后,
此时widerface文件夹下val下多了照片和.txt文件,
这么写没有把.jpg和.txt文件分开,所以在val下新建2文件夹images和labels,改写代码
运行后:
这样子就是图片是图片,标签是标签啦。
(一开始的没有分类的图片和标签没有什么用啦,大家可以不做那一步,属于我绕路啦)
第四步:运行train.py
出错 ImportError:TensorBoard 日志记录需要 TensorBoard 1.15 或更高版本
升级tensorboard后还是出错,参考博客后修改了widerface.yaml文件,还是出错
好像是版本的问题,卸载又重新安装了seaborn,还有scipy后,开始训练:
提示没有找到数据集,应该是路径错误。因为widerface.yaml文件中有
down:bash data/scipts/get_voc.sh所以自动下载voc数据集。voc下载成功,但是还是出错。
以为是之前对数据有处理了俩次,导致不知道读取那一部分的数据,所以删掉那些没有分类的数据。
再次train.py
提示没有models/common.py中没有SPPF,从yolov5项目中复制到刚才路径里SPP类的下面
虽然有警告,但是可忽略。再再次运行train.py
wandb: 错误 api_key 未配置 (no-tty):调用 wandb.login(key=[your_api_key])
在 yolov5 遇到这个问题,需要重新设置一下wandb,在对应的环境终端输入如下代码:
wandb init
然后打开弹出的网址:
打开后复制key
在终端中输入(ctrl + v 在终端中不会出现你粘贴的东西),粘贴后 enter 就好。
然后选择创建一个新的还是远来已经创建好的,就可以:
再再再次运行train.py,提示没有wider_val.txt文件,
(我从别的地方下载下来,放进去,有需要的可以私聊我)
也因为是因为cpu训练,所以改小了epoch和batch-size(大家可不改)
再再再再次运行train.py,提示没有足够的内存,我放弃用CPU训练了,打算看看google的免费GPU.
运行完后在run下会有日志还有一丢丢识别图,但是没有权重文件,也没有生成best.pt等。
同时也生成了wandb相关文件:
可以通过wandb看到标签。
虽然没有训练完,但是有一个可以看到效果
等我用GPU训练后再给大家看最终结果。
20220408来记录结果了。
训练结果:
训练后,又修改训练权重,epoch=100,batch_size=32
错误原因:是setuptools的版本问题,
原本setuptools==60.10.0改为pip installsetuptools==59.5.0
batch_size越大,所占运行空间内存越大
俩次训练对比:
训练完事后,修改训练权重,改为摄像头,运行Detect_face.py,出错。
不能识别摄像头,只能读取照片路径。
只能识别单张照片。没有写循环,读取照片时候是单张,写入新的照片需要改名字,要不然会把之前的识别照片覆盖。
修改参数,识别照片,
训练结果如图:
总结:
Batch_size小,所占运算内存就越小。这取决于CPU,GPU的运算能力。
一共有俩个权重,一个是yolov5-buzeface.pt,一个是yolo5s.pt,5s的效果更好。
Export.py和yolo.py是用于将模型装换为c++可调用的模型
Yolo.py中 for I(f,n,m,args)in enumerate开始迭代循环backbone与head的配置。f,n,m,args分别代表着从哪层开始,模块的默认深度,模块的类型和模块的参数。
打包分享:
项目,数据集,训练后的权重文件,还有加了注意力训练的权重文件。下载地址:
链接:https://pan.baidu.com/s/1KHutnpJrRbqtSFfQdtmfZA?pwd=stjy
提取码:stjy
yolo5-face+注意力机制
可以参考这几篇:
❀YOLO5学习❀基于yolo5-face结合注意力模型SE的数据实验_夏天|여름이다的博客-CSDN博客
❀YOLO5学习❀基于yolo5-face结合注意力模型CBAM的数据实验_夏天|여름이다的博客-CSDN博客
参考博客:
[1] YOLOv5Face YOLO5Face人脸检测论文及代码简析_cliu1_16的博客-CSDN博客_yolov5人脸检测
[2]