![12a1135b4aa80fb5522ed44e66b69c0b.png](https://img-blog.csdnimg.cn/img_convert/12a1135b4aa80fb5522ed44e66b69c0b.png)
下列代码均在pytorch1.4版本中测试过,确认正确无误。
ImageNet
ImageNet是一个用于图像分类的超大数据集,它的官方网站是:http://www.image-net.org/ 。在cv领域,使用模型在ImageNet上的预训练参数来训练其他任务已经是一种普遍的做法。本文的目的是从零开始介绍如何在ImageNet上训练模型,就以最常用的ResNet50为例。 由于ImageNet数据集每年都会更新,通常我们指的ImageNet数据集是ILSVRC2012,该数据集共有1000个类,120万张训练集图片和5万张验证集图片。你可以在官方网站下载该数据集,也可以从我的百度云下载:链接:https://pan.baidu.com/s/1ROYJwexTvXN9bCzuyAYSuw 提取码:yn5z 。 下载后解压,文件夹组织结构如下:
ILSVRC2012
这样数据集就处理好了。
ResNet网络结构
为了简便起见,我们使用pytorch官方提供的ResNet实现,但在加载模型处稍作修改。pytorch官方提供了ResNet的预训练模型,但该模型同时保存了模型结构和模型参数。官方模型的点数如下可以在这里查到:https://github.com/facebookarchive/fb.resnet.torch 注意输入均为224x224。
经过修改后的ResNet实现代码如下。注意我没有修改ResNet的网络结构,仅仅增加了ResNet34_half和ResNet50_half(即ResNet34和ResNet50 channel数减半)。另外,由于下面的训练中我保存的pth文件将只保存模型参数而不保存模型结构,所以对加载模型部分进行了修改,这样我们可以从本地加载训练好的pth模型参数,修改网络结构也很方便。当然,在ImageNet上训练ResNet时并不需要加载预训练模型。
"""
由于知乎文章字数限制,后面的训练代码与训练结果我们将在第2部分讲解。
所有代码已上传到本人github repository:
zgcr/pytorch-ImageNet-CIFAR-COCO-VOC-traininggithub.com本文也同时放在了我的CSDN博客上:
base model第一弹:在ImageNet上训练ResNetblog.csdn.net![19e73398f9dd3262651dd5098d233778.png](https://img-blog.csdnimg.cn/img_convert/19e73398f9dd3262651dd5098d233778.png)