pytorch官网:http://pytorch.org/上只有PyTroch的ubuntu和Mac版本,赤裸裸地歧视了一把Windows低端用户。

1. Caffe源码:Caffe源码理解之存储  

Caffe2存储

Caffe2中的存储结构层次从上到下依次是Workspace, Blob, Tensor。Workspace存储了运行时所有的Blob和实例化的Net。Blob可以视为对任意类型的一个封装的类,比如封装Tensor, float, string等等。Tensor就是一个多维数组,这个Tensor就类似于Caffe1中的Blob。Caffe2中真正涉及到分配存储空间的调用则在Context中,分为CPUContext和CUDAContext。下面按照从下到上的顺序分析一下Caffe2的存储分配过程。

  • Context
  • Tensor
  • Blob
  • Workspace
  • 总结

总结

下面是Operator中从创建Blob到实际分配空间的流程,这个图是怎么画出来的呢:

2.Caffe2 Detectron的使用初步

关于InferImage:

在 NVIDIA Tesla P100 GPU 上,单张图片的推断时间大概是 130-140ms.当然这与输入图像的参数设置size有关。

2. Detectron 训练

简单介绍在 COCO Dataset 上训练模型.

采用 ResNet-50-FPN Backbone 进行 end-to-end 的 Faster R-CNN 训练.

这里简单进行模型训练,小尺寸的输入图片,能够使训练和推断的速度相对较快.

2.1 单 GPU 训练

python2 tools/train_net.py \
--cfg configs/getting_started/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml \
OUTPUT_DIR /tmp/detectron-output
  • 输出保存路径 /tmp/detectron-output,如 models, validation set detections 等.
  • Maxwell GPU,如 M40 上,训练耗时大约 4.2 个小时.
  • M40 上,每张图片的推断时间大约是 80 ms.
  • coco_2014_minival上的 Box AP 大约是 22.1%.

2.2 Multi-GPU 训练

Detectron 提供了基于2、4、8 张 GPUS 训练的 configs 参数配置文件.

configs/getting_started/tutorial_{2,4,8}gpu_e2e_faster_rcnn_R-50-FPN.yaml.

如,2 张 GPUs 的训练:

python2 tools/train_net.py \
--multi-gpu-testing \
--cfg configs/getting_started/tutorial_2gpu_e2e_faster_rcnn_R-50-FPN.yaml \
OUTPUT_DIR /tmp/detectron-output

--multi-gpu-testing是告诉 Detectron 在训练结束后,采用 multiple GPUs (如NUM_GPUs 为 2) 进行并行化推断.

期望的结果:

  • 训练在 2 张 M40 上大概耗时 2.3 个小时.
  • 推断时间大约是 80 ms,在 2 张 GPUs 上并行推断时,耗时减半.
  • coco_2014_minival上的 Box AP 大约是 22.1%.

关于学习方案的调整(“linear scaling rule”),可以参考提供的 config 文件,阅读论文 Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour.

除了这里,其它的 configs 都是基于 8 GPUs.

如果训练的 GPUs 少于 8,或者想尝试改变 minibatch size,有必要理解如何根据 linear scaling rule 来调整训练方案.

注:

这里的训练示例采用了相对低的 GPU-compute 模型,因此,Caffe2 Python op 的开销相对较高. 导致将 GPUs 由 2 增加到 8 时,开销并不成比例减少,如采用 8 GPUs,需要训练 0.9 小时,只比单张 GPU 快了 4.5x 倍.

当采用相对高的 GPU-compute 模型时,multi-GPUs 开销的减少比例会提高.

3. 在Win10 中编译安装PyTorch

知乎文章:关于Windows PRs并入PyTorch的master分支

.......................................

开始编译安装

python setup.py install

目前针对Windows的已修复项:

  1. 在backward过程中抛出异常会导致死锁 PR 2941
  2. 在Dataloader开多线程时,会存在内存泄漏 PR 2897
  3. torch.cuda下的一个缩进bug PR 2941
  4. 增加对新 CUDA 和 cuDNN 版本的支持 PR 2941

目前Windows的已知问题:

  1. 部分测试会遇到权限不足问题 PR 3447
  2. 分布式 torch.distributed 和 多显卡 nccl 不支持
  3. python 3.5 以下的版本不支持
  4. 多线程的使用方式与 Unix 不同,对于DataLoader的迭代过程一定要使用如下代码做保护。如遇到多线程下的问题,请先将num_worker设置为0试试是否正常。
if __name__ == '__main__':

另外,大家一定很关心什么时候能出正式Windows正式版,日前,Soumith大神给出了他的回复


所以这次应该还是见不到正式的Windows版本,但是各位可以期待到时候我的Conda包。

以上,就是文章的全部内容啦,如果感觉还意犹未尽的话,可以给我的Github 主页或者项目加个watch或者star之类的(滑稽),以后说不定还会再分享一些相关的经验。

Detectron:Pytorch-Caffe2-Detectron的一些跟进的更多相关文章

  1. (原)ubuntu上编译PANet/Detectron.pytorch时-std=c99的错误

    转载请注明出处: https://www.cnblogs.com/darkknightzh/p/10494787.html 在ubuntu上编译PANet/Detectron.pytorch时,总提示 ...

  2. detectron安装+caffe2安装

    detectron安装+caffe2安装 因为想跑一下facebook最近开源的detectron物体检测平台,所以安装caffe2+detectron 总结: 一定要好好看官方安装教程:https: ...

  3. Caffe2 Detectron安装错误记录

    caffe2 caffe2的安装方法有几种.其中最方便的是conda install.但是要求必须安装Anaconda. conda install -c caffe2 caffe2-cuda8.0- ...

  4. Pytorch实现的语义分割器

    使用Detectron预训练权重输出 *e2e_mask_rcnn-R-101-FPN_2x* 的示例 从Detectron输出的相关示例 使用Detectron预训练权重输出 *e2e_keypoi ...

  5. Something on RoIAlign --- basic introduction and implementation

    Something on RoIAlign --- basic introduction and implementation 2018-10-22 22:40:09 Paper: Mask RCNN ...

  6. 学习世界模型,通向AI的下一步:Yann LeCun在IJCAI 2018上的演讲

    https://baijiahao.baidu.com/s?id=1606296521706399213&wfr=spider&for=pc 机器之心整理,机器之心编辑部. 人工智能顶 ...

  7. Mask R-CNN详解和安装

    Detectron是Facebook的物体检测平台,今天宣布开源,它基于Caffe2,用Python写成,这次开放的代码中就包含了Mask R-CNN的实现. 除此之外,Detectron还包含了IC ...

  8. PANet训练自己的数据(VIA标注)

    当前最好的实例分割网络非PANet莫属,可是由于模型太新,网上的资料太少,最近的项目需要 实例分割,只能自己踩踩坑了,目前我还没看到一篇关于PANet训练的博客,只有几篇讲论文的. 环境:ubuntu ...

  9. Deepo

    Deepo is a series of Docker images that allows you to quickly set up your deep learning research env ...

随机推荐

  1. 第6章1节《MonkeyRunner源代码剖析》Monkey原理分析-事件源-事件源概览

    在上一章中我们有简要的介绍了事件源是怎么一回事.可是并没有进行详细的描写叙述.那么往下的这几个小节我们就须要把这方面的知识给补充完整. 这一节我们先主要环绕MonkeySourceNetwork这个事 ...

  2. swift编程语言基础教程 中文版

    swift编程语言基础教程 中文版 http://download.csdn.net/detail/u014036026/7845491

  3. Android学习笔记-tween动画之java实现

    Android动画分为Tween动画和Frame动画,近期学习了,体tween动画,现在讲学习的心得以及相关知识介绍如下. Tween又称为补间动画,可以把对象进行缩小.放大.旋转和渐变等操作.   ...

  4. SGU 261. Discrete Roots (N次剩余)

    N次剩余 题目:http://acm.sgu.ru/problem.php? contest=0&problem=261 题意:给定n,a,p 求出x^n ≡ a(mod p)在模p意义下的全 ...

  5. 【hdu3544】 Alice's Game

    给一块n*m的巧克力,Alice只能垂直切,切成A*m和B*m,并且A+B=n,Bob只能横切,只能切成A*n和B*n,并且A+B=m. 对于n*n的这种巧克力,谁先切了第一刀,就直接让对方有切两刀的 ...

  6. android压力测试命令monkey详解【转】

    本文转载自:http://www.jb51.net/article/48557.htm 作者: 字体:[增加 减小] 类型:转载 时间:2014-03-29我要评论 这篇文章主要介绍了android ...

  7. WinForm里面连接Oracle数据库

    WinForm里面连接Oracle数据库 string oradb = "Data Source=(DESCRIPTION="             + "(ADDRE ...

  8. [NOI2004]小H的小屋 贪心

    神仙贪心,洛谷没有插图导致我题一开始都没看懂.容易发现,块越多越优秀,然后为了满足题意,所以假如不能整除,就分为两个部分(能整除就直接均分就行了).前一部分是n/m,后一部分是n/m+1.数量也是固定 ...

  9. attr 和 prop的区别和使用

    一. attr和prop的区别 要想弄清楚attr和prop的区别,就要先搞清楚js中使用DOM方法获取设置属性和使用对象方法获取设置属性的区别. 在javascript中使用DOM方法设置获取属性值 ...

  10. Commons-FileUpload 常用API

    ServerFileUpload类的常用方法 方法名称 方法描述 public void setSizeMax(long sizeMax) 设置请求信息实体内容的最大允许的字节数 public Lis ...