#练习题目–裂缝识别
1、数据集准备
数据集为混凝土照片,共分为两类,存在裂缝的图片和不存在裂缝的图片。整个数据集分为训练集、验证集、测试集三部分,其比例可以不同,不同的比例可能造成不同的训练效果,这里练习过程中采用训练集、验证集、测试集:3:1:1。;注意:所有图片的尺寸需要保持一致,这里是128×128的图片,可以根据实际情况自己选择,图像越大运算速度越慢。下图是存在裂缝的照片

2、数据读取及处理准备工作
(1)算法库导入


from keras.layers import Conv2D,MaxPooling2D,Dropout,Dense,Flatten,Activation
import numpy as np
from keras.layers.normalization import BatchNormalization
import cv2
from keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
from keras.utils import plot_model
from keras import optimizers
import os
from    keras.utils.vis_utils    import plot_model
import keras
from keras import regularizers
from keras.callbacks import Callback
from keras.models import Sequential
from keras.callbacks import ModelCheckpoint,EarlyStopping#检查点

(2)读取图片数据
这里是二分类,类别设置为2、每次对128张图片进行批量训练,

num_classes = 2 #类别
batch_size =128 #批量大小
epochs =50#训练次数
#读取图片数据
file1=os.listdir('F:/BankCardOCR/dataset/digit_dataSet/train(128^2)/1')
file2=os.listdir('F:/BankCardOCR/dataset/digit_dataSet/train(128^2)/0')
file3=os.listdir('F:/BankCardOCR/dataset/digit_dataSet/validation128^2/1')
file4=os.listdir('F:/BankCardOCR/dataset/digit_dataSet/validation128^2/0')
m=len(file1)+len(file2)#训练集图片数量
m2=len(file3)+len(file4)#验证集图片数量

(3)处理工作

def changeDim(img):#扩展维度变4维img=np.expand_dims(img,axis=2)#return img
def Generator(path, batch_size):data = []label = []while True:file=os.listdir(path)i=0img1=[]img2=[]imgname1=os.listdir(path + '/' + file[0])imgname2 = os.listdir(path + '/' + file[1])for name1 in imgname1:img1.append(path + '/' + file[0]+'/'+name1)for name2 in imgname2:img2.append(path + '/' + file[1] + '/'+name2)imgname=img1+img2######横向连接# print(imgname)print((len(imgname)))np.random.shuffle(imgname)#读取图像,根据文件名制作标签for finame in imgname:im = cv2.imread(finame,0)label_a=finame.split('/')[-2]im=changeDim(im)data.append(im)label.append(label_a)if (len(label) == batch_size ):data = np.array(data)data=data.astype('float32')data/=255.0#归一化label = keras.utils.to_categorical(label, 2)#标签热码yield data, labeldata = []label = []i+=1

3、网络结构设计
一般卷积神经网络结构包含卷积层、池化层(最大池化、平均池化),全连接层,正则化层、丢弃层。下面代码是常用的一种算法结构,采用Sequential(),可以不断的添加层,一般卷积层越多识别越好,但是,越多或导致训练参数量过大,过拟合等问题。卷积层的卷积核、卷积尺寸、卷积层数据也是可以根据识别目标而选择的。越简单的识别对象,对卷积神经网络的能力要求越低。所以,相对多分类识别,二分类任务是非常简单的。所以模型可以不断轻量化。下面为实现裂缝识别的一个demo。效果不好勿喷

model = createModel(num_classes)
def createModel(num_classes):model = Sequential()  # 顺序模型model.add(Conv2D(16, (3, 3), strides=(1, 1), padding="same", input_shape=(128, 128, 1), data_format='channels_last',kernel_initializer='uniform', activation="relu"))# model.add(BatchNormalization())model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))# model.add(Activation('relu'))model.add(Conv2D(32, (3, 3), strides=(1, 1), activation="relu"))# model.add(BatchNormalization())# model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))model.add(Conv2D(64, (3, 3), activation="relu"))model.add(Conv2D(128, (3, 3), activation="relu"))model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name="pool5"))model.add(Conv2D(256, (1, 1)))model.add(Conv2D(256, (2, 2)))model.add(Conv2D(256, (2, 2), activation="relu"))model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name="pool1"))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(256))model.add(BatchNormalization())model.add(Activation('relu'))model.add(BatchNormalization())model.add(Dropout(0.5))model.add(Dense(num_classes))model.add(BatchNormalization())model.add(Activation("softmax"))model.summary()return model

4、运行
网络结构构建后,还需要确定超参数,这里超参数包括学习次数、学习率。这里没有设置学习率。采用的adam自带的学习率,当然也可以设置。
这里‘’batch_size‘’参数也是一个重要的参数,一般选用2的倍数,数值越小训练越慢,且训练效果不好,所以一般选择4、8、16等,当然这也和你的电脑配置有关系,你要是设置为32或64或更大,可能无法运行不了,因此需要慎重选了。

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])#此处二分类选用'binary_crossentropy'损失函数
# 设置检查点
checkpointer = ModelCheckpoint(filepath='./checkpoint/weights(s128).hdf5', monitor='val_loss',verbose=1, save_best_only=True)
#训练集图片路径
trainpath='F:/BankCardOCR/dataset/digit_dataSet/train(128^2)'
#测试集图片路径
testpath='F:/BankCardOCR/dataset/digit_dataSet/validation128^2'
history=model.fit_generator(Generator(trainpath, batch_size),steps_per_epoch=int(m) // batch_size,epochs=epochs,verbose=1,validation_data=Generator(testpath, batch_size),validation_steps=int(m2) // batch_size,shuffle=True,callbacks=[checkpointer])
# 保存训练模型
model.save('./checkpoint/model(s128).h5')
通过测试集进行验证
score = model.evaluate_generator(Generator(testpath,batch_size),steps=int(m) // batch_size)
print('validation loss:', score[0])
print('validation accuracy:', score[1])
print(history.history.keys())

5、模型训练结果
训练结果

plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('model1 accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['trian','test'],loc='upper left')
plt.show()plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model1 loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['trian','test'],loc='upper left')
plt.show()

下面是训练效果图,当然判断模型好坏是存在常用的几个指标的,准确率、召回率、F1综合评价参数,均有对应的计算公式,这里就不再讲了,后续会单独分享受。
这个数据集是本人花费大量时间整理的,如果需要有偿,谢谢。

练习题目--裂缝识别相关推荐

  1. 毕设题目:Matlab裂缝识别

    1 案例背景 随着国家对公路建设的大力投入,我国的公路通车总里程己经位居世界前列,这样进一步促进了我国经济建设的发展.随着公路的大量投运,公路日常养护和管理已经成为制约公路运营水平提高的瓶颈,特别是路 ...

  2. 基于Matlab裂缝识别检测系统

    图像的特征是图像处理和特征识别的出发点,决定了处理过程中算法的选取.一般来说,采集系统得到的路面图像中包含三部分:核心部分是待识别的目标裂缝:另一部分是无破损的路面,即背景:最后是噪声,包括油斑阴影等 ...

  3. matlab路面裂缝检测系统,裂缝识别(路面裂缝检测识别系统设计)

    [实例简介]:裂缝识别 [实例截图] [核心代码] function pushbuttonOpenFile_Callback(hObject, eventdata, handles) % hObjec ...

  4. 【裂缝识别】基于matlab GUI路面裂缝识别(带面板)【含Matlab源码 1648期】

    ⛄一.简介 1 案例背景 随着国家对公路建设的大力投入,我国的公路通车总里程己经位居世界前列,这样进一步促进了我国经济建设的发展.随着公路的大量投运,公路日常养护和管理已经成为制约公路运营水平提高的瓶 ...

  5. 【裂缝识别】基于matlab计算机视觉断裂裂缝识别【含Matlab源码 2049期】

    一.简介 1 案例背景 随着国家对公路建设的大力投入,我国的公路通车总里程己经位居世界前列,这样进一步促进了我国经济建设的发展.随着公路的大量投运,公路日常养护和管理已经成为制约公路运营水平提高的瓶颈 ...

  6. 【图像识别】基于 BP神经网络路面裂缝识别系统Matlab代码

    1 简介 随着我国经济建设的快速发展,道路交通在国民经济建设中扮演的角色越来越重要.随之而来的道路路面的养护和管理问题愈发凸显,其中道路路面的破损检测就成为相关道路养护部门的工作重点之一.另外,随着我 ...

  7. 【裂缝识别】无人机图像处理公路裂缝检测研究与实现【含Matlab源码 1730期】

    ⛄一.简介 1 案例背景 随着国家对公路建设的大力投入,我国的公路通车总里程己经位居世界前列,这样进一步促进了我国经济建设的发展.随着公路的大量投运,公路日常养护和管理已经成为制约公路运营水平提高的瓶 ...

  8. python裂缝检测_python 裂缝识别 这是一个使用Python和PyQt5开发的一个计算机视觉辅助裂缝标注工具 - 下载 - 搜珍网...

    压缩包 : dea0e4f4dad3f0ccc7ded70e22891ce5.zip 列表 crack-label-tool-master/ crack-label-tool-master/.giti ...

  9. 第 21 章 路面裂缝检测识别系统设计--matlab深度学习实战

    在汽车智能技术.汽车新能源技术.汽车电子这个群雄逐鹿的赛道.智能驾驶技术的要求也在不断的提升. 智能车辆教学平台.智能网联教学平台.汽车电子教学设备.在环仿真系统,目前主流的系统有很多,常用的基础部分 ...

最新文章

  1. Drawable Resource 之旅(一):BitmapDrawable 详解
  2. python编程菱形_Python打印“菱形”星号代码方法
  3. 编译log4cplus-2.0.x备忘录
  4. IntelliJ IDEA 连接数据库 详细过程
  5. 一面微创题--字符串逆序输出
  6. 网易 html5,别再想不开做H5了
  7. vb读出二进制文件,合并两个文件
  8. 在 CTreeCtrl 中枚举系统中的所有窗口!(II)
  9. linux 平行运行命令,Linux paste命令
  10. linux环境判断nginx是否已经启动
  11. C#对文件的操作(创建、获取文件数量、删除)(读、写文件)
  12. [转]《编程之道》(很老的一篇文章)
  13. 手机控制linux电脑软件,手机控制电脑软件哪个好用?
  14. 一种简易的直流电机正反转限位电路
  15. 圆的半径java_计算圆的半径
  16. 小程序毕业设计 基于java后台微信在线考试小程序毕业设计参考
  17. python弹幕点歌_GitHub - smilecc/blive-raspberry: 完全重构的树莓派B站直播弹幕点播台...
  18. activex服务器与com组件,COM和ActiveX控件设计.ppt
  19. nvivo三天写论文!可视化操作实战
  20. matlab 计算连杆长度,matlab机器人运动学计算

热门文章

  1. python替换把写错的中文符号都替换成英文方法
  2. 在Linux 下 FTP批量删除文件
  3. office 365 api php,Office 365
  4. [Ext JS]3.2 表单(Form)及表单元素
  5. webpack打包图片报错
  6. API `chooseFile` is not yet implemented,APP上传文件报错--uniapp
  7. Windows软件以及Tips
  8. 关于无法启动IIs Express Web服务器问题解决方法
  9. Python黑魔法手册记录
  10. 如何自制证件照?怎么在线生成证件照?