YOLO3模型剪枝系列(一)环境的搭建

前言

现在深度学习算法模型的剪枝(prune)和压缩正逐渐成为一个热点。毕竟,AI应用落地最终都会落实到模型在各个平台上的部署和运行。但是现有复杂些功能的算法模型都存在一个实时性问题。 就以yolov3完整版算法模型为例子,在intel cpu上调用openv DNN API来推理它大概需要1秒左右,在海思3519av100上运行,光推理就要有140ms。 此外,复杂模型除了推理速度慢的缺点外,还有就是模型本身size也很大,yolo3完整版模型就有260多MB,这意味着模型加载时间长,且消耗内存大。 

正是因为这些缺点,越来越多的人开始研究 如何在保证准确度条件下来对算法模型进行压缩和剪枝。注意,这里的关键词是保证准确度。如果没有这个条件,那就不用费劲研究剪枝了,直接用模型的变体,比如yolo3-tiny, mobilenetv3-yolo3等。 yolo3-tiny在海思3519a上只需要20ms左右的推理时间,完全满足实时性要求。 但是实际使用就知道,比较复杂的物体识别,比如说识别种类数目比较多,图像上有很多密集型小目标等,Yolo3-tiny等变体小模型还是不能满足要求。 

环境搭建

现在模型剪枝的方向有很多,我参考的开源项目是这个:https://github.com/tanluren/yolov3-channel-and-layer-pruning

其参考的paper我大概看了一下,原理相对还是算比较简单的,就是想对每个conv channel通道做scale,然后对scale factor做lasso回归(L1 Regularization),看看最终哪些channel的scale facctor很小,接近于0,如果某些channel的scale factor很小,那说明它们对模型output没啥贡献,可以考虑把它们从网络模型去除掉。注意,是把网络模型中整条通道上参数(从输入到输出)都去除掉。论文还提到,由于BN层中刚好有scale因子gamma,而且BN是现代深度学习模型的标配,使用非常普遍,所以方便起见,就直接对gamma系数来做L1正则化。

回到上面提到的开源项目,其主要思路就是稀疏训练->剪枝->fine tune训练。 必要的话,可以对这三个环节进行多次迭代。如何判断需要几次迭代,这里面有些经验成分。 

关于该开源项目脚本运行前的环境搭建,它需要使用python3.x以上的版本,然后使用pip3 install来装下面的软件。下面这个截图就是该项目根目录下的requirements.txt内容。

YOLO3模型剪枝系列(一)环境的搭建_第1张图片

torch需要装1.2以上的版本,其安装命令: pip3 install torch==1.2

torch包很大, 大概有700多MB,下载还是需要很长时间。 

接下来就可以运行稀疏训练脚本了,但是遇到了下面这个问题:

File "train.py", line 487, in 
    from torch.utils.tensorboard import SummaryWriter
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/tensorboard/__init__.py", line 4, in 
    raise ImportError('TensorBoard logging requires TensorBoard with Python summary writer installed. '
ImportError: TensorBoard logging requires TensorBoard with Python summary writer installed. This should be available in 1.14 or above.

 看log提示说,torch1.14以上的版本有这个问题,但是我明明装的是torch1.2。 据网上说,torch1.2有bug,建议装最新的torch就可以避免这个问题。 这个说法有待考证,希望知道的朋友给我说一声。 

最后我的解决方法是, 另外安装了tensorboardX, 其命令:pip3 install tensorboardX

另外,将train.py中的代码:

     from torch.utils.tensorboard import SummaryWriter

改成:

        from tensorboardX import SummaryWriter

就ok了。  

 

 

 

你可能感兴趣的:(深度学习)