关闭裁剪功能_软件发布前的优化与裁剪:gflags和glog

本文介绍了如何在移动端优化软件,重点在于简化glog、移除gflags以及裁剪protobuf。针对glog,通过重新实现部分功能来减少库的大小。对于gflags,探讨了替代方案和在项目中的使用情况。同时,文章提到了protobuf的裁剪方法,如TensorFlow和Paddle-mobile的做法。最后,讨论了CMAKE中的编译类型设置,尤其是RelWithDebInfo模式在优化和调试之间的平衡。
摘要由CSDN通过智能技术生成

ffaf6e0f1264d5da1bc42978b5d27c05.png

因为最早期的框架如Caffe,先支持了X86平台如CUDA等,在设计之初并未考虑现如今的移动端场景,能怎样简化开发流程,有什么现成的库就拿来用。这也导致早期安装Caffe时,由于一堆依赖需要预先安装,相当费劲。

后来有了移动端的推理需要,Github上便有人对Caffe进行裁剪,比方下面这两个项目:sh1r0/caffe-android-lib: Porting caffe to android platform 和 solrex/caffe-mobile: Optimized (for size and speed) Caffe lib。

2017年中,看到过百度的手百团队《利用CNN实现无需联网的图像识别》的移动端IOS和安卓的AI报告,针对移动端内存、耗电量、图搜插件100KB大小限制、模型10MB大小限制、模型部署加密等问题,提出并落地了相关解决方案。 不过早期的思路,便是精简Caffe,比方做的工作就有:blas从openblas切换到cblas;裁剪glog;精简gflag;裁剪protobuf;移除backpropagation;并保留常见Operator,并对部分模块Blob,Net等进一步精简,Caffe原本37MB降为100KB大小。

移动端本身就够复杂了,因而有简化甚至是移除这些依赖库的要求,甚至为此开发新的框架。接上次发的《软件发布前的优化与裁剪:初识》,上次讲到我们可以在cmake ..后追加--graphviz=这个参数来打印编译的target依赖,以此作为裁剪的参考,还有strip命令等。这次记录下裁剪、移除gflagsglog等库的具体实践和想法。目录如下:

  1. 简化glog
  2. 移除gflags
  3. 裁剪protobuf
  4. CMAKE中的CMAKE_BUILD_TYPE
    1. CMAKE_BUILD_TYPE的设置方式
    2. CMAKE_BUILD_TYPE的四种模式

1. 简化glog

考虑到移动端对动态、静态库的轻量要求,比方ncnn-andorid-armv8静态库仅1.9MB,裁剪glog。其实说裁剪并不准确,实际中重新实现了有如下功能的logging

# 支持的函数:其实就是用到的glog中的函数(等效实现)
CHECK
CHECK_EQ
CHECK_NE
CHECK_LT
CHECK_LE
CHECK_GT
CHECK_GE

LOG(INFO)
LOG(WARNING)
LOG(ERROR)
LOG(FATAL)

VLOG(0~9): enable by `export GLOG_v&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值