IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> yolo-face-with-landmark 复现+训练自己的数据 -> 正文阅读

[人工智能]yolo-face-with-landmark 复现+训练自己的数据

最近一直想做一个关键点检测的任务 但是由于技术差 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:
            pic_name = j_name.split('.')[0] + '.' + j_name.split('.')[1]
        f.write('#' + pic_name + '.jpg' + '\n')
        j = open(data_dir + j_name, encoding='utf-8')
        
        info = json.load(j)
        shapes_dict = info['shapes']  # 获取图像的所有的框数据
        shapes_list = []  # 图片的框集合
        label_list = []
        for shape in shapes_dict:  # 查找一张图片中的所有的框位置信息
            point_dict = {}
            shape_label = shape['label']  # 获取标签
            label_list.append(shape_label)
            shape_points = shape['points']  # 获取框的位置坐标信息
            point_dict[shape_label] = shape_points
            shapes_list.append(point_dict)

        label_list = list(set(label_list))
        for shape_dict in shapes_list:

            shape_label = shape_dict.keys()

            if str(shape_label) == str("dict_keys(['car'])"):
                shape_points = list(shape_dict.values())[0]
                x1 = shape_points[0][0]
                y1 = shape_points[0][1]
                x2 = shape_points[1][0]
                y2 = shape_points[1][1]
                w = str(round(x2 - x1, 2))
                h = str(round(y2 - y1, 2))
                x1 = str(round(x1, 2))
                y1 = str(round(y1, 2))

            if str(shape_label) == str("dict_keys(['lb'])"):
                shape_points = list(shape_dict.values())[0]
                d1x = shape_points[0][0]
                d1y = shape_points[0][1]
                d1x = str(round(d1x,2))
                d1y = str(round(d1y,2))

            if str(shape_label) == str("dict_keys(['rb'])"):
                shape_points = list(shape_dict.values())[0]
                d2x = shape_points[0][0]
                d2y = shape_points[0][1]
                d2x = str(round(d2x, 2))
                d2y = str(round(d2y, 2))

            if str(shape_label) == str("dict_keys(['lh'])"):
                shape_points = list(shape_dict.values())[0]
                d3x = shape_points[0][0]
                d3y = shape_points[0][1]
                d3x = str(round(d3x, 2))
                d3y = str(round(d3y, 2))

        # # label = x1 + ' ' + y1 + ' ' + w + ' ' + h + ' ' + d1x + ' ' + d1y + ' ' + '0.0' + ' ' + d2x + ' ' + d2y + ' ' + '0.0' + ' ' + d3x + ' ' + d3y + ' ' + '0.0' + ' ' + d4x + ' ' + d4y + ' ' + '0.0' + ' ' + d5x + ' ' + d5y + ' ' + '0.0' + ' ' + '1'
        label = x1 + ' ' + y1 + ' ' + w + ' ' + h + ' ' + d1x + ' ' + d1y + ' ' + '0.0' + ' ' + d2x + ' ' + d2y + ' ' + '0.0' + ' ' + d3x + ' ' + d3y + ' ' + '0.0' + ' ' + '1'
        #
        f.write(label + '\n')

得到的结果 最后一个数字是置信度 但是我不知道怎么设置就写了1
在这里插入图片描述
然后一样的程序
打开src/retinaface2yololandmark.py 修改路径 运行
打开src/create_train.py 修改路径 运行
得到训练需要的文件
因为关键点的数量变了 需要修改一些内容
打开hyp.py 这个文件记录一些基础设定
在这里插入图片描述
修改point_num 和 flip_idx_pair的内容
最后打开train.py修改路径 运行

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:50:39  更:2021-09-10 10:52:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 15:54:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码