## 简介 Introduction
## 图像分类与CNN
**图像分类** 是指将图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法,是计算机视觉中其他任务,比如目标检测、语义分割、人脸识别等高层视觉任务的基础。
ImageNet大规模视觉识别挑战赛(ILSVRC),常称为ImageNet竞赛,包括图像分类、物体定位,以及物体检测等任务,是推动计算机视觉领域发展最重要的比赛之一。
在2012年的ImageNet竞赛中,深度卷积网络AlexNet横空出世。以超出第二名10%以上的top-5准确率,勇夺ImageNet2012比赛的冠军。从此,以 CNN(卷积神经网络) 为代表的深度学习方法开始在计算机视觉领域的应用开始大放异彩,更多的更深的CNN网络被提出,比如ImageNet2014比赛的冠军VGGNet, ImageNet2015比赛的冠军ResNet。
OneFlow-Benchmark下的cnn仓库目前已支持 **Alexnet** 、 **VGG16** 、 **Resnet50** 、 **InceptionV3** 、 **MobileNetV2**等经典的cnn模型,未来会陆续添加新的cnn模型。这些cnn模型共享一套训练、验证和推理代码,您只需要指定模型,即可使用一套代码完成这些cnn网络模型的训练、测试和验证。
## 快速开始 Quick Start
### 准备工作 Requirements
别担心,使用OneFlow非常容易,只要准备好下面三步,即可开始OneFlow的图像识别之旅。
- 安装OneFlow。
- 直接通过pip安装:`pip install oneflow`
- 安装轻量版:`pip install --find-links https://oneflow-inc.github.io/nightly oneflow`
- 源码编译等其他安装方式:参考[OneFlow项目主页](https://github.com/Oneflow-Inc/oneflow)
- 克隆/下载[OneFlow-Benchmark](https://github.com/Oneflow-Inc/OneFlow-Benchmark)仓库。
`git clone git@github.com:Oneflow-Inc/OneFlow-Benchmark.git`
- 准备数据集(可选)
- 直接使用synthetic虚拟合成数据集
- 下载我们制作的Imagenet(2012)[迷你数据集](https://oneflow-public.oss-cn-beijing.aliyuncs.com/online_document/dataset/imagenet/mini-imagenet.zip) 解压放入data目录
- 或者:制作完整OFRecord格式的ImageNet数据集(见下文进阶部分)
我们提供了通用脚本:train.sh和inference.sh,它们适用于此仓库下所有cnn网络模型的训练、验证、推理。您可以通过设置参数使用不同的模型、数据集来训练/推理。
**关于模型的说明:**
> 默认情况下,我们使用resnet50,您也可以通过改动脚本中的--model参数指定其他模型,如:--model="resnet50",--model="vgg"等。
**关于数据集的说明:**
> 1)为了使读者快速上手,我们提供了synthetic虚拟合成数据,“合成数据”是指不通过磁盘加载数据,而是直接在内存中生成一些随机数据,作为神经网络的数据输入源。
>
> 2)同时,我们提供了一个小的迷你示例数据集。直接下载解压至cnn项目的root目录,即可快速开始训练。读者可以在熟悉了流程后,参考数据集制作部分,制作完整的Imagenet2012数据集。
>
> 3)使用OFRcord格式的数据集可以提高数据加载效率(但这非必须,参考[数据输入](https://github.com/Oneflow-Inc/oneflow-documentation/blob/master/cn/docs/basics_topics/data_input.md),oneflow支持直接加载numpy数据)。
### 预训练模型
#### Resnet50
[resnet50_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 )
#### VGG16
[vgg16_model](https://oneflow-public.oss-cn-beijing.aliyuncs.com/model_zoo/vgg16_of_best_model_val_top1_721.zip) (validation accuracy: 72.1% top1,92.7% top5 )
#### Alexnet
[alexnet_model](https://oneflow-public.oss-cn-beijing.aliyuncs.com/model_zoo/alexnet_of_best_model_val_top1_54762.zip) (validation accuracy: 54.762% top1,78.1914% top5 )
#### InceptionV3
[inceptionv3_model](https://oneflow-public.oss-cn-beijing.aliyuncs.com/model_zoo/inceptionv3_of_best_model_val_top1_74.19.zip) (validation accuracy: 74.19% top1,91.46% top5 )
### 预测/推理
下载预训练模型:[resnet50_v1.5_model](https://oneflow-public.oss-cn-beijing.aliyuncs.com/model_zoo/resnet_v15_of_best_model_val_top1_77318.tgz ) ,解压后放入当前目录,然后执行:
```shell
sh inference.sh
```
脚本执行后,将对下面的图片进行分类:
<div align="center">
<img src="data/fish.jpg" align='center'/>
</div>
**输出**
```shell
data/fish.jpg
0.87059885 goldfish, Carassius auratus
```
可见,模型判断这张图片有87.05%的概率是金鱼goldfish
### 训练&验证
训练同样很简单,只需执行:
```shell
sh train.sh
```
即可开始模型的训练,您将看到如下输出:
```shell
Loading synthetic data.
Loading synthetic data.
Saving model to ./output/snapshots/model_save-20200723124215/snapshot_initial_model.
Init model on demand.
train: epoch 0, iter 10, loss: 7.197278, top_1: 0.000000, top_k: 0.000000, samples/s: 61.569
train: epoch 0, iter 20, loss: 6.177684, top_1: 0.000000, top_k: 0.000000, samples/s: 122.555
Saving model to ./output/snapshots/model_save-20200723124215/snapshot_epoch_0.
train: epoch 0, iter 30, loss: 3.988656, top_1: 0.525000, top_k: 0.812500, samples/s: 120.337
train: epoch 1, iter 10, loss: 1.185733, top_1: 1.000000, top_k: 1.000000, samples/s: 80.705
train: epoch 1, iter 20, loss: 1.042017, top_1: 1.000000, top_k: 1.000000, samples/s: 118.478
Saving model to ./output/snapshots/model_save-20200723124215/snapshot_epoch_1.
...
```
> 为了方便运行演示,我们默认使用synthetic虚拟合成数据集,使您可以快速看到模型运行的效果
同样,你也可以使用[迷你示例数据集](https://oneflow-public.oss-cn-beijing.aliyuncs.com/online_document/dataset/imagenet/mini-imagenet.zip),下载解压后放入cnn项目的root目录即可,然后修改训练脚本如下:
```shell
rm -rf core.*
rm -rf ./output/snapshots/*
DATA_ROOT=data/mini-imagenet/ofrecord
# training with mini-imagenet
DATA_ROOT=data/mini-imagenet/ofrecord
python3 of_cnn_train_val.py \
--train_data_dir=$DATA_ROOT/train \
--num_examples=50 \
--train_data_part_num=1 \
--val_data_dir=$DATA_ROOT/validation \
--num_val_examples=50 \
--val_data_part_num=1 \
--num_nodes=1 \
--gpu_num_per_node=1 \
--optimizer="sgd" \
--momentum=0.875 \
--learning_rate=0.001 \
--loss_print_every_n_iter=1 \
--batch_size_per_device=16 \
--val_batch_size_per_device=10 \
--num_epoch=10 \
--model="resnet50"
```
运行此脚本,将在仅有50张金鱼图片的迷你imagenet数据集上,训练出一个分类模型,利用它,你可以对金鱼图片进行分类。
训练完成后,你也可以修改evaluate.sh脚本以对模型进行评估:
```shell
#!/bin/bash
# Evaluate with mini-imagenet
DATA_ROOT=data/mini-imagenet/ofrecord
MODEL_LOAD_DIR="output/snapshots/model_save-20200907130848/snapshot_epoch_9"
python3 of_cnn_evaluate.py \
--num_epochs=3 \
--num_val_examples=50 \
--model_load_dir=$MODEL_LOAD_DIR \
--val_data_dir=$DATA_ROOT/validation \
--val_data_part_num=1 \
--num_nodes=1 \
--gpu_num_per_node=1 \
--val_batch_size_per_device=10 \
--model="resnet50"
```
恭喜你,得到了这个还不错的金鱼分类模型,想尝试在完整imagenet上训练自己的分类模型吗?
不要着急,如果您需要在完整的ImageNet2012数据集上进行训练,请看下文【ResNet】部分的介绍。其中,我们将重点介绍其中的经典网络:Resnet50,以及如何利用OneFlow在完整的Imagenet2012数据集上训练Resnet50,并提供 **对标Nvidia的Mxnet版** 实现。
## ResNet
[ResNet](https://arxiv.org/abs/1512.03385) 是2015年ImageNet竞赛的冠军。目前,ResNet相对对于传统的机器学习分类算法而言,
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
之江天枢人工智能开源平台是由之江实验室牵头,联合国内顶尖科研力量共同打造的国产化自主可控的人工智能开源平台。平台面向人工智能研究中的数据处理、算法开发、模型训练、算力管理和推理应用等各个流程的技术难点,研发了包括一站式算法开发平台、高性能分布式深度学习框架、先进算法模型库、视觉模型炼知平台、数据可视化分析平台等一系列平台及工具,在模型高效分布式训练、数据处理和可视分析、模型炼知和轻量化等技术上形成
资源推荐
资源详情
资源评论
收起资源包目录
Dubhe-master.zip (2000个子文件)
iconfont.css 26KB
iconfont.css 26KB
demo.css 9KB
demo.css 8KB
demo_index.html 97KB
demo_index.html 94KB
index.html 617B
index.html 550B
PtTrainJobServiceImpl.java 104KB
DatasetServiceImpl.java 72KB
FileServiceImpl.java 72KB
ServingServiceImpl.java 64KB
ExperimentServiceImpl.java 62KB
DatasetVersionServiceImpl.java 58KB
ExperimentStageServiceImpl.java 44KB
BatchServingServiceImpl.java 42KB
PcDatasetServiceImpl.java 40KB
PresetDatasetImportHandle.java 40KB
AnnotationServiceImpl.java 39KB
UserServiceImpl.java 39KB
TadlRedisServiceImpl.java 38KB
LabelGroupServiceImpl.java 37KB
PtTrainAlgorithmServiceImpl.java 36KB
NoteBookServiceImpl.java 35KB
JupyterResourceApiImpl.java 34KB
DatasetImportHandle.java 34KB
ModelOptTaskInstanceServiceImpl.java 33KB
TerminalServiceImpl.java 33KB
PtModelBranchServiceImpl.java 33KB
AutoLabelModelServiceServiceImpl.java 32KB
DatasetVersionFileServiceImpl.java 31KB
AlgorithmServiceImpl.java 31KB
DataTaskExecuteThread.java 30KB
PtModelInfoServiceImpl.java 30KB
DeployServingAsyncTask.java 29KB
NodeApiImpl.java 29KB
NfsUtil.java 28KB
TrainJobAsync.java 28KB
PtTrainParamServiceImpl.java 28KB
ModelOptTaskServiceImpl.java 28KB
RedisUtils.java 27KB
LogMonitoringApiImpl.java 26KB
AddActionHandler.java 26KB
MetricsApiImpl.java 26KB
FileServiceImpl.java 25KB
DataMedicineServiceImpl.java 24KB
DistributeTrainApiImpl.java 24KB
HostFileStoreApiImpl.java 23KB
TrainJobApiImpl.java 21KB
PtImageServiceImpl.java 20KB
RecycleTaskServiceImpl.java 20KB
MedicineAnnotationServiceImpl.java 20KB
DataStateMachine.java 19KB
DubheDeploymentApiImpl.java 19KB
TaskServiceImpl.java 18KB
PersistentVolumeClaimApiImpl.java 18KB
LabelServiceImpl.java 18KB
ModelOptJobApiImpl.java 18KB
PodApiImpl.java 17KB
PaginationInterceptor.java 17KB
LocalFileUtil.java 16KB
MenuServiceImpl.java 16KB
DatasetImageUploadHandle.java 16KB
ModelServingApiImpl.java 15KB
SystemNodeServiceImpl.java 15KB
PcDatasetMachine.java 15KB
PtMeasureServiceImpl.java 14KB
AlgorithmAsyncServiceImpl.java 14KB
DubheFileUtil.java 13KB
DatasetVersionFileMapper.java 13KB
TrialStateMachine.java 13KB
AutoTagCompleteState.java 13KB
HarborApiImpl.java 13KB
NamespaceApiImpl.java 12KB
TrialJobAsyncTask.java 12KB
AnnotationCompleteState.java 12KB
StringUtils.java 12KB
ManualAnnotationState.java 12KB
MinioUtil.java 12KB
ResourceCache.java 12KB
Permissions.java 12KB
DatasetVersionFileService.java 12KB
ExperimentStageStateMachine.java 11KB
ResourceBuildUtils.java 11KB
FileController.java 11KB
DataFileAnnotationServiceImpl.java 11KB
ResourceSpecsServiceImpl.java 11KB
DatasetEnhanceServiceImpl.java 11KB
SystemNamespaceServiceImpl.java 11KB
PodServiceImpl.java 11KB
LogUtil.java 11KB
FileStateMachine.java 11KB
ResourceQuotaApiImpl.java 11KB
CmdUtil.java 10KB
DifficultCaseAsyncCopy.java 10KB
MetricsGatewayFilterFactory.java 10KB
TerminalApiImpl.java 10KB
TadlTrialServiceImpl.java 10KB
FileService.java 10KB
K8sNameTool.java 10KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
m0_72731342
- 粉丝: 4
- 资源: 1829
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- base(1).apk.1
- K618977005_2012-12-6_beforeP_000.txt.PRM
- 秋招信息获取与处理基础教程
- 程序员面试笔试面经技巧基础教程
- Python实例-21个自动办公源码-数据处理技术+Excel+自动化脚本+资源管理
- 全球前8GDP数据图(python动态柱状图)
- 汽车检测7-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- 检测高压线电线-YOLO(v5至v9)、COCO、Darknet、VOC数据集合集.rar
- 检测行路中的人脸-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、VOC数据集合集.rar
- Image_17083039753012.jpg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功