MTCNN(Tensorflow)学习记录(训练数据进行合并)

上一篇博客是对于landmark数据集的操作,这篇博客我们要对两部份的训练数据进行合并。

1 训练数据进行合并

进入prepare_data文件夹打开gen_imglist_pnet.py

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

data_dir = '../../DATA'
#anno_file = os.path.join(data_dir, "anno.txt")

size = 12                #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()

#打开上一篇博客对应的保存着landmark信息的文档,并读取数据
with open(os.path.join(data_dir,'%s/landmark_%s_aug.txt' %(size,size)), 'r') as f:
    landmark = f.readlines()

 #创建两个路径,分别是 ../../DATA/imglists和 ../../DATA/12/imglists/PNet
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)))

#在../../DATA/12/imglists/PNet路径创建并打开文档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))

    # write the data according to the shuffled order
    #按照已经打乱的数字顺序重新写入数据到文本中
    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)

这个脚本就是按照[3:1:1]的比例随机选取负样本、正样本、无关样本的文本数据,分别是750K、250K、250K,然后按照正样本、负样本、无关样本的顺序其写进../../DATA/12/imglists/PNet路径里的文档train_PNet_landmark.txt里。最后再在此文档里写进landmark的数据,值得注意的是,landmark数据量和排序都没有变。所以这个注释文本里的总数据量为750K+250K+250K+landmark=1429422条。
下一篇博客将介绍TFRecord文件的转化。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值