WiderFace数据集用于训练人脸检测模型

来源:互联网 发布:兼职网络维护 编辑:程序博客网 时间:2024/06/01 16:24
下载链接: http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/

该数据集可用于进行人脸检测模型的训练


如果做训练,可以点击网页中的

(国内还是百度吧,会快一些)


这个下载下来是按文件夹分好的,全都是图片。对于训练,还少label的信息,点这个下载:


Label的部分下下来后会发现,测试、训练、验证的信息被分开存放。有mat和txt两个版本。如果txt直接通过windows自带的记事本打开会发现各种数据被拧在了一起。
但是你用MatLab打开txt之后会发现格式不太一样,如下:


类似这种按行分割好的文档。可以在这里全选-复制-新建txt-粘贴。这时候就可以查看readme.txt的说明(在label那个压缩包里,被和数据打包在了一起)
发现数据分别的意义如下:

File name
Number of bounding box
x1, y1, w, h, blur, expression, illumination, invalid, occlusion, pose

也就是第一行是文件夹,文件名
第二行是图中人脸的数量
再下面是人脸信息的参数。
x1, y1, w, h, 代表人脸框的位置(检测算法一般都要画个框框把人脸圈出来)
blur:是模糊度,分三档:0,清晰;1:一般般;2:人鬼难分
express:表达(什么鬼也没弄明白,反正我训这个用不着)
illumination:曝光,分正常和过曝
occlusion:遮挡,分三档。0,无遮挡;1,小遮挡;2,大遮挡;
invalid:(没弄明白)
pose:(疑似姿态?分典型和非典型姿态)

那么这里我需要的数据就是人脸框的坐标位置,作为我的目标label。我需要知道某张图片里有多少张人脸,每张人脸分别在什么位置。
这就需要写一个脚本来让图片和这些数据配对。然后就坐下码了一个(FILEDIR根据自己实际情况修改啊):

import reimport linecacheimport os# 本程序用于将widerface数据集中label部分分离出来并且重新保存FILEDIR = "E:\Python_Files\TryWiderFace\Dataset\labels\\"file = open(FILEDIR+'wider_face_train_bbx_gt.txt', 'r')def count_lines(file):    lines_quantity = 0    while True:        buffer = file.read(1024 * 8192)        if not buffer:            break        lines_quantity += buffer.count('\n')    file.close()    return lines_quantitylines = count_lines(file)for i in range(lines):    line = linecache.getline(FILEDIR+'wider_face_train_bbx_gt.txt',i)    if re.search('jpg', line):        position = line.index('/')        file_name = line[position + 1: -5]        folder_name = line[:position]        print(file_name)        i += 1        face_count = int(linecache.getline(FILEDIR+'wider_face_train_bbx_gt.txt', i))        for j in range(face_count):            box_line = linecache.getline(FILEDIR + 'wider_face_train_bbx_gt.txt', i+j+1)  #x1, y1, w, h, x1,y1 为人脸框左上角的坐标            po_x1 = box_line.index(' ')            x1 = box_line[:po_x1]            po_y1 = box_line.index(' ', po_x1 + 1)            y1 = box_line[po_x1:po_y1]            po_w = box_line.index(' ', po_y1 + 1)            w = box_line[po_y1:po_w]            po_h = box_line.index(' ', po_w + 1)            h = box_line[po_w:po_h]            coordinates = x1 + y1 + w + h            # print(coordinates)            if not(os.path.exists(FILEDIR + "wider_face_train\\" + folder_name)):                os.makedirs(FILEDIR + "wider_face_train\\" + folder_name)            with open(FILEDIR + "wider_face_train\\"+ folder_name + "\\" + file_name + ".txt", 'a') as f:                f.write(coordinates + "\n")        i += i + j + 1



阅读全文
0 0