任务描述:利用celebA进行mtcnn多任务级联卷积神经网络的训练数据制作,目标输出txt里应该含有图片id*1、人脸框*4,人脸特征点坐标*10,共15列数据

代码实现:

from tool import utils
import traceback
import numpy as np
import os
from PIL import Image, ImageFilter
from PIL import ImageDraw
from tool import utilslabel_position_path = r"H:\CelebA\Anno\list_bbox_celeba.txt"  # bbox# 标签路径
img_path = r"H:\CelebA\Img\img_celeba"  # 图片路径
handel_path = r"H:\CelebA\Save\img_celeba_2"  # 处理完样本保持路径
label_landmark_path = r"H:\CelebA\Anno\list_landmarks_celeba.txt"  # 关键点标签路径def mkdir(size):  # 创建样本目录print("gen %i image" % size)rootpath = os.path.join(handel_path, str(size))if not os.path.exists(rootpath):os.mkdir(rootpath)p_dirpath = os.path.join(rootpath, "positive")if not os.path.exists(p_dirpath):os.mkdir(p_dirpath)n_dirpath = os.path.join(rootpath, "negative")if not os.path.exists(n_dirpath):os.mkdir(n_dirpath)t_dirpath = os.path.join(rootpath, "part")if not os.path.exists(t_dirpath):os.mkdir(t_dirpath)return rootpath, p_dirpath, n_dirpath, t_dirpathdef sample_handle(size):imgcount = 0r_path, p_path, n_path, t_path = mkdir(size)  # 创建目录p_file = open(r_path + "/positive.txt", "w")n_file = open(r_path + "/negative.txt", "w")t_file = open(r_path + "/part.txt", "w")f_position = open(label_position_path).readlines()  # 读入人脸位置标签f_landmark = open(label_landmark_path).readlines()  # 读入人脸关键点坐标标签for index in range(len(f_landmark)):if index < 2:continuestrs_postion = f_position[index].strip().split(" ")strs_landmark = f_landmark[index].strip().split(" ")strs_postion = list(filter(bool, strs_postion))strs_landmark = list(filter(bool, strs_landmark))filename = strs_postion[0]print(filename)x1 = float(strs_postion[1])y1 = float(strs_postion[2])w = float(strs_postion[3])h = float(strs_postion[4])x2 = x1 + wy2 = y1 + h# 5个特征点的坐标fx1 = float(strs_landmark[1])fy1 = float(strs_landmark[2])fx2 = float(strs_landmark[3])fy2 = float(strs_landmark[4])fx3 = float(strs_landmark[5])fy3 = float(strs_landmark[6])fx4 = float(strs_landmark[7])fy4 = float(strs_landmark[8])fx5 = float(strs_landmark[9])fy5 = float(strs_landmark[10])if max(w, h) < 40 or x1 < 0 or y1 < 0 or w < 0 or h < 0:continuecx = x1 + w * 0.5  # 中心点cy = y1 + h * 0.5side = np.maximum(w, h)img = Image.open(os.path.join(img_path, filename))width, high = img.size# r_img = ImageDraw.Draw(img)# r_img.rectangle((x1,y1,x2,y2))for count in range(5):# 随机浮动产生正方形正、负、部分样本offset_side = np.random.uniform(-0.2, 0.2) * sideoffset_x = np.random.uniform(-0.2, 0.2) * w / 2offset_y = np.random.uniform(-0.2, 0.2) * h / 2_cx = cx + offset_x_cy = cy + offset_y_side = side + offset_side_x1 = np.maximum(_cx - _side * 0.5, 0)_y1 = np.maximum(_cy - _side * 0.5, 0)_x2 = _x1 + _side_y2 = _y1 + _side# 计算偏移值offset_x1 = (x1 - _x1) / _sideoffset_y1 = (y1 - _y1) / _sideoffset_x2 = (x2 - _x2) / _sideoffset_y2 = (y2 - _y2) / _sideoffset_fx1 = (fx1 - _x1) / _sideoffset_fy1 = (fy1 - _y1) / _sideoffset_fx2 = (fx2 - _x1) / _sideoffset_fy2 = (fy2 - _y1) / _sideoffset_fx3 = (fx3 - _x1) / _sideoffset_fy3 = (fy3 - _y1) / _sideoffset_fx4 = (fx4 - _x1) / _sideoffset_fy4 = (fy4 - _y1) / _sideoffset_fx5 = (fx5 - _x1) / _sideoffset_fy5 = (fy5 - _y1) / _side# 计算IOU# [x1, y1, x2, y2, 置信度]box = np.array([x1, y1, x2, y2, 0])boxs = np.array([[_x1, _y1, _x2, _y2, 0]])per = utils.iou(box, boxs)per = per[0]tempimg = img.crop((_x1, _y1, _x2, _y2)) # 根据人脸框偏移量去原图中裁剪tempimg = tempimg.resize((size, size), Image.ANTIALIAS)imglist = []imglist.append(tempimg)# 图片模糊处理for _tempimg in imglist:if per > 0.65:  # 正样本imgcount += 1_tempimg.save("{0}/{1}.jpg".format(p_path, imgcount))p_file.write("{0}.jpg 1 {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14}\n".format(imgcount,offset_x1,offset_y1,offset_x2,offset_y2, offset_fx1,offset_fy1,offset_fx2,offset_fy2,offset_fx3,offset_fy3,offset_fx4,offset_fy4,offset_fx5,offset_fy5))elif per < 0.3:  # 负样本imgcount += 1_tempimg.save("{0}/{1}.jpg".format(n_path, imgcount))n_file.write("{0}.jpg 0 {1} {2} {3} {4} 0 0 0 0 0 0 0 0 0 0\n".format(imgcount, 0, 0, 0, 0))elif (per > 0.4) and (per < 0.65):  # 部分样本imgcount += 1_tempimg.save("{0}/{1}.jpg".format(t_path, imgcount))t_file.write("{0}.jpg 2 {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14}\n".format(imgcount,offset_x1,offset_y1,offset_x2,offset_y2, offset_fx1,offset_fy1,offset_fx2,offset_fy2,offset_fx3,offset_fy3,offset_fx4,offset_fy4,offset_fx5,offset_fy5))# 再创建负样本for i in range(10):offset_side = np.random.uniform(-0.2, 0.2) * side_side = side + offset_side_x1 = np.random.uniform(0, width - _side)_y1 = np.random.uniform(0, high - _side)_x2 = _x1 + _side_y2 = _y1 + _side# 计算偏移值offset_x1 = (x1 - _x1) / _sideoffset_y1 = (y1 - _y1) / _sideoffset_x2 = (x2 - _x2) / _sideoffset_y2 = (y2 - _y2) / _side# 计算IOU# [x1, y1, x2, y2, 置信度]box = np.array([x1, y1, x2, y2, 0])boxs = np.array([[_x1, _y1, _x2, _y2, 0]])per = utils.iou(box, boxs)per = per[0]# 截取图片tempimg = img.crop((_x1, _y1, _x2, _y2))tempimg = tempimg.resize((size, size), Image.ANTIALIAS)imglist = []imglist.append(tempimg)for _tempimg in imglist:if per < 0.3:imgcount += 1_tempimg.save("{0}/{1}.jpg".format(n_path, imgcount))n_file.write("{0}.jpg 0 {1} {2} {3} {4} 0 0 0 0 0 0 0 0 0 0\n".format(imgcount, 0, 0, 0, 0))p_file.close()n_file.close()t_file.close()if __name__ == '__main__':sample_handle(12)sample_handle(24)sample_handle(48)

main函数里对应的是P、R、O三个网络在训练时所要求的图片尺寸大小。

【CelebA】【MTCNN】制作mtcnn训练数据集相关推荐

  1. 使用精灵标注助手制作yolov3训练数据集(附解析xml代码)

    一.标注数据 1.将获取图片存放到同一个文件夹下 本次标注数据供分为4类(person,dog,tiger,car),由于数据较少所以放在一个文件夹,数据较多时可以选择存放在多个文件夹 2.打开精灵标 ...

  2. FCN制作自己的数据集、训练和测试 caffe

    原文:http://blog.csdn.net/zoro_lov3/article/details/74550735 FCN制作自己的数据集.训练和测试全流程 花了两三周的时间,在导师的催促下,把FC ...

  3. python制作训练集_利用Tensorflow简单实现VGGNet,从数据集制作到训练完成测试

    VGGNet_TF 利用Tensorflow简单实现VGGNet,从数据集制作到训练完成测试 参考:<Tensorflow实战><Tensorflow 实战Google深度学习框架& ...

  4. 初学入门YOLOv5手势识别之制作并训练自己的数据集

    随着短视频vlog时代的到来,自动驾驶技术.人脸识别门禁系统.智慧视频监控.AI机器人等贴近人们日常生活的视频信息量的暴增,视频目标检测的研究具有无比的现实研究意义与未来行业潜力.视频是由一系列具有时 ...

  5. 批量下载百度搜索图片+labelimg制作自己的数据集+转换至Yolo-v5训练数据集

    由于课题需要,需要自己制作数据集进行训练,目前是自己制作的第二个数据集,发现有某些细节已经忘记,记录备忘,同时为后来者提供借鉴.文章以car-tank数据集做为例子介绍 整体流程: 1.准备数据:从各 ...

  6. 基于paddledetection在ROS中搭建红绿灯检测控制车模运动(2)—— 数据集制作以及训练

    前言 第一节: 基于paddledetection在ROS中搭建红绿灯检测控制车模运动(1)-- 环境搭建准备以及软件安装 第二节: 基于paddledetection在ROS中搭建红绿灯检测控制车模 ...

  7. YOLOv5手把手教你制作VOC格式数据集与模型训练

    引言 2020年2月YOLO之父Joseph Redmon宣布退出计算机视觉研究领域,2020 年 4 月 23 日YOLOv4 发布,2020 年 6 月 10 日YOLOv5发布. YOLOv5源 ...

  8. PASCAL VOC训练集制作(从原始视频到目标检测训练数据集)

    本文目的:实验用CCD采集到5个视频,需在5个视频中采集有效图片,并将这些图片利用LableImg软件进行标注,用来制备VOC格式的目标检测训练数据集. 第一步:有效视频截取 将采集到的视频利用ban ...

  9. matlab 转换 tfrecord,训练数据集与TFRecord互相转换的两种方式

    TensorFlow使用TFRecord格式来统一存储数据,该格式可以将图像数据.标签信息.图像路径以及宽高等不同类型的信息放在一起进行统一存储,从而方便有效的管理不同的属性. 将训练数据集转成TFR ...

  10. 深度学习Caffe实战笔记(19)Windows平台 Faster-RCNN 制作自己的数据集

    万里长征第一步,就是要制作自己的数据集,过程还是比较繁琐的,特别是标注的过程,这篇博客先介绍如果制作voc2007自己的数据集用于faster-rcnn训练,下一篇博客介绍如何用faster-rcnn ...

最新文章

  1. Java练习 SDUT-1132_斐波那契数列
  2. Kruskal HDOJ 1233 还是畅通工程
  3. 【想象不到的俄罗斯】……太震撼了……
  4. UA MATH563 概率论的数学基础 中心极限定理15 Kolmogorov 0-1律
  5. 当我给小姐姐讲述为何黑客要挟制路由器DNS 该怎样实时发觉和防备的方法后,小姐姐那崇拜的眼神令我无法忘却
  6. 用html还是xml做网页好,XML与HTML的比较
  7. redis笔记5 stream消息队列
  8. Excel 导入 SqlServer 导入部分文本为空解决方案
  9. php用空格分隔字符串,分割字符串空格
  10. TCP segment of a reassembled PDU,就这么简单!
  11. 等效距离计算公式_等效焦距换算(等效焦距的计算公式)
  12. iOS 5G网络判断
  13. android 组件 excel,Android中利用jxl组件来操作excel
  14. 计算机win7开超级性能模式,电脑如何打开高性能模式?[多图]
  15. Oracle Sqlplus命令登录的几种方式
  16. 趣味题系列:帽子戏法;警察抓逃犯问题 ;史密斯夫妇握手问题
  17. YOLOv2论文翻译详解
  18. 寄存器建立时间与保持时间分析
  19. Cocos2d-x 动作之变速动作
  20. 马云等10位大佬心酸往事:9天9夜未睡、装姑娘陪聊、一夜白头…

热门文章

  1. TCP 的演化史-TCP 是一个过渡
  2. 《SolidWorks 2017中文版机械设计从入门到精通)》—— 导读
  3. php如何将文档转成flas,PHP_PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash),本文实例讲述了PHP实现仿百度 - phpStudy...
  4. 史上最强型人养成秘籍: 90 天肥仔变型男实录
  5. 软件工程—理论与实践
  6. Linux下TCP通信时一方主动关闭连接时TCP给应用层的反馈
  7. 催眠疗法对抑郁症有用吗?
  8. 蓝桥 外星日历 JAVA
  9. 如何防止身份证复印件被盗用
  10. Navicat Premium 15-触发器