MindSpore21天实战营(3)使用MindSpore实现Resnet50毒蘑菇识别

举报
张辉 发表于 2020/11/12 15:04:56 2020/11/12
【摘要】 本文介绍了如何让MindSpore识别毒蘑菇。

白雪公主和毒蘑菇的故事还是要继续的。。。


话说,华为的MindSpore大大们,经过缜密的分析,终于发现在检查是否是毒蘑菇的这一人命关天的推理中可能存在的一个坑,然后默默的填了坑。。。此次填坑,最终导致本文的出炉。本来张小白以为这篇文字会胎死腹中。没想到反转的剧情不仅发生在张小白交错了第一天的作业,得到可贵的0分之外,还发生MindSpore对毒蘑菇识别的一次重大变化。


下面介绍一下此次事情经过。


话说张小白几天前开始做 MindSpore21天实战营第三天的作业。

(一)体验作业

体验作业看起来较为简单,就是将OBS桶上放满水,,nono,

是建好桶 mindspore-21day-tutorials 

以及体验目录resnet-50

image.png

并将ResNet-50体验作业一键下载包.zip的内容解压上传到这个目录下,包含:

image.png

resnet目录下的bert源代码

ckpt_files目录下的预训练模型 resnet-90_209.ckpt,

mushrooms目录下的待预测的蘑菇图片tum.jpg(替换掉原来的卡通蘑菇图片,,,。这是张小白问俺家度娘小助手查到的。。。)

image.png

然后去ModelArts的训练管理去新增训练作业。。

按照文档要求的参数去建就可以了

image.png

张小白的参数跟上面的区别就是:ascend-tutorials桶名称换成了 mindspore-21day-tutorials 

其他几乎一样。。

image.png

好像2分钟不到就推理训练作业ok了。。。

然后查看日志。。

image.png

为啥会有两个文件,因为张小白把原来那个卡通蘑菇改名成 tum1.jpg了。。(请注意:在这里其实出问题了,但是因为被推理的图片太少,一时间张小白看不出来啥,只是默默的提交了整张图片,获得了体验作业的8分。)

image.png

然而,结果是令人惊讶的。。。明明张小白上传的是有毒的蘑菇,这里检测出来的是无毒的?而且,前一个卡通图片,

image.png

看着是可爱,但是它是蘑菇吗?你说它无毒,我说它无毒也不能吃啊。。。

一定是哪里出了问题。。。。(没想到一语成谶


张小白就接着做进阶作业的模型训练:

(二、进阶作业篇)

进阶作业就是在桶 mindspore-21day-tutorials 

里面建个进阶目录resnet-50-2

image.png

并将ResNet-50进阶作业一键下载包.zip的内容

image.png

解压上传到这个目录下,

image.png

image.png

image.png

上传结果包含:

image.png

ckpt_files 空目录这回不用预训练模型了。。因为这次是要真正的进行模型训练。。。

mushrooms 比体验作业多了个训练数据集train目录,下面有9个分类的毒蘑菇:AABCEHLRS.

image.png

张小白稍后也下载了自己想预测的有毒的无毒的蘑菇图片:

image.png

分成du和nodu两种(这英文水平也是醉了。。。)

将其上传到mushrooms 的test目录下:

image.png

像建立体验作业的训练任务一样,我们来建立进阶任务的训练任务:

进阶作业.doc上是这么说的:

image.png

image.png

饭饭大侠的实践文章 https://bbs.huaweicloud.com/forum/thread-85549-1-1.html 是这么说的:

image.png

张小白居然信了。。因为饭大大并没有提到模型训练需要多少时间。照以前做AI实战营的情况,感觉模型训练也就个把小时的事情吧。。。(大错特错了!)


张小白是这么新建模型训练作业的。。。

image.png

image.png

image.png

没想到一共训练了9个小时20分钟,训练才结束。。。。

image.png

官方文档训练时间为 5248,50轮epoch

image.png

我的训练时间为 383984.517,90轮epoch。。。

张小白还是把日志下载下来供分析吧。。。

image.png

在output目录下有ckpt的训练结果:

image.png

把这些文件下载下来吧。。

image.png

然后也照着体验那样,

image.png

将第90轮的结果传到 ckpt_files目录下。

image.png

image.png

咱们再开始推理吧。。。。

推理之前,为了防止张小白新增的照片像体验作业那样检验不出毒,特意将训练集里面的一些照片拷贝出来重新命名传到test目录下去。心想这些照片一模一样的总能被推理出来的吧。。。

image.png


image.png

创建推理训练作业。。。

image.png


image.png

其中:

代码目录:/mindspore-21day-tutorials/resnet-50-2/resnet/

启动文件:/mindspore-21day-tutorials/resnet-50-2/resnet/resnet50_predict.py

数据存储位置:/mindspore-21day-tutorials/resnet-50-2/mushrooms/test/

训练输出位置:/mindspore-21day-tutorials/resnet-50-2/output/

增加运行参数:checkpoint_path = s3://mindspore-21day-tutorials/resnet-50-2/ckpt_files/resnet-90_18810.ckpt

作业日志路径:/mindspore-21day-tutorials/resnet-50-2/log/

点击下一步:

image.png

确认无误后提交:

image.png

可以查看训练详情。。。

image.png

并通过日志查看训练情况。。

image.png

耐心等待,没想到不到30秒内就训练成功了。。。

image.png


然而结果继续让人惊讶。。。难道都是毒蘑菇??而且都是“Amanita毒蝇伞,伞菌目,鹅膏菌科,鹅膏菌属,主要分布于我国黑龙江、吉林、四川、西藏、云南等地,有毒?

我明明是一样蘑菇选了一种。。。

image.png

张小白有点不相信自己的眼睛。。。

张小白不信这个邪,把待推理的图片中的 Amanita开头的图片删了,再推理一次。

image.png

点击作业中的修改。再提交一次。。

image.png

image.png

新版推理训练中。。。

image.png

训练成功,日志如下:

image.png

天啦,已经把唯一的 Amanita删了啊。。。还能推理出所有的蘑菇都是Amanita。。。

这回张小白把所有的蘑菇图片都删了。。。只留上一个Russula类别的。

把蘑菇全删了。。

image.png

放上一个。。。

image.png

再如上炮制,重新训练。。。

image.png

还是这个结果。。。

只有一张 Russula,训练出来一个“Amanita毒蝇伞”。。。。

图片都是从训练数据集里面取的啊。。。

这是AI吗???

张小白不仅对这个ResNet模型表示极大的怀疑。

当然,群里的大大也对此做了一些解释,张小白结合这个解释对以上现象做了下综合整理:

  1. 一般每秒30张图片的处理速度,毒蘑菇数据有6700多张。按照这个进度, 1个epoch需要 6700/30=233秒,还不排除有些图片会比较大,更耗时。所以 目前张小白的训练一个epoch花了370秒左右(约6分钟),也算比较合理。教程中训练了50个epoch,而张小白选择了90个epoch.,这就使得模型训练的整个时间到了9个多小时( 6X90=9X60);但是不表示训练时间越长,精度就越高。

  2. 对于多个图片显示同样的结果,而且有毒蘑菇得出无毒蘑菇的结果,目前所用的卷积神经网络是没有办法识别不是已知的分类的。只能将结果回归到预训练定义的9个类别。CNN网络只能根据大量训练得到的特征来预测新目标的种类。对于从来没有训练过的类型是没办法识别的。

  3. 模型的预测结果不准确,其原因可能有多种,比如数据集本身的权威性——本次训练的数据集是从kaggle上下载的,并不是官方imagenet的数据集。;又比如数据的数量有限也会影响模型识别效果,还有参数也需要做调优

  4. 如果想进一步得到精度的信息,可以在resnet50_predict.py中添加打印推理精度的print语句。。

尽管如此,张小白仍然不敢把这些结论整理成博客发出去。总觉得出了什么问题。

张小白就对耐心解答CTR问题的 HelloWay老师诉说了心中的郁闷,,,Hello老师毕竟是名副其实的“您好老师,找到她就能找到“Way”。在她的帮助下,MindSpore团队对代码做了一些修改。

image.png

这回张小白终于可以好好试一下了。

按照上面的提示,修改resnet_predict.py的代码:

image.png

将其 上传到OBS上去:

image.png

python脚本的时间已更新。OK

再重新传上去以前想要测试的蘑菇图片:

image.png

照例是一个类型一种。加上自己找的若干。

进入ModeArts控制台,选中以前运行的tranjob-resnet2-inference的进阶推理训练作业。

image.png

点击修改:

image.png

检查启动文件 /mindspore-21day-tutorials/resnet-50-2/resnet/resnet50_predict.py

和数据集位置  /mindspore-21day-tutorials/resnet-50-2/mushrooms/test/,貌似没啥问题。点击确定重新推理。

image.png

耐心等待运行结束:

image.png

查看日志:

image.png

大概是一样一个吧。。要不然应该把图片名称打出来看看,是否一一对应。

在resnet50_predict.py文件中加入对应的文件名的打印:

image.png

重新上传py文件到OBS,并且重新在ModelArts上run推理作业,结果如下:

image.png

我们用文本可以看得更清楚一点:

文件名[Cortinarius022_tNaDxq5khkg.jpg],预测的蘑菇标签为:
Cortinarius掷丝膜菌,伞菌目,丝膜菌科,丝膜菌属,分布于湖南等地(夏秋季在山毛等阔叶林地上生长)
文件名[Boletus0032_Sl_iMoAAJyU.jpg],预测的蘑菇标签为:
Boletus丽柄牛肝菌,伞菌目,牛肝菌科,牛肝菌属,分布于云南、陕西、甘肃、西藏等地,有毒
文件名[Hygrocybe047_TNyRfvIaJxw.jpg],预测的蘑菇标签为:
Hygrocybe浅黄褐湿伞,伞菌目,蜡伞科,湿伞属,分布于香港(见于松仔园),有毒
文件名[nodu4.jpg],预测的蘑菇标签为:
Lactarius松乳菇,红菇目,红菇科,乳菇属,广泛分布于亚!热带松林地,无毒
文件名[Amanita039_ukO5iaLSiRM.jpg],预测的蘑菇标签为:
Amanita毒蝇伞,伞菌目,鹅膏菌科,鹅膏菌属,主要分布于我国黑龙江、吉林、四川、西藏、云南等地,有毒
文件名[Russula026_B-JruZ9eQ2c.jpg],预测的蘑菇标签为:
Russula褪色红菇,伞菌目,红菇科,红菇属,分布于河北、吉林、四川、江苏、西藏等地,无毒
文件名[nodu9.jpg],预测的蘑菇标签为:
Boletus丽柄牛肝菌,伞菌目,牛肝菌科,牛肝菌属,分布于云南、陕西、甘肃、西藏等地,有毒
文件名[Agaricus013_bhSPsvLNpKk.jpg],预测的蘑菇标签为:
Agaricus双孢蘑菇,伞菌目,蘑菇科,蘑菇属,广泛分布于北半球温带,无毒
文件名[Lactarius025_8bHMwyrm1xE.jpg],预测的蘑菇标签为:
Lactarius松乳菇,红菇目,红菇科,乳菇属,广泛分布于亚!热带松林地,无毒
文件名[du1.jpeg],预测的蘑菇标签为:
Lactarius松乳菇,红菇目,红菇科,乳菇属,广泛分布于亚!热带松林地,无毒
文件名[Entoloma038_2UbtRbtpLYw.jpg],预测的蘑菇标签为:
Entoloma霍氏粉褶菌,伞菌目,粉褶菌科,粉褶菌属,主要分布于新西兰北岛和南岛西部,有毒
文件名[du5.jpeg],预测的蘑菇标签为:
Boletus丽柄牛肝菌,伞菌目,牛肝菌科,牛肝菌属,分布于云南、陕西、甘肃、西藏等地,有毒
文件名[du2.jpeg],预测的蘑菇标签为:
Amanita毒蝇伞,伞菌目,鹅膏菌科,鹅膏菌属,主要分布于我国黑龙江、吉林、四川、西藏、云南等地,有毒
文件名[du3.jpeg],预测的蘑菇标签为:
Amanita毒蝇伞,伞菌目,鹅膏菌科,鹅膏菌属,主要分布于我国黑龙江、吉林、四川、西藏、云南等地,有毒
文件名[du6.jpeg],预测的蘑菇标签为:
Suillus乳牛肝菌,牛肝菌目,乳牛肝菌科,乳牛肝菌属,分布于吉林、辽宁、山西、安徽、江西、浙江、湖南、四川、贵州等地,无毒
文件名[du8.jpeg],预测的蘑菇标签为:
Cortinarius掷丝膜菌,伞菌目,丝膜菌科,丝膜菌属,分布于湖南等地(夏秋季在山毛等阔叶林地上生长)
文件名[Suillus044_Bb96EmGmLVE.jpg],预测的蘑菇标签为:
Suillus乳牛肝菌,牛肝菌目,乳牛肝菌科,乳牛肝菌属,分布于吉林、辽宁、山西、安徽、江西、浙江、湖南、四川、贵州等地,无毒
文件名[du7.jpeg],预测的蘑菇标签为:
Entoloma霍氏粉褶菌,伞菌目,粉褶菌科,粉褶菌属,主要分布于新西兰北岛和南岛西部,有毒
ResNet50 prediction success!

再简单分析下:image.png

首先,基本上在训练集里面的案例都被正确的分类了。。。这才是好的resnet嘛。。。

然后,自己找的毒蘑菇照片,

有3个明显错了,

nodu9,是男瘦型香菇。,完全没毒。被指认为有毒。这个跟自动学习学得结果不一样。。

du1,du6,本来有毒,被认为是无毒。

另还有一个Cortinarius掷丝膜菌 ,经度娘告知:有毒。貌似也没错。

image.png

从这个结果来看,还是较能令人接受的。。

细心的读者还可以对比下张小白昨天发的博客:张小白教你如何使用ModelArts的自动学习对毒蘑菇进行分类 https://bbs.huaweicloud.com/blogs/208172 

从自动学习和MindSpore使用ResNet网络进行学习的两种方式对比来看,

对于已存在训练集里面的图片,获得了完全一致类别的结果。

而不在训练集里面的7张有毒蘑菇新图片,

自动学习的结果是:

Russula,无毒

Amanita,有毒

Lactarius,无毒

Amanita,有毒

Hygrocybe,有毒

Amanita,有毒

Lactarius,无毒---------白雪公主的中毒率为 3/7.

MindSpore的推理结果是:

图1:Lactarius 无毒

图2:Amanita 有毒

图3:Amanita 有毒

图5:Boletus 有毒

图6:Suillus 无毒

图7:Entoloma 有毒---------白雪公主的中毒率为 2/7.

而对于两种食用蘑菇:

自动学习全部认为可以吃。

而MindSpore认为有一个可以吃,另一个nodu9是Boletus,有毒。


尽管两者的分类结果大相径庭,但是——

MindSpore会让白雪公主减肥,而且中毒的几率小一点,这点是毋庸置疑的了。。


好了,多少让张小白对MindSpore恢复了点信心吧。但愿张小白能通过进阶课程学习到MindSpore更高级点的知识。。。

毕竟,除了毒蘑菇,ResNet可以做的事情还是不少的。

(全文完,谢谢阅读)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。