最近一直想做一个关键点检测的任务 但是由于技术差 yolov5-face一直没搞明白 无奈破罐破摔试了一下这个 居然让我跑出来了 可能因为它这个代码本身就比较简单(个人观点)好的 废话结束 现在开始
复现
源代码 源代码
环境配置
创建一个虚拟环境 python==3.6.5(3.7版本后面安装代码要求的Cython的时候有困难)
然后按照requirements.txt安装就可以了
人生经验:认真按照要求安装环境 不然真的什么奇葩bug都有 80%的bug都来自环境
数据准备
需要下载一个retinaface数据集
数据集链接:链接:https://pan.baidu.com/s/1Ygexkviq6FZY7PqESTe9nA
提取码:0909
下载好之后里面有一个文件夹 名字叫widerface 里面的内容就是我们需要用到的数据了
然后跟着代码 readme的内容 打开src/retinaface2yololandmark.py
修改路径 其中txt_path的路径就是widerface/train中的label.txt
save_path 就是你希望训练的数据应该放在哪里 可以自己定义 这个文件夹是根据你写的地址代码生成的 所以不需要事先创建文件夹
运行代码retinaface2yololandmark.py
生成的yololandmark_winder_train中训练需要的文件(文件名你也可以自己取)
每一个jpg文件后面加一个同名的txt文件就是它的标签文件
标签由15个数字组成 类别(0) 矩形框的属性数据(x,y,w,h)五个关键点的坐标(x,y)
然后打开src/create_train.py 这个代码用来生成train.txt文件
修改路径 root是之前上一阶段存放训练文件的文件夹的地址
生成的txt文件的地址 和训练文件夹放在同一个大文件夹中
运行代码 生成wider_landmark98_yolo_train.txt
至此数据准备部分就没了
测试和验证:
接下来 就是跟着readme弄就行了
验证会生成txt文件 里面是包含预测信息的txt
修改路径 就可以啦
结果长这样:
测试的话 运行demo.py 修改地址
测试 的时候代码报错说权重文件不存在
将last.pt改成final就行了 (我也不知为什么last文件不能用)
训练
在train.py的这一部分修改train_path 就可以了
终端运行语句:python train.py --net mbv3_large_75 --backbone_weights \ ./pretrained/mobilenetv3-large-0.75-9632d2a8.pth --batch-size 8
训练自己的数据
训练自己的数据 还是要修改一些地方的 因为我是训练三个关键点 所以做了一些改动 训练五个关键点的话 我觉得只需要将自己的数据弄好然后修改路径就可以了
好的 还是先处理数据
*数据处理
labelme标注
标注一个框 框住物体
create point 标注关键点
将生成的jsons文件 放在一个文件夹里面
生成retinaface的label.txt格式的文件
我自己写了一个代码 可以参考一下 (要将每个不同标签的关键点单独处理)
import os
import json
data_dir = 'D:/Desktop/label/new_jsons/' #存放json文件的文件夹
all_json = os.listdir(data_dir)
with open("D:/Desktop/label/label.txt", "w") as f:
for j_name in all_json:
if j_name.split('.')[1] == 'json':
pic_name = j_name.split('.')[0]
else