chuanqi305 / MobileNet-SSD

Caffe implementation of Google MobileNet SSD detection network, with pretrained weights on VOC0712 and mAP=0.727.
MIT License
2.03k stars 1.18k forks source link

传奇你好,我将ssd结构改成sfd并使用wider face数据集做人脸检测的时候,一开始loss是收敛的(刚开始大概),然后在loss=8的时候震荡 #100

Open wanghanyang123 opened 6 years ago

wanghanyang123 commented 6 years ago

我现在用您的mobilenet+ssd网络训练,只修改num_classes,也有loss在8附近震荡这个情况,不知道是什么问题。

wanghanyang123 commented 6 years ago

一开始loss是收敛的(刚开始大概20左右),抱歉没打完字。。

yokings commented 6 years ago

我用mobilenet_v2训练人脸也差不多是这个情况,好奇怪,loss一直在8附近震荡。

wanghanyang123 commented 6 years ago

找到问题所在了,网络太深训练的时候梯度消失导致loss无法收敛,我删除了conv11前的大概10个卷积层,自己再稍微调整下就能收敛了。@allenwangcheng

yokings commented 6 years ago

好的,我也去试试看

yokings commented 6 years ago

@wanghanyang123 你的人脸检测效果怎么样啊?

wanghanyang123 commented 6 years ago

在fddb上准确率能达到97%,速度在CPU上测试能到8FPS(I7-7700)。@allenwangcheng

yokings commented 6 years ago

@wanghanyang123 能把你的train.prototxt分享给我看下吗,训练有什么trick吗?我用v2训练对小人脸检测效果很差啊,还有对数据集需要做清洗吗?

wanghanyang123 commented 6 years ago

邮箱留一下,ssd在wider face上的训练和检测效果很差是正常的,因为小脸太多了,你可以看下sfd的论文和代码,适用于小脸检测。我对数据没有做任何处理,不过我尝试过对面积小于256的人脸做了mask再作为训练集,但是效果提升不明显。@allenwangcheng

yokings commented 6 years ago

@wanghanyang123 allenwangcheng@163.com,非常感谢分享

yokings commented 6 years ago

@wanghanyang123 ,你好啊,我看了你的prototxt,感觉你只用了33和11的卷积,并没有使用depthwise卷积吧,还有batch_sampler后面几个怎么参数都一样啊。。。

wanghanyang123 commented 6 years ago

1.我把depthwise卷积层和separable卷积层的名字改了一下,卷积层名字中并没有出现dw和sp,本来就是只有33和11的卷积核,分别是给dw层和sp层用的。 2.我删除了bn层和scale层,你可以加上,这个没有影响。 3.batch_sampler参数和均值我用的sfd里的,因为考虑到用的是wider face数据集,这些都是计算好的了。 4.我删除了group操作(mobilenet里最重要的操作),你可以加上,这样模型就很小了,但是收敛的的速度会变慢。 @allenwangcheng

yokings commented 6 years ago

不用group就不是depth wise 卷积了吧……

王程 邮箱:allenwangcheng@163.com

签名由 网易邮箱大师 定制

在2018年07月05日 09:34,Wang 写道:

1.我把depthwise卷积层和separable卷积层的名字改了一下,卷积层名字中并没有出现dw和sp,本来就是只有33和11的卷积核,分别是给dw层和sp层用的。 2.我删除了bn层和scale层,你可以加上,这个没有影响。 3.batch_sampler参数和均值我用的sfd里的,因为考虑到用的是wider face数据集,这些都是计算好的了。 4.我删除了group操作(mobilenet里最重要的操作),你可以加上,这样模型就很小了,但是收敛的的速度会变慢。 @allenwangcheng

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

wanghanyang123 commented 6 years ago

是的,不是depth wise卷积了。加上group我也试过,模型收敛变慢,准确率下降了很多,速度也没有变快很明显。所以我这个是改后的。。@allenwangcheng

yokings commented 6 years ago

哦哦,你试过用mobilenetv2的结构没,还有pooling层是你自己加的吧

王程 邮箱:allenwangcheng@163.com

签名由 网易邮箱大师 定制

在2018年07月05日 11:26,Wang 写道:

是的,不是depth wise卷积了。加上group我也试过,模型收敛变慢,准确率下降了很多,速度也没有变快很明显。所以我这个是改后的。。@allenwangcheng

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

wanghanyang123 commented 6 years ago

没用mobilenet_v2,pooling层是我改的,把第一个stride=2的卷积用pooling层代替,我就是尝试是哪个环节导致模型不收敛的时候改了一下这里了的,后来我又改回来了试过,这里并没有影响,你也可以改成mobilenet中的那样。电脑里改的版本太多了,有点乱。@allenwangcheng

yokings commented 6 years ago

嗯呢,感谢感谢

王程 邮箱:allenwangcheng@163.com

签名由 网易邮箱大师 定制

在2018年07月05日 11:31,Wang 写道:

没用mobilenet_v2,pooling层是我改的,把第一个stride=2的卷积用pooling层代替,我就是尝试是哪个环节导致模型不收敛的时候改了一下这里了的,后来我又改回来了试过,这里并没有影响,你也可以改成mobilenet中的那样。电脑里改的版本太多了,有点乱。@allenwangcheng

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

yokings commented 6 years ago

@wanghanyang123 请问你最后的loss大概是多少啊?还有deploy最后的两个阈值和topk需要调整吗?

wanghanyang123 commented 6 years ago

最终loss在2.5左右。大概训练20个epoch,loss降到3的时候检测效果就还算可以了。nms_threshold: 0.3, keep_top_k: 750, confidence_threshold: 0.1,这个影响不太大。@allenwangcheng

yokings commented 6 years ago

为啥我用你给我的模型训练,最后的loss最后到3.几就不下降了,测试的时候框很多,完全不work,需要调整你给我的prototxt吗

王程 邮箱:allenwangcheng@163.com

签名由 网易邮箱大师 定制

在2018年07月06日 08:55,Wang 写道:

最终loss在2.5左右。大概训练20个epoch,loss降到3的时候检测效果就还算可以了。nms_threshold: 0.3, keep_top_k: 750, confidence_threshold: 0.1,这个影响不太大。@allenwangcheng

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

wanghanyang123 commented 6 years ago

我最后在测试代码里加上了仅显示概率大于0.7的框。。。 confidence_threshold: 0.1是用来生成更多的框在fddb数据集上测试用的。@allenwangcheng

cherryxiongyw commented 6 years ago

@wanghanyang123 @allenwangcheng 你好,我现在也用ssd训练人脸检测,但训练起来感觉有问题,loss一直为0,能把你们的train.prototxt分享看一下吗, 刚开始用caffe,好多地方不熟

wanghanyang123 commented 6 years ago

loss为0是数据集的问题,我现在用voc中提取到的行人数据来做行人识别,训练的时候也遇到了loss=0的问题,暂时没找到是哪里出了点毛病,数据集生成方式和步骤和wider face都是一样的。@cherryxiongyw

yokings commented 6 years ago

是的,我之前也遇到过loss为0的情况,具体问题记不清了,但肯定是数据集的问题

王程 邮箱:allenwangcheng@163.com

签名由 网易邮箱大师 定制

在2018年07月09日 08:57,Wang 写道:

loss为0是数据集的问题,我现在用voc中提取到的行人数据来做行人识别,训练的时候也遇到了loss=0的问题,暂时没找到是哪里出了点毛病,数据集生成方式和步骤和wider face都是一样的。@cherryxiongyw

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

yokings commented 6 years ago

@wanghanyang123 你的sfd有demo和测试效果图片方便发给我看下不,我用你的prototxt和我自己写的mobilenet_v2版本的sfd测试结果都很奇怪,框都很多,而且得分都很低,很奇怪啊,最后的训练loss看起来是正常的啊,在3左右。

leadalion commented 6 years ago

@wanghanyang123 @allenwangcheng 您好,可以把您改后的train.prototxt文件发给我一份吗,谢谢。ponderme@163.com

tianhan2014 commented 6 years ago

@wanghanyang123 您好,可以把您修改的train.prototxt文件发一份吗,谢谢。972828002@qq.com

jackyfriend commented 6 years ago

@wanghanyang123 您好,可以把您修改的train.prototxt文件发一份吗,谢谢. 875393853@qq.com

hematank commented 6 years ago

@wanghanyang123 您好,可以把您修改的train.prototxt文件发一份吗,谢谢咯! 827085762@qq.com

wanghanyang123 commented 6 years ago

@hematank @jackyfriend @tianhan2014 @leadalion https://pan.baidu.com/s/1ZqA3mhMbtaO9JoFku0zRJQ

aureosun commented 5 years ago

各位大家好,我在训练的时候都正常,但跑demo.py出现了以下错误,不知道是什么原因,目前还没解决,不知道大家有没有好的解决方案,或者遇到过类似问题? I1123 19:20:37.463002 13525 net.cpp:165] Memory required for data: 126091776 I1123 19:20:37.463008 13525 layer_factory.hpp:77] Creating layer conv8/dw I1123 19:20:37.463021 13525 net.cpp:100] Creating Layer conv8/dw I1123 19:20:37.463027 13525 net.cpp:434] conv8/dw <- conv7 I1123 19:20:37.463037 13525 net.cpp:408] conv8/dw -> conv8/dw F1123 19:20:38.318675 13525 cudnn_conv_layer.cpp:53] Check failed: status == CUDNN_STATUS_SUCCESS (4 vs. 0) CUDNN_STATUS_INTERNAL_ERROR Check failure stack trace: Aborted (core dumped) 环境是anaconda2,ubuntu16.04 @wanghanyang123 @allenwangcheng @cherryxiongyw @leadalion @chuanqi305

wanghanyang123 commented 5 years ago

caffe编译问题,根据自己的cuda版本设置Makefile.config里的cudnn选项,可自行百度解决。@aureosun

hematank commented 5 years ago

loss为0是数据集的问题,我现在用voc中提取到的行人数据来做行人识别,训练的时候也遇到了loss=0的问题,暂时没找到是哪里出了点毛病,数据集生成方式和步骤和wider face都是一样的。@cherryxiongyw

loss为0,很可能是生成lmdb数据格式出现问题。可以找一哈网上解析lmdb格式的代码,自己watch一哈图片和标签吧。实际经历过,放心。

hematank commented 5 years ago

最终loss在2.5左右。大概训练20个epoch,loss降到3的时候检测效果就还算可以了。nms_threshold: 0.3, keep_top_k: 750, confidence_threshold: 0.1,这个影响不太大。@allenwangcheng

赞同,我训练1类车的模型,最好的模型,loss基本上在1.8~2.2之间吧。detect_eval能上0.82

yokings commented 5 years ago

最终loss在2.5左右。大概训练20个epoch,loss降到3的时候检测效果就还算可以了。nms_threshold: 0.3, keep_top_k: 750, confidence_threshold: 0.1,这个影响不太大。@allenwangcheng

赞同,我训练1类车的模型,最好的模型,loss基本上在1.8~2.2之间吧。detect_eval能上0.82

我训练行人检测模型detect_eval能上0.86,然而并没有什么卵用,检测的结果还是不是很理想。

ouguozhen commented 5 years ago

@wanghanyang123 @allenwangcheng 你好,我现在也用ssd训练人脸检测,但训练起来感觉有问题,loss一直为0,能把你们的train.prototxt分享看一下吗, 刚开始用caffe,好多地方不熟

ssd里面loss值一直为0的话是数据问题,当前batch的gt的数目为0,可以看一下代码或者论文里都有解释

xcls1117 commented 5 years ago

@wanghanyang123 请教三个问题:

  1. 对于训练集,训练前需要对图片做padding把长宽比转成1:1吗?
  2. widerface里的小脸,训练前有做什么特殊处理吗?比如筛选掉小于某个大小的脸。
  3. 需要对widerface做清洗吗?
wanghanyang123 commented 5 years ago

@xcls1117

  1. 这个不是必须的,根据训练集图片的尺寸来定,如果是widerface的训练集,建议设置成正方形的。
  2. 最好筛选掉小于16*16以下的人脸,不然小人脸太多,模型收敛效果不好,参考faceboxes的训练集预处理。
  3. 不需要。
xcls1117 commented 5 years ago

@wanghanyang123 谢谢你的回答,关于问题1,如果你的网络输入不是1:1,那么是否跟随网络输入比例最好呢

xinxin12345 commented 5 years ago

在fddb上准确率能达到97%,速度在CPU上测试能到8FPS(I7-7700)。@allenwangcheng

您好,请问您可以分享一下您训练用的caffe工程吗,非常感谢!邮箱:18305154989@163.com

destroyhang commented 4 years ago

@wanghanyang123 你好,我用您的mobilenet训练出来了人体和人头两个类别的模型。但是在做摄像头检测的时候,经常会有误检测的情况,模型的loss大概在1.2左右。一些大面积的灰黑色会误检成人体,还有一张写了字的纸也会被识别成人体,请问有什么办法可以解决这个问题吗

wanghanyang123 commented 4 years ago

@destroyhang 这是分类的问题,简单的解决办法可适当提升分类Loss权重,加一些容易出现误检的图片并带标注(由于标准ssd的mining方式,这张图片必须有人脸才会对应产生负样本并在训练的时候mining).复杂的解决办法需要修改ssd的一系列训练代码,caffe可操作性太差.