浅析caffe设计中的几个重大缺憾

caffe是由时在google实习的贾扬清开源的用于大规模GPU深度学习加速运算的框架,作为第一代深度学习框架的代表,其在14-17年间占据绝对主力的位置,直到16年google开源的第二代深度学习框架tensorflow后来居上并遥遥领先,彻底取代了其在深度学习届的地位。本人也是从caffe入门深度学习的,近年来迫不得已选择了tensorflow,对其应该是有很多投入的,但所谓选择大于努力,对于现在才入门深度学习的来说我是建议从tensorflow入手的。网上对其歌功颂德的博文数不胜数,我在这里就不赘述了,我们更应该剖析其日渐式微的根源,吸取架构设计上的教训。

1.首当其冲的是依赖复杂,一个caffe库要依赖protobuf、glog、gflags、boost、lmdb、hdf5等十几个库,如果每个库都从头编译的话至少需要一天的时间,其中尤以boost为甚,这个号称C++标准备胎的库,仅源码就有100多M,完全编译后更是占据10多个G的空间,所需时间更是4个小时以上,更别提里面16钟编译模式了,这其实也不怪它,整个C++就没有一个跨平台的系统级的依赖库管理系统,代码复用一直是个棘手的事,还是python的import来的方便。google自家的那几个库是很好用,但是就为了生成个随机数就得强加十几个G的依赖真的有必要吗?还是我们直接能假设用户都用的是linux系统?不管Windows用户了?

2.其次是文档不全,犹记得当初我花了近乎一个星期的时间好不容易把它编译过了,居然不知道接下来该做什么了。当然随着时间的推移文档慢慢的补上来了,不过看上去仍然没有连贯性,各个部分单独成章,没有系统的逻辑。更像是参考手册而不是使用教程。而更重要的为什么设计成这样的基本没有讲述,还得靠第三方的代码解析才能猜出蛛丝马迹。

3.没有扩展性,加个层都得大动干戈,又是改proto,又是写cu文件。更好的是应该设计成插件式的结构,按需加载。小白用户需要的扔进去一个数据集就能训练,换数据集只改个路径就好,而现在又是改proto,又是生成lmdb,又是生成mean,啰啰嗦嗦好几个步骤还分了好几部分去讲,真是毁人不倦。

4.blob设计的问题。模型参数和特征map本来是两个风马牛不相及的结构,非得把他们杂糅到一个Blob类里,弄的不伦不类,严重违背了软件工程中单一功能的原则,这也是造成它极不灵活的根源。

猜你喜欢

转载自blog.csdn.net/minstyrain/article/details/82930546