# 快速体验MMEdu,开始! ## MMEdu是什么? MMEdu源于国产人工智能视觉(CV)算法集成框架OpenMMLab,是一个“开箱即用”的深度学习开发工具。在继承OpenMMLab强大功能的同时,MMEdu简化了神经网络模型搭建和训练的参数,降低了编程的难度,并实现一键部署编程环境,让初学者通过简洁的代码完成各种SOTA模型(state-of-the-art,指在该项研究任务中目前最好/最先进的模型)的训练,并能够快速搭建出AI应用系统。 官方地址:OpenInnoLab GitHub:https://github.com/OpenXLab-Edu/OpenMMLab-Edu 国内镜像:https://gitee.com/openxlab-edu/OpenMMLab-Edu 库文件源代码可以从[PyPi](https://pypi.org/project/MMEdu/#files)下载,选择tar.gz格式下载,可用常见解压软件查看源码。 文档涉及的部分代码见XEdu帮助文档配套项目集:[https://www.openinnolab.org.cn/pjlab/project?id=64f54348e71e656a521b0cb5&sc=645caab8a8efa334b3f0eb24#public](https://www.openinnolab.org.cn/pjlab/project?id=64f54348e71e656a521b0cb5&sc=645caab8a8efa334b3f0eb24#public) ## 小目标:使用MMEdu训练一个手写体数字识别模型! MMEdu有多种安装方式,可以通过pip方式安装,也可以使用一键安装包。体验MMEdu的最快速方式是通过OpenInnoLab平台在线体验MMEdu。 ### 1. 在OpenInnoLab创建MMEdu项目 OpenInnoLab平台为上海人工智能实验室推出的青少年AI学习平台,满足青少年的AI学习和创作需求,支持在线编程。在“工具 - 在线工具- 人工智能工坊”中,可直接创建XEdu项目。OpenInnoLab平台网址:https://www.openinnolab.org.cn/(用Chrome浏览器打开效果最佳)。 ![](../images/mmedu/XEduProjecCreation.gif) 在“项目-更多”中,搜索“MMEdu”,可找到所有与MMEdu相关的项目直接“克隆”,项目所有人为XEdu的项目是XEdu研发团队原创并公开的项目,其他项目是MMEdu使用者公开的项目,如初次使用MMEdu,建议直接克隆XEdu名下的MMEdu相关项目。 ![](../images/mmedu/quick_start_01.jpg) 下面以“手写体识别”为例来介绍从零开始训练一个AI模型的过程。 ### 2. 克隆项目 强烈建议直接“克隆”《用MMEdu实现MNIST手写体数字识别(XEdu官方版)》项目。 项目链接:https://www.openinnolab.org.cn/pjlab/project?id=64a3c64ed6c5dc7310302853&sc=635638d69ed68060c638f979#public (用Chrome浏览器打开效果最佳) ### 3. 加载数据集 默认情况下,“克隆”的项目中已经导入了数据集。你也可以重新“导入”一次。步骤如下: - 点击“+”,输入“mnist“,找到相应数据集,勾选“☑️”,点击导入; - 在数据集文件图标上方点击“右键”,即可“复制文件路径”。接下来,你就可以通过这个路径来访问你的数据集。比如,我得到的文件路径是:`/data/MELLBZ/mnist`。 ![](../images/mmedu/quick_start_02.jpg) ![](../images/mmedu/quick_start_03.jpg) **新手提问1:** 我要使用自己的数据集怎么办?为什么会这么麻烦? 解答:因为项目的空间容量是有限的,同时数据集是公用的,经常在多个项目中使用。因而OpenInnoLab将数据集放在一个公用区域,和项目的文件分离。如果要使用自己的数据集,请在“我的数据集”中增加一个新的数据集,OpenInnoLab支持上传压缩包的方式来建立数据集。数据集加好后,同样需要“导入”后才能访问。 如果你的数据集很小(比如100M内),那么也可以像使用正常的项目文件一下,通过浏览器上传即可。 **新手提问2:** 我应该怎么制作自己的数据集? 解答:制作合适的数据集是机器学习任务成功的关键。而数据集的质量会直接影响到模型的性能。因此,制定合适的数据集策略至关重要。以下是关于如何做数据集的建议: ​ 明确目标:首先,你需要根据你的任务来确定你的数据需求。你想要解决的问题是什么?你需要什么样的数据来支持这个问题的解答? ​ 数据量与质量:许多人关心的问题是:“我需要多少图片?”以及“图片的尺寸应该是多大?”答案取决于你期望模型的识别精度。一般来说,数据越丰富、越多样,模型的表现就越好。 ​ 多样性:只有数量还不够,你还需要确保数据的多样性。这意味着你需要考虑各种光线、拍摄角度、背景等变化条件。 ​ 格式要求:不同的AI开发工具或框架可能对数据集格式有特定的要求。MMEdu工具对数据集的格式也有自己的要求,如图像分类模块要求[ImageNet格式](https://xedu.readthedocs.io/zh-cn/master/mmedu/introduction.html#imagenet),目标检测模块要求[COCO格式](https://xedu.readthedocs.io/zh-cn/master/mmedu/introduction.html#coco),后文有如何[从零开始制作ImageNet格式数据集](https://xedu.readthedocs.io/zh-cn/master/how_to_use/dl_library/howtomake_imagenet.html#imagenet)和如何[从零开始制作COCO格式数据集](https://xedu.readthedocs.io/zh-cn/master/how_to_use/dl_library/howtomake_coco.html#coco)的详细说明。 ### 4. 训练模型 一个典型的模型训练代码: ```python from MMEdu import MMClassification as mmeducls # 导入库 model = mmeducls(backbone='LeNet') # 实例化模型 model.num_classes = 3 # 配置基本信息(类别数量) model.load_dataset(path='./dataset') # 指定数据集路径 model.save_fold = './my_model' # 指定模型保存集路径 model.train(epochs=10, validate=True) # 训练模型 ``` 打开《用MMEdu实现MNIST手写体数字识别(XEdu官方版)》项目中的"1.mnist手写体数字识别-训练.ipynb"文件跟随说明完成训练代码运行。示例代码中共6行代码,完成了导入库、实例化模型、配置基本信息(图片分类的类别数量(`model.num_classes`),指定数据集的路径(`model.load_dataset`)和指定模型保存的路径(`model.save_fold`)),开始训练模型。 ### 5. 继续训练 如果觉得效果不够好,请继续训练(实际上就是“迁移学习”): ```python from MMEdu import MMClassification as mmeducls model = mmeducls(backbone='LeNet') model.num_classes = 3 model.load_dataset(path='./dataset') model.save_fold = './my_model' checkpoint = './latest.pth' # 指定原有预训练模型路径 model.train(epochs=10, validate=True, checkpoint=checkpoint) # 训练模型 ``` **注意**:“继续训练”和“普通训练”的区别就在于`model.train()`函数中多了一个参数,即`checkpoint=checkpoint`。checkpoint的路径就来自之前训练的权重文件。 推荐使用“继续训练”的方式,因为全新开始训练一个模型,一般要花较长时间。如果使用CPU训练,需要的时间就更长了。因此我们强烈建议在预训练模型的基础上继续训练。可以指定网上下载的某个预训练模型。借助在大型数据集上训练的预训练模型可以根据一系列任务的历史数据来对新的任务进行训练,而无需从头开始训练。它可以将一个大型数据集中的知识和技能转移到另一个任务上,从而大大节省训练时间。 ### 6. 模型推理 模型训练好后,就可以测试效果了。代码中img的路径就是用于测试的新图片。 ```python from MMEdu import MMClassification as mmeducls # 导入库 img = './img.png' # 指定图片 model = mmeducls(backbone='LeNet') # 实例化模型 checkpoint = './latest.pth' # 指定模型保存路径 result = model.inference(image=img, show=True, checkpoint = checkpoint) # 开始推理 model.print_result(result) # 输出推理结果 ``` 打开《用MMEdu实现MNIST手写体数字识别(NOTEBOOK)》项目中的"2.mnist手写体数字识别-推理.ipynb"文件跟随说明完成推理代码运行。示例代码中共7行代码,完成了导入库、指定图片、实例化模型、指定模型保存的路径、开始推理、输出推理结果。根据推理结果可以完成各种其他输出。 如需了解代码规则和参数信息,以及图像分类模块的更多使用说明,请看[后文](https://xedu.readthedocs.io/zh-cn/master/mmedu/mmeducls.html)。 ## 下一个目标:使用MMEdu训练各种模型 我们的小目标就达成了!一个手写体数字识别模型就训练好了,此时你肯定还不过瘾,还想使用MMEdu基于各种数据集来训练模型去解决各种分类问题也很方便!只需要对手写体识别训练的代码稍作改动即可。首先思考自己想要解决的分类问题,收集数据并整理好数据集,如想要解决猫狗识别问题需准备猫狗数据集。 可以通过《用MMEdu实现MNIST手写体数字识别(NOTEBOOK)》项目中的"3.从mnist手写体数字识别到猫狗分类.ipynb"文件进行案例学习。更多案例可以参考详见项目集区域,这里的AI特色工具专区展示了一些有助于深度学习和机器学习入门和进阶的案例。 当然你也可以在AI项目工坊创建自己的项目,做自己的人工智能案例。MMEdu工具有[图像分类模块](https://xedu.readthedocs.io/zh-cn/master/mmedu/mmeducls.html)、[目标检测模块等模块](https://xedu.readthedocs.io/zh-cn/master/mmedu/mmedudet.html#mmedudet),请继续阅读文档,了解并掌握MMEdu的各个模块。 ![](../images/mmedu/XEduItemSet.png) ## MMEdu的简要总结 MMEdu是针对青少年学习AI技术而设计的,其前身就是大名鼎鼎的OpenMMLab。MMEdu的语法非常简单,几句话就能完成训练和推理。如果你下载了XEdu一键安装包,还可以使用Easytrain等可视化辅助工具。有了MMEdu,你会发现AI模型训练原来这么简单。