热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

YOLOv3使用笔记——[CVPR2019]:ScratchDetTrainingSingleShotObjectDetectorsfromScratch

论文地址,https://arxiv.org/abs/1810.08425v3关于论文,可以看看https://zhuanlan.zhihu.com/p/59498319

论文地址,https://arxiv.org/abs/1810.08425v3

关于论文,可以看看https://zhuanlan.zhihu.com/p/59498319

该篇论文主要做两件事:

1、检测的backbone网络不再使用预训练模型

2、修改backbone为Root-ResNet

本文主要在darknet框架试验下Root-ResNet-18,未在公共数据集上验证,直接用在自己的数据集上,另外记录下不用预训练模型,从0训练的技巧,主要使用Gradual warmup。

1、修改Root-ResNet-18部分

backbone网络部分,作者认为检测和分类任务不同,一开始用7*7conv和max pooling,虽然可以减少计算量,但是在检测中意味着信息丢失。因此backbone部分相当于增加了计算量,但是在检测部分,32倍下采样之后减少通道数来减少一部分计算量,主要做了以下修改:

(a)去掉max pooling

(b)第一个conv层 stride由2改为1

(c)取代7*7conv为3个3*3conv

(d)检测部分通道数修改为128

(e)backbone网络和检测部分均使用BN层,使用大学习率,论文中为0.05,从0训练模型。

 

backbone网络
detection网络

 

在darknet上修改的Root-ResNet18.cfg,其中anchor为自己的数据集anchor

[net]
# Testing
# batch=1
# subdivisiOns=1
# Training
batch=64
subdivisiOns=16
" class="has" src="https://img.php1.cn/3cd4a/1eebe/cd5/ddcc574beb16294e.jpeg" />

 

从0训练的大前提是BN层,使用大学习率快速收敛。

在darknet中一开始使用0.05学习率,很快会出现loss NAN,需要做gradual wramup策略。

例如先采用0.0005学习率,迭代5个epoch,设置迭代次数n,且n*64=5*数据量,

例如4张卡学习率设置:

learning_rate=0.000125
burn_in=4000

迭代完后extract weights,

./darknet partial cfg/Root-Resnet.cfg Root-Resnet_final.weights warmup1.conv.50 50

在warmup1.conv.50模型上,将学习率*10,采用0.005学习率,再做一次warmup

learning_rate=0.00125
burn_in=4000

迭代完再做extract weights,获得warmup2.conv.50

最后在warmup2.conv.50上用大学习率0.05,设置好step,多训练几个epoch,

learning_rate=0.0125
burn_in=4000

最终迭代完,可以得到不差于使用预训练模型训练数据的效果。


推荐阅读
author-avatar
李波2602884584
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有