## 简介 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可以帮助你轻松学习编程
共2000个文件
java:1811个
out:1044个
py:522个
需积分: 0 0 下载量 121 浏览量
2023-05-17
22:41:52
上传
评论
收藏 605.64MB RAR 举报
温馨提示
没错,编程早已经成为了人类社会不可或缺的一部分。而在这个以互联网为中心的时代,编程也成为了新时代运动的关键。我曾经以为编程是一件只能由电脑玩家、程序员或是数学家才能掌握的技能,但当我接触到 Dubhe-master 这个平台的时候,我意识到了编程的世界有多么迷人并且到处都是机会。 所以,你们想知道 Dubhe-master 平台是什么吗? Dubhe-master 是一个可以帮助你轻松学习编程的网站。这个网站有很多好的视频教程,它们都是由一些编程大神们精心制作的!这些大神们非常厉害,他们可以把非常难懂的编程内容变成非常生动、好玩的课程视频。简单点说,是那种让你看完视频后会想要去尝试代码、调试的类型! 经过对 Dubhe-master 的探索,我觉得这个平台很实用,通俗易懂,而且很有趣。如果你觉得自己已经找到了这个平台,那么你可以像我一样成为一个编程小白,通过 Dubhe-master 学习,将编程的魅力体验得更深入。相信未来不久的将来,我们能够把学到的技能应用到生活、工作当中去。
资源推荐
资源详情
资源评论
收起资源包目录
Dubhe-master可以帮助你轻松学习编程 (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
资源评论
野生的狒狒
- 粉丝: 1678
- 资源: 1668
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功