螺丝松紧分析-2

Posted on Oct 12, 2024

概述

因为之前的实验中,发现有些图片重复和命名格式的问题,重新整理之后再跑一次。

训练流程

Yolo训练和切割图片

因为有很多模型图片,计划是通过模型图片训练一个用于螺丝的语义分割模型出来,这样有利于以后用模型的方式,快速增加预训练的样本量。下面是用于 Yolo 训练的图片整理的结果,从下图看,参与 Yolo 训练的图片中,可能会有1-5个左右的螺丝。

模型训练出来之后,我们通过 Yolo 来分别针对 tight 和 loose 分割图片,用于做分类模型的预训练,从分割的结果可以看到,Yolo 已经将原始的图片的螺丝的部分分割出来了。

另外还需要对病人的真实图片进行 Yolo 的分割,之后这部分的图片会用于 fine-tuned 上面提到的预训练的模型,图片的分割结果如下。

分类模型的预训练

使用上面准备好的训练图片,进行第一步的预训练,70%做训练集,数据量如下。

训练的结果如下,模型的在训练集上准确率达到95%,在另外的15%验证集图片上表现也还可以,达到了85%的准确率。

fine-tuned模型

我们用上述提到的经过 Yolo 分割的病人的真实螺丝图片进行模型 fine-tuned,还是一样的70%的图片数量作为训练集。

训练的结果如下,训练集的准确率很高,达到了100%,并且在验证集上也有90%的准确率,不过我们可能还不能认为他这是一个好模型,关键是因为某一分类的图片太少了,病人 loose 的图片参与训练只有不到30张,参与训练的 tight 的图片有300+张。

这个结果还是不错的,基本上 tight 的能预测到是 tight 的,loose 同样。

grad-cam结果

虽然我们在上面的结果中,因为图片数量的问题怀疑模型的准确度,所以我们再用 grad-cam 来看看这个 CNN 分类模型的依据是否能在图片中很直观的观察到。从下面的结果看,这个 grad-cam 并不能准确的指出如何判断螺丝松紧的。

实验复盘

fine-tuned过程病人loose图片太少

这个问题是一直以来都有的了,病人真实的 loose 图片不好收集,从预训练的结果可以猜测到,实际上图片量上百上千之后,效果应该还是可以的,那么图片就只能继续收集了。

能否用预训练模型对病人的螺丝直接进行分类

理论上,当然不太建议,毕竟用模型直接去推理病人的,应该是有 gap 的,不过可以试一试。从这个结果看,大部分 predict 成 loose 的,实际都是 tight,模型的准确度是一般的,只有35%,所以预训练的模型用在病人的图片上分类的效果是比较差的。

grad-cam的结果有没有必要

从 grad-cam 的结果没有把 CNN 真正有效的可视化,可能是需要 review 一下 grad-cam 的代码了。