Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Oneflow-Inc
OneFlow-Benchmark
提交
4abe0e38
O
OneFlow-Benchmark
项目概览
Oneflow-Inc
/
OneFlow-Benchmark
上一次同步 2 年多
通知
1
Star
92
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
OneFlow-Benchmark
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4abe0e38
编写于
7月 12, 2020
作者:
F
Flowingsun007
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refine resnet50 readme
上级
708ba37b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
63 addition
and
85 deletion
+63
-85
Classification/cnns/README.md
Classification/cnns/README.md
+63
-85
未找到文件。
Classification/cnns/README.md
浏览文件 @
4abe0e38
## 简介 Introduction
## 简介 Introduction
##
#
图像分类与CNN
## 图像分类与CNN
**图像分类**
是指将图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法,是计算机视觉中其他任务,比如目标检测、语义分割、人脸识别等高层视觉任务的基础。
**图像分类**
是指将图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法,是计算机视觉中其他任务,比如目标检测、语义分割、人脸识别等高层视觉任务的基础。
...
@@ -8,18 +8,44 @@ ImageNet大规模视觉识别挑战赛(ILSVRC),常称为ImageNet竞赛,
...
@@ -8,18 +8,44 @@ ImageNet大规模视觉识别挑战赛(ILSVRC),常称为ImageNet竞赛,
在2012年的ImageNet竞赛中,深度卷积网络AlexNet横空出世。以超出第二名10%以上的top-5准确率,勇夺ImageNet2012比赛的冠军。从此,以 CNN(卷积神经网络) 为代表的深度学习方法开始在计算机视觉领域的应用开始大放异彩,更多的更深的CNN网络被提出,比如ImageNet2014比赛的冠军VGGNet, ImageNet2015比赛的冠军ResNet。
在2012年的ImageNet竞赛中,深度卷积网络AlexNet横空出世。以超出第二名10%以上的top-5准确率,勇夺ImageNet2012比赛的冠军。从此,以 CNN(卷积神经网络) 为代表的深度学习方法开始在计算机视觉领域的应用开始大放异彩,更多的更深的CNN网络被提出,比如ImageNet2014比赛的冠军VGGNet, ImageNet2015比赛的冠军ResNet。
### 使用说明
OneFlow-Benchmark下的cnn仓库目前已支持resnet50、vgg、alexnet等经典的cnn模型,未来会陆续添加新的cnn模型。这些cnn模型共享一套训练、验证和推理代码,您只需要指定模型,即可使用一套代码完成这些cnn网络模型的训练、测试和验证。
OneFlow-Benchmark下的cnn仓库目前已支持resnet50、vgg、alexnet等经典的cnn模型,未来会陆续添加新的cnn模型。这些cnn模型共享一套训练、验证和推理代码,您只需要指定模型,即可使用一套代码完成这些cnn网络模型的训练、测试和验证。
#### 1.克隆此仓库
## 快速开始 Quick Start
```
shell
git clone https://github.com/Oneflow-Inc/OneFlow-Benchmark
### 准备工作 Requirements
cd
./OneFlow-Benchmark/Classification/cnns
```
别担心,使用OneFlow非常容易,只要准备好下面三步,即可开始OneFlow的图像识别之旅。
-
安装OneFlow。
-
直接通过pip安装:
`pip install oneflow`
(TODO:确定我们的pip源是否做好,问caishenghang)
-
其他安装方式:参考
[
这里
](
XXX
)
(TOOD:待补充链接,链接到编译安装的文档说明) 。
-
下载
[
OneFlow-Benchmark
](
https://github.com/Oneflow-Inc/OneFlow-Benchmark/tree/of_develop_py3/cnn_benchmark
)
仓库。
`git clone git@github.com:Oneflow-Inc/OneFlow-Benchmark.git`
-
准备数据集(可选)
-
下载示例数据集:
`wget https://oneflow-public.oss-cn-beijing.aliyuncs.com/datasets/imagenet_ofrecord_example/part-00000`
-
或者:制作完整OFRecord格式的ImageNet数据集(见下文进阶部分)
-
再或者:直接使用虚拟“合成数据”。
**关于数据集的说明:**
#### 2.训练&验证
> 1)本文的展示的代码中,使用OFRcord格式的数据集可以提高数据加载效率(但这非必须,参考[数据输入](http://183.81.182.202:8000/basics_topics/data_input.html),oneflow支持直接加载numpy数据)。
>
> 2)为了使读者快速上手,我们提供了一个小的示例数据集。直接下载,即可快速开始训练过程。读者可以在熟悉了流程后,可以参考数据集制作部分,制作完整的数据集。
>
> 3)“合成数据”是指不通过磁盘加载数据,而是直接在内存中生成一些随机数据,作为网络的数据输入源。
### 1.训练&验证
```
shell
```
shell
sh train.sh
sh train.sh
...
@@ -55,7 +81,7 @@ sh train.sh
...
@@ -55,7 +81,7 @@ sh train.sh
-
--model 使用的模型
-
--model 使用的模型
###
# 3
.推理
###
2
.推理
```
shell
```
shell
sh inference.sh
sh inference.sh
```
```
...
@@ -70,9 +96,7 @@ sh inference.sh
...
@@ -70,9 +96,7 @@ sh inference.sh
下面,我们将重点介绍经典CNN网络:Resnet,以及如何利用OneFlow训练Resnet50,并对标Nvidia的Mxnet版实现。
下面,我们将重点介绍经典CNN网络:Resnet,以及如何利用OneFlow训练Resnet50,并对标Nvidia的Mxnet版实现。
## ResNet
### ResNet
[
ResNet
](
https://arxiv.org/abs/1512.03385
)
是2015年ImageNet竞赛的冠军。目前,ResNet相对对于传统的机器学习分类算法而言,效果已经相当的出色,之后大量的检测,分割,识别等任务也都在ResNet基础上完成。
[
ResNet
](
https://arxiv.org/abs/1512.03385
)
是2015年ImageNet竞赛的冠军。目前,ResNet相对对于传统的机器学习分类算法而言,效果已经相当的出色,之后大量的检测,分割,识别等任务也都在ResNet基础上完成。
...
@@ -87,50 +111,11 @@ sh inference.sh
...
@@ -87,50 +111,11 @@ sh inference.sh
准备好亲自动手,复现上面的结果了吗?
准备好亲自动手,复现上面的结果了吗?
那么接下来,立马开始OneFlow的图像识别之旅吧!
下面,本文就以上面的ResNet50 为例,一步步展现如何使用OneFlow进行网络的训练和预测。
下面,本文就以上面的ResNet50 为例,一步步展现如何使用OneFlow进行网络的训练和预测。
### 训练和验证(Train & Validation)
## 准备工作 Requirements
别担心,使用OneFlow非常容易,只要准备好下面三步,即可开始OneFlow的图像识别之旅。
-
安装OneFlow。
-
直接通过pip安装:
`pip install oneflow`
(TODO:确定我们的pip源是否做好,问caishenghang)
-
其他安装方式:参考
[
这里
](
XXX
)
(TOOD:待补充链接,链接到编译安装的文档说明) 。
-
下载
[
OneFlow-Benchmark
](
https://github.com/Oneflow-Inc/OneFlow-Benchmark/tree/of_develop_py3/cnn_benchmark
)
仓库。
`git clone git@github.com:Oneflow-Inc/OneFlow-Benchmark.git`
-
准备数据集(可选)
-
下载示例数据集:
`wget https://oneflow-public.oss-cn-beijing.aliyuncs.com/datasets/imagenet_ofrecord_example/part-00000`
-
或者:制作完整OFRecord格式的ImageNet数据集(见下文进阶部分)
-
再或者:直接使用虚拟“合成数据”。
**关于数据集的说明:**
> 1)本文的展示的代码中,使用OFRcord格式的数据集可以提高数据加载效率(但这非必须,参考[数据输入](http://183.81.182.202:8000/basics_topics/data_input.html),oneflow支持直接加载numpy数据)。
>
> 2)为了使读者快速上手,我们提供了一个小的示例数据集。直接下载,即可快速开始训练过程。读者可以在熟悉了流程后,可以参考数据集制作部分,制作完整的数据集。
>
> 3)“合成数据”是指不通过磁盘加载数据,而是直接在内存中生成一些随机数据,作为网络的数据输入源。
## 快速开始 Quick Start
那么接下来,立马开始OneFlow的图像识别之旅吧!
先切换到代码目录:
先切换到代码目录:
...
@@ -138,18 +123,12 @@ sh inference.sh
...
@@ -138,18 +123,12 @@ sh inference.sh
cd OneFlow-Benchmark/Classification/cnns
cd OneFlow-Benchmark/Classification/cnns
```
```
### 训练和验证(Train & Validation)
在命令行执行:
在命令行执行:
```
```
sh train.sh
sh train.sh
```
```
若在屏幕上不断打印出类似下面的信息,则表明训练过程正常运行:
若在屏幕上不断打印出类似下面的信息,则表明训练过程正常运行:
```
```
...
@@ -161,8 +140,6 @@ Saving model to ./output/snapshots/model_save-20200629223546/snapshot_epoch_0.
...
@@ -161,8 +140,6 @@ Saving model to ./output/snapshots/model_save-20200629223546/snapshot_epoch_0.
validation: epoch 0, iter 100, top_1: 0.074620, top_k: 0.194120, samples/s: 2014.683
validation: epoch 0, iter 100, top_1: 0.074620, top_k: 0.194120, samples/s: 2014.683
```
```
可以看到:
可以看到:
-
随着训练的进行,loss不断下降,而训练的top_1/top_k准确率不断提高(其中top_k默认为top_5准确率,可自定义)。
-
随着训练的进行,loss不断下降,而训练的top_1/top_k准确率不断提高(其中top_k默认为top_5准确率,可自定义)。
...
@@ -189,19 +166,9 @@ validation: epoch 0, iter 100, top_1: 0.074620, top_k: 0.194120, samples/s: 2014
...
@@ -189,19 +166,9 @@ validation: epoch 0, iter 100, top_1: 0.074620, top_k: 0.194120, samples/s: 2014
### 预测(Inference)
### 预测(Inference)
恭喜,到这里,您已经知道如何用OneFlow训练模型。
恭喜,到这里,您已经知道如何用OneFlow训练模型,接下来,试试用训练好的模型对新图片进行分类预测吧!
接下来,试试用训练好的模型对新图片进行分类预测吧!
**关于模型,您可以选择:**
-
使用刚才训练出的模型进行预测。
-
或者,下载已训练好的模型:
[
resnet_v1.5_model
](
https://oneflow-public.oss-cn-beijing.aliyuncs.com/model_zoo/resnet_v15_of_best_model_val_top1_77318.tgz
)
(
validation
accuracy: 77.318% top1,93.622% top5 )。
-
再或者,将其他框架已有的模型转换成OneFlow模型,见下面模型转换的部分。(TODO:模型转换内容补充后,怎加这里的跳转链接)
预测之前,需要准备你自己训练的模型,或者用我们在下面提供的在完整Imagenet(2012)上训练好的模型。
准备好模型后,将模型目录填入
`inference.sh`
脚本的
`MODEL_LOAD_DIR`
变量中,然后执行以下命令,开始对图片
`test_img/tiger.jpg`
的类别的进行预测:
准备好模型后,将模型目录填入
`inference.sh`
脚本的
`MODEL_LOAD_DIR`
变量中,然后执行以下命令,开始对图片
`test_img/tiger.jpg`
的类别的进行预测:
...
@@ -209,7 +176,6 @@ validation: epoch 0, iter 100, top_1: 0.074620, top_k: 0.194120, samples/s: 2014
...
@@ -209,7 +176,6 @@ validation: epoch 0, iter 100, top_1: 0.074620, top_k: 0.194120, samples/s: 2014
sh inference.sh
sh inference.sh
```
```
若输出下面的内容,则表示预测成功:
若输出下面的内容,则表示预测成功:
```
```
...
@@ -217,11 +183,23 @@ test_img/tiger.jpg
...
@@ -217,11 +183,23 @@ test_img/tiger.jpg
0.81120294 tiger, Panthera tigris
0.81120294 tiger, Panthera tigris
```
```
### 模型(Model)
**关于模型,您可以选择:**
-
自己训练的模型
-
或者,下载我们已训练好的模型:
[
resnet_v1.5_model
](
https://oneflow-public.oss-cn-beijing.aliyuncs.com/model_zoo/resnet_v15_of_best_model_val_top1_77318.tgz
)
(
validation
accuracy: 77.318% top1,93.622% top5 )。
## 更详细的说明 Details
## 更详细的说明 Details
### 分布式训练
### 分布式训练
简单而易用的分布式,是OneFlow的主打特色之一。
**简单而易用的分布式,是OneFlow的主打特色之一。**
OneFlow框架从底层设计上,就原生支持高效的分布式训练。尤其对于分布式的数据并行,用户完全不用操心算法从单机单卡扩展到多机多卡时,数据如何划分以及同步的问题。也就是说,使用OneFlow,用户以单机单卡的视角写好算法,自动具备多机多卡分布式数据并行的能力。
OneFlow框架从底层设计上,就原生支持高效的分布式训练。尤其对于分布式的数据并行,用户完全不用操心算法从单机单卡扩展到多机多卡时,数据如何划分以及同步的问题。也就是说,使用OneFlow,用户以单机单卡的视角写好算法,
**自动具备多机多卡分布式数据并行的能力。**
#### 如何配置并运行分布式训练?
#### 如何配置并运行分布式训练?
...
@@ -229,7 +207,7 @@ OneFlow框架从底层设计上,就原生支持高效的分布式训练。尤
...
@@ -229,7 +207,7 @@ OneFlow框架从底层设计上,就原生支持高效的分布式训练。尤
例如,想要在2机8卡上进行分布式训练,像下面这样配置:
例如,想要在2机8卡上进行分布式训练,像下面这样配置:
```
```
shell
# train.sh
# train.sh
python3 of_cnn_train_val.py
\
python3 of_cnn_train_val.py
\
--num_nodes
=
2
\
--num_nodes
=
2
\
...
@@ -240,7 +218,7 @@ python3 of_cnn_train_val.py \
...
@@ -240,7 +218,7 @@ python3 of_cnn_train_val.py \
```
```
然后分别在两台机器上,同时执行:
然后分别在两台机器上,同时执行:
```
```
shell
./train.sh
./train.sh
```
```
...
@@ -258,7 +236,7 @@ python3 of_cnn_train_val.py \
...
@@ -258,7 +236,7 @@ python3 of_cnn_train_val.py \
只需要在
`train.sh`
脚本中添加参数
`--use_fp16=True`
即可。
只需要在
`train.sh`
脚本中添加参数
`--use_fp16=True`
即可。
####
预训练
模型
####
混合精度
模型
我们为您提供了一个在Imagenet2012完整训练了90个epoch的混合精度模型,top_1:77.33%
我们为您提供了一个在Imagenet2012完整训练了90个epoch的混合精度模型,top_1:77.33%
...
@@ -274,7 +252,7 @@ Oneflow的ResNet50实现,为了保证和[英伟达的Mxnet版实现](https://g
...
@@ -274,7 +252,7 @@ Oneflow的ResNet50实现,为了保证和[英伟达的Mxnet版实现](https://g
#### Data Augmentation
#### Data Augmentation
##### 训练
**训练**
1.
随机采样图像并将其解码为[0; 255]。
1.
随机采样图像并将其解码为[0; 255]。
2.
随机裁剪一个矩形区域,该矩形区域的长宽比以[3/4; 4/3]和以[8%;100%],然后将裁剪的区域调整为224 x 224平方的图像。
2.
随机裁剪一个矩形区域,该矩形区域的长宽比以[3/4; 4/3]和以[8%;100%],然后将裁剪的区域调整为224 x 224平方的图像。
...
@@ -295,7 +273,7 @@ Oneflow的ResNet50实现,为了保证和[英伟达的Mxnet版实现](https://g
...
@@ -295,7 +273,7 @@ Oneflow的ResNet50实现,为了保证和[英伟达的Mxnet版实现](https://g
| 6.1 Normalize mean | Yes | Yes |
| 6.1 Normalize mean | Yes | Yes |
| 6.2 Normalize std | Yes | Yes |
| 6.2 Normalize std | Yes | Yes |
##### 验证
**验证**
-
将每个图像的短边调整为256像素,同时保持其宽高比。
-
将每个图像的短边调整为256像素,同时保持其宽高比。
-
裁剪中心的224×224区域
-
裁剪中心的224×224区域
...
@@ -403,7 +381,7 @@ OneFlow和英伟达保持了相同的初始化方式,只是在两个框架中
...
@@ -403,7 +381,7 @@ OneFlow和英伟达保持了相同的初始化方式,只是在两个框架中
```
```
那么,一键执行以下脚本即可完成训练集和验证集 > OFRecord的转换:
那么,一键执行以下脚本即可完成训练集和验证集 > OFRecord的转换:
**转换训练集**
##### 转换训练集
```
shell
```
shell
python3 imagenet_ofrecord.py
\
python3 imagenet_ofrecord.py
\
...
@@ -415,7 +393,7 @@ python3 imagenet_ofrecord.py \
...
@@ -415,7 +393,7 @@ python3 imagenet_ofrecord.py \
--height
224
--width
224
--height
224
--width
224
```
```
**转换验证集**
##### 转换验证集
```
shell
```
shell
python3 imagenet_ofrecord.py
\
python3 imagenet_ofrecord.py
\
...
@@ -427,7 +405,7 @@ python3 imagenet_ofrecord.py \
...
@@ -427,7 +405,7 @@ python3 imagenet_ofrecord.py \
--height
224
--width
224
--height
224
--width
224
```
```
**参数说明:**
##### 参数说明
```
shell
```
shell
--train_directory
--train_directory
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录