pytorch-YOLOv3移植到寒武纪

文章目录

  • pytorch-YOLOv3移植到寒武纪
    • 参考
    • 新建docker
    • make caffe
    • caffe扩展
    • pip install torch
    • 转换结果修改
参考
  • 1、Darknet2Caffe 大概步骤
  • 2、ChenYingpeng/darknet2caffe
  • 3、基于Docker的Caffe编译(CUDA11的makefile版)
    • caffe的编译是用我的这个博客,只用到caffe编译部分:
  • 4、官方镜像园
  • 5、ImportError:No module named builtins
新建docker
  • 裸机也可以哈,但是实验室的服务器不太好乱搞,就用了docker

  • #!/bin/bashexport MY_CONTAINER="darknet2caffe"
    num=`sudo docker ps -a|grep "$MY_CONTAINER"|wc -l`
    echo $num
    echo $MY_CONTAINER
    if [ 0 -eq $num ]; thensudo 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_CONTAINERsudo 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: 50width: 50}
    }
    
  • 由于转换得来的prototxt没有yolo层,于是在inference中得自己做后处理,由于我的模型是剪枝过的模型,layer层数与一般的YOLO不同,这里是写死的,于是需要对应改一下层名,以及anchor大小

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

pytorch-YOLOv3移植到寒武纪相关推荐

  1. [pytorch]yolov3.cfg参数详解(每层输出及route、yolo、shortcut层详解)

    文章目录 Backbone(Darknet53) 第一次下采样(to 208) 第二次下采样(to 104) 第三次下采样(to 52) 第四次下采样(to 26) 第五次下采样(to 13) YOL ...

  2. Pytorch | yolov3原理及代码详解(二)

    阅前可看: Pytorch | yolov3原理及代码详解(一) https://blog.csdn.net/qq_24739717/article/details/92399359 分析代码: ht ...

  3. Pytorch | yolov3原理及代码详解(一)

    YOLO相关原理 : https://blog.csdn.net/leviopku/article/details/82660381 https://www.jianshu.com/p/d13ae10 ...

  4. 寒武纪MLU270安装运行Pytorch yolov3实录

    注:本教程仅供摩米实验室内部学习适用 硬件安装 MLU270外形类似一张显卡,需要插到主板的显卡插槽上,供电有点特殊,需要把两个2×4pin的电源插口通过一个二合一的转接线,转接成一个2×4pin的插 ...

  5. Pytorch——YOLOv3

    YOLO: Real-Time Object Detection             官方的 目标检测之 YOLOv3 (Pytorch实现) 关于YOLOv3模型(原论文作者将其称之为" ...

  6. pytorch YoLOV3 源码解析 train.py

    train.py 总体分为三部分(不算import 库) 初始的一些设定 + train函数 + main函数 源码地址: https://github.com/ultralytics/yolov3 ...

  7. 学习记录——Pytorch模型移植Android小例子

    提示:注意文章时效性,2022.04.02. 目录 前言 零.使用的环境 一.模型准备 1.导出模型 2.错误记录 2.1要载入完整模型(网络结构+权重参数) 2.2导出的模型文件格式 二.Andro ...

  8. Pytorch yolov3 多GPU 训练

    pytorch 多gpu训练: # -*- coding:utf-8 -*- from __future__ import divisionimport datetime import torch i ...

  9. pytorch yolov3 代码详解_PyTorch C++ libtorch的使用方法(1)-nightly 版本的 libtorch

    问题描述: 按照PyTorch中文教程的[ 在 C++ 中加载 PYTORCH 模型 ]一文,尝试调用 PyTorch模型. 1. 例子来源 在 C++ 中加载 PYTORCH 模型 我是使用Qt新建 ...

最新文章

  1. Maven下Flex国际化配置
  2. C# 的TCPClient异步连接与异步读数据
  3. css隐藏滚动条、兼容
  4. oracle rac实例切换,RAC+单实例DG的切换
  5. 利用WIX制作安装包(2)
  6. 如何爬取ajax实时加载多个ts文件的视频
  7. 欢迎使用CSDN-markdown编辑器--样例
  8. java基础 包装类
  9. NumPy库---Axis理解
  10. 《基 于 N Gram 的无词典 中文分词算法》 n-gram读感
  11. 轻松修复iOS系统的工具:iToolab FixGo mac中文版
  12. win95光盘版安装方法
  13. Java常见面试题:重写和重载的区别详解
  14. 你知道有哪些超级好用的网盘存储吗?
  15. 脑机接口的技术与应用
  16. 联想硬盘启动计算机,win7系统联想台式电脑开机提示error 1962无法找到硬盘启动的解决方法...
  17. 独立IP 独立访客 PV 之间的联系与区别
  18. 《鹊桥仙·纤云弄巧》 秦观
  19. html audio缓冲效果实现
  20. Python股票量化学习(1)——股票代码下载

热门文章

  1. python工资自动发放_python自动化办公--协助财务自动发送工资条
  2. Graham扫描法求解二维凸包问题
  3. 2022湖北省各市专精特新小巨人企业认定补贴、条件流程
  4. 今日头条有麻烦了!App 被下架
  5. 预约上门App平台的接单方式
  6. RabbitMQ预研
  7. 中国艺术孙溟㠭书法《觉》
  8. Oracle 中的各种读
  9. 实现全国行政区域结构化管理
  10. 多智能体强化学习基本概念