← 开源
Lam1360

YOLOv3-model-pruning

在 oxford hand 数据集上对 YOLOv3 做模型剪枝(network slimming)

InfrastructureModel optimizationPython
在 GitHub 打开
增长势头
+024 小时新增 Star0.0%
1.68k
Star
426
Fork
+1
本周
1
贡献者
创建于 2019-06-28 · 更新于 2026-10-13 · 今日第 9708 名
主要开发者
Lam1360

Lam1360/YOLOv3-model-pruning 排名第 9,708,有 1,676 个星标。

同类别比较

Lam1360/YOLOv3-model-pruning 排名第 9,708,此处有 8 个同类条目;NVIDIA/nccl-tests 排名第 9,710。

同类别比较
名称排名指标
theopenco/llmgateway9,692
语言:
TypeScript
星标数:
1,687
分叉数:
197
简介:
Route, manage, and analyze your LLM requests across multiple providers with a unified API interface.
open-mmlab/mmrazor9,694
语言:
Python
星标数:
1,685
分叉数:
246
简介:
OpenMMLab Model Compression Toolbox and Benchmark.
huggingface/swift-coreml-transformers9,696
语言:
Swift
星标数:
1,683
分叉数:
173
简介:
Swift Core ML 3 implementations of GPT-2, DistilGPT-2, BERT, and DistilBERT for Question answering. Other Transformers coming soon!
replicate/keepsake9,700
语言:
Python
星标数:
1,681
分叉数:
74
简介:
Version control for machine learning
NVIDIA/nccl-tests9,710
语言:
Cuda
星标数:
1,675
分叉数:
412
简介:
NCCL Tests
YanWenKun/ComfyUI-Docker9,712
语言:
Dockerfile
星标数:
1,675
分叉数:
236
简介:
🐳Dockerfile for 🎨ComfyUI. | 容器镜像与启动脚本
plasticityai/magnitude9,718
语言:
Python
星标数:
1,674
分叉数:
123
简介:
A fast, efficient universal vector embedding utility package.
kubeshop/testkube9,733
语言:
Go
星标数:
1,669
分叉数:
180
简介:
☸️ The Open Testing Platform for AI-Driven Engineering Teams
关键参数与规格
关键参数与规格
参数值
语言Python
类别Infrastructure
子类别Model optimization
关键词Computer vision, Pruning
星标数1,676
分叉数426
贡献者1
创建日期2019-06-28
更新日期2026-10-13
1 天星标数0
7 天星标数1
排名9,708
上次排名9,750
排名变化42
7 天星标排名9,681
上次 7 天星标排名9,737
7 天星标排名变化56
总星标排名7,374
上次总星标排名7,368
总星标排名变化-6
国家China
README 摘录

YOLOv3-model-pruning 用 YOLOv3 模型在一个开源的人手检测数据集 oxford hand 上做人手检测,并在此基础上做模型剪枝。 对于该数据集,对 YOLOv3 进行 channel pruning 之后,模型的参数量、模型大小减少 80% ,FLOPs 降低 70%,前向推断的速度可以达

到原来的 200%,同时可以保持 mAP 基本不变。 0及以上 YOLOv3 的实现参考了 eriklindernoren 的 PyTorch-YOLOv3 ,因此代码的依赖环境也可以参考其 repo 数据集准备 1. 训练集中一共有 4807 张图 片,测试集中一共有 821 张图片 正常训练(Baseline

) 剪枝算法介绍 本代码基于论文 Learning Efficient Convolutional Networks Through Network Slimming (ICCV 2017) 进行改进实现的 channel pruning算法,类似的代码实现还有这个 yolov3-network-slimming。 原始论文中的算法是针对分类模型的,基于 BN 层的 gamma 系数进行剪枝的。 剪枝算法

的大概步骤 以下只是算法的大概步骤,具体实现过程中还要做 s 参数的尝试或者需要进行迭代式剪枝等。 下图为对部分卷积层进行剪枝前后通道数的变化: 部分卷积层的通道数大幅度减少 2

. 7722 | | Finetune (416) | 同上 | 同上 | 同上 | 同上 | 0. 7750 | 加入稀疏正则项之后,mAP 反而更高了(在实验过程中发现,其实 mAP上下波动 0. 将 prune 后得到的模型进行 finetune 并没有明显的提升,因此剪枝三步可以直接简化成两步。 剪枝

前后模型的参数量、模型大小降为原来的 1/6 ,FLOPs 降为原来的 1/3,前向推断的速度可以达到原来的 2 倍,同时可以保持 mAP 基本不变。 *需要明确的是,上面表格中剪枝的效果是只是针对该数据集的

,不一定能保证在其他数据集上也有同样的效果

常见问题

记录了多少星标和分叉?

Lam1360/YOLOv3-model-pruning 有 1,676 个星标和 426 个分叉。

仓库排名是多少?

Lam1360/YOLOv3-model-pruning 排名第 9,708。

记录的语言和类别是什么?

Lam1360/YOLOv3-model-pruning 有 1,676 个星标,语言为 Python,类别为 Infrastructure。

哪个仓库排名最接近?

Lam1360/YOLOv3-model-pruning 与 NVIDIA/nccl-tests 比较,后者排名第 9,710,有 1,675 个星标。

README

YOLOv3-model-pruning

用 YOLOv3 模型在一个开源的人手检测数据集 oxford hand 上做人手检测,并在此基础上做模型剪枝。对于该数据集,对 YOLOv3 进行 channel pruning 之后,模型的参数量、模型大小减少 80% ,FLOPs 降低 70%,前向推断的速度可以达到原来的 200%,同时可以保持 mAP 基本不变。

环境

Python3.6, Pytorch 1.0及以上

YOLOv3 的实现参考了 eriklindernoren 的 PyTorch-YOLOv3 ,因此代码的依赖环境也可以参考其 repo

数据集准备

  1. 下载数据集,得到压缩文件
  2. 将压缩文件解压到 data 目录,得到 hand_dataset 文件夹
  3. 在 data 目录下执行 converter.py,生成 images、labels 文件夹和 train.txt、valid.txt 文件。训练集中一共有 4807 张图 片,测试集中一共有 821 张图片

正常训练(Baseline)

python train.py --model_def config/yolov3-hand.cfg

剪枝算法介绍

本代码基于论文 Learning Efficient Convolutional Networks Through Network Slimming (ICCV 2017) 进行改进实现的 channel pruning算法,类似的代码实现还有这个 yolov3-network-slimming。原始论文中的算法是针对分类模型的,基于 BN 层的 gamma 系数进行剪枝的。

剪枝算法的大概步骤

以下只是算法的大概步骤,具体实现过程中还要做 s 参数的尝试或者需要进行迭代式剪枝等。

  1. 进行稀疏化训练

    python train.py --model_def config/yolov3-hand.cfg -sr --s 0.01
    
  2. 基于 test_prune.py 文件进行剪枝,得到剪枝后的模型

  3. 对剪枝后的模型进行微调

    python train.py --model_def config/prune_yolov3-hand.cfg -pre checkpoints/prune_yolov3_ckpt.pth
    

剪枝前后的对比

  1. 下图为对部分卷积层进行剪枝前后通道数的变化:

    部分卷积层的通道数大幅度减少

  2. 剪枝前后指标对比:

    参数数量 模型体积 Flops 前向推断耗时(2070 TI) mAP
    Baseline (416) 61.5M 246.4MB 32.8B 15.0 ms 0.7692
    Prune (416) 10.9M 43.6MB 9.6B 7.7 ms 0.7722
    Finetune (416) 同上 同上 同上 同上 0.7750

    加入稀疏正则项之后,mAP 反而更高了(在实验过程中发现,其实 mAP上下波动 0.02 是正常现象),因此可以认为稀疏训练得到的 mAP 与正常训练几乎一致。将 prune 后得到的模型进行 finetune 并没有明显的提升,因此剪枝三步可以直接简化成两步。剪枝前后模型的参数量、模型大小降为原来的 1/6 ,FLOPs 降为原来的 1/3,前向推断的速度可以达到原来的 2 倍,同时可以保持 mAP 基本不变。需要明确的是,上面表格中剪枝的效果是只是针对该数据集的,不一定能保证在其他数据集上也有同样的效果

  3. 剪枝后模型的测试:

    Prune 模型的权重已放在百度网盘上 (提取码: gnzx),可以通过执行以下代码进行测试:

    python test.py --model_def config/prune_yolov3-hand.cfg --weights_path weights/prune_yolov3_ckpt.pth --data_config config/oxfordhand.data --class_path data/oxfordhand.names --conf_thres 0.01
    
排名相邻
同类项目