【tensorflow】MTCNN网络Pnet数据合并(人脸与关键点)

将生成的pnet数据(人脸与关键点数据合并到一个文件中)

import numpy as np
import numpy.random as npr
import os

data_dir = 'E:/MTCNN'
#anno_file = os.path.join(data_dir, "anno.txt")
size = 12                #pnet   size的判断
if size == 12:
    net = "PNet"
elif size == 24:
    net = "RNet"
elif size == 48:
    net = "ONet"

#在data_dir路径对应的文件夹打开三个文档,就是人脸框数据对应的三个样本
with open(os.path.join(data_dir, '%s/pos_%s.txt' % (size, size)), 'r') as f:
    pos = f.readlines()

with open(os.path.join(data_dir, '%s/neg_%s.txt' % (size, size)), 'r') as f:
    neg = f.readlines()

with open(os.path.join(data_dir, '%s/part_%s.txt' % (size, size)), 'r') as f:
    part = f.readlines()
with open(os.path.join(data_dir,'%s/landmark_%s_aug.txt' %(size,size)), 'r') as f:
    landmark = f.readlines()
 #创建路径
dir_path = os.path.join(data_dir, 'imglists')
if not os.path.exists(dir_path):
    os.makedirs(dir_path)
if not os.path.exists(os.path.join(dir_path, "%s" %(net))):
    os.makedirs(os.path.join(dir_path, "%s" %(net)))

#train_PNet_landmark.txt
with open(os.path.join(dir_path, "%s" %(net),"train_%s_landmark.txt" % (net)), "w") as f:
    nums = [len(neg), len(pos), len(part)]
    ratio = [3, 1, 1]
    #base_num = min(nums)
    base_num = 250000
    #打印数据量
    print(len(neg), len(pos), len(part), base_num)

    #shuffle the order of the initial data
    #if negative examples are more than 750k then only choose 750k
    #将初始化的数据重新排序
    #当负样本的个数大于750k的时候,只选取750k个数,不满足750K的时候就随机选取负样本数。
    #注意这里随机选的是数字,而不是数据,等下会根据数字的顺序为索引来重新排列裁剪三个样本
    if len(neg) > base_num * 3:
        neg_keep = npr.choice(len(neg), size=base_num * 3, replace=True)
    else:
        neg_keep = npr.choice(len(neg), size=len(neg), replace=True)
    #随机选取base_num个数
    pos_keep = npr.choice(len(pos), size=base_num, replace=True)
    #随机选取base_num个数
    part_keep = npr.choice(len(part), size=base_num, replace=True)
    #打印出选取了多少个数
    print(len(neg_keep), len(pos_keep), len(part_keep))
    
    #按照已经打乱的数字顺序重新写入数据到文本中
    for i in pos_keep:
        f.write(pos[i])
    for i in neg_keep:
        f.write(neg[i])
    for i in part_keep:
        f.write(part[i])
    #landmark数据量和排序保持不变
    for item in landmark:
        f.write(item)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MTCNN是一种流行的人脸检测算法,它由三个级联的卷积神经网络组成:P-Net、R-Net和O-Net。P-Net用于生成候选框,R-Net用于筛选和回归候选框,O-Net用于对候选框进行更精确的人脸关键点定位和性别/年龄估计。 下面是P-Net的搭建思路: 1. 数据准备 首先我们需要准备训练数据。P-Net的输入是一张图片,输出是一系列候选框的坐标和置信度分数。因此我们需要标注训练数据中的人脸位置,并将其转化为候选框的坐标和置信度分数。 2. 网络结构 P-Net是一个卷积神经网络,它由多个卷积层、ReLU层和池化层组成。在网络的最后,我们会添加两个输出层:一个用于预测候选框的坐标,另一个用于预测候选框的置信度分数。 3. 训练 我们使用标注好的训练数据来训练P-Net。在训练过程中,我们会通过反向传播来调整网络的权重,使其能够更好地预测候选框的坐标和置信度分数。 4. 预测 在预测阶段,我们将一张图片输入P-Net中,并获取其输出的候选框。然后我们会将这些候选框输入到R-Net中,以进一步筛选和回归这些候选框。最终,我们会将剩下的候选框输入到O-Net中,以获取更精确的人脸关键点和性别/年龄信息。 以上是P-Net的搭建思路,它是MTCNN算法的重要组成部分。有了P-Net,我们能够生成一系列候选框,为后续的人脸检测和识别工作打下基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖子工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值