MXNET框架,faster rcnn 训练正常,正确率很高,但是使用demo测试出现异常,框虚标,出现乱框,vgg16正常,resnet网络异常,PIXEL_MEANS问题

首先,使用的是mxnet框架,检测框架是faster rcnn,使用网络是resnet和vgg,项目地址是github mxnet apache里面的\incubator-mxnet-master\incubator-mxnet-master\example\rcnn\,这个项目已经在7月中旬的时候被官方修改了,这里讨论的情况是旧的项目代码。我首先使用自己的数据集,格式是Pascal Voc格式,将trainvol和图片进行替换,然后使用resnet101网络进行训练,训练的过程正常,正确率和loss都很正常,但是使用修改过的demo文件测试单张图片时出现异常,(demo文件本来是测试vgg网络的,我这里将里面的vgg改成了resnet了),异常如下图所示,检测图片的结果是框框出现漂移,不准,只有一个或两个准的,根据训练的loss来看这是不正常的,不可能这么差的效果。

但是使用test代码进行测试时结果正常,正确率在0.8左右,但是demo测试依然不行,后来使用resnet50进行训练,结果同样不正常。但是在使用demo测试vgg16网络的时候,正常,检测准确度和训练时一样。

经过对test代码和demo代码进行一点一点调试分析,最后查到原因,这个是配置文件network.resnet.PIXEL_MEANS = np.array([0, 0, 0])中PIXEL_MEANS设置不同的原因,resnet在训练的时候使用的这个值是3个0,而vgg在训练的时候不是这个值(config.PIXEL_MEANS = np.array([103.939, 116.779, 123.68])),demo文件中使用的默认PIXEL_MEANS值是针对vgg网络的,如果修改成测试resnet的,也需要将这个值修改一下,不只是修改demo里面的,还需要修改config配置文件中的这个值,将默认的config.PIXEL_MEANS = np.array([103.939, 116.779, 123.68])修改成etwork.resnet.PIXEL_MEANS = np.array([0, 0, 0]),可以查看test在执行时参数输入的那个函数,将其放到demo的参数输入那里即可,另外将demo开头的PIXEL_MEANS值也改一下。如下图:

猜你喜欢

转载自blog.csdn.net/wang_ys121/article/details/81285980