https://www.toutiao.com/a6671617314464465412/

在计算机视觉领域,卷积神经网络(CNN)已经成为最主流的方法,比如GoogLenet、VGG-19、Incepetion等模型。CNN史上的一个里程碑事件是ResNet模型的出现,ResNet可以训练出更深的CNN模型,从而实现更高的准确度。ResNet模型的核心是通过建立前面层与后面层之间的“短路连接”(shortcuts,skip connection),这有助于训练过程中梯度的反向传播,从而能训练出更深的CNN网络。

DenseNet模型的基本思路与ResNet一致,但是它建立的是前面所有层与后面层的密集连接(dense connection),它的名称也是由此而来。DenseNet的另一大特色是通过特征在channel上的连接来实现特征重用(feature reuse)。这些特点让DenseNet在参数和计算成本更少的情形下实现比ResNet更优的性能,DenseNet也因此斩获CVPR 2017的最佳论文奖。

1 集成DenseNet的报错信息

最近要把DenseNet集成到现有的运行平台,结果发现加载模型时caffe报如下错误信息:

[TL] 2019/03/21 19:52:17.688357 [8 12 34642][libprotobuf ERROR google/protobuf/text_format.cc:245] Error parsing text-format caffe.NetParameter: 54:15: Message type "caffe.PoolingParameter" has no field named "round_mode".
[TL] 2019/03/21 19:52:17.688714 [8 12 34642]F0321 19:52:17.688385 34642 upgrade_proto.cpp:90] Check failed: ReadProtoFromTextFile(param_file, param) Failed to parse NetParameter file: /workspace/AI/expression_v2/expression.prototxt
[TL] 2019/03/21 19:52:17.688827 [8 12 34642]*** Check failure stack trace: ***
[TL] 2019/03/21 19:52:17.689052 [8 12 34642] @ 0x7fc916efc84d google::LogMessage::Fail()
[TL] 2019/03/21 19:52:17.689222 [8 12 34642] @ 0x7fc916efe61c google::LogMessage::SendToLog()
[TL] 2019/03/21 19:52:17.689387 [8 12 34642] @ 0x7fc916efc43c google::LogMessage::Flush()
[TL] 2019/03/21 19:52:17.689550 [8 12 34642] @ 0x7fc916efef2e google::LogMessageFatal::~LogMessageFatal()
[TL] 2019/03/21 19:52:17.690197 [8 12 34642] @ 0x7fc91639a17e caffe::ReadNetParamsFromTextFileOrDie()
[TL] 2019/03/21 19:52:17.690515 [8 12 34642] @ 0x7fc91624f23c caffe::Net<>::Net()
[TL] 2019/03/21 19:52:17.690695 [8 12 34642] @ 0x7fc91733088f ai_init()
[TL] 2019/03/21 19:52:17.690865 [8 12 34642] @ 0x7fc917331ac9 general_classify_init
[TL] 2019/03/21 19:52:17.690893 [8 12 34642] @ 0x406c2b process()
[TL] 2019/03/21 19:52:17.690949 [8 12 34642] @ 0x437564 aicalc_poll()
[TL] 2019/03/21 19:52:17.690983 [8 12 34642] @ 0x405689 main
[TL] 2019/03/21 19:52:17.691576 [8 12 34642] @ 0x7fc9207e6b35 __libc_start_main
[TL] 2019/03/21 19:52:17.691649 [8 12 34642] @ 0x405b79 (unknown)

最核心的报错信息是Message type "caffe.PoolingParameter" has no field named "round_mode",这是因为我们现有运行平台使用的caffe版本较低,pooling层不支持round_mode参数。(之所以选择一个较低的caffe版本,则是因为最初做工程化的时候,最新版caffe不支持SSD模型)

一开始编译caffe的时候还发现了编译出现乱码的情况,通过命令export LC_ALL="C",去除所有本地化的设置,即可让编译正确执行。

2 caffe源码分析及修改

2.1 pooling层源码分析

对比新旧版本pooling_layer.hpp之后发现头文件的改动只是增加了一个字段:PoolingParameter_RoundMode round_mode_。

对比新旧版本pooling_layer.cpp之后发现cpp文件的改动也很小,只是根据round_mode参数决定对池化后的宽高取ceil还是floor。

2.2 caffe源码修改

改动1:用新版本caffe中的pooling_layer.hpp和pooling_layer.cpp文件替换旧版本caffe中的相应文件。

改动2:在caffe.proto文件的message PoolingParameter中追加如下代码:

// How to calculate the output size - using ceil (default) or floor rounding.enum RoundMode {CEIL = 0; FLOOR = 1; }optional RoundMode round_mode = 13 [default = CEIL];

使用make -j64重新编译caffe,编译完成后,得到新版的libcaffe.so.1.0.0,用最新so替代运行平台中的旧版本so,即可支持DenseNet了。

3 总结

修改流程:

  1. 改动pooling层的hpp和cpp文件
  2. 修改caffe.proto文件(因为涉及参数增加)
  3. 重新编译

Caffe 运行平台支持DenseNet模型相关推荐

  1. 全球最大智能模型“悟道”首次落地:数字人+终端AI助手,支持NVIDIA GTX单卡机运行百亿大模型

    作者 | 琰琰 悟道2.0,要怎么用起来? 连创"中国首个"和"世界最大"两项记录后,悟道大模型的落地应用成为业界关心的热点话题. GPT-3的问世掀起了一股& ...

  2. 【机器学习PAI实践十】深度学习Caffe框架实现图像分类的模型训练

    背景 我们在之前的文章中介绍过如何通过PAI内置的TensorFlow框架实验基于Cifar10的图像分类,文章链接:https://yq.aliyun.com/articles/72841.使用Te ...

  3. 如何在Hi3559A上运行自己的YOLOv3模型

    发现现在相关资源大多比较混乱,看起来比较难有头绪,入门难度比较大,所以单独整理并记录自己在3559A上的学习yolo模型的过程 此贴为索引贴,下为目录.博主正在加紧更新中.... 注:海思官方推荐的编 ...

  4. 构建深度学习框架运行平台

    构建深度学习框架运行平台 将为TensorFlow.PyTorch和TorchScript之外的元素构建一个简单的深度学习框架运行平台模型.将展示如何从Python和C++运行推理. 打包和推断接口还 ...

  5. 清华大学发布首个自动图机器学习工具包 AutoGL,开源易用可扩展,支持自定义模型...

    来源:机器之心本文约2800字,建议阅读6分钟如何应用自动机器学习 (AutoML) 加速图机器学习任务的处理? 清华大学发布全球首个开源自动图学习工具包:AutoGL (Auto Graph Lea ...

  6. libuv:多平台支持库-异步I / O

    http://libuv.org/ 目录 概述¶ 功能 文档 下载 安装 设计概述¶ 把手和请求¶ I / O循环 文件I / 概述¶ libuv是一个多平台支持库,主要关注异步I / O.它主要通过 ...

  7. 那些不熟知的系统 开发语言 虚拟机 运行平台

    突然觉得作为一个开发人员,嗯,虽然是刚入行不久的,但也可能正是如此,所以很多系统和开发语言都没有接触过,甚至是没有听说过. 对此汗颜,做个笔记,将每一个新了解的系统和语言记录下来,或许哪一天,可以拿来 ...

  8. SP服务商Java短信平台的软件模型和实现(吴宏杰,赵雷,杨季文,苏州大学计算机科学和技术学院)...

    1.    引言  近年来,随着短信增值业务的繁荣,以短信为基础的产业链逐渐形成.在这条产业链中,网络提供商(例如:中国移动.中国联通)作为网络平台的提供者,向SP服务商(Service Provid ...

  9. Cocos Creator 3D v1.0.2 正式发布,新增小游戏平台支持

    ​Hi,各位开发者,Cocos Creator 3D 为大家带来翘首以待的新平台和新功能支持,v1.0.2 已正式发布,欢迎大家移步官网下载使用! 升级之前请根据项目情况进行必要的技术评估和版本备份噢 ...

最新文章

  1. 从零开始用 Flask 搭建一个网站(二)
  2. numpy完整版总结
  3. dockerfile指定jvm参数
  4. 高速串行总线设计基础(三)SERDES的通用结构介绍
  5. ubuntu 编译内核并更换
  6. linux系统下的程序开发报告册,linux系统及应用应用开发实验报告册
  7. QT之error: cannot bind non-const lvalue reference of type ‘CBaowen’ to an rvalue of type ‘CBaowen
  8. 如何在AWS亚马逊云上运行Angular应用
  9. 通过Spring Integration和RabbitMQ获得高可用性的AMQP支持的消息通道
  10. vue 数组中嵌套的对象添加新属性--页面更新
  11. 计算机专业知识比喻,很好的计算机基础知识比喻
  12. JS编程练习题(javascript)
  13. graphpad两组t检验_如何用 GraphPad prism进行 t 检验?
  14. Python 小程序:计算24点
  15. 台式计算机开机风扇不转,电脑开机显卡风扇不转是怎么回事|电脑开机风扇不转的解决方法...
  16. Android之手机号码格式的正则表达式
  17. 针织毛衫的概念及设计
  18. 适合所有手环的app_Keep 手环评测:一只手环就能指导运动?Keep 想做你手腕上的魔鬼教练...
  19. 杜比dss200服务器重装,杜比dss200服务器恢复系统操作.pdf
  20. 关于关闭WPS锁屏屏保及设置电脑自动关闭显示屏及休眠的分享

热门文章

  1. ECLIPSE启动不了,报错org.eclipse.swt.SWTException: Invalid thread access
  2. 索引块与数据块的区别
  3. private 的访问权限
  4. 活动报名|“悟道之巅:AI创新应用大赛”发布会——体验未来技术,赢取百万奖金...
  5. ArXiv 2020 年 Top10 论文 | 智源社区AI周刊#054
  6. Robert Hoekman,Jr 继《一目了然》后的又一经典力作
  7. 2021年秋季学期“大数据能力提升项目”证书办理及领取通知
  8. 数据蒋堂 | 前半有序的大数据排序
  9. Python实例介绍正则化贪心森林算法(附代码)
  10. 700页的机器学习笔记火了!完整版开放下载