新手初入人工智能(图像处理方向),我该向什么方向发展?

陈嗣谦


计算机视觉方向目前主要有几大方向比较热门,我下面将分别从他们的发展过程与现状以及怎么入门学习来进行介绍。首先,计算机视觉的主要方向有:

图像分类
人脸识别
目标检测
图像分割
关键点检测
文字识别OCR

编程与数学基础

首先,人工智能毕竟是一个计算机学科,需要具备基本的编程功底与数学能力。具体来说,编程方面,需要熟悉Python编程,熟悉Numpy,Pandas,Opencv等库的使用,同时还得熟悉某个深度学习框架的使用,比如TensorFlow,Keras,PyTorch,Caffe等。以上这些是必须具备的,如果能再有点C++,Java方面的基础就更好了。数学方面,肯定需要对大学的数学知识有一定的了解,比如求导与积分,偏导数,梯度下降之类的高数知识,以及线代和概率与统计等知识。如果对这方面知识不太熟悉,建议从课本上好好学学,当然也可以通过如下图所示的深度学习圣经即"花书"的前几章来学习。


图像分类

图像分类是一个计算机视觉的经典方向。深度学习的火爆最早是因为Hinton带领他的学生使用深度神经网络参加了ImageNet大赛,其最后成绩远超使用传统方法的第二名一大截。由此引发了最近几年越来越热门的深度学习研究,在2012年及以后,在ImageNet比赛上出现了更多的网络结构,从最开始的AlexNet,到VggNet,GoogleNet,Inception,RestNet,Inception-ResNet-v1~3,Xception等。每次新的网络的出现都让正确率上升了一大截,可以说ImageNet比赛推动了整个计算机视觉的发展。



但是ImageNet的数据集太大,不太适合我们入门图像分类。我们可以使用mnist数据集,或者CIFAR-10数据集(如上图所示).CIFAR-10 数据集有 60000 张图片,每张图片均为分辨率为 32*32 的彩色图片(分为 RGB3 个信道)。CIFAR-10 的分类任务是将每张图片分成青蛙、卡车、飞机等 10 个类别中的一个类别。具体关于CIFAR-10的详细介绍以及实例代码,大家可以关注我头条号置顶的那篇文章.

人脸识别

人脸识别在引入深度学习之前主要使用PCA降维后进行分类,在引入深度学习之后,采用了CNN来提取特征,然后使用SVM之类的分类器进行分类,但是本质上还是一个分类,需要提前录入人脸数据进行训练.直到FaceNet出现之后, 论文中提出了一种叫做triplet 的损失函数,主要目标是减低类内(同一个人)的距离,增加类间(不同的人)的距离.由此将原本的分类问题转变为了一个距离度量问题,是人脸识别变成了一个开放的问题,可以随时送入两张没有参与训练过的人脸图片提取特征向量,然后通过比较这两个向量的距离来判断相似性.



后来又出现了各种各样的loss, 有些已经达到了目前state-of-art的效果,我在这里只是罗列下,具体各位可以关注我,后面我会推出人脸识别综述,与各种损失函数总结。目前损失函数主要有:

centerLosscontrastiveLossrangeLosslarge-marginl2-normAM-softmaxCosFaceArcFace

大家如果想要入门的话,可以先下载一下lfw数据集,然后用TensorFlow实践一下经典的算法.

目标检测与图像分割

目标检测的任务是从一个复杂场景的图像中找到不同的物体,并且给出各个物体的边界框。图像检测的三个著名的数据集是PASCAL VOC,ImageNet和微软COCO. PASCAL VOC包含20个物体的类别,而ImageNet包含一千多种物体类别,COCO有80中物体类别和150万个物体实例。


自从2012年的ILSVRC竞赛中基于CNN的方法一鸣惊人之后,CNN已成为图像分类、检测和分割的神器。其中在图像检测的任务中,R-CNN系列是一套经典的方法,从最初的R-CNN到后来的Fast R-CNN, Faster R-CNN 和今年的Mask R-CNN, 我们可以看到CNN在图像检测中是如何一点一点提高的。还有就是采用一步到位的检测算法的SSD与YOLO系列算法.这些算法的详细介绍,大家可以关注我头条号之前发布的文章.

R-CNN 系列的四篇文章如下:

R-CNN: https://arxiv.org/abs/1311.2524Fast R-CNN: https://arxiv.org/abs/1504.08083Faster R-CNN: https://arxiv.org/abs/1506.01497Mask R-CNN: https://arxiv.org/abs/1703.06870

关键点检测

人体骨骼关键点对于描述人体姿态,预测人体行为至关重要。因此人体骨骼关键点检测是诸多计算机视觉任务的基础,例如动作分类,异常行为检测,以及自动驾驶等等。近年来,随着深度学习技术的发展,人体骨骼关键点检测效果不断提升,已经开始广泛应用于计算机视觉的相关领域。本文主要介绍2D人体骨骼关键点的基本概念和相关算法,其中算法部分着重介绍基于深度学习的人体骨骼关键点检测算法的两个方向,即自上而下(Top-Down)的检测方法和自下而上(Bottom-Up)的检测方法。相应算法的详细介绍大家可以关注我头条号之前发布的文章.



文字识别OCR

OCR(Optical Character Recognition, 光学字符识别)传统上指对输入扫描文档图像进行分析处理,识别出图像中文字信息。场景文字识别(Scene Text Recognition,STR) 指识别自然场景图片中的文字信息。我这里主要介绍难度更大的场景文字识别的发展.自然场景图像中的文字识别,其难度远大于扫描文档图像中的文字识别,因为它的文字展现形式极其丰富:

·允许多种语言文本混合,字符可以有不同的大小、字体、颜色、亮度、对比度等。


·文本行可能有横向、竖向、弯曲、旋转、扭曲等式样。

·图像中的文字区域还可能会产生变形(透视、仿射变换)、残缺、模糊等现象。

·自然场景图像的背景极其多样。如文字可以出现在平面、曲面或折皱面上;

文字区域附近有复杂的干扰纹理、或者非文字区域有近似文字的纹理,比如沙地、草丛、栅栏、砖墙等。


文字识别其实主要包含两个步骤, 文字检测与文字识别, 但是近年来也有出现了以CRNN(具体可以关注华中科大白翔老师的研究)为代表的一步到位的端到端的识别模型,效果也还不错.文本检测工作目前可以大致分为三类:

一是基于分割的思想,通过分割网络提取文本区域,然后采取一些后处理方法获取边界框。代表性的工作是发表在CVPR2016的“Multi-oriented text detection with fully convolutional networks”;

二是基于候选框的思想,直接用一个神经网络来检测文本边界框。代表性的工作是发表在CVPR2016的“Synthetic data for text localization in natural images”;

三是混合思想,它采用多任务学习的框架,结合了分割和边界框检测的方法。代表性的工作是发表在ICCV2017的“Deep Direct Regression for Multi-Oriented Scene Text Detection”。

而文字识别大致分为两类思路:其一是从单词或字符层面入手,设计单词分类器或字符分类器,将每一个单词或字符作为一类目标,进行多类别分类任务。

而近来循环神经网络大放异彩,它可以将文本识别看作一个序列标签问题,并能够直接输出标签序列。因此,第二种思路从序列层面入手,将文本看作一个字符序列,通过设计序列特征提取器,结合循环神经网络(RNN)和CTC模型,将文本序列作为一个整体进行识别。

目前OCR方面比较经典的算法有CTPN,RRPN,DMPNet,SegLink,TextBoxes,FTSN,WordSup等, 具体可以关注我头条号,我后面会推出详细介绍.

总结

以上内容总结了目前计算机视觉方向比较流行的方向,以及一些经典的算法.能力有限,难免有总结的不到位地方,欢迎指正.最后,欢迎大家关注我的头条号,会有大量深度学习相关资源不间断放送.


深度学习中文社区


目前如果是新手刚入门的话,我不建议一开始就有一个很明确的方向去研究,可以每个方向都去试试。众所周知,目前深度学习共有三大方向的研究比较热门,分别是计算机视觉,自然语言处理,语音识别相关。下面我将以计算机视觉为例介绍一下目前研究的概况,以及怎么入门。


计算机视觉也是和你目前所入门的方向比较一致。在这个方面目前比较火的研究内容有人脸识别,目标检测,图像分类,关键点检测,图像分割分割。


1.从mnist入门

我的建议是可以先从mnist入门,学习下CNN相关知识,并且结合你之前图像处理基础知识。可以对输入的图像就行各种预处理,以提高识别效果。


2.提升fashion mnist识别效果

有了研究mnist时学习的基础,就可以看看目前主流cnn网络模型的发展。从alexnet,到vggnet,再到resnet。这些网络模型运用到fashion mnist数据集分类中,提升准确率。


3.选择研究内容

到了这个时候,对计算机视觉方向有了比较清晰的认识后。才建议选择方向研究,研究时也一定要跟随这最近的网络结构的发展来学习。以目标检测为例,从R-CNN,到Fast R-CNN,再到Faster R-CNN。每一次都是一次伟大的进步,里面提出的新算法都值得仔细品味。


desire72128


废话不多说,直接来干货。

新手基础较薄弱个人建议以opencv入手,opencv是非常强大的视觉库,包括图像预处理,增强,过滤,识别,立体视觉等等,可以说图像基本处理方法和算法都包括了,用法也非常简单,注意接口和输出的格式就可以了。需要深入的伙伴也可以直接看算法原理和源代码。强力推荐浅墨的教程或书,深入浅出,思维连贯不抽象。编程语言建议采用python,模块化程序使用起来很方便,强烈推荐廖雪峰的教程,毕竟实战最重要。用linux系统做开发,你会发现开源之美。关于深度学习我觉得去学caffe吧,因为维护这个框架团队是专门做图像的,这个框架和图像的匹配应该会强一些!学习贵在坚持,加油💪