支持动态并行和源码级plugins的Caffe——pCaffe

https://github.com/wadefelix/caffe

特性:

  1. 开启了 CUDA Dynamic Parallelism 特性,在 Makefile.config 定义 CUDA_DYNAMIC_PARALLEL := 1 即可。
  2. 支持源码级别的代码 plugins 以支持开发新层等代码,每个新插入的层放置在 src/caffe/plugins 目录下单独的子目录中,方便交流新代码。
  3. plugins 目录已放置了 fast_rcnnSSD 的代码可供使用和参考。
    该 fast_rcnn 所有层均是caffe移植,无需python,且每个minibatch支持多张图,并且实践应用了 CUDA Dynamic Parallelism 特性。

对 caffe 主要代码的更改说明:

  1. 应用了 protobuf extensions 功能,在 caffe.proto 中对部分 messages 定义了 extension 消息号空间。
  2. caffe 的少部分代码也做了拓展以支持 SSD ,不会影响其他 caffe 的任何功能和拓展, SSD 单独的代码尽量都放在了 src/caffe/plugins/ssd 目录。

pCaffe plugins

支持源码级别的代码 plugins 以支持开发新层等代码,每个新插入的层放置在 src/caffe/plugins 目录下单独的子目录中,方便交流新代码。

  1. 建议每个 layer 或每组 layers 单独一个目录。
  2. 建议每个 layer 的 .cpp .cu .hpp .proto 文件使用同一个名字。
  3. 包含这些子目录的头文件时不需要带目录,直接 #include "example_layer.hpp" 即可。
  4. .proto 文件会与 caffe.proto 一起最先编译,但注意在使用多进程编译时,若第一次编译不过可以再次编译一下试一试。这段 makefile 处理的不是太好。
  5. .proto 文件须遵循下列格式, 这个文件会被 makefile 脚本自动复制插入到 caffe.proto 一起编译.其中 auto 会自动分配消息号,若指定消息号也可以,注意不要与其他 layers 的参数消息号冲突。
// must be this format
/*
extend LayerParameter {
  optional ExampleParameter example_param = auto;
}
*/

// Message that stores parameters used by ExampleParameter
message ExampleParameter {
   // example layer parameters
}

caffe项目中早已有不少人在尝试解决新代码开发这个问题,但也都是迟迟不被主分支接纳,我为了扒代码,也是拼了,具体思路可以阅读:

如何更容易的开发和共享caffe新层

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注