MTCNN-Tensorflow
MTCNN-Tensorflow copied to clipboard
负样本生成的问题
gen_12net_data.py 文件中 “if np.max(Iou) < 0.3:” 就是负样本,但是这个判断某些情况下我认为是有问题的,例如随机生成的crop_box的面积大于最大单个人脸面积的3.3倍时,这个判断条件会满足,我认为这个这个负样本包含有完整的人脸,不是有效的负样本。你怎么看待这种情况?我觉得要解决这个问题,应该限制crop_box的面积大小或者判断overlap部分与人脸box的重合比例也要 < 0.3?
通过如下代码实际测试中包括大量含有完整人脸的负样本
--- a/prepare_data/gen_12net_data.py
+++ b/prepare_data/gen_12net_data.py
@@ -50,7 +50,7 @@ for annotation in annotations:
neg_num = 0
#1---->50
- while neg_num < 50:
+ while neg_num < 2:
#neg_num's size [40,min(width, height) / 2],min_size:40
size = npr.randint(12, min(width, height) / 2)
#top_left
@@ -59,9 +59,16 @@ for annotation in annotations:
#random crop
crop_box = np.array([nx, ny, nx + size, ny + size])
#cal iou
+ print ("boxes:", boxes)
Iou = IoU(crop_box, boxes)
+ print ("Iou:", Iou)
cropped_im = img[ny : ny + size, nx : nx + size, :]
+
+ cv2.imshow("true" if max(Iou) < 0.3 else "false",cropped_im)
+ key = cv2.waitKey(0)
+ if key & 0xFF == ord('q'):
+ sys.exit(0)
resized_im = cv2.resize(cropped_im, (12, 12), interpolation=cv2.INTER_LINEAR)
if np.max(Iou) < 0.3:
同样part部分似乎也有一些问题,也存在完整人脸的情况
@webnoise 确实会存在完整人脸,但是完整人脸与crop_box的比例小于0.3。对于负样本的定义,没有说一定不能含有人脸,只要满足背景占大比例,对训练影响不大即可。当然,如果你可以产生完全不含人脸的负样本,也是可以的。
@webnoise @boanz 不要意思,回复晚了。在对训练数据采样的过程中,一张图片中有多个人,但只标注了少数几个明显的目标,背景存在密集人群。这样crop的话,可能会采集到一些包含人脸的负样本,这只能靠人眼去筛选了。
如果真想快一点剔除掉这些负样本,可以用你训练出来的模型,对负样本resize前的图片批处理做一次人脸检测,然后删除这些含有人脸的负样本,然后再重新用这些负样重新来训练。
当我做训练的时候,pNet中neg:part:pos:landmark=3:1:1:2,但是RNet和和ONet训练样本比例并没有约束在3:1:1:2,这是否影响到模型训练出来误检率大的原因
麻烦问一下,为什么生成的RNet训练样本中,负样本占了绝大多数,而正样本和part都非常少?这个问题出现的原因可能在哪里呢?
生成RNet的训练样本是基于PNet网络检测的,可能PNet网络检测效果不好
@homedawn emmmm我neg=75w,pos=69,part=800, 我是用paddlepaddle,然后我也比对过github中的其他pnet代码,感觉和我的也没什么不一样,为啥出来结果就这样了。。。。PNet中要注意哪些地方多一些呢?
我没用过paddlepaddle,你用不一样的库效果肯定会有差别
@webnoise @boanz 不要意思,回复晚了。在对训练数据采样的过程中,一张图片中有多个人,但只标注了少数几个明显的目标,背景存在密集人群。这样crop的话,可能会采集到一些包含人脸的负样本,这只能靠人眼去筛选了。
@AITTSMD 可以通过降低0.3这个阈值来解决问题吗,会有什么别的影响吗,没看到这个问题下面有人讲到降低阈值
@webnoise 确实会存在完整人脸,但是完整人脸与crop_box的比例小于0.3。对于负样本的定义,没有说一定不能含有人脸,只要满足背景占大比例,对训练影响不大即可。当然,如果你可以产生完全不含人脸的负样本,也是可以的。
@boanz 1、如果负样本里可以含有人脸,人脸就是要检测的正样本,你的意思就是负样本里可以包含正样本? 2、那到底完全不含人脸的效果好,还是含人脸有背景的效果好?