第10章图像处理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 卷积层、池化层以及抑制层实现如下:
# conv1 with tf.variable_scope('conv1') as scope: kernel = _variable_with_weight_decay('weights',
shape=[5, 5, 3, 64], stddev=5e-2, wd=0.0) conv = tf.nn.conv2d(images, kernel, [1, 1, 1, 1], padding='SAME') biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0)) pre_activation = tf.nn.bias_add(conv, biases) conv1 = tf.nn.relu(pre_activation, name=scope.name) _activation_summary(conv1) # pool1 pool1 = tf.nn.max_pool(conv1, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1],
• 1.DPM(Deformable Parts Model) • 2. OverFeat • 3.DeepID-Net • 4.RCNN • 5.Fast RCNN • 6.Faster RCNN • 7.SPPNet • 8.YOLO • 9.SSD
10.2 图像物体识别
我们将实现对Cifar-10数据集图像中的物体识别
10.2.1 数据预处理
• Cifar-10数据集。Cifar是加拿大政府牵头投资的一个科学项目研究 所,Cifar-10数据集是一个用于普适物体识别的数据集。
• CIFAR-10包含了60000幅RGB彩色图片,其中50000张用于训练、 10000张用于测试。这些图片分为10个不同的类别,每类包含6000 幅图片。为了简化了计算机模型的任务,并降低了分析图片的计算 负载,数据集中每幅图片的规格是32x32像素
10.3 图片验证码识别
10.3.4 训练模型 • 为了更好的训练效果,在训练时,每次都随机生成验证码,然后进
行训练。
# 训练
def train_crack_captcha_cnn(): output = crack_captcha_cnn()
#调用训练模型
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=output, labels=Y))
max_idx_l = tf.argmax(tf.reshape(Y, [-1, MAX_CAPTCHA, CHAR_SET_LEN]), 2)
correct_pred = tf.equal(max_idx_p, max_idx_l)
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))
10.3 图片验证码识别
我们将使用机器学习的图像处理技术实现对验证码的自动识别。 10.3.1 验证码生成 • 在Python中提供了captcha库可以便捷的生成验证码图片。 • 对于验证码的内容,我们采用数字和英文字符组合的形式。在验证
码的长度,我们使用四位长度。所以,对于验证码的文本内容,随 机生成:
10.2 图像物体识别
10.2.1 数据预处理
• 为了降低网络对图片的动态范围变化的敏感度,一般会对图片中的 物体位置、亮度、对比度等方面进行调整。为了降低输入图片的冗 余性,提高计算效率,会对图片数据需要进行标准化处理。
• 1.原始数据获取
• 从数据集中读取图片并将相关信息转化为TFRecord格式的数据,在TFRecord数据中 包括了图像的长边像素、宽边像素以及颜色通道数,图片的编码,图片对应的分类标 签以及图片文件。
saver = tf.train.Saver()
#保存训练模型
10.3 图片验证码识别
10.3.5 评估模型
• 对于模型的评估,同样随机的生成一张验证码,使用模型进行预测, 查看预测的结果。
#获取随机验证码 text, image = gen_captcha_text_and_image() #对验证码进行灰度处理 image = convert2gray(image) #将图片一维化 image = image.flatten() / 255 #调用评估 predict_text = crack_captcha(image) print("正确: {} 预测: {}".format(text, predict_text))
• 10.1.2 图像物体识别与检测 • 图像物体的识别:对一张图片进行分析,识别出这张图片中包含某类物
体; • 物体检测:物体出现在图中的什么地方,一般需要将该物体以外接矩形
框的形式显示出来。 • 卷积神经网络(CNN)在模式识别方向具有较强的表现能力,对于图像
物体识别与检测方面的算法也是多是在卷积神经网络的基础上进行改进, 常用算法如下:
10.2 图像物体识别
10.2.3 模型训练学习 • 使用数据集在模型中进行训练学习。
with tf.train.MonitoredTrainingSession( checkpoint_dir=FLAGS.train_dir, hooks=[tf.train.StopAtStepHook(last_step=FLAGS.max_steps), tf.train.NanTensorHook(loss),_LoggerHook()], config=tf.ConfigProto( log_device_placement=FLAGS.log_device_placement)) as mon_sess:
10.3 图片验证码识别
10.3.2 数据预处理
• 对自然语言处理的第一步就是对自然语言符号进行编码。对验证码 的识别也先需要对识别的验证码进行转码处理。由于验证码仅仅包 含了数字和字母,而且均为四位,在这里采用矩阵编码。
• 如“4352”可以表示为:
[0000100000 0001000000 0000010000 0010000000]
• 图像修复(image inpainting):图像修复通俗来讲就是一张照片上被 挖了一个洞,利用照片中的其他信息来将这个洞画上的过程。是图 像编辑和图像生成领域的一个典型问题。
• 对于图像修复问题,核心的思想就是利用图像文件本身的冗余性 (redundancy),利用图像已知部分的信息来补全未知部分。
第10章 图像处理
10.1 机器学习的图像处理简介 10.2 图像物体识别 10.3 图片验证码识别 10.4 图像物体检测 10.5 看图说话
10.1 机器学习的图像处理简介
使用机器学习进行图像处理已经成功的应用到了图像修复、物体识别、 物体检测、图像问答、人脸识别等领域。
• 10.1.1 图像修复
• 修复的流程分为两大步骤,首先选择待修补的像素,然后进行搜索 补全。
在图像修复问题上也引入了机器学习方式来进行解决。一般,利用 卷积神经网络来学习图像中的高准确度特征,利用特征来指导图像 缺失部分的生成。通过将大数据和图像高准确度特征的组合起来, 使得图像修复得到了极大的完善。
10.1 机器学ห้องสมุดไป่ตู้的图像处理简介
while not mon_sess.should_stop(): mon_sess.run(train_op)
10.2 图像物体识别
10.2.4 评估模型 • 完成了模型的训练,使用测试数据进行评估模型。在评估时,使用
的数据不再经过翻转、调整亮度、对比度等操作,直接从测试数据 集中转为TFRecord格式的数据进行使用。 • 将测试数据输入到训练好的模型中,获得最终的分类结果并与真实 分类进行对比。
• 2.输入数据处理
• 对于图片数据,在训练前进行统一裁剪到24×24像素大小,裁剪中央区域用于评估 或随机裁剪用于训练。并且对图片进行数据增广,包括对图像进行随机的左右翻转、 随机变换图像的亮度、随机变换图像的对比度操作,最后对图像进行白化操作。
10.2 图像物体识别
10.2.2 生成训练模型
• 使用卷积神经网络为基础,包括了两次的卷积层、池化层以及抑制 层,然后进行全连接层,最后通过逻辑分类层softmax_linear进行输 出。
padding='SAME', name='pool1') # norm1 norm1 = tf.nn.lrn(pool1, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75, name='norm1')
10.2 图像物体识别
10.2.2 生成训练模型 • 使用卷积神经网络为基础,包括了两次的卷积层、池化层以及抑制
optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)
predict = tf.reshape(output, [-1, MAX_CAPTCHA, CHAR_SET_LEN])
max_idx_p = tf.argmax(predict, 2)
10.3 图片验证码识别
10.3.3 生成训练模型
• 使用卷积神经网络为基础,进行三次的卷积层、池化层以及抑制层, 然后进行全连接层,最后通过输出层进行输出。对于损失函数的选 取,使用最常用的交叉熵算法。
# 将占位符 转换为 按照图片给的新样式 x = tf.reshape(X, shape=[-1, IMAGE_HEIGHT, IMAGE_WIDTH, 1]) # 第一次 w_c1 = tf.Variable(w_alpha*tf.random_normal([3, 3, 1, 32])) b_c1 = tf.Variable(b_alpha*tf.random_normal([32])) conv1 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(x, w_c1, strides=[1, 1, 1, 1], padding='SAME'), b_c1)) conv1 = tf.nn.max_pool(conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') conv1 = tf.nn.dropout(conv1, keep_prob) #第二次 #第三次 #全连接层 w_d = tf.Variable(w_alpha*tf.random_normal([8*20*64, 1024])) b_d = tf.Variable(b_alpha*tf.random_normal([1024])) dense = tf.reshape(conv3, [-1, w_d.get_shape().as_list()[0]]) dense = tf.nn.relu(tf.add(tf.matmul(dense, w_d), b_d)) dense = tf.nn.dropout(dense, keep_prob) #输出层 w_out = tf.Variable(w_alpha*tf.random_normal([1024, MAX_CAPTCHA*CHAR_SET_LEN])) b_out = tf.Variable(b_alpha*tf.random_normal([MAX_CAPTCHA*CHAR_SET_LEN])) out = tf.add(tf.matmul(dense, w_out), b_out)
层,然后进行全连接层,最后通过逻辑分类层softmax_linear进行输 出。
(1)首先对卷积操作后的输出结果使用tf.reshape 函数将样本都转变为一维向量 (2)通过2次全连接层的训练, (3)使用Relu激活函数进行非线性化。 (4)通过softmax_linear层进行分类输出 • 损失函数选择最常用的交叉熵算法
相关文档
最新文档