YOLOv3剪枝再升级!
点击我爱计算机视觉标星,更快获取CVML新技术
52CV曾经向大家推荐:
YOLOv3模型剪枝,瘦身80%,提速100%,精度基本不变
该项目也说明在使用YOLOv3进行单类目标检测时,模型存在大量冗余,剪枝可以较好的减少参数、提高速度。
今天向大家推荐新开源的YOLOv3-complete-pruning则给了我们更多的选择,不仅代码完备,而且优于之前的方法。
本文为52CV群友即项目开发者“有点冷”的投稿,感谢开源分享!
项目介绍
本项目以ultralytics/yolov3(https://github.com/ultralytics/yolov3)为YOLOv3的Pytorch实现,并在YOLOv3-model-pruning(https://github.com/Lam1360/YOLOv3-model-pruning)剪枝的基础上,推出了4个YOLO-v3剪枝版本。(在此致谢两位)
剪枝方式 | 优点 | 缺点 |
---|---|---|
正常剪枝 | 不对shortcut剪枝,拥有可观且稳定的压缩率,无需微调。 | 压缩率达不到极致。 |
极限剪枝 | 极高的压缩率。 | 需要微调。 |
规整剪枝 | 专为硬件部署设计,剪枝后filter个数均为8的倍数,无需微调。 | 为规整牺牲了部分压缩率。 |
Tiny剪枝 | 稳定的压缩率。 | 由于Tiny本来已很小,压缩率中规中矩。 |
项目特点
1.采用的YOLO-v3实现较为准确,mAP相对较高。
模型 | 320 | 416 | 608 |
---|---|---|---|
YOLOv3
|
51.8 (51.5) | 55.4 (55.3) | 58.2 (57.9) |
YOLOv3-tiny
|
29.0 | 32.9 (33.1) | 35.5 |
2.提供对YOLOv3及Tiny的多种剪枝版本,以适应不同的需求。
3.剪枝后保存为.weights格式,可在任何框架下继续训练、推理,或以图像视频展示。
4.目前支持情况
功能 | 单卡 | 多卡 |
---|---|---|
正常训练 | √ | √ |
稀疏化 | √ | √ |
正常剪枝 | √ | √ |
规整剪枝 | √ | √ |
极限剪枝(shortcut) | √ | √ |
Tiny剪枝 | √ | √ |
环境搭建
1.由于采用ultralytics/yolov3的YOLO实现,环境搭建见ultralytics/yolov3。这里重复介绍一下:
numpy
torch >= 1.1.0
opencv-python
tqdm
可直接pip3 install -U -r requirements.txt
搭建环境,或根据该.txt文件使用conda搭建。
数据获取
依然采用oxford hand数据集
1.下载数据集,并解压至/data目录下,得到hand_dataset文件夹。
2.执行python converter.py
,生成 images、labels 文件夹和 train.txt、valid.txt 文件。
3.获取YOLO预训练权重,/weights文件夹下执行bash download_yolov3_weights.sh
,或自行下载。
4.至此,数据部分完成。
模型训练
1.正常训练
python3 train.py --data data/oxfordhand.data --batch-size 32 --accumulate 1 --weights weights/yolov3.weights --cfg cfg/yolov3-hand.cfg
2.稀疏化训练
-sr
开启稀疏化,--s
指定稀疏因子大小,--prune
指定稀疏类型。
其中:
--prune 0
为正常剪枝和规整剪枝的稀疏化
--prune 1
为极限剪枝的稀疏化
--prune 2
为Tiny剪枝的稀疏化
python3 train.py --data data/oxfordhand.data --batch-size 32 --accumulate 1 --weights weights/yolov3.weights --cfg cfg/yolov3-hand.cfg -sr --s 0.001 --prune 0
3.模型剪枝
正常剪枝
python3 normal_prune.py
规整剪枝
python3 regular_prune.py
极限剪枝
python3 shortcut_prune.py
Tiny剪枝
python3 prune_tiny_yolo.py
需要注意的是,这里需要在.py文件内,将opt内的cfg和weights变量指向第2步稀疏化后生成的cfg文件和weights文件。此外,可通过增大代码中percent的值来获得更大的压缩率。(若稀疏化不到位,且percent值过大,程序会报错。)
推理展示
这里,我们不仅可以使用原始的YOLOV3用来推理展示,还可使用我们剪枝后的模型来推理展示。(修改cfg,weights的指向即可)
python3 detect.py --source ...
Image:
--source file.jpg
Video:
--source file.mp4
Directory:
--source dir/
Webcam:
--source 0
RTSP stream:
--source rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa
HTTP stream:
--source http://wmccpinetop.axiscam.net/mjpg/video.mjpg
例如:
python3 detect.py --cfg cfg/prune_0.8_yolov3-hand.cfg --weights weights/yolov3_hand_pruning_percent0.8.weights --data data/oxfordhand.data --source test.jpg
剪枝效果
以下数据除极限剪枝外,均未微调。
YOLO-v3剪枝
模型 | 参数量 | 模型体积 | 压缩率 | 耗时 | mAP |
---|---|---|---|---|---|
Baseline(416) | 61.5M | 246.4MB | 0% | 11.7ms | 0.7924 |
正常剪枝 | 10.9M | 43.9MB | 82.2% | 5.92ms | 0.7712 |
规整剪枝 | 15.31M | 61.4MB | 75.1% | 6.01ms | 0.7832 |
极限剪枝 | 7.13M | 28.6MB | 88.4% | 5.90ms | 0.7382 |
YOLO-v3-Tiny剪枝
模型 | 参数量 | 模型体积 | 压缩率 | 耗时 | mAP |
---|---|---|---|---|---|
Baseline(416) | 8.7M | 33.1MB | 0% | 2.2ms | 0.6378 |
Tiny剪枝 | 4.4M | 16.8MB | 40.1% | 2.0ms | 0.6132 |
互动
1.如何获得较高的压缩率?
提高压缩率的关键在于稀疏化训练,可以加大--s
的值并迭代训练多次等手段。
2.我的压缩率比表格中更高!
以上数据仅仅是测试了不到20次的结果,如果有同学的压缩率更高,欢迎在评论区分享!
3.程序报错怎么办?
YOLOv3报错
由于采用了ultralytics/yolov3为YOLOv3的Pytorch实现,因此这类错误可跳转至上述链接询问。
剪枝错误
一定要在本评论区留言,我会尽快修正!
开源地址:
https://github.com/coldlarry/YOLOv3-complete-pruning
模型压缩与部署交流群
关注最新最前沿的神经网络模型压缩、知识蒸馏、轻量级网络设计、端侧部署技术,扫码添加CV君拉你入群,(如已为CV君其他账号好友请直接私信)
(请务必注明:部署)
喜欢在QQ交流的童鞋,可以加52CV官方QQ群:805388940。
(不会时时在线,如果没能及时通过验证还请见谅)
长按关注我爱计算机视觉
YOLOv3剪枝再升级!相关推荐
- x10i升级android4.0,智再升级 Xperia X10i升Android 2.3
智再升级 Xperia X10i升Android 2.3 2011年08月04日 16:08作者:LEE编辑:李军工文章出处:泡泡网原创 分享 近日索尼爱立信官方表示,从即日起中国大陆地区用户可通过官 ...
- qtdesigner右击按钮没有 to slot_或添加“力感按钮”再升级,Apple Pencil会更“能打”?...
[钉科技编译]"I have a pen/I have an apple/Ah apple pen",钉科技编辑写到的这些"歌词",看上去是不是很熟悉?对了,这 ...
- 性能提升3倍、时延降低70%,阿里云企业级存储ESSD云盘再升级!
9月22日,阿里云存储年度新品发布会上,阿里云基础产品资深产品总监陈起鲲发布了其全球领先的旗舰级块存储产品ESSD的两款新规格(ESSD Auto PL.ESSD PL-X),并宣布了新增的多项企业级 ...
- 金山云发布全新Serverless产品 云原生基础设施再升级
随着企业数字化转型的深入,云计算正全面步入2.0时代,即为云而生的阶段.以云原生为代表的理念,已经成为进一步释放云计算价值的核心推动力. 1月6日,金山云举行了云原生媒体沟通会,金山云副总裁.合伙人钱 ...
- 互联网日报 | TikTok将开启Pre-IPO融资;菜鸟裹裹战略再升级;滴滴中国西区总部落户重庆江北...
今日看点 ✦ 字节跳动:TikTok Pre-IPO轮融资不排除还会引入其他投资者 ✦ 腾讯:Wecom是企业微信海外版,和WeChat是完全不同的产品 ✦ 菜鸟裹裹宣布战略再升级,未来一年服务用户翻 ...
- 牧马人鼠标g13鼠标宏_经典再升级:达尔优牧马人五代游戏鼠标
经典再升级:达尔优牧马人五代游戏鼠标 牧马人系列可以说是达尔优的翻身之作,从一个名不见经传的小厂到现在有多见地,多款产品得到消费者的认可,或多或少是因为达尔优的经典牧马人系列带来的口碑与销量. 而牧马 ...
- oracle delphi唱盘,经典再升级 Oracle Delphi MK VI Gen 2
加拿大Oracle最出名的产品,莫过于Delphi黑胶唱盘,Delphi在1979年首度问世,外观设计的基本模样,就和现在Delphi MK VI Gen 2几乎一模一样,三点式避振外加铝合金一体成型 ...
- ofo 回应假装老外秒退押金;董明珠雷军十亿赌约到期;高通苹果摩擦再升级 | 极客头条...
「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 快讯速知 董 ...
- 安卓3d游戏开发引擎_鲁大师安卓3D引擎更新,跑分测试精准度再升级
去年十月份的时候,鲁大师曾发布了针对安卓性能跑分的重大升级版本v9.0.与国内知名游戏工作室"西山居"合作,更换了全新的Unity 3D渲染引擎,又将原有的测试项目进行了部分精简, ...
最新文章
- 百度“如流”开启智能办公模式,“四两拨千斤”开启差异化模式
- 开放下载!《一站式大数据开发治理DataWorks使用宝典》
- 有意思的C语言运算符
- jquery GET POST
- azw3转换为pdf_怎么合并几个PDF为一个?快用这个PDF转换器!
- java泛型T和通配符问号的区别
- [译]记一次Kotlin官方文档翻译的PR(内联类)
- 计算机专业代码933,数学类专业代码
- uni-app开发环境配置
- Qt视频直播软件--项目实战(Day5)
- Linux read系统调用
- matlab美国标准大气,国际标准大气(ISA)
- 0723数组复习 堆区 动态数组
- 错误请联系管理员文件 index.php,GS登录报错,提示【访问权限失败,请联系管理员处理】...
- CocosCreator角色动态更换武器实现
- TorchScript简介
- 翻译Allegorithmic的文档《THE PBR GUIDE - PART 1》
- 国外设计博客小组收集
- python----语句
- 苹果蓝牙连接不上是什么原因_无线网连接不上 原因很多,总有一个办法解决你的问题...
热门文章
- Java类初始化及实例化过程
- php前端路由权限,SaaS-前端权限控制
- 计算机工程师英语介绍,数据库系统工程师计算机专业英语(四).doc
- unixODBC配置文件
- 农行软开是总行编制吗_2021农行总行校招笔试来啦,你知道农行笔试都考些什么吗?...
- android不能在主线程,android.os.NetworkOnMainThreadException 在4.0之后谷歌强制要求连接网络不能在主线程进行访问(示例代码)...
- php5.6怎么安装,php5.6的安装
- mysql win10 无法配置文件_MySQL设置文件无法更改的处理方案详细说明(Win10)
- python 堆栈_利用Python列表实现堆栈(二):实现
- from rfc 2068 hypertext怎么解决_“饮水思源”英语怎么翻译