MiniBullLab/easy_ai

One Class Task开发

Closed this issue · 20 comments

  • 1. 在easyai中加入one class任务
  • 2. 加入GANomaly网络以及loss
  • 3. 测试one class功能,使得运行正常

easyai中加入了one class任务

GANomaly算法实现

@kingwangxiang 可以使用develop分支代码测试one class

运行命令:python3 easyai/train_task.py -t one_class -i /home/lpj/github/data/one_class/ImageSets/train.txt -v /home/lpj/github/data/one_class/ImageSets/val.txt -m GANomaly

运行命令:python3 easyai/train_task.py -t one_class -i /home/lpj/github/data/one_class/ImageSets/train.txt -v /home/lpj/github/data/one_class/ImageSets/val.txt -m GANomaly

运行命令:python3 easyai/train_task.py -t one_class -i /home/lpj/github/data/one_class/ImageSets/train.txt -v /home/lpj/github/data/one_class/ImageSets/val.txt -m GANomaly

数据集制作

python3 easyai/tools/sample_tool/create_one_class_sample.py -i /home/lpj/github/data/one_class/JPEGImages/ok -o /home/lpj/github/data/one_class/ImageSets

数据集格式与分类数据集一样,只是JPEGImages目录下只能有一个或者两个文件夹。对于上面的命令“-i”参数为正常样本数据的路径

1.杜伦大学提出GANomaly,测试cifar10数据集。
1.1选用roc和auc评价标准,评估模型性能,如图1-A所示,可以使用约登指数来选取最佳阈值。
roc-eer
1-A模型pingj评估
2.最佳阈值选取方法https://blog.csdn.net/zaf0516/article/details/108865009
3.后续尝试使用easy ai最新代码测试GANomaly异常检测任务。

1.尝试使用easy ai最新代码测试one_class异常检测任务。
1.1使用cifar10制作one_class训练数据集,将plane类选作异常类,其余9类为正常类。训练数据集制作完成。
1.2尝试训练,代码已跑通,模型训练中。试验截图,如图1-A所示。
test_one_classl
1-A模型训练中

确认输入标签0表示正常,还是1表示正常。

后期待验证

1.尝试使用easy ai最新代码测试one_class异常检测任务。
1.网络训练过程总的loss可以正常下。
2.进入测试,我的环境中存在一些问题,会显示import amp fail!和import amp fail!,还在调试。
测试问题
3.UndefinedMetricWarning: No positive samples in y_true, true positive value should be meaningless
UndefinedMetricWarning)不太确定这个问题,是不是跟标签0和1相反有关。
测试问题1

1.尝试使用easy ai最新代码测试one_class异常检测任务。
1.在数据集中另加入了ng文件夹,网络训练过程总的loss可以正常下,auc曲线图可以画出,如图1-A所示。
0epoch
图1-A
2.训练过程中还是会显示import amp fail!和import amp fail!。
3.下载最新的代码训练会出现如图3-A的错误,不能载入BackboneFactory(),但是在代码行提示中能够索引到这个类,在执行时会报错,同时import amp fail!和import amp fail!也会出现,问题还在调试中。
2021 5月版代码问题
图3-A
4.画出roc曲线,是在上一个版本中试验的。

1.尝试使用easy ai最新代码测试one_class异常检测任务。
1.easy_ai中加入约登指数来选取最佳阈值,测试结果如图1-A所示。
加入约登指数确定阈值
图1-A加入约登指数来选取最佳阈值

1.调研新的异常检测方法。
1.2019年CVPR论文,提出了异常检测的数据集,论文图片如1-A所示。MVTec AD是MVtec公司提出的一个用于异常检测的数据集,发布于2019CVPR。与之前的异常检测数据集不同,该数据集模仿了工业实际生产场景,并且主要用于unsupervised anomaly detection。数据集为异常区域都提供了像素级标注,是一个全面的、包含多种物体、多种异常的数据集。
MvTec_AD
图1-A
https://www.mvtec.com/company/research/datasets/mvtec-ad/
2.MvTec AD相关项目,目前代码未完全更新,后续跟踪看看。
参考链接

数据暂没有下载下来

1.MVTec AD论文中的数据集已下载,如图1-A所示。
grid

grid
hazelnut

hazelnut
图1-A数据样图

1.MVTec AD 2019年论文:MVTec AD – A Comprehensive Real-World Dataset for Unsupervised Anomaly Detection,阅读完毕。
1.1文中分析了当前异常检测在特定数据集上取得效果,具有代表的几种方法。分析如下。
1.1.1 AnoGAN
作者试验观察到 GAN 训练导致模式崩溃的趋势 [2]。 然后,生成器通常完全无法重现给定的测试图像,因为所有潜在样本都或多或少地生成了相同的图像。 因此,AnoGAN 在处理变化较大的对象存在很大困难,比如对象在数据集中以各种形状或方向出现。 它对于包含较少变化的对象类别表现更好,例如瓶子和药丸。同时,AnoGAN 无法对纹理图案的所有细微变化进行建模,这导致对于地毯类别异常检测,完全失败。
1.1.2 L2 and SSIM Autoencoder
试验观察到该方法在所有数据集类别的稳定训练,并对 SSIM 和 L2 自动编码器进行了合理的重建。 特别是对于数据集的对象类别内的物体,在大多数情况下,两种自动编码器都优于所有其他评估方法。 然而,对于某些类别,两个自编码器都无法对小细节进行建模,从而导致图像重建相当模糊。
1.1.3 CNN Feature Dictionary
作为一种检测纹理表面异常区域的方法,基于CNN特征的特征字典对除网格外的所有纹理都取得了令人满意的结果。 由于它不包含有关提取特征的空间位置的附加信息,因此在对象类别内的物体进行评估时,其性能会下降。 比如地毯的良好异常分割性能,只有很少的误报,而金属螺母上的颜色缺陷仅被部分发现。
1.1.4 GMM-Based Texture Inspection Model
基于 GMM 的纹理检查模型专门设计用于对纹理图像进行操作,在数据集的大多数纹理类别中表现良好。 然而,在网格上,由于其灵敏度不够高的许多小缺陷,它无法获得令人满意的结果。此外,由于它仅对灰度图像进行操作,因此无法检测到大多数基于颜色的缺陷。
1.1.5 Variation Model
对于方差模型,可以在螺丝、牙刷和瓶子上观察到良好的性能,而在金属螺母和胶囊上产生的结果相对较差。 这主要是因为后一个对象在对象表面上包含某些随机变化,这阻止了变化模型为大多数图像像素学习合理的均值和方差值。 如胶囊上的印记可能出现在不同的位置,因此它总是会被错误分类为缺陷。

另外新建issue处理