YOLO5face踩坑经验。

        最近因为有使用yolov5做人脸检测器,了解到了这个项目,做起来发现有不少需要解决的内容,于是乎做个记录,供后人参考。


论文地址:https://arxiv.org/abs/2105.12931
源码地址:https://github.com/deepcam-cn/yolov5-face

可参考的其他文章:人脸与关键点检测:YOLO5Face实战_pytorch_烧技湾-华为云开发者联盟 (csdn.net)https://huaweicloud.csdn.net/63808505dacf622b8df89877.html?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~activity-2-125959373-blog-120665458.235%5Ev38%5Epc_relevant_sort_base2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~activity-2-125959373-blog-120665458.235%5Ev38%5Epc_relevant_sort_base2&utm_relevant_index=5(21条消息) YOLOv5Face YOLO5Face人脸检测论文及代码简析_yolov5-face在数据集的标签上的含义是什么?_cliu1_16的博客-CSDN博客https://blog.csdn.net/cliu1_16/article/details/120665458(21条消息) yoloV5-face学习笔记_yolov5face_长方形混凝土瞬间移动师的博客-CSDN博客https://blog.csdn.net/m0_58348465/article/details/121423964?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168852696916782427447426%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168852696916782427447426&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-6-121423964-null-null.142%5Ev88%5Econtrol_2,239%5Ev2%5Einsert_chatgpt&utm_term=YOLO5Face&spm=1018.2226.3001.4187

数据集和数据准备:

可从上文参考中下载博主们已经转换好的数据集,也可以用官方代码来转,官方代码中:

这两个文件可以提供把WIDER FACE: A Face Detection Benchmark (shuoyang1213.me)http://shuoyang1213.me/WIDERFACE/

 转换为该项目可读取格式的功能,但值得一提的是他们的保存路径都需要修改,此处比较容易,毕竟可以直接抄博主们的作业,自己转也不费什么功夫,更改路径即可。

训练和输入参数:

训练按照官方的步骤来就好,如果运行报错(非文件缺失)可以直接搜索解决方案。

这里整理一下我遇到的问题:

UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the inddexing argument

参照这篇文章可以妥善解决:(21条消息) Yolov5训练时报错:UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the ind_"userwarning: initializing zero-element tensors is_奋斗的豆腐的博客-CSDN博客https://blog.csdn.net/qq_43742820/article/details/126747455

RuntimeError: result type Float can‘t be cast to the desired output type __int64

(21条消息) 解决错误:RuntimeError: result type Float can‘t be cast to the desired output type __int64_顾悦西的博客-CSDN博客https://blog.csdn.net/qq_39195736/article/details/128233102

输入参数设置:

--data data/widerface.yaml --epochs 100 --cfg models/yolov5n.yaml --weights weights/yolov5n-face.pt

cfg和weights选择自己需求的就好,但是版本太高的容易报错,此外我设置了epochs,页面也只显示我跑了100epochs,但是最后的输出结果却有250个epochs,很神秘。

而widerface.yaml是需要根据你处理后的数据集来修改的,大体如下:

YOLO5face踩坑经验。_第1张图片

建议使用绝对路径,相对路径我看了没啥错误不知道为什么没读上。

测试

 第一轮中处理的数据集似乎不能用于评估,还是得回到最开始的widerface数据集,这里上面的博文中也有整理,自行下载即可,完成上一步以后请按照实际情况修改数据集的val集路径和保存的路径,建议使用绝对路径。

YOLO5face踩坑经验。_第2张图片

但是直接运行的话你可能会遇到大量文件无法打开的问题,这是因为:widerface\val\images下面仍有子文件夹,此项目的代码没法正常读取,这里与:GitHub - biubug6/Pytorch_Retinaface: Retinaface get 80.99% in widerface hard val using mobilenet0.25.Retinaface get 80.99% in widerface hard val using mobilenet0.25. - GitHub - biubug6/Pytorch_Retinaface: Retinaface get 80.99% in widerface hard val using mobilenet0.25.https://github.com/biubug6/Pytorch_Retinaface.git 这个项目有很大的不同(这个项目的代码可以读取子文件夹路径),上文博客里也有教你怎么处理这种情况的方法:

即将此处代码进行修改:YOLO5face踩坑经验。_第3张图片

 可以直接复制下面这段:

        # for image_path in tqdm(glob.glob(os.path.join(testset_folder, '*'))):
        for image_path in tqdm(glob.glob(os.path.join(testset_folder, '*','*.jpg'))):

处理情况:(可以参考下参数配置,按照实际情况修改)

 YOLO5face踩坑经验。_第4张图片

 生成的文件就是可以使用于widerface_eval评估包的代码了,这个包可以在这里下载(官方渠道):WIDER FACE: A Face Detection Benchmark (shuoyang1213.me)http://shuoyang1213.me/WIDERFACE/WiderFace_Results.html

项目里也有包含就是了。

运行评估程序:报错。 

可参考:(21条消息) ImportError: cannot import name ‘bbox_overlaps‘ from ‘bbox‘问题解决_小夏有点慌的博客-CSDN博客后面的程序如果没有走通可参考:

Pytorch_Retinaface/README.md at master · biubug6/Pytorch_Retinaface · GitHubhttps://github.com/biubug6/Pytorch_Retinaface/blob/master/README.md

使用生成好的txt文件完成Evaluation后的步骤即可。

YOLO5face踩坑经验。_第5张图片

感谢所有乐于分享的老哥们。

你可能感兴趣的:(YOLO)