2100537862 图像识别

版权声明:人工智能/机器学习/深喥学习交流QQ群: , 微信公众号:程序员深度学习 /sinat_/article/details/

图像识别识别分析数据集是一个多分类数据集在预测结果评估过程中与需要注意一些问题[Everingham M]:

1. 茬图像识别分类任务中,仅用一个标签标示样本而图像识别中可能包含多个类别的物体。面对这种问题可以借鉴图像识别检索的评估思路,使用top @k 模型对模型进行评估只要前k个标签中有一个正确的,就算分类正确 
2. 每类物体的样本数量分布不均匀,避免使用准确率(accuracy)等对囿偏数据集上的结果评估不佳的方法这一现象尤其在物体检测中明显:当使用滑窗算法时可能会面对大比例的负样本这一情况。 
3. 评估算法需要有普适性具有与算法无关的独立性。需要构造一个适用于图像识别分类、物体检测以及图像识别分割等多种任务的统一评估方案

    针对以上问题,我们将图像识别分类、物体检测和图像识别分割问题全部都看作对N个相互独立类别的二分类问题从而将多种任务的评估问题统一到图像识别分类的评估体系中,增强评估方案的有效性和可行性

    在图像识别分类任务的研究中,通常使用多类别混淆矩阵及其衍生的统计量评估各个算法的性能得到混淆矩阵后,可以对分类器整体性能和单一分类器性能评估从而全面地评估分类模型的性能。 
accuracy)进行评估
总体分类精度只考虑了对角线方向上被正确分类的像元数,而Kappa系数则同时考虑了对角线以外的各种漏分和错分像元可以利用Kappa系数评估分类模型的整体精度,当Kappa系数的值大于0.80时意味着分类数据和检验数据的一致性较高,即分类精度较高 
    对于整体分类精度嘚评估并不能完全反应单个分类器的性能。一般可以根据混淆矩阵得到每个分类器的准确率(accuracy) 、精确率(precision)、召回率(recall)绘制ROC曲线、PR曲线,从而评估表分类器精度的高低 
precision,其中mean的含义是对所有类别取平均(每一个类当做一次二分类任务)现在的图像识别分类论文基本都是用mAP作为標准。 

    对于大规模的数据集比如ImageNet有1000类共一千万张图像识别,对大量样本的分类计算量十分巨大该数据集的分类任务评估采用了总体错誤率,当分类错误时累加1最后求均值该指标是总体正确率(Overall Accuracy)的补集。在该数据集上采用top-1 error和top-5 error对各个模型评估、排序的结果基本一致最終单独使用top-5 error作为图像识别分类的评价指标。

    目标检测需要同时实现目标定位和目标识别两项任务其中,通过比较预测边框和ground truth边框的重叠程度和阈值的大小判定目标定位的正确性;通过置信度分数和阈值的比较确定目标识别的正确性以上两步综合判定目标检测是否正确,朂终将目标检测转换为“检测正确、检测错误”的分类问题从而可以构造混淆矩阵,使用目标分类的指标评估模型精度 
重点内容对于夶规模数据集ImageNet,为每一个类别的检测结果计算精确率(Precision)、召回率(Recall)对于每个目标类别的最终评测指标是平均精度(AP),即P-R曲线的积汾值单目标类别检测AP最高者获胜,检测目标类别获胜数目最多的团队赢得目标检测的挑战

    像素级图像识别分割的评估问题也可以转换為分类模型的评估。ISPRS提出了一种经典的基于累加混淆矩阵的分类精度评估方法首先将原始图像识别划分为treue ortho photo (TOP) tiles,然后统计tile中每一个像素点所屬的类别从而构建基于像素的混淆矩阵,最后将每个tile的混淆矩阵累加起来得到累加混淆矩阵(accumulated confusion truth的像素点数目(实际上是精确率Precision)

我们的大脑很容易实现视觉我們可以很容易地分别狮子和豹子,读取一个信号或者识别一个人脸。但是这些对于一个计算机来说是相当困难的问题他们只是看起来簡单,是因为我们大脑在理解图片方面是相当厉害的


    在过去几年,机器学习领域取得了巨大的进步特别是,我们已经发现一种模型稱为一种以实现合理的性能,硬视觉识别任务--在某些领域匹配或超过人类的性能
    研究人员在计算机视觉领域已经表现出了稳定的进步,通过验证他们对计算机视觉的学术基准工作连续模式继续显示改善,每次达到一个新的国家的最先进的结果:, , , 谷歌内部和外部的研究囚员对研究已经发表论文描述所有这些模型,但结果仍然很难复制我们现在正在通过释放代码来运行图像识别识别在我们的最新模型,
    inception-v3训练大视觉识别的挑战赛从2012年的数据。这是一个标准的任务在计算机视觉模式尝试把整个图像识别库分类为1000类。例如这里有一些图爿分类结果:

    比较模型,我们研究模型失败的频率来预测作为一个顶级5猜测的正确答案--被称为“五大错误率”实现了通过设置五大错误率15.3% 2012年验证数据集;达到6.66%;达到3.46 %。 karpathy测量自己的表演他达到了5.1 %,前5位错误率
    这个例子会教你如何使用Inception-v3。你会了解如何用python或者C++语言把照片汾为1000类。我们也会讨论如何从这个模型中提取出更高层次的特征可以用于其他视觉任务。
    我们也很期待社区会用这个模型实现什么。

    洳果模型被正确运行那么脚本会输出一下内容:


    你可以运行相同的模型在C++在生产环境中使用。你可以下载档案包含graphdef定义模型像这样(从tensorflow庫的根目录运行):

    接下来我们需要编译C++程序,该程序包括加载和执行图表的代码如果你是按照配置你的平台,你应该能编译该例子通过这命令从你的shell terminal:

    上面的命令会生成一个可执行程序,然后你就可以这样运行:

    这使用默认的例子图像识别那图片与框架已经绑定恏的,并应该输出类似的东西:

    在这个例子中我们使用的默认的形象,海军上将你可以看到网络正确识别她穿着军装,有一个高的得汾为0.6

这命令行标志控制加载文件的地方,以及输入图像识别的属性该模型期望得到299*299RGB图片,他们是通过input_width和input_height标志来控制我们也需要缩放潒素值,从0和255之间的浮点值图表操作整数。我们控制缩放input_mean和input_std标志:我们先减去input_mean从每个像素值然后除以input_std。
    这些值可能看起来有点不可思議但它们只是由原始模型作者定义的,是基于他/她想用的输入的训练照片如果你有一个自己训练的图表,你只需要调整值和你使用的楿匹配在训练的进程中。
    在 函数可以看到他们是如何运用到一张照片的。

    我们通过创建一个GraphDefBuilder这是一个对象,我们可以使用指定一个模型来运行或加载

    然后,我们开始为我们想要加载和执行的小模型创建节点调整大小,缩放像素值来得到主模型期待的结果来作为輸入。我们创建的第一个节点只是一个常量op包含一个带有我们想要加载照片文件名的张量。那也是作为第一个输入传递给ReadFile op你可能也注意到了,我们传递b.opts()作为最后参数给所有op创建函数运行GraphDefBuilder的时候,这参数确保了节点被加载到了定义模型我们也命名了ReadFile操作,通过让WithName()命令b.opts()这给节点一个名字,那也不是严格必要的如果你不这样做,系统会自动分配名字但如果你做了,它确实使调试更容易

    然后,我们繼续添加更多的节点解码的文件数据作为一个图像识别,将整数转换为浮点值调整它,然后最后运行的像素值的减法和除法运算

    最後,我们定义了一个模型存储到了b值我们用tographdef()函数把它输入到一个完整的图形。

    然后我们创建了一个Session类它是一个确切的运行图表接口,嘫后运行它指定哪个节点我们要从中获得输出,并在哪里输出数据
    这给我们一个向量类,在这种情况下我们只知道一个单一的对象。在此文中你可以把一个tensor想象为一个多为数组,并且它拥有一个299像素高299像素宽,3通道图片的浮点数值如果你在你的工程里已经有了伱自己的图像识别处理框架,你应该使用它只要你在主图中应用相同的变换。
    这是一个用C++创建的简单的小的Tensorflow动态图但是为了先前训练嘚Inception模型,我们想要加载一个更大的定义文件你可以在LoadGraph()函数看到是如何实现的。

    如果你已经浏览了图片加载代码许多阶段应该看起来很楿似。我们是直接加载一个包含GraphDef的protobuf文件而不是使用一个

    GetTopLabels()函数很像加载图片,除了这情况我们想要结果运行主图表,把它变成一个排序嘚最高评分标签列表就像图片加载,它创建了GraphDefBuilder加了一对节点给它,然后运行一个短图表来得到一双tensor输出在这种情况,他们代表的排序分数和指数的最高结果的位置

    PrintTopLabels()函数带有这些分类的结果,然后把他们友善地输出来CheckTopLabel()函数非常类似,但是只是确保顶部标签是我们期朢的用于调试的目的。

    这里我们运行加载图表,用图表作为输入

    为了测试的目的,我们可以检查以确保我们得到我们期待的输出。

    这里的异常处理是用Tensorflow的Status类它是很方便的,因为它让你知道是否有任何错误产生使用ok()检查器,然后能作为可读的错误信息打印出来
    茬这个例子中,我们演示了物体识别但是你应该能应用到非常相似的代码在别的模型,那些你已经发现和训练你自己的模型在各种领域。我们希望这个小例子给你一些关于如何使用Tensorflow到你自己产品的想法

    练习:迁移学习是一种思想,如果你知道如何解决一个任务你应該能够将一些理解转移到解决相关问题。 迁移学习的一个方法是移除网络的最后一层分类层然后解压next-to-last layer of the CNN:http://arxiv.org/abs/,在这种情况下一个2048维向量。囿引导如何操作的在

    要找出更多关于实现卷积神经网络,你可以跳转到:或者慢慢地开始用我们或者 MNIST的开始例子。最后如果你想在這方面的研究工作,你可以阅读本教程中引用的所有文件的最新工作

我要回帖

更多关于 二次函数的图像和性质 的文章

 

随机推荐