裂缝检测原本采用分割模型较多,目前我测试了采用hed的裂缝检测;代码采用这个版本的代码是最简洁易懂的,https://github.com/senliuy/Keras_HED_with_model

环境:win10  keras2.2.4

hed.py

from keras.layers import Conv2D, Conv2DTranspose, Input, MaxPooling2D
from keras.layers import Concatenate, Activation
from keras.models import Model
from keras import backend as K
import tensorflow as tf
from keras.optimizers import *def side_branch(x, factor):x = Conv2D(1, (1, 1), activation=None, padding='same')(x)kernel_size = (2*factor, 2*factor)x = Conv2DTranspose(1, kernel_size, strides=factor, padding='same', use_bias=False, activation=None)(x)return xdef hed():# Inputimg_input = Input(shape=(480,480,3), name='input')# Block 1x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv1')(img_input)x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv2')(x)b1= side_branch(x, 1) # 480 480 1x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block1_pool')(x) # 240 240 64# Block 2x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv1')(x)x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv2')(x)b2= side_branch(x, 2) # 480 480 1x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block2_pool')(x) # 120 120 128# Block 3x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv1')(x)x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv2')(x)x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv3')(x)b3= side_branch(x, 4) # 480 480 1x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block3_pool')(x) # 60 60 256# Block 4x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv1')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv2')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv3')(x)b4= side_branch(x, 8) # 480 480 1x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block4_pool')(x) # 30 30 512# Block 5x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv1')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv2')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv3')(x) # 30 30 512b5= side_branch(x, 16) # 480 480 1# fusefuse = Concatenate(axis=-1)([b1, b2, b3, b4, b5])fuse = Conv2D(1, (1,1), padding='same', use_bias=False, activation=None)(fuse) # 480 480 1# outputso1    = Activation('sigmoid', name='o1')(b1)o2    = Activation('sigmoid', name='o2')(b2)o3    = Activation('sigmoid', name='o3')(b3)o4    = Activation('sigmoid', name='o4')(b4)o5    = Activation('sigmoid', name='o5')(b5)ofuse = Activation('sigmoid', name='ofuse')(fuse)# modelmodel = Model(inputs=[img_input], outputs=[o1, o2, o3, o4, o5, ofuse])filepath = './models/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5'# load_weights_from_hdf5_group_by_name(model, filepath)adam = Adam(lr = 1e-4, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0001)model.compile(optimizer= adam,loss={'o1': cross_entropy_balanced,'o2': cross_entropy_balanced,'o3': cross_entropy_balanced,'o4': cross_entropy_balanced,'o5': cross_entropy_balanced,'ofuse': cross_entropy_balanced,},metrics={'ofuse': ofuse_pixel_error})return model

损失函数:

def cross_entropy_balanced(y_true, y_pred):"""Implements Equation [2] in https://arxiv.org/pdf/1504.06375.pdfCompute edge pixels for each training sample and set as pos_weights to tf.nn.weighted_cross_entropy_with_logits"""# Note: tf.nn.sigmoid_cross_entropy_with_logits expects y_pred is logits, Keras expects probabilities.# transform y_pred back to logits_epsilon = _to_tensor(K.epsilon(), y_pred.dtype.base_dtype)y_pred   = tf.clip_by_value(y_pred, _epsilon, 1 - _epsilon)y_pred   = tf.log(y_pred/ (1 - y_pred))y_true = tf.cast(y_true, tf.float32)count_neg = tf.reduce_sum(1. - y_true)count_pos = tf.reduce_sum(y_true)# Equation [2]beta = count_neg / (count_neg + count_pos)# Equation [2] divide by 1 - betapos_weight = beta / (1 - beta)cost = tf.nn.weighted_cross_entropy_with_logits(logits=y_pred, targets=y_true, pos_weight=pos_weight)# Multiply by 1 - betacost = tf.reduce_mean(cost * (1 - beta))# check if image has no edge pixels return 0 else return complete error functionreturn tf.where(tf.equal(count_pos, 0.0), 0.0, cost)

模型输出图:

训练曲线:

效果:

效果相当不错:

 

  

深度学习hed边缘检测模型之裂缝检测相关推荐

  1. 在OpenCV中基于深度学习的边缘检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 导读 分析了Canny的优劣,并给出 ...

  2. R使用LSTM模型构建深度学习文本分类模型(Quora Insincere Questions Classification)

    R使用LSTM模型构建深度学习文本分类模型(Quora Insincere Questions Classification) Long Short Term 网络-- 一般就叫做 LSTM --是一 ...

  3. 深度学习100+经典模型TensorFlow与Pytorch代码实现大合集

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]深度学习在过去十年获得了极大进展,出现很多新的模型,并且伴随TensorF ...

  4. CCAI 2017 | 香港科技大学计算机系主任杨强:论深度学习的迁移模型

     CCAI 2017 | 香港科技大学计算机系主任杨强:论深度学习的迁移模型 原2017.07.22AI科技大本营 作者 | 贾维娣 7月23日,由中国人工智能学会.阿里巴巴集团 & 蚂蚁 ...

  5. 香港科技大学计算机系主任杨强:论深度学习的迁移模型

    一.迁移学习的三大优点 为什么我们做迁移学习?我总结了三条原因: 小数据.我们生活当中大量遇见的是小数据而不是大数据,当数据很稀疏,看到不同的类别我们还是能在当中做出很靠谱的模型.这并不是空穴来风,而 ...

  6. 大白话聊聊“深度学习”和“大模型”

    1950年图灵发表论文<计算机器与智能>( Computing Machinery and Intelligence),提出了"机器智能"(Machine Intell ...

  7. 基于深度学习技术的电表大数据检测系统

    基于深度学习技术的电表大数据检测系统 人工智能技术与咨询 来源:< 人工智能与机器人研究> ,作者方向 关键词: 智能电表:数据分析:深度学习时序模型: 摘要: 随着我国电厂不断发展,我国 ...

  8. 基于深度学习的图像识别模型研究综述

    基于深度学习的图像识别模型研究综述 摘要:深度学习是机器学习研究中的一个新的领域,其目的在于训练计算机完成自主学习.判断.决策等人类行为并建立.模拟人脑进行分析学习的神经网络,它模仿人类大脑的机制来解 ...

  9. 基于深度学习的高分辨率遥感图像目标检测技术目前的研究现状

    参考   基于深度学习的高分辨率遥感图像目标检测技术目前的研究现状 - 云+社区 - 腾讯云 目录 一.概述 二.通用目标检测方法 1.类不平衡问题 2.复杂背景 3.目标的尺度变化 4.特殊视角 5 ...

最新文章

  1. Flink1.7.2 sql 批处理示例
  2. SharePoint 2010自定义母版页小技巧——JavaScript和CSS引用
  3. 我与监控宝之间的点点滴滴
  4. Thread 同步线程(打印机同步)
  5. python运行慢-提高python运行速度的几个技巧
  6. lua实现多继承-方式1
  7. centos mysql安装
  8. FFMPEG视音频编解码零基础学习方法
  9. python刷b站教程_【Python】【学习资源】B站上的Python学习资源
  10. java 通讯开发_java之接口开发-初级篇-socket通信
  11. 13、细说装饰器与闭包
  12. ae效果英文版翻译对照表_AE自带特效中英文对照表
  13. 计算机考试界面没有验证码,win10系统下网页验证码显示不了的两种解决方法
  14. 德州大学达拉斯分校计算机专业博士,德克萨斯大学达拉斯分校计算机科学理科硕士入学条件及实习就业...
  15. exoplay切换全屏_Flutter 实现视频全屏播放逻辑及解析
  16. JavaSE——IO流
  17. Mybatis学习 association关联 和 collection集合
  18. Response to preflight request doesn‘t pass access control check: No ‘Access-Control-Allow-Origin跨域问题
  19. 里氏代换原则——与多态的辩证关系
  20. Gaussdb,国产数据库的崛起

热门文章

  1. 供应化学试剂mPEG-Biotin,甲氧基-聚乙二醇-生物素
  2. Openlayers 根据坐标点画点线圆多边形
  3. 短视频如何去水印,去水印,短视频去水印,去水印下载到本地
  4. 代码坏味道 之 8 数据泥团 data clumps
  5. 运算放大器的内部结构-运放
  6. 基于FPGA的DDS实现
  7. [FPGA]DDS电路设计
  8. 深入浅出JavaScript(中文版)__莫里森 初读笔记
  9. matlab中stms和taylor,基于Matlab的电力系统故障分析与仿真V2.1(手机版)
  10. matlab读取感光度,数字图像处理实验(MATLAB版)