__author__ = 'Administrator'
#导入模块
import tensorflow as tf
import numpy as np
import os
import glob
from sklearn.utils import shuffle
import cv2
import pandas as pd
import matplotlib.pyplot as plt
#读取数据集
def load_train(train_path,img_size,classes):images=[]labels=[]img_names=[]cls=[]print("读取训练图片...")for fields in classes:index=classes.index(fields)print("Now going to read {} files (Index:{})".format(fields,index))path=os.path.join(train_path,fields,'*g')    #os.path.join()函数:连接两个或更多的路径名组件#1.如果各组件名首字母不包含’/’,则函数会自动加上#2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃#3.如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾files=glob.glob(path)for fl in files:image=cv2.imread(fl)image=cv2.resize(image,(img_size,img_size),0,0,cv2.INTER_LINEAR)image=image.astype(np.float32)image=np.multiply(image,1.0/255.0)images.append(image)label=np.zeros(len(classes))label[index]=1.0labels.append(label)flbase=os.path.basename(fl)img_names.append(flbase)cls.append(fields)images=np.array(images)labels=np.array(labels)img_names=np.array(img_names)cls=np.array(cls)return images,labels,img_names,cls
class DataSet(object):def __init__(self,images,labels,img_names,cls):self._num_examples = images.shape[0]self._images=imagesself._labels=labelsself._img_names=img_namesself._cls=clsself._epochs_done=0self._index_in_epoch=0def images(self):return self._imagesdef labels(self):return self._labelsdef img_names(self):return self._img_namesdef cls(self):return self._clsdef num_examples(self):return self._num_examplesdef epochs_done(self):return self._epochs_donedef next_batch(self,batch_size):start=self._index_in_epochself._index_in_epoch+=batch_sizeif self._index_in_epoch>self._num_examples:self._epochs_done+=1start=0self._index_in_epoch=batch_sizeelse:batch_size<=self._num_examplesend=self._index_in_epochreturn self._images[start:end],self._labels[start:end],self._img_names[start:end],self._cls[start:end]
def read_train_sets(train_path,image_size,classes,validation_size):class DataSets(object):    #构造类passdata_sets=DataSets()images,labels,img_names,cls=load_train(train_path,image_size,classes)   #读图,load_train:分别去每个类别中取图片并进行one-hot编码,resize图片大小#改变为np.float32格式,image/255(归一化),images,labels,img_names,cls=shuffle(images,labels,img_names,cls)     #将图片顺序洗牌if isinstance(validation_size, float):validation_size = int(validation_size * images.shape[0])#shape[0]计算图片总数,shape格式 [1000,64,64,3];验证集200个validation_images = images[:validation_size]     #图片从第一张到测试集个数validation_labels = labels[:validation_size]    #标签从第一张到测试集个数validation_img_names = img_names[:validation_size]  #name从第一张到测试集个数validation_cls = cls[:validation_size]  #类从第一张到测试集个数train_images = images[validation_size:]  #训练集,从测试集个数直到最后train_labels = labels[validation_size:]train_img_names = img_names[validation_size:]train_cls = cls[validation_size:]data_sets.train = DataSet(train_images, train_labels, train_img_names, train_cls)data_sets.valid = DataSet(validation_images, validation_labels, validation_img_names, validation_cls)return data_sets        #数据集构造完成def create_convolution_layer(input,num_input_channels,conv_filter_size,num_filters):weights = create_weights(shape=[conv_filter_size, conv_filter_size, num_input_channels, num_filters])biases = create_biases(num_filters)layer = tf.nn.conv2d(input=input, filter=weights, strides=[1, 1, 1, 1], padding='SAME')layer += biaseslayer = tf.nn.relu(layer)layer = tf.nn.max_pool(value=layer, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')#可视化return layer
def create_weights(shape):return tf.Variable(tf.truncated_normal(shape, stddev=0.05))
def create_biases(size):return tf.Variable(tf.constant(0.05, shape=[size]))def create_flatten_layer(layer):layer_shape=layer.get_shape()num_features=layer_shape[1:4].num_elements()layer=tf.reshape(layer,[-1,num_features])return layer
def create_fc_layer(input,num_inputs,num_outputs,use_relu=True):weights=create_weights(shape=[num_inputs,num_outputs])biases=create_biases(num_outputs)layer=tf.matmul(input,weights)+biases# show train data and predict datalayer=tf.nn.dropout(layer,keep_prob=0.7)if use_relu:layer=tf.nn.relu(layer)return layer
def show_progress(epoch,feed_dict_train,feed_dict_validate,val_loss,i):acc=session.run(accuracy,feed_dict=feed_dict_train)val_acc=session.run(accuracy,feed_dict=feed_dict_validate)print("epoch:",str(epoch+1)+",i:",str(i)+",acc:",str(acc)+",val_acc:",str(val_acc)+",val_loss:",str(val_loss))import random
random.seed(10)   #指定随机数,seed可以实现随机数的复现,即不同人在不同时间使用同一个seed,生成的随机数是完全一致的。#输出1个seed为10(这个数可以随意取)的随机数
from tensorflow import set_random_seed   #tensorflow中的生成随机数,与上述seed类似
set_random_seed(20)batch_size=32  #一次迭代32张图片
classes=['cashang','huahen','quejiao']    #分类的类别
num_classes=len(classes)   #类别数目,最后一层的输出个数validation_size=0.2   #20%作为测试集
img_size=128          #图片尺寸128*128,输入到网络中的图片应该是大小相同的(一般是正方形),但是原图可以不同,需要reshape
num_channels=3     #彩色图,RGB三个通道
train_path='C:\\Users\Administrator\Desktop\\tr'   #路径
data=read_train_sets(train_path,img_size,classes,validation_size)   #跳入dataset_TYD读取图片
print("Complete reading input data.Will Now print a snippet of it")
#print("Number of files in Training-set:\t\t{}".format(len(data.train.labels)))session=tf.Session()
x=tf.placeholder(tf.float32,shape=[batch_size, 128, 128, 3],name='x')   #先把数据指定成placeholder,None:batch_size还未指定
y_true=tf.placeholder(tf.float32,shape=[batch_size,num_classes],name='y_true')
y_true_cls=tf.argmax(y_true,1)   #tf.argmax(input,axis)根据axis取值的不同返回每行或者每列最大值的索引
#卷积神经网络,参数可变
filter_size_conv1=3
num_filters_conv1=32filter_size_conv2=3
num_filters_conv2=32filter_size_conv3=3
num_filters_conv3=64#全连接层的输出
fc_layer_size=1024
layer_conv1=create_convolution_layer(input=x,num_input_channels=num_channels,conv_filter_size=filter_size_conv1,num_filters=num_filters_conv1)
layer_conv2=create_convolution_layer(input=layer_conv1,num_input_channels=num_filters_conv1,conv_filter_size=filter_size_conv2,num_filters=num_filters_conv2)
layer_conv3=create_convolution_layer(input=layer_conv2,num_input_channels=num_filters_conv2,conv_filter_size=filter_size_conv3,num_filters=num_filters_conv3)
layer_flat=create_flatten_layer(layer_conv3)layer_fc1=create_fc_layer(input=layer_flat,num_inputs=layer_flat.get_shape()[1:4].num_elements(),num_outputs=fc_layer_size,use_relu=True)
layer_fc2=create_fc_layer(input=layer_fc1,num_inputs=fc_layer_size,num_outputs=num_classes,use_relu=False)y_pred=tf.nn.softmax(layer_fc2,name='y_pred')
y_pred_cls=tf.argmax(y_pred,axis=1)session.run(tf.global_variables_initializer())cross_entropy=tf.nn.softmax_cross_entropy_with_logits(logits=layer_fc2,labels=y_true)
cost=tf.reduce_mean(cross_entropy)
optimizer=tf.train.AdamOptimizer(learning_rate=1e-4).minimize(cost)
saver = tf.train.Saver(max_to_keep=2)correct_prediction=tf.equal(y_pred_cls,y_true_cls)
accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
session.run(tf.global_variables_initializer())batch_size=32def train(num_iteration):global total_iterationsfor i in range(total_iterations,total_iterations+num_iteration):x_batch,y_true_batch,_,cls_batch=data.train.next_batch(batch_size)x_valid_batch,y_valid_batch,_,valid_cls_batch=data.valid.next_batch(batch_size)feed_dict_tr={x:x_batch,y_true:y_true_batch}feed_dict_val={x:x_valid_batch,y_true:y_valid_batch}session.run(optimizer,feed_dict_tr)examples=data.train.num_examples()if i% int(examples/batch_size)==0:val_loss=session.run(cost,feed_dict=feed_dict_tr)epoch=int(i/int(examples/batch_size))show_progress(epoch,feed_dict_tr,feed_dict_val,val_loss,i)saver.save(session,'./cashang-huahen-model/cashang-huahen.ckpt',global_step=i)total_iterations+=num_iterationprint("final loss:", session.run(cost, feed_dict=feed_dict_tr))
session.run(tf.global_variables_initializer())
total_iterations=0
saver=tf.train.Saver()   #保存模型
train(8000)

机器视觉识别缺陷、划痕、缺角缺陷(3.28,准确率90-96)相关推荐

  1. PCB板缺陷检测机器视觉识别算法 yolo

    PCB板缺陷检测机器视觉识别算法通过python+yolo系列网络深度学习模型对PCB电路板外观实时监测,当模型算法监测到有缺陷的PCB板时立即抓拍存档.Python是一种由Guido van Ros ...

  2. 施努卡:机器视觉识别用到的方法(机器人视觉识别)

    在大规模的工业自动化生产中,很多工业产品都需要进行质量检测,例如工件表面缺陷检测,针对一些划痕,凹凸,色差等进行检测.产品质量的好坏一定程度上会影响产品的质量和使用率,那么视觉识别检测系统可以在一定程 ...

  3. AI科学家王怀清:机器视觉识别领域 或将出现AI独角兽

    https://www.toutiao.com/a6651381754940621323/ 2019-01-28 11:18:15 1956年 ,"人工智能"概念正式诞生.经过半个 ...

  4. android 中radiogroup滑动切换,巧妙实现缺角radiogroup控制多个fragment切换和滑动

    在android开发中,用一个radiogroup控制多个fragment切换是十分常见的需求.但是如果fragment是一个ListView,如何保证滑动的时候通过缺角可以看到下面的listview ...

  5. 《基于小型训练集的深度学习迁移的食用毒蘑菇机器视觉识别系统》论文笔记

    <基于小型训练集的深度学习迁移的食用毒蘑菇机器视觉识别系统>论文笔记 链接:Machine Vision Recognition System of Edible and Poisonou ...

  6. 软件测试怎么跟踪缺陷,也谈软件测试缺陷跟踪管理

    缺陷跟踪管理是软件测试工作的一个重要部分,软件测试的目的是为了尽早发现软件系统中的缺陷,因此,对缺陷进行跟踪管理,确保每个被发现的缺陷都能够及时得到处理是测试工作的一项重要内容. 1. 缺陷跟踪管理的 ...

  7. 李居明风水人人都懂版之十二~缺角

    所谓的"缺角",乃是建筑物的一边短缺三分之二以内,而呈凹入的部分.凹入的部分越大,运气越差.最理想的屋子形状,首推六比四的长方形住宅,尤其是以东西方呈长方形的最好.但是现在的房子, ...

  8. css实现缺角div

    css实现缺角div <div class="block"></div> 方法一:伪元素实现 用伪元素画一个和背景色相同的三角形,然后绝对定位到需要遮挡的地 ...

  9. CSS3实现缺角矩形

    CSS3实现缺角矩形 前言 一.实现的最终效果 二.多种实现方式举例 1.最low的方式:拿div通过旋转定位盖死一个角 2.也很low的方式:使用div对象的before.after伪元素实现 3. ...

最新文章

  1. [3D]绘制XYZ小坐标轴
  2. 导致SEO优化排名不理想的三大因素,你踩雷了没?
  3. leetcode 1143. 最长公共子序列
  4. 042_Popconfirm气泡确认框
  5. 编译 / __attribute__(constructor)和__attribute__(destructor)
  6. 用计算机打出圣诞树,手机计算器圣诞树的祝福输入方式,手机计算器圣诞树获得方法...
  7. python基础课程2(看代码看注释)--条件判断|循环|函数|生成器|类
  8. general protection fault怎么办_法院离婚调解书我想办补充协议怎么办?-免费法律咨询...
  9. java怎么预加载字典值,有选择地显示预加载内容提高网站的性能
  10. table 转义字符 html,HTML转义字符表
  11. 天正建筑8.5 天正给排水8.5天正电气8.5天正暖通8.5及注册机(32位)
  12. 该如何去认知Level 2 十档行情数据?
  13. 通信科技人员职业道德
  14. 【计算机毕业设计】188校园商铺管理系统设计与实现
  15. 信号采样与sinc插值恢复MATLAB
  16. python在手,天下我有!
  17. 基于目标检测的海上舰船图像超分辨率研究
  18. PCL (一)点云的格式
  19. 如何让nginx不返回304
  20. Apifox 接口一体化管理新神器

热门文章

  1. 图像处理中的高通滤波与低通滤波
  2. 语义分割综述解读--主流方法篇
  3. autojs之识别象棋位置
  4. java poi修改EXCEL单元格的内容
  5. minipcie接口CAN卡解决工控机扩展CAN通道的难题 minipcie CAN
  6. 顺序表:实现图书管理系统
  7. 计算机弹音乐百度,百度音乐播放器电脑版怎么制作歌曲歌词?
  8. IDEA创建java文件报错:Unable to parse template “Class“
  9. 关于数组的几道面试题
  10. 系统怎么跟服务器联系,工控机与服务器的之间的联系和区别