caffe上运行retinaface-caffe的mnet模型报错:CUDNN_STATUS_SUCCESS (1 vs. 0) CUDNN_STATUS_NOT_INITIALIZED

一、需求描述

目前最好的人脸检测模型为Retinaface,但其是在Mxnet框架下训练和部署的。我们项目要在前端部署,目前大部分的开发板仅支持caffe框架下的模型转换到开发板的框架,因此,我们的需求是将Retinaface的模型转换到caffe下并在caffe框架下运行

二、转换思路

1、模型转换

    即实现mxnet模型转caffe模型。转换思路在自己的开发文档上有详细的描述,这里提供一个转换好的链接:R50和Mnet

2、 caffe实现Retinaface

    思路1:读python源码,理解其prior_box和detect_output这两层是怎么算的,然后参照caffe-ssd的prior_box_laye和detection_output_layer这两层的源码,在其上进行修改,跑通。难度较大,短时间(项目给了五天时间)难以完成。

    思路2:找到一个开源实现retinaface_caffe,感谢wzj5133329。下面的工作都是用这个进行部署。

3、 部署过程

(1)首先在Windows上部署caffe。其中趟过的坑不计其数。

(2)部署,运行其自带的mnet.caffemodel进行测试报错CUDNN_STATUS_SUCCESS (1 vs. 0) CUDNN_STATUS_NOT_INITIALIZED,这个报错折腾了我两天。

    a. 怀疑Windows上cuda计算力不够,跑到服务器上(4块RTX2080),搭建了半天的caffe,没有成功。放弃。

    b. 怀疑caffe环境搭建问题,找教程跑了一下mnist训练,没问题。

    c. 计算力不够。查找到博主介绍http://www.ishenping.com/ArtInfo/1567707.html,如下图:

                  

        受到启发:跑mobilenet,而在原版的caffe中并没有mobilenet的depthwiseConv特殊卷积层,之前测试mobilenet的时候,  要单独将depthwise层加入到caffe中重新编译。进一步查看mnet.prototxt中的“convolution”,里面的确,和普通卷积不同,多了个group参数

                      

就是这一个group操作,导致我rtx2060显卡显存都不够用了。

4、解决CUDNN_STATUS_SUCCESS (1 vs. 0) CUDNN_STATUS_NOT_INITIALIZED问题

既然是mobilenet导致的错误,那就针对这个问题进行解决,思路有两个:

(1)要跑mnet,要在caffe中配置depthwise的cpp和h,就是添加新层并重新编译,并且要修改mnet.prototxt中的"convolution"参数进行,按照mobilenet的模式,一般要将"type"设置为"depthwise..."。

(2)换R50-0000.caffemodel进行测试。

        将mnet.caffemodel替换为R50进行测试,通过,进一步证明了mobilenet的group操作导致显存不够用的问题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值