作者 | 小白       责编 | 欧阳姝黎

在机器学习中,处理异常检测任务是很常见的。数据科学家经常遇到必须显示,解释和预测异常的问题。在这篇文章中,我们主要讲述:从时间序列交换为图像。给定一张图像,我们要实现双重目的:预测异常的存在并对其进行个性化处理,从而对结果进行丰富多彩的表示。

数据集

我们从互联网上获得了数据:裂缝数据集包含墙壁裂缝的图像(URL格式)。提供了1428张图像:其中一半显示了新的且未损坏的墙块;其余部分显示了各种尺寸和类型的裂缝。第一步包括发出一个获取请求,以读取图像,调整大小并将其转换为数组格式。

images = []for url in tqdm.tqdm(df['content']):response = requests.get(url)img = Image.open(BytesIO(response.content))img = img.resize((224, 224))numpy_img = img_to_array(img)img_batch = np.expand_dims(numpy_img, axis=0)images.append(img_batch.astype('float16'))
images = np.vstack(images)

从下面的示例中你们可以看到,在我们的数据中显示了不同类型的墙体裂缝,其中一些对我来说也不太容易识别。

开裂和不开裂的例子

模型

我们想要建立一个机器学习模型,该模型能够对墙壁图像进行分类并同时检测异常的位置。为了达到这个双重目的,最有效的方法是建立一个强大的分类器,它将能够读取输入图像并将其分类为“损坏”或“未损坏”。在最后一步,我们将利用分类器学到的知识来提取有用的信息,这将有助于我们检测异常情况。在Keras中,仅需几行代码,这非常容易做到。

vgg_conv = vgg16.VGG16(weights='imagenet', include_top=False, input_shape = (224, 224, 3))
for layer in vgg_conv.layers[:-8]:layer.trainable = False

详细地说,我们导入了VGG体系结构,可以训练最后两个卷积块。这将使我们的模型能够专门从事分类任务。为此,我们还排除了原始模型的顶层,将其替换为另一种结构。

x = vgg_conv.output
x = GlobalAveragePooling2D()(x)
x = Dense(2, activation="softmax")(x)
model = Model(vgg_conv.input, x)
model.compile(loss = "categorical_crossentropy", optimizer = optimizers.SGD(lr=0.0001, momentum=0.9), metrics=["accuracy"])

在分类阶段,GlobalAveragePooling层通过取每个要素图的平均值来减小前一层的大小。这种选择加上中间致密层的省略用法,可以避免过度拟合。如果你们可以使用GPU,则培训既简单又容易。COLAB为我们提供了加快这一过程所需的武器。我们还使用了Keras提供的简单数据生成器进行图像增强。最后,我们能够达到0.90的整体精度。

局部异常

现在,在训练好模型之后,我们将对其进行操作以提取所有有用的信息,以使我们能够在墙壁图像中显示出裂缝。我们试图使此过程变得容易并且很容易在最后用热图表示法看到。我们需要的有用信息位于顶部,特别是我们可以访问:

  • 卷积层:上层是VGG结构,还有网络创建的更多重要功能。我们选择了最后一个卷积层(“ block5_conv3 ”),并在此处剪切了我们的分类模型。我们已经重新创建了一个中间模型,该模型以原始图像为输入,输出相关的激活图。考虑到维度,我们的中间模型增加了初始图像的通道(新功能)并减小了尺寸(高度和宽度)。

  • 最终密度层:对于每个感兴趣的类别,我们都需要这些权重,这些权重负责提供分类的最终结果。

有了这些压缩的物体,我们掌握了定位裂缝的所有知识。我们希望将它们“绘制”在原始图像上,以使结果易于理解且易于看清。“解压缩”此信息在python中很容易:我们只需进行双线性上采样即可调整每个激活图的大小并计算点积。执行一个简单的函数即可访问:

def plot_activation(img):pred = model.predict(img[np.newaxis,:,:,:])pred_class = np.argmax(pred)weights = model.layers[-1].get_weights()[0]class_weights = weights[:, pred_class]intermediate = Model(model.input,model.get_layer("block5_conv3").output)conv_output = intermediate.predict(img[np.newaxis,:,:,:])conv_output = np.squeeze(conv_output)h = int(img.shape[0]/conv_output.shape[0])w = int(img.shape[1]/conv_output.shape[1])act_maps = sp.ndimage.zoom(conv_output, (h, w, 1), order=1)out = np.dot(act_maps.reshape((img.shape[0]*img.shape[1],512)), class_weights).reshape(img.shape[0],img.shape[1])plt.imshow(img.astype('float32').reshape(img.shape[0],img.shape[1],3))plt.imshow(out, cmap='jet', alpha=0.35)plt.title('Crack' if pred_class == 1 else 'No Crack')

我在下面的图像中显示结果,在该图像中,我已在分类为裂纹的测试图像上绘制了裂纹热图。我们可以看到,热图能够很好地泛化并指出包含裂缝的墙块。

总结

在这篇文章中,我们提供了一种用于异常识别和定位的机器学习解决方案。所有这些功能都可以通过实现单个分类模型来访问。在训练过程中,我们的神经网络会获取所有相关信息,从而可以进行分类。在此阶段之后,我们无需进行额外的工作就组装了最终零件,这些零件告诉我们图像中裂纹的位置!

☞“Mac 不靠谱”,被苹果放弃的英特尔开启“嘲讽技能”!☞重磅!GitLab 在中国成立公司极狐,GitHub 还会远吗?
☞谷歌苹果齐降税,却没能拯救开发者的“钱包”!
☞未来已来!分布式数据库的“星辰大海”绝不仅限于替换!

快速攻克机器学习图像异常检测相关推荐

  1. 图像 异常检测算法_检测图像异常的算法

    图像 异常检测算法 Modern applications are generating enormous amounts of image data. And in the last years, ...

  2. 【机器学习】异常检测

    前言 异常检测实际案例:网络安全中的攻击检测,金融交易欺诈检测,疾病侦测,和噪声数据过滤等.时间序列的异常又分为点异常和模式异常. 对于一个新观测值进行判断: 离群点检测: 训练数据包含离群点,即远离 ...

  3. 如何使用机器学习进行异常检测和状态监控?

    https://www.toutiao.com/a6653038876652732939/ 2019-02-01 22:28:43 本文将介绍机器学习和统计分析的几种不同技术和应用,然后展示如何应用这 ...

  4. 机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现

    机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现 参考文章: (1)机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现 (2)https://www.cn ...

  5. 最新研究总结:工业图像异常检测

    点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! 异常检测,GAN如何gan ? 作者丨小小理工男@知乎 来源丨https://zh ...

  6. 工业图像异常检测最新研究总结(2019-2020)

    点击上方"机器学习算法那些事",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨小小理工男@知乎 来源丨https://zhuanl ...

  7. 【机器学习】异常检测算法之(HBOS)-Histogram-based Outlier Score

    HBOS全名为:Histogram-based Outlier Score.它是一种单变量方法的组合,不能对特征之间的依赖关系进行建模,但是计算速度较快,对大数据集友好,其基本假设是数据集的每个维度相 ...

  8. 【机器学习】异常检测算法速览(Python代码)

    正文共: 8636字 8图 预计阅读时间: 22分钟 一.异常检测简介 异常检测是通过数据挖掘方法发现与数据集分布不一致的异常数据,也被称为离群点.异常值检测等等. 1.1 异常检测适用的场景 异常检 ...

  9. 吴恩达机器学习 12.异常检测

    异常检测 1.问题的动机 什么是异常检测? 假想你是一个飞机引擎制造商,当你生产的飞机引擎从生产线上流出时,你需要进行QA(质量控制测试),而作为这个测试的一部分,你测量了飞机引擎的一些特征变量,比如 ...

最新文章

  1. idea使用maven-archetype-webapp方式创建web工程
  2. GPIO做输出还能作外部中断输入吗?
  3. 思科、华为、华三、Juniper路由协议优先级汇总
  4. Grunt + Bower—前端构建利器
  5. 神州数码笔试题C语言,神州数码程序类笔试题分享
  6. 60-100-340-使用-DataSource-hive相关-Flink加载hive数据源
  7. 服务器查看文件共享记录,服务器共享文件记录
  8. Matlab Tricks(七)—— 矩阵列/列的归一化/单位化(normalize)
  9. 图像匹配得到精确的旋转角度
  10. DOS7.1安装与学习
  11. PHP 富文本内容中图片路径追加域名
  12. 异步4月新书,送出一本你爱的!
  13. pyhon3爬取百度搜索结果
  14. 综述丨视频超分辨率研究方法
  15. 布袋除尘器过滤风速多少_布袋除尘器选用多少的过滤风速比较合适
  16. 智能风控平台核心之风控决策引擎(四)
  17. PHP array_chunk()函数
  18. 接口自动化-接口自动化测试注意情况
  19. 紫禁繁花服务器维护,紫禁繁花跨服活动内容一览_紫禁繁花跨服活动详情_玩游戏网...
  20. py socket5 代理

热门文章

  1. 【软件工程】--软工文档总结
  2. IT职场人生系列之十九:危险职业(中)
  3. GTK+图形化应用程序开发学习笔记(二)—Glib库
  4. Json序列反序列类型处理帮助类
  5. Linux GCC GDB 第一节
  6. 《程序是怎样跑起来的》读书笔记
  7. IOS 文件管理 2
  8. ASP.NET 生命周期(原文翻译)
  9. WampServer2.0的Apache的service无法启动的解决方法
  10. MyEclipse生成WAR包并在Tomcat下部署发布[转]