记录一下将yolov3模型移植到海思H35系列芯片的步骤

海思芯片的nnie加速器可谓是黑科技了,可以在不到100元的2个gpu核的芯片上跑yolov3,对于我等菜狗来说吸引力很大,但是一般在x86或英伟达arm板上运行的darknet可执行文件是没法在芯片上运行的,需要严格执行以下步骤:

1、将darknet模型转换为caffemodel

海思h35系列目前只支持caffe模型,因此需要先将darknet转换为caffemodel,这里要参考大神的转换代码,前人栽树后人乘凉。https://github.com/ChenYingpeng/darknet2caffe

①caffe模型缺少上采样层,目前需要在网上下载并手动加入layer文件夹中,一起编译caffe。

②运行darknet2caffe.py,9012年了,Python2可能会出很多问题了,但是大神的代码是用Python2写的,建议用python3运行,同时更改其中的一些api。

darknet2caffe.py:

elif block['type'] == 'convolutional':
            batch_normalize = int(block['batch_normalize'])
            if block.has_key('name'):
            # 改为if 'name' in block:
            # 由于python3的字典api变化,本文中的has key均要修改
                conv_layer_name = block['name']
                bn_layer_name = '%s-bn' % block['name']
                scale_layer_name = '%s-scale' % block['name']
            else:
                conv_layer_name = 'layer%d-conv' % layer_id
                bn_layer_name = 'layer%d-bn' % layer_id
                scale_layer_name = 'layer%d-scale' % layer_id

            if batch_normalize:
                start = load_conv_bn2caffe(buf, start, params[conv_layer_name], params[bn_layer_name], params[scale_layer_name])
            else:
                start = load_conv2caffe(buf, start, params[conv_layer_name])
            layer_id = layer_id+1
pooling_param['pad'] = str((int(block['size'])-1)/2)
改为pooling_param['pad'] = str(int(int(block['size']-1)/2))
否则pad不是整数将会报错

 prototxt.py:

    def print_block(block_info, prefix, indent):
        blanks = ''.join([' ']*indent)
        print >>fp, '%s%s {' % (blanks, prefix)
        for key,value in block_info.items():
            if type(value) == OrderedDict:
                print_block(value, key, indent+4)
            elif type(value) == list:
                for v in value:
                    print >> fp, '%s    %s: %s' % (blanks, key, format_value(v))
            else:
                print >> fp, '%s    %s: %s' % (blanks, key, format_value(value))
        print >> fp, '%s}' % blanks
        
    props = net_info['props']
    layers = net_info['layers']
    print >> fp, 'name: \"%s\"' % props['name']
    print >> fp, 'input: \"%s\"' % props['input']
    print >> fp, 'input_dim: %s' % props['input_dim'][0]
    print >> fp, 'input_dim: %s' % props['input_dim'][1]
    print >> fp, 'input_dim: %s' % props['input_dim'][2]
    print >> fp, 'input_dim: %s' % props['input_dim'][3]
    print >> fp, ''

    >>已经不符合潮流了,要改为:

        def print_block(block_info, prefix, indent):
        blanks = ''.join([' ']*indent)
        print('%s%s {' % (blanks, prefix), file=fp)
        for key,value in block_info.items():
            if type(value) == OrderedDict:
                print_block(value, key, indent+4)
            elif type(value) == list:
                for v in value:
                    print('%s    %s: %s' % (blanks, key, format_value(v)), file=fp)
            else:
                print('%s    %s: %s' % (blanks, key, format_value(value)), file=fp)
        print('%s}' % blanks, file=fp)

    props = net_info['props']
    layers = net_info['layers']
    print('name: \"%s\"' % props['name'], file=fp)
    print('input: \"%s\"' % props['input'], file=fp)
    print('input_shape {', file=fp)
    print('         dim: %s' % props['input_dim'][0], file=fp)
    print('         dim: %s' % props['input_dim'][1], file=fp)
    print('         dim: %s' % props['input_dim'][2], file=fp)
    print('         dim: %s' % props['input_dim'][3], file=fp)
    print('}', file=fp)

转换的代码已从python2.7转换到python3.5,打包在darknet2caffe包中。

2、将caffemodel转换为wk模型(安装ruyi studio)

①推荐使用Windows系统,首先安装MinGW-W64,从 http://gnuwin32.sourceforge.net/packages/wget.htm 网页下载 wget 安装包(选择 Complete package, except sources),保存到新建的文件夹RuyiStudio下,如图:

 

下载得到 wget-1.11.4-1-setup.exe,双击安装,将会得到一个GnuWin32文件夹。将 GnuWin32文件夹中wget.exe 所在目录(GnuWin32\bin)添加到用户环境变量 PATH 中,用于从网页下载相关包。(在计算机高级选项中添加环境变量)

②配置python3.5环境,在python官方网站上下载python35安装包并自动安装。

③配置caffe环境,从 https://github.com/willyd/caffe-builder/releases 下载libraries_v140_x64_py35_1.1.0.tar.bz2 并放置在ruyi_env_setup-2.0.41文件夹下。如图:

点击 ruyi_env_setup-2.0.41文件夹下的setup_python.bat 进行安装, setup_python.bat 脚本会调用 python_bat 文件夹下的setup_download_python.bat、 setup_extract_python.bat 和 setPath_python.bat,下载python, caffe 的依赖包,并配置环境变量。

注意在完成之后要重启电脑。

3、将caffemodel转换为wk模型(使用ruyi studio)

Ruyi studio的安装包已备好在文件夹中,定位到.\SVP_PC\HiSVP_PC_V1.2.2.2\tools\nnie\windows,解压缩RuyiStudio-2.0.41.zip,然后双击RuyiStudio.exe即可。

打开之后,加入示例项目(software/data/detection/yolov3),在左侧栏中右键点击yolov3_inst.cfg,选择open with mapper。

填入所需路径之后,点击主页面上方工具栏的make wk按钮即可。生成的wk模型按照海思提供的文档与例程,便可以运行yolo模型了,速度还可以,未作处理的开源模型速度目前是4.5fps,充满希望啊!

经过一顿操作之后能达到10fps了。。。

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值