caffe在ImageNet数据集上训练残差网络Resnet

ImageNet数据集作为图像分类最经典的公开数据集,对深度学习发展起到了很大的贡献,基本经典的网络模型都会在ImageNet上训练对比。这里使用ILSVRC2012数据集从头训练一个resnet18模型。

因为条件有限,使用自己的RTX2060s单卡训练。。。比起Inception系列动不动就几十块GPU,真的是心酸。

关于多卡的训练,推荐大家阅读论文accurate ,large minibatch SGD:Training ImageNet in 1 Hour。

论文提到了一些调参的技巧很有意义,包括batch size和lr的一些关系,提出常用的warm up进行前期训练。

这里我用单卡训练了5天时间,获得了一个还不错的结果:

Single-crop (224x224) validation error rate

Network Top-1 error Top-5 error
KaimingHe / /
FAIR 30.43 10.76
our 30.8625 11.6625

原作者KaimingHe的resnet实现:https://github.com/KaimingHe/deep-residual-networks

Facebook AI Research (FAIR):https://github.com/facebookarchive/fb.resnet.torch

我训练的Top-1比facebook的低了0.43%,可能是因为数据增强或者迭代次数原因吧,这里我整个数据仅仅迭代了60epoch,数据增强仅仅用了随机裁剪和水平翻转。

数据集介绍

下载的文件主要包括以下几个文件:

ILSVRC2012_img_train.tar
ILSVRC2012_img_val.tar
ILSVRC2012_img_test.tar
ILSVRC2012_devkit_t12.gz

前三个为图像压缩包,分别对应train / val / test三个子集。最后一个为数据说明相关文档。

训练集包含1,282,167张图片,1000类,147 GB;

测试集包含了50,000张图片,6.7 GB;

测试集包含了100,000张图片,13.6 GB;

ImageNet还提供了一个开发工具包ILSVRC2012_devkit_t12.tar.gz,是对ILSVRC2012数据集的详细讲解,提交比赛结果的要求,和对结果评价的代码。

LSVRC2012_img_train.tar解压后是1000个tar文件,每个tar文件表示1000个分类中的一个类。需要对这1000个tar文件再次解压。在train目录下执行unzip.sh文件,最后得到1000个文件夹。每个文件夹中是该类的图片。ILSVRC2012_img_val.tar解压后的文件夹包含了所有的验证集图片。

我是从网上别人提供的百度网盘下载的。

数据集处理

主要进行了两种不同的选择,第一种是图片resize到256×256,第二种是保持比例短边resize到256,一般论文都是用的第二种,实际训练发现第二种比第一种Top-1高3%左右,因为ImageNet数据集比较大,任何细微的变化都会有明显的差距,比如优化方式的选择、lr的变化方式、数据增强等等。

这里我用caffe自带的将数据转为LMDB进行训练,训练的时候随机从256×N的图片截取224*224,随机翻转用于训练。

训练过程

训练过程如图

我的batch size设置的64,红色和紫色分别是验证集Top-1和Top-5变化,下面的是training和val的loss变化。

更多尝试

目前在尝试更多的数据增强的效果,对resnet18加入SE block进行对比。

代码

https://github.com/midasklr/resnet-caffe

猜你喜欢

转载自blog.csdn.net/IEEE_FELLOW/article/details/106865534