图像识别应用_图像识别的应用 - CSDN
精华内容
参与话题
  • 图像识别技术是立体视觉、运动分析、数据融合等实用技术的基础,在导航、地图与地形配准、自然资源分析、天气预报、环境监测、生理病变研究等许多领域可广泛应用。 遥感图像识别 航空遥感和卫星遥感图像通常用图像...

    主要应用领域

    图像识别技术可能是以图像的主要特征为基础的,每个图像都有它的特征。在人类图像识别系统中,对复杂图像的识别往往要通过不同层次的信息加工才能实现。图像识别技术是立体视觉、运动分析、数据融合等实用技术的基础,在导航、地图与地形配准、自然资源分析、天气预报、环境监测、生理病变研究等许多领域可广泛应用。

    遥感图像识别

    航空遥感和卫星遥感图像通常用图像识别技术进行加工以便提取有用的信息。该技术目前主要用于地形地质探查,森林、水利、海洋、农业等资源调查,灾害预测,环境污染监测,气象卫星云图处理以及地面军事目标识别等。

    军事刑侦

    图像识别技术在军事、公安刑侦方面的应用很广泛,例如军事目标的侦察、制导和警戒系统;自动灭火器的控制及反伪装;公安部门的现场照片、指纹、手迹、印章、人像等的处理和辨识;历史文字和图片档案的修复和管理等等。

    生物医学

    图像识别在现代医学中的应用非常广泛,它具有直观、无创伤、安全方便等特点。在临床诊断和病理研究中广泛借助图像识别技术,例如CT(ComputedTomography)技术等。

    机器视觉

    作为智能机器人的重要感觉器官,机器视觉主要进行3D图像的理解和识别,该技术也是目前研究的热门课题之一。

    机器视觉的应用领域也十分广泛,例如用于军事侦察、危险环境的自主机器人,邮政、医院和家庭服务的智能机器人。此外机器视觉还可用于工业生产中的工件识别和定位,太空机器人的自动操作等。

    总结:人工智能前景不可限量,图像识别作为AI技术的支撑,是一种强有力的识别方式,随着AI在场景上的深入,图像识别应用领域会越来越广。
       人工智能、大数据、云计算和物联网的未来发展值得重视,均为前沿产业,多智时代专注于人工智能和大数据的入门和科谱,在此为你推荐几篇优质好文:
    AI可以识别图像,但它能理解标题吗?
    http://www.duozhishidai.com/article-10635-1.html
    图像识别是什么,卷积神经网络如何进行图像识别的?
    http://www.duozhishidai.com/article-1957-1.html
    图像识别技术是什么,应用于智能家居哪些领域
    http://www.duozhishidai.com/article-133-1.html


    多智时代-人工智能大数据学习入门网站|人工智能、大数据、物联网云计算的学习交流网站

    多智时代-人工智能大数据学习入门网站|人工智能、大数据、云计算、物联网的学习服务的好平台
    展开全文
  • CNN卷积神经网络原理讲解+图片识别应用(附源码)

    万次阅读 多人点赞 2018-06-26 16:35:50
    ——大家应该都知道,只需要一种黑色的画笔,只需要将大熊猫黑色的地方涂上黑色,一个大熊猫的图像就可以展现出来。 我们画大熊猫的方式,其实和妈妈们的十字绣很接近——在给定的格子里,绣上不同的颜色,最后就...

    一、机器如何识图

    先给大家出个脑筋急转弯:在白纸上画出一个大熊猫,一共需要几种颜色的画笔?——大家应该都知道,只需要一种黑色的画笔,只需要将大熊猫黑色的地方涂上黑色,一个大熊猫的图像就可以展现出来。

    我们画大熊猫的方式,其实和妈妈们的十字绣很接近——在给定的格子里,绣上不同的颜色,最后就可以展现出一幅特定的“图片”。而机器识图的方式正好和绣十字绣的方式相反,现在有了一幅图片,机器通过识别图片中每个格子(像素点)上的颜色,将每个格子里的颜色都用数字类型存储,得到一张很大的数字矩阵,图片信息也就存储在这张数字矩阵中。 


    上图中每一个格子代表一个像素点,像素点里的数字代表颜色码,颜色码范围是[0,255],(各式各样的颜色都是由红、绿、蓝三色组成,每个颜色都是0~255之间数字) 

    我们在得到的一张大数字矩阵的基础上开展卷积神经网络识别工作: 
    机器识图的过程:机器识别图像并不是一下子将一个复杂的图片完整识别出来,而是将一个完整的图片分割成许多个小部分,把每个小部分里具有的特征提取出来(也就是识别每个小部分),再将这些小部分具有的特征汇总到一起,就可以完成机器识别图像的过程了 

    二、卷积神经网络原理介绍

    用CNN卷积神经网络识别图片,一般需要的步骤有:

    1. 卷积层初步提取特征

    2. 池化层提取主要特征

    3. 全连接层将各部分特征汇总

    4. 产生分类器,进行预测识别

    1、卷积层工作原理

    卷积层的作用:就是提取图片每个小部分里具有的特征

    假定我们有一个尺寸为6*6 的图像,每一个像素点里都存储着图像的信息。我们再定义一个卷积核(相当于权重),用来从图像中提取一定的特征。卷积核与数字矩阵对应位相乘再相加,得到卷积层输出结果。 

    (429 = 18*1+54*0+51*1+55*0+121*1+75*0+35*1+24*0+204*1) 
    卷积核的取值在没有以往学习的经验下,可由函数随机生成,再逐步训练调整

    当所有的像素点都至少被覆盖一次后,就可以产生一个卷积层的输出(下图的步长为1)

    机器一开始并不知道要识别的部分具有哪些特征,是通过与不同的卷积核相作用得到的输出值,相互比较来判断哪一个卷积核最能表现该图片的特征——比如我们要识别图像中的某种特征(比如曲线),也就是说,这个卷积核要对这种曲线有很高的输出值,对其他形状(比如三角形)则输出较低。卷积层输出值越高,就说明匹配程度越高,越能表现该图片的特征

    卷积层具体工作过程: 
    比如我们设计的一个卷积核如下左,想要识别出来的曲线如下右:

    现在我们用上面的卷积核,来识别这个简化版的图片——一只漫画老鼠 

     

    当机器识别到老鼠的屁股的时候,卷积核与真实区域数字矩阵作用后,输出较大:6600 

                                                                                

    而用同一个卷积核,来识别老鼠的耳朵的时候,输出则很小:0 

    我们就可以认为:现有的这个卷积核保存着曲线的特征,匹配识别出来了老鼠的屁股是曲线的。我们则还需要其他特征的卷积核,来匹配识别出来老鼠的其他部分。卷积层的作用其实就是通过不断的改变卷积核,来确定能初步表征图片特征的有用的卷积核是哪些,再得到与相应的卷积核相乘后的输出矩阵

    2、池化层工作原理

    池化层的输入就是卷积层输出的原数据与相应的卷积核相乘后的输出矩阵 
    池化层的目的:

    • 为了减少训练参数的数量,降低卷积层输出的特征向量的维度

    • 减小过拟合现象,只保留最有用的图片信息,减少噪声的传递

    最常见的两种池化层的形式:

    • 最大池化:max-pooling——选取指定区域内最大的一个数来代表整片区域

    • 均值池化:mean-pooling——选取指定区域内数值的平均值来代表整片区域

    举例说明两种池化方式:(池化步长为2,选取过的区域,下一次就不再选取)

    在4*4的数字矩阵里,以步长2*2选取区域,比如上左将区域[1,2,3,4]中最大的值4池化输出;上右将区域[1,2,3,4]中平均值5/2池化输出

    3、全连接层工作原理

    卷积层和池化层的工作就是提取特征,并减少原始图像带来的参数。然而,为了生成最终的输出,我们需要应用全连接层来生成一个等于我们需要的类的数量的分类器。

    全连接层的工作原理和之前的神经网络学习很类似,我们需要把池化层输出的张量重新切割成一些向量,乘上权重矩阵,加上偏置值,然后对其使用ReLU激活函数,用梯度下降法优化参数既可。

    三、卷积神经网络代码解析

    1、数据集的读取,以及数据预定义

    from tensorflow.examples.tutorials.mnist import input_data
    import tensorflow as tf
    
    #读取MNIST数据集
    mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
    
    sess = tf.InteractiveSession()
    
    #预定义输入值X、输出真实值Y    placeholder为占位符
    x = tf.placeholder(tf.float32, shape=[None, 784])
    y_ = tf.placeholder(tf.float32, shape=[None, 10])
    keep_prob = tf.placeholder(tf.float32)
    x_image = tf.reshape(x, [-1,28,28,1])
    • MNIST是Google的很经典的一个做图像识别的数据集,图片大小是28*28的,需要先下载才能使用。

    • x、y_现在都是用占位符表示,当程序运行到一定指令,向x、y_传入具体的值后,就可以代入进行计算了

    • shape=[None, 784]是数据维度大小——因为MNIST数据集中每一张图片大小都是28*28的,计算时候是将28*28的二维数据转换成一个一维的、长度为784的新向量。None表示其值大小不定,意即选中的x、y_的数量暂时不定

    • keep_prob 是改变参与计算的神经元个数的值。(下有详细说明)

    2、权重、偏置值函数

    def weight_variable(shape):
        # 产生随机变量
        # truncated_normal:选取位于正态分布均值=0.1附近的随机值
        initial = tf.truncated_normal(shape, stddev=0.1)
        return tf.Variable(initial)
    
    def bias_variable(shape):
        initial = tf.constant(0.1, shape=shape)
        return tf.Variable(initial)

    truncated_normal()函数:选取位于正态分布均值=0.1附近的随机值

    3、卷积函数、池化函数定义

    def conv2d(x, W):
        # stride = [1,水平移动步长,竖直移动步长,1]
        return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
    
    def max_pool_2x2(x):
        # stride = [1,水平移动步长,竖直移动步长,1]
        return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
    • 输入x是图片信息矩阵,W是卷积核的值

    • 卷积层conv2d()函数里strides参数要求第一个、最后一个参数必须是1;

    • 第二个参数表示:卷积核每次向右移动的步长

    • 第三个参数表示:卷积核每次向下移动的步长

    • 在上面卷积层的工作原理中,有展示strides=[1, 1, 1, 1]的动态图, 下面展示strides=[1, 2, 2, 1]时的情况:可以看到高亮的区域每次向右移动两格,向下移动两格 

    可以得到:当我们的卷积层步长值越大,得到的输出图像的规格就会越小。为了使得到的图像的规格和原图像保持一样的大,在输入图像四周填充足够多的 0 边界就可以解决这个问题,这时padding的参数就为“SAME”(利用边界保留了更多信息,并且也保留了图像的原大小)下图: 

    padding的另一个可选参数为“VALID”,和“SAME”不同的是:不用0来填充边界,这时得到的图像的规格就会小于原图像。新图像尺寸大小 = 原数据尺寸大小-卷积核尺寸大小+1(一般我们选用的padding都为“SAME”)

    池化函数用简单传统的2x2大小的模板做max pooling,池化步长为2,选过的区域下次不再选取

    4、第一次卷积+池化

    #卷积层1网络结构定义
    #卷积核1:patch=5×5;in size 1;out size 32;激活函数reLU非线性处理
    W_conv1 = weight_variable([5, 5, 1, 32])
    b_conv1 = bias_variable([32])
    h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)         #output size 28*28*32
    h_pool1 = max_pool_2x2(h_conv1)                                  #output size 14*14*32#卷积层2网络结构定义
    

     

    • 图片集是黑白单色,x_image 中的图片尺寸参数最后一个 = 1,彩色 = 3

    • 这里的卷积核大小是5*5的,输入的通道数是1,输出的通道数是32

    • 卷积核的值这里就相当于权重值,用随机数列生成的方式得到

    • 由于MNIST数据集图片大小都是28*28,且是黑白单色,所以准确的图片尺寸大小是28*28*1(1表示图片只有一个色层,彩色图片都是3个色层——RGB),所以经过第一次卷积后,输出的通道数由1变成32,图片尺寸变为:28*28*32(相当于拉伸了高)

    • 再经过第一次池化(池化步长是2),图片尺寸为14*14*32

    5、第二次卷积+池化

    #卷积核2:patch=5×5;in size 32;out size 64;激活函数reLU非线性处理
    W_conv2 = weight_variable([5, 5, 32, 64])
    b_conv2 = bias_variable([64])
    h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)         #output size 14*14*64
    h_pool2 = max_pool_2x2(h_conv2)                                  #output size 7 *7 *64
    

     

    • 这里的卷积核大小也是5*5的,第二次输入的通道数是32,输出的通道数是64

    • 第一次卷积+池化输出的图片大小是14*14*32,经过第二次卷积后图片尺寸变为:14*14*64

    • 再经过第二次池化(池化步长是2),最后输出的图片尺寸为7*7*64

    6、全连接层1、全连接层2

    # 全连接层1
    W_fc1 = weight_variable([7*7*64,1024])
    b_fc1 = bias_variable([1024])
    h_pool2_flat = tf.reshape(h_pool2, [-1,7*7*64])   #[n_samples,7,7,64]->>[n_samples,7*7*64]
    h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
    h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) # 减少计算量dropout
    
    # 全连接层2
    W_fc2 = weight_variable([1024, 10])
    b_fc2 = bias_variable([10])
    prediction = tf.matmul(h_fc1_drop, W_fc2) + b_fc2
    • 全连接层的输入就是第二次池化后的输出,尺寸是7*7*64,全连接层1有1024个神经元

    • tf.reshape(a,newshape)函数,当newshape = -1时,函数会根据已有的维度计算出数组的另外shape属性值

    • keep_prob 是为了减小过拟合现象。每次只让部分神经元参与工作使权重得到调整。只有当keep_prob = 1时,才是所有的神经元都参与工作

    • 全连接层2有10个神经元,相当于生成的分类器

    • 经过全连接层1、2,得到的预测值存入prediction 中

    7、梯度下降法优化、求准确率

    #二次代价函数:预测值与真实值的误差
    loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=prediction))
    
    #梯度下降法:数据太庞大,选用AdamOptimizer优化器
    train_step = tf.train.AdamOptimizer(1e-4).minimize(loss)
    
    #结果存放在一个布尔型列表中
    correct_prediction = tf.equal(tf.argmax(prediction,1), tf.argmax(y_,1))
    #求准确率
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    • 由于数据集太庞大,这里采用的优化器是AdamOptimizer,学习率是1e-4

    • tf.argmax(prediction,1)返回的是对于任一输入x预测到的标签值,tf.argmax(y_,1)代表正确的标签值

    • correct_prediction 这里是返回一个布尔数组。为了计算我们分类的准确率,我们将布尔值转换为浮点数来代表对与错,然后取平均值。例如:[True, False, True, True]变为[1,0,1,1],计算出准确率就为0.75

    8、其他说明、保存参数

    for i in range(1000):
        batch = mnist.train.next_batch(50)
        if i % 100 == 0:
            train_accuracy = accuracy.eval(feed_dict={x: batch[0], y_: batch[1], keep_prob: 1.0})
            print("step", i, "training accuracy", train_accuracy)
    
        train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})
    
    #保存模型参数
    saver.save(sess, './model.ckpt')
    print("test accuracy %g"%accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))
    
    • batch 是来源于MNIST数据集,一个批次包含50条数据

    • feed_dict=({x: batch[0], y_: batch[1], keep_prob: 0.5}语句:是将batch[0],batch[1]代表的值传入x,y_;

    • keep_prob = 0.5  只有一半的神经元参与工作

    • 当完成训练时,程序会保存学习到的参数,不用下次再训练

    • 特别提醒:运行非常占内存,而且运行到最后保存参数时,有可能卡死电脑

    • 特别提醒:运行非常占内存,而且运行到最后保存参数时,有可能卡死电脑

    • 特别提醒:运行非常占内存,而且运行到最后保存参数时,有可能卡死电脑

     

    四、源码及效果展示

    # -*- coding:utf-8 -*-
    from tensorflow.examples.tutorials.mnist import input_data
    import tensorflow as tf
    import os
    
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
    
    def weight_variable(shape):
        # 产生随机变量
        # truncated_normal:选取位于正态分布均值=0.1附近的随机值
        initial = tf.truncated_normal(shape, stddev=0.1)
        return tf.Variable(initial)
    
    def bias_variable(shape):
        initial = tf.constant(0.1, shape=shape)
        return tf.Variable(initial)
    
    def conv2d(x, W):
        # stride = [1,水平移动步长,竖直移动步长,1]
        return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
    
    def max_pool_2x2(x):
        # stride = [1,水平移动步长,竖直移动步长,1]
        return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
    
    
    #读取MNIST数据集
    mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
    
    sess = tf.InteractiveSession()
    
    #预定义输入值X、输出真实值Y    placeholder为占位符
    x = tf.placeholder(tf.float32, shape=[None, 784])
    y_ = tf.placeholder(tf.float32, shape=[None, 10])
    keep_prob = tf.placeholder(tf.float32)
    x_image = tf.reshape(x, [-1,28,28,1])
    #print(x_image.shape)  #[n_samples,28,28,1]
    
    #卷积层1网络结构定义
    #卷积核1:patch=5×5;in size 1;out size 32;激活函数reLU非线性处理
    W_conv1 = weight_variable([5, 5, 1, 32])
    b_conv1 = bias_variable([32])
    h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)         #output size 28*28*32
    h_pool1 = max_pool_2x2(h_conv1)                                  #output size 14*14*32#卷积层2网络结构定义
    
    #卷积核2:patch=5×5;in size 32;out size 64;激活函数reLU非线性处理
    W_conv2 = weight_variable([5, 5, 32, 64])
    b_conv2 = bias_variable([64])
    h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)         #output size 14*14*64
    h_pool2 = max_pool_2x2(h_conv2)                                  #output size 7 *7 *64
    
    # 全连接层1
    W_fc1 = weight_variable([7*7*64,1024])
    b_fc1 = bias_variable([1024])
    h_pool2_flat = tf.reshape(h_pool2, [-1,7*7*64])   #[n_samples,7,7,64]->>[n_samples,7*7*64]
    h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
    h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) # 减少计算量dropout
    
    # 全连接层2
    W_fc2 = weight_variable([1024, 10])
    b_fc2 = bias_variable([10])
    prediction = tf.matmul(h_fc1_drop, W_fc2) + b_fc2
    # prediction = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
    
    #二次代价函数:预测值与真实值的误差
    loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=prediction))
    
    #梯度下降法:数据太庞大,选用AdamOptimizer优化器
    train_step = tf.train.AdamOptimizer(1e-4).minimize(loss)
    
    #结果存放在一个布尔型列表中
    correct_prediction = tf.equal(tf.argmax(prediction,1), tf.argmax(y_,1))
    #求准确率
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    
    saver = tf.train.Saver()  # defaults to saving all variables
    sess.run(tf.global_variables_initializer())
    
    for i in range(1000):
        batch = mnist.train.next_batch(50)
        if i % 100 == 0:
            train_accuracy = accuracy.eval(feed_dict={x: batch[0], y_: batch[1], keep_prob: 1.0})
            print("step", i, "training accuracy", train_accuracy)
    
        train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})
    
    #保存模型参数
    saver.save(sess, './model.ckpt')

     

    效果展示如下: 

     训练700次时候,成功率已经到达98%,越往后学习,准确率越高,但是 特别提醒:运行非常占内存,而且运行到最后保存参数时,有可能卡死电脑 特别提醒:运行非常占内存,而且运行到最后保存参数时,有可能卡死电脑 特别提醒:运行非常占内存,而且运行到最后保存参数时,有可能卡死电脑

    结束语:自己也是通过学习前辈们的讲解,自己慢慢摸索的,学习就是自我填坑的过程,希望我们都能坚持下来,也希望这篇能帮到你,朋友。

    经过博友的反应,现已增加测试代码

    # -*- coding:utf-8 -*-
    from tensorflow.examples.tutorials.mnist import input_data
    import tensorflow as tf
    import os
    
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
    
    def weight_variable(shape):
        # 产生随机变量
        # truncated_normal:选取位于正态分布均值=0.1附近的随机值
        initial = tf.truncated_normal(shape, stddev=0.1)
        return tf.Variable(initial)
    
    def bias_variable(shape):
        initial = tf.constant(0.1, shape=shape)
        return tf.Variable(initial)
    
    def conv2d(x, W):
        # stride = [1,水平移动步长,竖直移动步长,1]
        return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
    
    def max_pool_2x2(x):
        # stride = [1,水平移动步长,竖直移动步长,1]
        return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
    
    
    #读取MNIST数据集
    mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
    
    sess = tf.InteractiveSession()
    
    #预定义输入值X、输出真实值Y    placeholder为占位符
    x = tf.placeholder(tf.float32, shape=[None, 784])
    y_ = tf.placeholder(tf.float32, shape=[None, 10])
    keep_prob = tf.placeholder(tf.float32)
    x_image = tf.reshape(x, [-1,28,28,1])
    #print(x_image.shape)  #[n_samples,28,28,1]
    
    #卷积层1网络结构定义
    #卷积核1:patch=5×5;in size 1;out size 32;激活函数reLU非线性处理
    W_conv1 = weight_variable([5, 5, 1, 32])
    b_conv1 = bias_variable([32])
    h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)         #output size 28*28*32
    h_pool1 = max_pool_2x2(h_conv1)                                  #output size 14*14*32#卷积层2网络结构定义
    
    #卷积核2:patch=5×5;in size 32;out size 64;激活函数reLU非线性处理
    W_conv2 = weight_variable([5, 5, 32, 64])
    b_conv2 = bias_variable([64])
    h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)         #output size 14*14*64
    h_pool2 = max_pool_2x2(h_conv2)                                  #output size 7 *7 *64
    
    # 全连接层1
    W_fc1 = weight_variable([7*7*64,1024])
    b_fc1 = bias_variable([1024])
    h_pool2_flat = tf.reshape(h_pool2, [-1,7*7*64])   #[n_samples,7,7,64]->>[n_samples,7*7*64]
    h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
    h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) # 减少计算量dropout
    
    # 全连接层2
    W_fc2 = weight_variable([1024, 10])
    b_fc2 = bias_variable([10])
    prediction = tf.matmul(h_fc1_drop, W_fc2) + b_fc2
    
    #结果存放在一个布尔型列表中
    correct_prediction = tf.equal(tf.argmax(prediction,1), tf.argmax(y_,1))
    #求准确率
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    
    saver = tf.train.Saver()  # defaults to saving all variables
    sess.run(tf.global_variables_initializer())
    
    saver.restore(sess, './model.ckpt')           # 和之前保存的文件名一致
    print("test accuracy %g"% sess.run(accuracy,feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))
    print("test accuracy %g"% accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))
    

    测试准确率高达96.6%

    展开全文
  • 图像识别相关技术2.1 视觉模式识别2.1.1 特征描述与不变性2.1.2 模型选择与泛化性能2.2 卷积神经网络2.2.1 神经网络简介2.2.2 卷积神经网络发展2.2.3 卷积神经网络的计算2.3 迁移学习与多任务学习2.3.1 迁移学习...

    1. 简介

    CNN是一个多层的网络,通过卷积核对输入图像进行层层变换,学习分层特征表示,将输入映射成输出(标签或预测值)

    U-net包括收缩路径和与之对称的扩张路径,构成U型识别网络,网络中对称的卷积层和反卷积层存在跳跃连接以传递信息

    图像语义分割本质上是像素级的分类任务

    使用预训练的模型,本质上是利用了从相关任务上学习到的先验知识来服务待求解的问题

    语义分割的问题的难点是如何将像素级的预测和上下文的推断结合起来

    本文采用的图像分割算法基于FCN模型。从发展历程上看,深度卷积神经网络先是在全图分类任务上取得成功,进而用于区域检测,目标定位等任务,需求也逐渐从整体预测到稠密预测变化。从整体到局部,很自然地,研究者的注意力又从局部移到像素级的识别上,提出了FCN语义分割算法。从应用上看,CNN用于图像级/区域级的分类,侧重总体的语义,图像上小目标通常认为是噪声;FCN用于像素级的语义标注,对小目标等细节变化敏感。

    主要创新点体现在根据多任务学习方法,通过提升分类模型CNN的性能间接地改善了分割模型FCN的性能

    2. 图像识别相关技术

    特征的设计依据不同对象的特征,视觉特征设计主要是计算机视觉领域的研究内容。分类器设计则是机器学习领域的研究内容。而卷积神经网络方法则融合了特征提取和分类器设计,是一个端到端的识别系统。

    2.1 视觉模式识别

    一个模式系统通常包含特征提取和分类器设计两大部分。提高系统识别率也是从上述两个方面进行。优秀的特征描述子能从不同的输入上提取有效信息,即具有不变形,如旋转不变性、平移不变性等。常用的特征描述方法可以分为纹理特征(如LBP、SIFT、SUFR),形状特征(如HOG)及颜色特征(如颜色直方图)等。优秀的分类器具有良好的分类性能和泛化性能。常见的分类器有softmax、SVM、AdaBoost等。

    一个标准的CNN以多层卷积与池化为特征提取器,以softmax为分类器,可以认为是一个端到端的识别系统。

    2.1.1 特征描述与不变性

    特征提取器从图像上提取的特征也叫做特征描述子。特征不变性指的是从不同的图像上提取的描述子是一致的。

    CNN使用softmax分类算法较为简单,分类能力依赖良好的特征表示。CNN的卷积层和全连接层是可训练的,通过softmax的反馈,使用BP算法进行梯度更新,最终训练过的CNN模型的高层特征具有不变性。

    CNN中的池化层能保证一定程度的平移和旋转不变性

    2.1.2 模型选择与泛化性能

    采用了不同结构、不同参数的模型都可以认为是不同的模型,模型选择就是要从中选取较好的模型。较好的标准就是泛化性能。提高泛化性能的一个准则是结构风险最小化。通过交叉验证选择模型,目的也是提高泛化性能。

    1. 结构风险最小化

    监督学习的基本模型可以分为预测连续目标的回归模型和预测离散目标的分类模型,后者的模型都叫做分类器(classifer)

    一般来说,我们在进行机器学习任务时,使用的每一个算法都有一个目标函数,算法便是对这个目标函数进行优化。目标函数是用来评价模型的预测值Y与真实值Y`的不一致程度,这种差异叫做误差。

    相比其他机器学习理论,统计学习有更严格的数学证明。统计学习有两大核心,即VC维和结构风险最小化,核心思想是模型的泛化能力最大化。

    模型训练的直接结果是最小化训练集Ntrain的误差。将模型f(x)关于训练集的平均损失称为经验风险

    理想的模型是对所有样本都有很好的预测能力,也就是期望风险最小化。但实际上,联合分布不可知,求期望风险就退化为求经验风险。在训练集足够大时经验风险逼近期望风险。但实际上,训练集和全集相比,往往小很多。但是如果只考虑经验风险,会有过拟合的风险,便提出了结构风险作为折中。

    其中J(f)是惩罚项,约束模型的复杂度,符合奥卡姆剃刀原则

    结构风险最小化SRM实际上就是一种正则化方法。结构风险小需要同时保证经验风险小和模型复杂度小。实践中,结构风险最小化在一定程度上保证训练误差小的同时,测试误差不会太大,也就是提高模型的泛化能力。

    1. 交叉验证

    用结构风险最小化去控制模型的复杂度,本质上是一种模型选择方法。交叉验证是另一种模型选择方法。

    严格的验证方案中,数据集被分为训练集、验证集和测试集。训练集用于模型训练,验证集用于模型选择,测试集用于模型评估。很多时候,我们并没有如此富余的数据可供使用。

    交叉验证的思想是重复利用数据。应用最广的是S折交叉验证(S-fold cross validation)。在此方法中,数据被分为S个子集,每次取S-1个子集训练模型,用余下的一个子集测试模型。重复S次,综合结果选择模型。

    2.2 卷积神经网络

    机器学习五大流派

    2.2.1 神经网络简介

    神经网络分为两种,生物神经网络和人工神经网络。前者研究的是神经元细胞,以及这些细胞组成的网络如何产生意识,指导生物进行行动与思考。信息学中的神经网络是人工神经网络的简称,是一种应用网络结构进行信息处理的数学模型。

    神经网络发展的三个阶段

    BP算法: 解决感知机不能拟合非线性模型的难题并不困难。多层感知机(preceptrons,MLP)就能实现非线性运算。之所以当时的学者不能打破非线性诅咒,原因是多层感知机的无法训练。86年,Rumelhart and Hinton等人发明了适用于多层感知机的误差反向传播(BP)算法,成功地解决了非线性分类问题,并在学习算法上给出了严格的理论推导。该方法引起了神经网络史上的第二次热潮。

    万能逼近定理:89年Robert Hecht-Nielsen证明了MLP的万能逼近定理(Universal Approximation Property)。该定理表明,使用含有隐含层的神经网络能逼近任何闭空间内的一个连续函数。

    网络深度的必要性:万能逼近定理显示了浅层神经网络具有强大的表示能力,代价是足够多的节点。很自然的,如何在节点数受限的情况下获得足够表示能力是下一步的研究目标。追求深层网络是很自然的,因为1)人类神经系统是深层的;2)人脑对概念的表示是多层的。

    sigmoid函数在输入值很大时发生饱和,函数变化率几乎为零,也就是梯度几乎为零。这就导致梯度从较深的层无法反向传播,学习算法失效。从此,神经网络的热潮逐渐地冷却下去。神经网络自身的理论性不足,存在梯度消失问题,受限于当时的数据和计算能力,再加上统计学习的兴起,吸引了学术界大部分的注意力,神经网络迎来了第二次寒冬。

    10年ReLU激活函数被提出,代替Sigmoid函数,能有效地解决梯度消失问题

    典型的激活函数

    2.2.2 卷积神经网络发展

    原始的神经网络主要是全连接层,卷积神经网络与之最大的不同是卷积层。卷积层的设计模拟了视神经细胞感受野的概念,这种稀疏的连接和权值共享方式不仅减少了参数量,也有利于从大量数据中概括出规律,而且更符合图像信号的特点。

    CNN的发明主要受人类视觉皮层的启发。视觉皮层中的一些细胞只能感知一定区域内的信号,这个区域称为感受野。还存在一些细胞对位置不敏感,感受野却更大。在后续的研究中,人们逐渐地对大脑视觉系统的信息处理机制有了更深入的了解,对大脑不同区域的联系和功能有了更清晰的认识。

    LeNet-5作为最早的CNN模型,它的设计模式基本确定此后CNN模型的框架。它的特点能够总结为如下几点:

    1. 一个组合包含一层卷积层与一层池化层
    2. 使用卷积提取空间特征,卷积核权值共享,减少大量参数
    3. 使用映射到空间均值下采样
    4. 多层神经网络(MLP)作为最后的分类器

    ResNet的残差结构通过在输出和输入之间引入一个快捷连接(shortcut connection)解决网络加深时出现梯度消失的问题,从而可以把网络做的很深

    深度学习取得成功地关键是模型的深度,深层架构赋予了深度学习方法解决更复杂的任务的可能性。

    2.2.3 卷积神经网络的计算

    卷积神经网络的基本算法

    在CNN的计算过程中,无论是数据层还是参数层都以张量(tensor)形式存储。张量是矢量概念的推广。计算框架Tensorflow就是以此命名

    数据层的数据统称为特征图,其中输入层特征图一般是图像的像素组成的张量。也有研究使用算法处理过的图像或者提取的特征图作为CNN的输入。由于一般的信号处理算法都有信息损失,像素可以理解为最原始的无损特征。在CNN的理论中,更倾向于通过标签监督学习,避免人为设计导致信息损失,因此最常见的输入是像素。

    特征图通常是四维张量(B,C,H,W),其中B代表batch_size,代表模型一次对一批图像进行处理,C代表特征图的通道数。

    一般地,在CNN中,第L个参数层作用是对来自第L-1个数据层的输入X(l-1)进行线性组合得到Z(l-1),通过非线性映射f得到输出Xl,交给第L个数据层。非线性映射是多层神经网络具有逼近任意函数的前提。

    正向传播阶段

    1. 卷积层
    2. 池化层
    3. 全连接层
    4. 激活函数
    5. softmax层:输出总和为1
    6. 损失函数:单标签问题,采用交叉熵为误差函数

    反向传播阶段

    每一层的误差敏感项可以由后一层的误差敏感项通过链式法则求得。

    1. softmax层:采用交叉熵,误差敏感项具有简洁的表达式

    2. 全连接层:误差敏感项传播到所有节点

    3. 下采样层:误差敏感项传播到max pooling对应位置

    4. 卷积层:和全连接相比,卷积的连接是稀疏的。BP时要找出所有与该权值有关的连接,将有关的误差敏感项擦传播到对应位置

    卷积神经网络的计算框架

    当前流行的算法框架大多基于CUDA,数学计算的核心由cuBLAS、cuDNN库提供

    2.3 迁移学习与多任务学习

    2.3.1 迁移学习

    CNN一般需要较多的数据进行充分训练,模型的初始化也是影响性能的一个因素。从参数初始化的角度,采用迁移学习的策略,也可以理解为利用既有模型参数,为新的模型参数指定一个较好的初始化。

    迁移学习和微调并不是同一个概念。迁移学习是一套完整的算法体系,是将模型从一个数据集应用到另一个数据集的方法。微调是一个处理手段,不仅仅用于迁移学习,也是神经网络模型训练中的重要一步。迁移学习的目的是利用旧的知识服务新的任务,这里的知识包括数据和模型两大部分,而微调仅仅是对模型参数的微调

    2.3.2 多任务学习

    多任务学习方法是一种同时学习多个任务的机器学习算法。多任务学习是一种归纳迁移机制,基本目标是提高泛化能力,利用共享表示,采用并行训练的方法学习多个任务。多任务学习的基本思想是在相关的学习任务之间迁移通用的知识,从而取得比单独学习更好的效果。迁移学习和多任务学习都利用了任务间的相关信息。不同之处是,迁移学习侧重对目标任务的优化,而多任务学习是多任务具有同等地位。

    多任务学习起源于对机器学习中归纳偏置(inductivebias)问题的研究。机器学习是从数据中学习,归纳出模型的过程。一个学习问题可能有多个解,求解过程是基于某些假设下的最优解。这些假设的集合就称为归纳偏置。常见的假设如最近邻、最小交叉验证误差、最大边界、最小描述长度(奥卡姆剃刀)等。常见的学习算法,如支持向量机、神经网络等其实都基于不同的归纳偏置。这些偏置的选择是人为的。

    多任务学习的一个思想是通过利用相关任务的信息自动选择更佳的归纳偏置。方法上可以总结为两类:共享参数和挖掘任务之间隐藏的共有数据特征。

    在神经网络的训练中,加入随机噪声是提高泛化性能的一个手段。从多任务学习的角度分析,加入不同噪声其实是创造不同但是相关的任务。利用多任务学习方法,学习到更加共性的特征。而这里任务之间的共性其实就是数据中排除噪声部分,因此学习到的特征对噪声更加不敏感,更鲁棒。

    展开全文
  • 图像识别的原理、过程、应用前景

    万次阅读 多人点赞 2019-02-01 15:03:13
    图像识别的原理、过程、应用前景1、图像识别技术的引入1.1图像识别技术原理1.2模式识别2、图像识别技术的过程3、图像识别技术的分析3.1神经网络的图像识别技术3.2非线性降维的图像识别技术3.3 图像识别技术的应用及...


    在这里插入图片描述
    图像识别技术是信息时代的一门重要的技术,其产生目的是为了让计算机代替人类去处理大量的物理信息。随着计算机技术的发展,人类对图像识别技术的认识越来越深刻。图像识别识别的过程分为信息的获取、预处理、特征抽取和选择、分类器的设计和分类决策。简单分析了图像识别技术的引入、其技术原理以及模式识别等,之后介绍了神经网络的图像识别技术和非线性姜维的图像识别技术以及图像识别技术的应用。从中可以总结出图像处理技术的应用广泛,人类的生活将无法离开图像识别技术,研究图像识别技术具有重大的意义。

    1、图像识别技术的引入

    图像识别是人工智能的一个重要的领域。图像识别的发展经历了三个阶段:文字识别、数字图像处理与识别、物体识别。图像识别,顾名思义,就是对图像做出各种处理、分析,最终识别我们所要研究的目标。今天所指的图像识别并不仅仅是用人类的肉眼,而是借助计算机技术进行识别。虽然人类的识别能力很强大,但是对于高速发展的的社会,人类自身识别能力已经满足不了我们的需求,于是就产生了基于计算机的图像识别技术。这就像人类洋酒生物细胞,完全靠肉眼观察细胞是不现实的,这样自然就产生了显微镜等用于精确观测的仪器。

    1.1图像识别技术原理

    其实图像识别背后的技术的原理并不是很难,只是器要处理的信息比较繁琐。计算机的任何处理技术都不是凭空产生的,它都是学者们从生活实践中得到启发而利用程雪将其模拟实现的。计算机的图像识别技术在原理上并没有本质的区别,只是机器缺少人类在感觉与视觉差上的影响罢了。人类的图像识别也不单单是凭借从整个图像存储在脑海中的记忆来识别的,我们识别图像都是依靠图像所觉有的本身特征而将这些图像分了类,然后通过各个类别所觉有的特征将图像识别出来的,只是很多的时候我们没有意识到这一点,当看到一张图片时,我们的大脑会迅速将图像识别出来的,只是很多时候我们没有意识到这一点。当看到一张图片时,我们的大脑会迅速的感应到是否讲多此图片或与其相似的图片。其实在“看到”与“感应到”的中间经历了一个迅速识别的过程,这个识别的过程和搜索有些类似。在这个过程中,我们的大脑会根据存储记忆中已经分好的类别进行识别,查看是否有与该图像具有相同或类似特征的存储记忆,从而识别出是否见过该图像.机器的图像识别技术也是如此,通过分类并提取重要特征而排除多余的信心来识别图像。机器的图像识别技术也是如此,通过分类并提取重要特征而排出多余的信息来识别图像。机器所提取的这些特征优势会非常明显,有事有事很普通,这在很大程度上影响了机器的识别速率。总之,在计算机视觉识别中,图像的 内容通常是图像特征进行描述。

    1.2模式识别

    模式识别是人工智能和新科学的重要组成部分。模式识别是指对表示事务或现象的不同形式的信息做分析和处理从而得到一个事务或现象做出描述、辨认和分类的过程。

    计算机的图像识别技术就是模拟人类的图像识别过程。在图像识别的过程中进行模式识别是必不可少的。模式识别原本是人类的一项基本智能,但随着计算机的发展和人工智能的兴起,人类本身的模式识别已经满足不了生活的需要,于是人类就希望用计算机来代替或扩展人类的部分脑力劳动。这样计算机的模式识别就产生了。简单地说,模式识别就是对数据进行分类,它是一门与数学紧密结合的科学,其中所用的思想大部分是概率与统计。模式识别主要分为三种:统计模式识别,句法模式识别、模糊模式识别。

    2、图像识别技术的过程

    既然计算机的图像识别技术与人类的图像识别原理相同,那它们的过程也是大同小异的。图像识别技术也分为已下几步:信息的获取,预处理、特征抽取和选择、分类器设计和分类决策。
    信息的获取指通过传感器,将光或声音等信息转化为电信息。也就是获取研究对象的基本信息并通过某种方法将其转变为机器能够认识的信息。
    预处理主要是指图像处理中的去燥、平滑、变换等操作,从而加强图像的重要特征。
    特征抽取和选择是指在模式识别中,需要进行特征的抽取和选择。简单的理解就是我们所研究的图像是各式各样的,如果需要利用某种方法将它们区分开,就要通过这些图像所具有的本身特征来识别,而获取这些特征过程就是特征抽取。在特征抽取中所得到的特征也许对此次识别并不都是有用的,这个时候就要提取有用的特征,这就是特征的选择。特征抽取和选择在图像识别过程中是非常关键的技术之一,所以对这一步的理解是图像识别的重点。
    分类器设计是指通过训练而得到一张识别规则,通过此识别规则可以得到的一种特征分类,使图像识别技术能够得到高识别率。分类决策时是指在特征空间中对识别对对象进行分类,从而更好地识别所研究的对象具体属于哪一类。

    3、图像识别技术的分析

    随着计算机技术的迅速发展和科技的不断进步,图像识别技术已经在众多领域得到了应用。计算机在很多方面确实具有人类所无法超越的优势,也正是因为这样,图像识别技术才能为人类社会带来更多的应用。

    3.1神经网络的图像识别技术

    神经网络图像识别技术是一种比较新型的图像识别技术,是在传统的图像识别方法和基础上融合神经网络算法的一种图像识别方法。这里的神经网络是指人工神经网络,也就是说这种神经网络并不是动物本身所具有的真正的神经网络,而是人类模仿动物神经网络后人工生成的。在神经网络图像识别技术中,遗传算法BP网络项融合的神经网络图像识别模型是非常经典的,在很多领域都有它的应用。在图像识别系统中利用神经网络系统,一般会先提取图像的特征,再利用图像所具有的特征映射到神经网络进行图像识别分类。以汽车牌照自动识别技术为例,当汽车通过的时候,汽车自身具有的检测设备会有所感应,此时检测设备就会启用图像采集装置来获取汽车正反面的图像。获取了图像后必须将图像上传到计算机进行保存以便识别。最后车牌定位模块就会提取车牌信息,对车牌上的字符进行识别并显示最终的结果。在对车牌的上的字符进行识别的过程中就用到了机遇模版匹配算法和人工神经网络算法。

    3.2非线性降维的图像识别技术

    计算机的图像识别技术是一个异常高维的识别技术。不管是图像本身的分辨率如何,其产生的数据经常是多维性的,这给计算机的识别带来了非常大的困难。想让计算极具有高效的识别能力,最直接有效的方式就是降维,降维分为线性降维和非线性降维。例如主要成分分析(PCA)和线性奇异分心(LDA)等就是常见的线性降维方法,他的特点是简单、易于理解。但是通过线性降维处理的是整体的数据集合,所求的是整个数据集合的最优低维投影。经过验证,这种线性的降维策略计算复杂度高而且占用相对较多的时间和空间,因此就产生了基于非线性降维的图像识别技术,它是一种极其有效的非线性特征提取方法。此技术可以发现图像的非线性结构而且可以在不破坏其基础上对其进行降维,是计算机的图像识别在尽量低的维度进行,这样就提高了识别速率。例如人脸图像识别系统所需的维数通常很高,其复杂度之高对计算机来说无疑是巨大的“灾难”。由于在高维度空间中人脸图像的不均匀分布,使得人类可以通过非线性降维技术来得到分布紧凑的人脸图像,从而提高人脸识别技术的高效性.

    3.3 图像识别技术的应用及前景

    计算机的图像识别技术在公共安全、生物、工业、农业、交通、医疗等很多领域都有应用。例如交通方面的车牌识别系统;公共安全方面的的人脸识别技术、指纹识别技术;农业方面的种子识别技术、食品品质检测技术;医疗方面的心电图识别技术等。随着计算机技术的不断发展,图像识别技术也在不断的优化,其算法也在不断改进。

    转自(https://mp.weixin.qq.com/s/THE5B77C_AJa5y6sfOXpaA )侵删

    展开全文
  • 虽然人类的识别能力很强大,但是对于高速发展的社会,人类自身识别能力已经满足不了我们的需求,为了让计算机代替人类去处理、分析大量的物理信息,作为信息时代的一门重要的技术,图像识别技术应运而生。...
  • 图像识别在监控中的应用

    千次阅读 2018-06-26 10:28:46
    在上一篇文章中我们分析了图像识别和传统ui自动化的区别,在今天这篇文章中我们一起学习一下图像识别在网站监控中的应用。在以往的监控中,我们对web项目中的监控有很多种,其中最常见的就是接口监控而且这种监控的...
  • 图像识别技术的应用及发展趋势

    千次阅读 2019-03-22 09:48:04
    图像识别技术的背景   移动互联网、智能手机以及社交网络的发展带来了海量图片信息,根据BI五月份的文章,Instagram每天图片上传量约为6000万张;今年2月份WhatsApp每天的图片发送量为5亿张;国内的微信朋友圈也...
  • 图像识别的原理、过程、应用前景,精华篇!

    万次阅读 多人点赞 2018-09-28 07:53:49
    图像识别的原理、过程、应用前景,精华篇!   https://mp.weixin.qq.com/s/THE5B77C_AJa5y6sfOXpaA   图像识别技术是信息时代的一门重要的技术,其产生目的是为了让计算机代替人类去处理大量的物理信息。...
  • CNN和神经网络图像识别是计算机视觉深度学习的核心组成部分,它具有许多应用场景,包括电子商务,游戏,汽车,制造业和教育。 在本文中,你将学习到: 1)什么是图像识别? 2)图像识别如何工...
  • 数据科学家分享:人工智能在图像识别技术上应用

    万次阅读 多人点赞 2018-12-03 09:28:59
    图像识别的过程总结如下: 信息的获取:是通过传感器,将光或声音等信息转化为电信息。信息可以是二维的图象如文字,图象等;可以是一维的波形如声波,心电图,脑电图;也可以是物理量与逻辑值。 预处理:包括A\D,...
  • 图像识别技术原理和神经网络的图像识别技术

    千次阅读 多人点赞 2019-03-03 19:44:58
    图像识别技术是信息时代的一门...简单分析了图像识别技术的引入、其技术原理以及模式识别等,之后介绍了神经网络的图像识别技术和非线性降维的图像识别技术及图像识别技术的应用。从中可以总结出图像处理技术的应用...
  • 在实际应用中,无论是web端还是移动端,仍有很多时候需要根据页面内容、页面中的图像进行定位及判定,这里介绍一下基于opencv的图像识别技术在自动化测试中的应用。 这里我们使用selenium驱动测试,使用opencv进行...
  • 图像识别算法

    万次阅读 多人点赞 2019-08-15 17:36:40
    图像特征提取是图像分析与图像识别的前提,它是将高维的图像数据进行简化表达最有效的方式,从一幅图像的的数据矩阵中,我们看不出任何信息,所以我们必须根据这些数据提取出图像中的关键信息,一些基本元件以及它们...
  • 伴随着图像处理技术的飞速发展,推动了图像识别技术的产生和发展,并逐渐成为人工智能领域中重要的组成部分,并广泛地运用于面部识别、指纹识别、医疗诊断等等领域中,发挥重要作用。 这也给学生思考课题给了更多的...
  • 神经网络的反馈 准则函数是对误差的度量,在反馈过程中,实际就是准则函数最优化的过程。 假设函数f(θ)是凸函数,即Hessian矩阵为正定,凸函数的最优问题容易解决。 实际中函数f(θ)为非凸函数,解决的方法之一...
  • 2018 年6月份 的文章: 运用人工智能去解决以下问题:1....比如皮肤色素瘤,乳腺癌,肺部癌变的早期识别。2.肿瘤发展追踪。人工智能可以根据器官组织的分布,预测出...**通过核磁共振图像,人工智能可以更有效地再...
  • 图像识别技术发展趋势分析

    千次阅读 2011-04-01 14:10:00
    图像技术的应用域极为广泛。下面以其学科分支及应用领域为纲,简述其发展状况及前景。  1。计算机图像生成  以计算机图形学和“视算”为基础的计算机图像生成技术,在21世纪将更加繁荣。在大型...
  • TensorFlow在图像识别中的应用

    千次阅读 2017-02-06 15:12:59
    TensorFlow在图像识别中的应用 http://www.csdn.net/article/2015-12-16/2826496
  • 深度学习之图像识别

    千次阅读 2018-08-23 21:51:55
    使用深度学习新秀框架keras对图片进行学习其特征并识别用到了一些重要的模块。具体代码如下: from future import print_function import numpy as np np.random.seed(1337) import keras f...
  • 首先来看一下识别的效果:这里需要... ... ... 登录后创建应用: ...此处注意:图像识别中的各项功能共用的是一个SDK包,只是不同功能实现的时候使用的函数以及返回参数不同,点击完创建应用后就可以生成三个我们后期识...
1 2 3 4 5 ... 20
收藏数 179,344
精华内容 71,737
关键字:

图像识别应用