快速攻克机器学习图像异常检测
作者 | 小白 责编 | 欧阳姝黎
在机器学习中,处理异常检测任务是很常见的。数据科学家经常遇到必须显示,解释和预测异常的问题。在这篇文章中,我们主要讲述:从时间序列交换为图像。给定一张图像,我们要实现双重目的:预测异常的存在并对其进行个性化处理,从而对结果进行丰富多彩的表示。
数据集
我们从互联网上获得了数据:裂缝数据集包含墙壁裂缝的图像(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 还会远吗?
☞谷歌苹果齐降税,却没能拯救开发者的“钱包”!
☞未来已来!分布式数据库的“星辰大海”绝不仅限于替换!
快速攻克机器学习图像异常检测相关推荐
- 图像 异常检测算法_检测图像异常的算法
图像 异常检测算法 Modern applications are generating enormous amounts of image data. And in the last years, ...
- 【机器学习】异常检测
前言 异常检测实际案例:网络安全中的攻击检测,金融交易欺诈检测,疾病侦测,和噪声数据过滤等.时间序列的异常又分为点异常和模式异常. 对于一个新观测值进行判断: 离群点检测: 训练数据包含离群点,即远离 ...
- 如何使用机器学习进行异常检测和状态监控?
https://www.toutiao.com/a6653038876652732939/ 2019-02-01 22:28:43 本文将介绍机器学习和统计分析的几种不同技术和应用,然后展示如何应用这 ...
- 机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现
机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现 参考文章: (1)机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现 (2)https://www.cn ...
- 最新研究总结:工业图像异常检测
点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! 异常检测,GAN如何gan ? 作者丨小小理工男@知乎 来源丨https://zh ...
- 工业图像异常检测最新研究总结(2019-2020)
点击上方"机器学习算法那些事",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨小小理工男@知乎 来源丨https://zhuanl ...
- 【机器学习】异常检测算法之(HBOS)-Histogram-based Outlier Score
HBOS全名为:Histogram-based Outlier Score.它是一种单变量方法的组合,不能对特征之间的依赖关系进行建模,但是计算速度较快,对大数据集友好,其基本假设是数据集的每个维度相 ...
- 【机器学习】异常检测算法速览(Python代码)
正文共: 8636字 8图 预计阅读时间: 22分钟 一.异常检测简介 异常检测是通过数据挖掘方法发现与数据集分布不一致的异常数据,也被称为离群点.异常值检测等等. 1.1 异常检测适用的场景 异常检 ...
- 吴恩达机器学习 12.异常检测
异常检测 1.问题的动机 什么是异常检测? 假想你是一个飞机引擎制造商,当你生产的飞机引擎从生产线上流出时,你需要进行QA(质量控制测试),而作为这个测试的一部分,你测量了飞机引擎的一些特征变量,比如 ...
最新文章
- idea使用maven-archetype-webapp方式创建web工程
- GPIO做输出还能作外部中断输入吗?
- 思科、华为、华三、Juniper路由协议优先级汇总
- Grunt + Bower—前端构建利器
- 神州数码笔试题C语言,神州数码程序类笔试题分享
- 60-100-340-使用-DataSource-hive相关-Flink加载hive数据源
- 服务器查看文件共享记录,服务器共享文件记录
- Matlab Tricks(七)—— 矩阵列/列的归一化/单位化(normalize)
- 图像匹配得到精确的旋转角度
- DOS7.1安装与学习
- PHP 富文本内容中图片路径追加域名
- 异步4月新书,送出一本你爱的!
- pyhon3爬取百度搜索结果
- 综述丨视频超分辨率研究方法
- 布袋除尘器过滤风速多少_布袋除尘器选用多少的过滤风速比较合适
- 智能风控平台核心之风控决策引擎(四)
- PHP array_chunk()函数
- 接口自动化-接口自动化测试注意情况
- 紫禁繁花服务器维护,紫禁繁花跨服活动内容一览_紫禁繁花跨服活动详情_玩游戏网...
- py socket5 代理