YIYIMZ / yiyi_mtcnn_keras

MTCNN提出了一种Multi-task的人脸检测框架,将人脸检测和人脸特征点检测同时进行。提出一个新的基于CNN的级联型框架,用于联和(joint)人脸检测和对齐;还设计轻量级的CNN架构使得速度上可以达到实时;提出一个有效的online hard sample mining方法来提高表现能力;在人脸检测和人脸对齐上提高了不少精度。论文原文采用caffe实现,本项目用keras/tensorflow+python实现。
37 stars 14 forks source link

获取O_Net训练数据时出现问题 #3

Open ShenCastle opened 5 years ago

ShenCastle commented 5 years ago

您好,为什么生成O_Net训练数据的时候,有很多的neg和part数据,但是pos数据却为0呢?

lunar-r commented 5 years ago

你好哦!我想问一下你的r_net网络是如何训练的我的POS机:9个,部分:37个,负:120个样本特别少,不能正常训练r_net训练,谢谢。

ShenCastle commented 5 years ago

你好哦!我想问一下你的r_net网络是如何训练的我的POS机:9个,部分:37个,负:120个样本特别少,不能正常训练r_net训练,谢谢。

我是先使用gen_data/gen_celeba和gen_wideface这两个文件提取出p_net的训练数据,对p_net进行训练,之后在用gen_data/gen_middle这个文件提取出r_net的样本,我觉得你的原因是没有改正gen_middle文件中读取原始标注文件的个数,这个在config文件中可以进行修改的。不过我的o_net的pos也遇到了和你一样的问题不知道怎么解决。。。

lunar-r commented 5 years ago

谢谢啦!我的p_net也是用gen_data/gen_celeba和gen_wideface这两个文件提取数据的,然后用gen _training_h5训练生成h5文件。下面是r_net训练的结果: pos_part_batch_size---: 64 neg_batch_size---: 192 landmark_batch_size---: 128 pos_total_step, neg_total_step, part_total_step, landmark_total_step----: 0 0 0 6173 这个就是我训练r_net时出现的错误,我确实没有修改config中的原始标注文件的个数,请问一下是修改这个参数嘛?谢谢。

gen_middle_wideface_data

DETECT_WIDEFACE_NUM = 2

lunar-r commented 5 years ago

https://github.com/LeslieZhoa/tensorflow-MTCNN 建议看一下这个项目,很类似,也用到了困难样本挖掘,它是用TensorFlow slim写的

ShenCastle commented 5 years ago

谢谢啦!我的p_net也是用gen_data/gen_celeba和gen_wideface这两个文件提取数据的,然后用gen _training_h5训练生成h5文件。下面是r_net训练的结果: pos_part_batch_size---: 64 neg_batch_size---: 192 landmark_batch_size---: 128 pos_total_step, neg_total_step, part_total_step, landmark_total_step----: 0 0 0 6173 这个就是我训练r_net时出现的错误,我确实没有修改config中的原始标注文件的个数,请问一下是修改这个参数嘛?谢谢。

gen_middle_wideface_data

DETECT_WIDEFACE_NUM = 2

没错,是这个参数

ShenCastle commented 5 years ago

https://github.com/LeslieZhoa/tensorflow-MTCNN 建议看一下这个项目,很类似,也用到了困难样本挖掘,它是用TensorFlow slim写的

多谢多谢

lunar-r commented 5 years ago

没事儿,互相交流嘛! 我想问一下你在r_net网络中DETECT_WIDEFACE_NUM设置的是多少?谢谢。

lunar-r commented 5 years ago

r_net

RNET_EPOCHS= 1 RNET_LEARNING_RATE = 0.001

RNET_CELEBA_NUM = 100002 RNET_WIDEFACE_NUM = 20002

RNET_BACKGRAND_NEG_NUM = 50 RNET_FACE_NEG_NUM = 5 RNET_POS_PART_NUM = 20 还想问一下,这些参数你修改了嘛?

ShenCastle commented 5 years ago

没事儿,互相交流嘛! 我想问一下你在r_net网络中DETECT_WIDEFACE_NUM设置的是多少?谢谢。

2500,运行起来特别慢,成功生成了r_net的训练数据,但是没能用同样的方法生成o_net的

ShenCastle commented 5 years ago

r_net

RNET_EPOCHS= 1 RNET_LEARNING_RATE = 0.001

RNET_CELEBA_NUM = 100002 RNET_WIDEFACE_NUM = 20002

RNET_BACKGRAND_NEG_NUM = 50 RNET_FACE_NEG_NUM = 5 RNET_POS_PART_NUM = 20 还想问一下,这些参数你修改了嘛?

我下载的CelebA数据集有问题,中间有些数据是空的,所以我只修改CELEBA_NUM为30002,其他的都没有改

lunar-r commented 5 years ago

好的,谢谢啦!网上说celebade 数据集不是很好,建议用lfw_5590和net_7876

ShenCastle commented 5 years ago

好的,谢谢啦!网上说celebade 数据集不是很好,建议用lfw_5590和net_7876

好的同样很感谢!有人理我的感觉真的很好O(∩_∩)O

lunar-r commented 5 years ago

inputs shape: (1, 13, 16, 3) labels (3, 2) bboxes (3, 4) Traceback (most recent call last): File "gen_middle_wideface_data.py", line 192, in main(sys.argv[1]) File "gen_middle_widefacedata.py", line 171, in main ,bboxes ,_ = detector.predict(img_jpg) File "..\detector\detector.py", line 64, in predict return self.predict_with_pnet(im) File "..\detector\detector.py", line 73, in predict_with_p_net return self.detect_with_p_net(im)#此处修改 File "..\detector\detector.py", line 110, in detect_with_p_net boxes = generate_bbox(labels[:, :, 1], bboxes, current_scale, self.threshold[0]) IndexError: too many indices for array 我修改之后,gen_middle_wideface_data.py r_net就跑不通了

ShenCastle commented 5 years ago

inputs shape: (1, 13, 16, 3) labels (3, 2) bboxes (3, 4) Traceback (most recent call last): File "gen_middle_wideface_data.py", line 192, in main(sys.argv[1]) File "gen_middle_widefacedata.py", line 171, in main ,bboxes ,_ = detector.predict(img_jpg) File "..\detector\detector.py", line 64, in predict return self.predict_with_pnet(im) File "..\detector\detector.py", line 73, in predict_with_p_net return self.detect_with_p_net(im)#此处修改 File "..\detector\detector.py", line 110, in detect_with_p_net boxes = generate_bbox(labels[:, :, 1], bboxes, current_scale, self.threshold[0]) IndexError: too many indices for array 我修改之后,gen_middle_wideface_data.py r_net就跑不通了

我是将 labels = np.squeeze(labels) bboxes = np.squeeze(bboxes) 改为了 labels = np.squeeze(labels, axis=0) bboxes = np.squeeze(bboxes, axis=0) 这个可能是squeeze是去除长度为1的维度,其实应该是当第一个维度为1时去除,原代码逻辑出现了一些问题(我当时也报错了)

lunar-r commented 5 years ago

好的,谢谢!我去试试,有人理的感觉真好

lunar-r commented 5 years ago

你好哦!问一下运行r_net的gen_middle_wideface_data花了多长时间?

lunar-r commented 5 years ago

1、由原始图片和PNet生成预测的bounding boxes。 2、输入原始图片和PNet生成的bounding box,通过RNet,生成校正后的bounding box。 3、输入元素图片和RNet生成的bounding box,通过ONet,生成校正后的bounding box和人脸面部轮廓关键点。 r_net和o_net的数据是有两部分生成的,感觉代码中只有一部分 https://zhuanlan.zhihu.com/p/32163660

lunar-r commented 5 years ago

你好!@ShenCastle自己训练mtcnn网络跑通了嘛?

ShenCastle commented 5 years ago

你好!@ShenCastle自己训练mtcnn网络跑通了嘛?

不好意思哈最近一直没时间上github gen_middle_wideface_data花了大概两天时间 我还是停留在之前的进度,r_net生成了训练数据但是生成的o_net训练数据依旧没有正样本,不知道什么原因,我猜测可能是因为之前的网络训练有问题导致模型推理时无法检测人脸。如果您成功的话请告诉我一下如何解决这个问题,谢谢!