Yolo-v3 Slim

Yolo-v3模型精简化原因

最近一直在海思芯片3519A芯片基础架构上使用Yolo-v3作为检测网络进行目标检测研究,但即便使用NNIE进行硬件矩阵加速单元运算,也很难做到实时性。当Yolo-v3有80个类别需要进行检测时需要140ms(三层Yolo层和53层卷积层运算所耗时几乎相等)。虽然Yolo-v3-Tiny或Moblie-SSD速度较快(32ms和18ms),但对于小物体检测漏检率和误报率还是较高。所以只能从Yolo-v3层剪枝,通道剪枝,知识蒸馏等三方面入手压缩模型减少检测时间。其参考的文献和代码如下所示:

文章

  1. SlimYOLOv3: Narrower, Faster and Better for Real-Time UAV Applications
  2. Learning Efficient Convolutional Networks Through Network Slimming
  3. Learning Efficient Object Detection Models with Knowledge Distillation
  4. Distilling the Knowledge in a Neural Network

Github

  1. https://github.com/PengyiZhang/SlimYOLOv3
  2. https://github.com/tanluren/yolov3-channel-and-layer-pruning

Yolo-v3模型Prune

压缩模型最常见的三种手段是:层剪枝,通道剪枝,知识蒸馏。层剪枝和通道剪枝原理基于bn层Gmma系数进行通道剪枝。知识蒸馏具体介绍:https://www.cnblogs.com/shixiangwan/p/9015010.html。今天主要讲解
前者使用层剪枝和通道剪纸对模型进行压缩。其大致流程如下所述:首先在Yolo-v3网络中训练自己数据集达到理想精度,然后再进行稀疏训练(重中之重),其次对需要剪枝的层使用对应的BN gamma系数进行大幅压缩,对不重要的通道或者层进行剪枝,最后如果当剪枝后模型精度降低过多,可进行微调恢复精度。

使用自己数据集训练到理想精度的过程,就不再详细描述。详细可见DarkNetAB的Github仓,此作者已经进行详细描述。而博主只是将自己将自己在稀疏化训练过程中碰到的问题及解决方法进行大概简述,方便以后碰上这种问题有迹可寻。

1.Run Python Train 的过程中出现:


UnboundLocalError: Caught UnboundLocalError in DataLoader worker process 0.
Original Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/worker.py", line 178, in _worker_loop
    data = fetcher.fetch(index)
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch
    data = [self.dataset[idx] for idx in possibly_batched_inde
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值