深度学习hed边缘检测模型之裂缝检测

article/2025/10/20 9:38:28

裂缝检测原本采用分割模型较多,目前我测试了采用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)

模型输出图:

训练曲线:

效果:

效果相当不错:

 

 

 

  

 


http://chatgpt.dhexx.cn/article/NMI5wG6M.shtml

相关文章

hed-训练自己的数据集

1、准备自己训练的原图和边缘图,边缘图制作参考https://blog.csdn.net/weixin_38517705/article/details/84670150 2、将制作好的数据集放在.../rcf-master/data下,我是分为两个文件夹,一个存放原图(hed)、一个存放边…

HED边缘检测

主要是“Holistically-Nested Edge Detection ”这一篇文章 code download:https://github.com/s9xie/hed 这篇边缘检测主要是基于caffe框架下的,所以要实现的时候要在自己电脑上编译caffe,caffe安装编译可以看本人的博客:http:…

【边缘检测】HED论文笔记

论文全称:Holistically-Nested Edge Detection 亮点 1、基于整个图像的训练和预测 2、多尺度和多水平的特征学习 3、基于FCN和VGG 改进 4、通过多个side output输出不同scale的边缘,然后通过一个训练的权重融合函数得到最终的边缘输出。可以solve e…

HED测试单张图片示例

论文全名:[2015](HED_FCN)Holistically-Nested Edge Detection.pdf 代码下载地址:https://github.com/s9xie/hed 附上一篇个人认为写的比较好的论文笔记:http://blog.csdn.NET/u012905422/article/details/52782615 关于HED的训练在另一篇博客…

【深度学习HED边缘检测网络】

源码: 这个版本的代码是最简洁易懂的,https://github.com/senliuy/Keras_HED_with_model 数据集: 链接:https://pan.baidu.com/s/13qStI9DP1mbt9JallQFpPg 提取码:wbfi HED(Holistically-Nested Edge Detection) …

深度学习边缘检测 HED 训练自己的数据

深度学习边缘检测 HED 训练自己的数据 数据集制作 使用labelme标注,选择lineStrip(线条束)标注 生成json文件。 之后使用批量处理脚本将json文件转为边缘数据集。具体过程如下: 首先将所有的json文件放入一个文件夹内&#xff0c…

《HED:Holistically-Nested Edge Detection》原文翻译

注:本人水平有限,如有错误,恳请指正,谢谢 源代码和预训练模型获取地址: https://github.com/s9xie/hed 论文地址:https://arxiv.org/abs/1504.06375 Holistically-Nested Edge Detection 摘要 本文研究了…

边缘检测-HED-RCF

(HED)Holistically-Nested Edge Detection 解决问题 ICCV2015的文章。主要解决两个问题: (1)基于整个图像的训练和预测; (2)多尺度和多水平(多层次)的特征学习。该算法通过深度学习模型,完成了…

论文笔记 HED:Holistically-Nested Edge Detection

同组小伙伴推荐的文章,一篇看似做边缘检测,实际做出了语义分割的文章,ICCV2015的文章。主要解决两个问题:(1)基于整个图像的训练和预测;(2)多尺度和多水平的特征学习。该…

HED边缘检测:Holistically-nested Edge Detection 解读

Holistically-nested Edge Detection (以下简称HED) HED通过深度学习网络实现边缘检测,网络主要有以下两个特点 Holistically:指端到端(end-to-end 或者image-to-image)的学习方式,也就是说&a…

HED 和 RCF 图像边缘检测

HED 和 RCF 图像边缘检测 引言 虽然传统边缘检测算法在不断发展的过程中也取得了很大的进步,但仍然无法做到精细的边缘检测处理。随着近年来深度学习的快速发展,计算机视觉领域因此获益颇丰,当下最先进的计算机视觉应用几乎都离不开深度学习…

hed

一、编译caffe cd进入hed-master文件夹目里下 (1) cp Makefile.config.example Makefile.config (2) make all 出现错误a 解决: 打开Makefile.config文件 将 INCLUDE_DIRS : $(PYTHON_INCLUDE) /usr/local/incl…

边缘检测之HED

出自论文,Holistically-Nested Edge Detection ,ICCV2015,Marr奖提名,非常值得看的一篇。 边缘检测的工作分为以下3个研究方向: (1)传统的检测算子:Sobel ,Canny (2)基于信息理论设计的手工特征:Statisti…

HED神经网

本篇论文提出了一种新的网络结构进行边缘检测,论文这种网络结构称为Holistically-nested network。HED能够实现图像到图像的训练,输入一个图像,输出这个图像的边缘检测图。 1.现有的Multi-Scale和Multi-level学习的网络结构 2. (e)图是论文提…

身体证检测与识别(二)——HED边缘检测与矫正

前言 1.关于边缘检测,我这里用了HED这个边缘检测网络,HED创作于2015年,骨干网络是state-of-the-art的VGG-16,并且使用迁移学习初始化了网络权重。关于HED的算法原理与训练模型代码可以转到github。 2.OpenCV也有好几边缘检测算法可用&#x…

mysql otter 数据同步_MySQL数据同步之otter

一、otter介绍 基于日志数据,用于MySQL或者ORACLE之间准实时同步数据。 用途: mysql/oracle互相同步 中间表/行记录同步 二、原理及架构图 otter整体模块 manager (提供web页面进行同步管理) arbitrate (分布式调度,可跨IDC机房) node (同步过…

Otter简介

原文地址:http://m635674608.iteye.com/blog/2314908 Otter它是一个数据同步解决方案,可以解决本地跨网络跨机房跨地域的数据同步问题,并且拥有可观的效率,web管理工具等特点,而且背景也很优秀,据说阿里B2B内部的本地/异地机房的同步需求基本全上了 otte…

Canal和Otter

问题一: 跨公网部署Otter 参考架构图 解析 ​ a. 数据涉及网络传输,S/E/T/L几个阶段会分散在2个或者更多Node节点上,多个Node之间通过zookeeper进行协同工作 (一般是Select和Extract在一个机房的Node,Transform/Load落在另一个机房的Node&a…

otter学习(一)——otter原理

1.otter原理: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统 原理描述: 1. 基于Canal开源产品,获取数据库增量日志数据。 2. 典型管理系统架构,manager(web管理…

otter数据同步

一、Otter目前支持了什么 1. 单向同步, mysql/oracle互相同步 2. 双向同步,无冲突变更 3. 文件同步,本地/aranda文件 4. 双A同步,冲突检测&冲突补救 5. 数据迁移,中间表/行记录同步 导历史表还需要程序代码实现吗&…