IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> pytorch-YOLOv3移植到寒武纪 -> 正文阅读

[人工智能]pytorch-YOLOv3移植到寒武纪

pytorch-YOLOv3移植到寒武纪

参考
新建docker
  • 裸机也可以哈,但是实验室的服务器不太好乱搞,就用了docker

  • #!/bin/bash
    
    export MY_CONTAINER="darknet2caffe"
    num=`sudo docker ps -a|grep "$MY_CONTAINER"|wc -l`
    echo $num
    echo $MY_CONTAINER
    if [ 0 -eq $num ]; then
        sudo docker run --gpus all \
            --ipc=host \
            -it \
            --privileged \
            --name $MY_CONTAINER \
            -v $PWD/caffe-env:/home/caffe-env \
            -w /home/caffe-env \
            4d1a8aaef572 \
            /bin/bash 
        echo $MY_CONTAINER
    else 
        sudo docker start $MY_CONTAINER
        sudo docker exec -w /home/R2CNN -ti $MY_CONTAINER /bin/bash
    fi
    
  • 主体逻辑其实十分简单,查看有没有容器名相同的容器,有的话直接start&exec,没有就run一个,并制定映射目录和工作目录

  • 4d1a8aaef572是我自己保存的caffe镜像,并没有上传,cuda11的话可以用这个代替:0ec3cd91fe0b,纯净的cuda11,然后看一下基于Docker的Caffe编译(CUDA11的makefile版)配置

make caffe
  • 我直接复制了一份基于Docker的Caffe编译(CUDA11的makefile版)配置好的caffe来make,省去了很多配置的时间,大概指令就是:

  • make all
    make runtest
    make pycaffe
    
  • 如果遇到ImportError: No module named caffe的话,可能是没有指定caffe的地址

    • export PYTHONPATH=/your-caffe-root/caffe/python:$PYTHONPATH
caffe扩展
  • 根据ChenYingpeng/darknet2caffe的readme中提到

    • #1、Copy caffe_layers/mish_layer/mish_layer.hpp,caffe_layers/upsample_layer/upsample_layer.hpp into include/caffe/layers/.
      #2、Copy caffe_layers/mish_layer/mish_layer.cpp mish_layer.cu,caffe_layers/upsample_layer/upsample_layer.cpp upsample_layer.cu into src/caffe/layers/.
      #3、Copy caffe_layers/pooling_layer/pooling_layer.cpp into src/caffe/layers/.Note:only work for yolov3-tiny,use with caution.
      
      #4、Add below code into src/caffe/proto/caffe.proto.
      / LayerParameter next available layer-specific ID: 147 (last added: recurrent_param)
      message LayerParameter {
        optional TileParameter tile_param = 138;
        optional VideoDataParameter video_data_param = 207;
        optional WindowDataParameter window_data_param = 129;
        # 注意这里指的是在LayerParameter里面加上下面两行,149和150可以自定只要caffe.proto.里面没有就行
      ++optional UpsampleParameter upsample_param = 149; //added by chen for Yolov3, make sure this id 149 not the same as before.
      ++optional MishParameter mish_param = 150; //added by chen for yolov4,make sure this id 150 not the same as before.
      }
      
      // added by chen for YoloV3
      # 注意这里指的是加上新类,caffe原本没有Upsample,需要加上
      ++message UpsampleParameter{
      ++  optional int32 scale = 1 [default = 1];
      ++}
      
      # 这个是给YOLO-tiny用的
      // Message that stores parameters used by MishLayer
      ++message MishParameter {
      ++  enum Engine {
      ++    DEFAULT = 0;
      ++    CAFFE = 1;
      ++    CUDNN = 2;
      ++  }
      ++  optional Engine engine = 2 [default = DEFAULT];
      ++}
      
    • 然后重新编译,可以大胆的用-j8来加速

pip install torch
  • 由于是py2,因此从官方镜像园中找一个适合py27的torch.whl直接本地pip即可
  • torchvision的话等待pytorch安装完成之后再直接pip install torchvision即可安装兼容的版本
  • 可能会遇到:ImportError:No module named builtins,这时候pip install future即可
转换结果修改
  • 在寒武纪中的caffe的配置方式有稍许不同

  • layer {
        bottom: "layer70-conv"
        top: "layer71-upsample"
        name: "layer71-upsample"
        type: "Upsample"
        upsample_param {
            scale: 2
        }
    }
    # 这个层相当于Upsample层,原本参数是scale: 2,但是这里需要换成上采样的结果(前两维),这就需要稍微根据网络计算一下了,YOLO v3一共有两处,改法相同
    layer {
        bottom: "layer70-conv"
        top: "layer71-upsample"
        name: "layer71-upsample"
        type: "Interp"
        interp_param {
            height: 50
            width: 50
        }
    }
    
  • 由于转换得来的prototxt没有yolo层,于是在inference中得自己做后处理,由于我的模型是剪枝过的模型,layer层数与一般的YOLO不同,这里是写死的,于是需要对应改一下层名,以及anchor大小

    • image-20210716225352098
  • 如此依赖便算是配置好了,运行./inference.sh应该就可以成功了

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:54:48  更:2021-07-17 11:55:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 18:54:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码