如何评价美国李飞飞丈夫哪国人团队的论文 Dense-Captioning Events in Videos

&figure&&img src=&https://pic2.zhimg.com/v2-f766b26dfcede086afe2528_b.jpg& data-rawwidth=&640& data-rawheight=&424& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-f766b26dfcede086afe2528_r.jpg&&&/figure&&p&&b&码字不易,欢迎给个赞!&/b&&/p&&p&&b&欢迎交流与转载,文章会同步发布在公众号:机器学习算法工程师(Jeemy110)&/b&&/p&&a data-draft-node=&block& data-draft-type=&link-card& href=&https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/6whjnKgzrVTLoBq3Xd6zuw& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&2017年历史文章汇总|深度学习&/a&&hr&&p&&i&本文翻译自&/i&&/p&&a data-draft-node=&block& data-draft-type=&link-card& href=&https://link.zhihu.com/?target=http%3A//tarangshah.com/blog//what-is-map-understanding-the-statistic-of-choice-for-comparing-object-detection-models/& data-image=&https://pic2.zhimg.com/v2-89b6c307f54a238c18ff51_180x120.jpg& data-image-width=&800& data-image-height=&353& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Measuring Object Detection models - mAP - What is Mean Average Precision?&/a&&p&&br&&/p&&p&对于使用机器学习解决的大多数常见问题,通常有多种可用的模型。每个模型都有自己的独特之处,并随因素变化而表现不同。&/p&&p&每个模型在&b&“验证/测试”数据集&/b&上来评估性能,性能衡量使用各种统计量如&b&准确度&/b&(accuracy),&b&精度&/b&(precision),&b&召回率&/b&(recall)等。选择的统计量通常针对特定应用场景和用例。 对于每个应用场景,选择一个能够客观比较模型的度量指标非常重要。&/p&&p&这篇文章将介绍目标检测(Object Detection)问题中的最常用评估指标-&i&Mean Average Precision&/i&,即mAP。&/p&&p&大多数时候,这些指标很容易理解和计算。例如,在二元分类中,精确度和召回率是一个一个简单直观的统计量。然而,目标检测是一个非常不同且有趣的问题。即使你的目标检测器在图片中检测到猫,但如果你无法定位,它也没有用处。由于你要预测的是图像中各个物体是否出现及其位置,如何计算mAP将非常有趣。&/p&&p&在讲解mAP之前,我们先定义目标检测问题。&/p&&h2&目标检测问题&/h2&&p&在目标检测问题中,给定一个图像,找到它所包含的物体,找到它们的位置并对它们进行分类。目标检测模型通常是在一组特定的类集合上进行训练的,所以模型只会定位和分类图像中的那些类。另外,对象的位置通常采用矩形边界框表示。因此,目标检测涉及图像中物体的定位和分类。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-599f372b616faca968ef_b.jpg& data-rawwidth=&800& data-rawheight=&353& data-size=&normal& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/v2-599f372b616faca968ef_r.jpg&&&figcaption&图1 几个常见的计算机视觉问题(来自Stanford’s CS231n)&/figcaption&&/figure&&p&下面所述的Mean Average Precision特别适用于同时预测物体位置及类别的算法。 因此,从图1可以看出,它对评估定位模型、目标检测模型和分割模型非常有用。&/p&&h2&评估目标检测模型&/h2&&p&&b&为什么是mAP?&/b&&/p&&p&目标检测问题中的每个图片都可能包含一些不同类别的物体。如前所述,需要评估模型的物体分类和定位性能。因此,用于图像分类问题的标准指标precision不能直接应用于此。 这就是为什么需要mAP。 我希望读完这篇文章后,你将能够理解它的含义。&/p&&p&&b&关于Ground Truth&/b&&/p&&p&对于任何算法,评估指标需要知道ground truth(真实标签)数据。 我们只知道训练、验证和测试数据集的ground truth。对于目标检测问题,ground truth包括图像中物体的类别以及该图像中每个物体的真实边界框。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-1b54fb6b46_b.jpg& data-rawwidth=&640& data-rawheight=&424& data-size=&normal& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-1b54fb6b46_r.jpg&&&figcaption&Ground truth可视化&/figcaption&&/figure&&p&这里给出了一个实际图片(jpg、png等格式),以及相应的文本注释(边界框坐标 &img src=&https://www.zhihu.com/equation?tex=%28x%2C+y%2C+w%2C+h%29& alt=&(x, y, w, h)& eeimg=&1&& 和类别),如图中红色框以及文本标签所示。&/p&&p&对于这个特殊例子,模型在训练时需要原始的图片:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-a203eeabf2a5e9592ab3cbf42e740a06_b.jpg& data-rawwidth=&640& data-rawheight=&424& data-size=&normal& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-a203eeabf2a5e9592ab3cbf42e740a06_r.jpg&&&figcaption&原始图片&/figcaption&&/figure&&p&以及ground truth的3个坐标及类别(这里假定图片大小是px,所有的坐标值都是以像素为单位的近似值):&/p&&figure&&img src=&https://pic3.zhimg.com/v2-7ff9d38c2ca88354b7abf44e29564d29_b.jpg& data-rawwidth=&946& data-rawheight=&184& data-caption=&& data-size=&normal& class=&origin_image zh-lightbox-thumb& width=&946& data-original=&https://pic3.zhimg.com/v2-7ff9d38c2ca88354b7abf44e29564d29_r.jpg&&&/figure&&p&下面让我们动一下手,去看如何计算mAP。这里我们不谈论不同的目标检测算法,假定我们已经有了一个训练好的模型,现在只需要在验证集上评估其性能。&/p&&h2&mAP含义及计算&/h2&&p&前面展示了原始图像和以及对应的ground truth。训练集和验证集中所有图像都以此方式标注。&/p&&p&训练好的目标检测模型会给出大量的预测结果,但是其中大多数的预测值都会有非常低的置信度(confidence score),因此我们只考虑那些置信度高于某个阈值的预测结果。&/p&&p&将原始图片送入训练好的模型,在经过置信度阈值筛选之后,目标检测算法给出带有边界框的预测结果:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ca75fec0f83f0e6c1aafb_b.jpg& data-rawwidth=&640& data-rawheight=&424& data-size=&normal& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-ca75fec0f83f0e6c1aafb_r.jpg&&&figcaption&模型的预测结果&/figcaption&&/figure&&p&现在,由于我们人类是目标检测专家,我们可以知道这些检测结果大致正确。但我们如何量化呢?我们首先需要判断每个检测的正确性。这里采用IoU(Intersection over Union),它可以作为评价边界框正确性的度量指标。 这是一个非常简单的指标。从名称看,有些人会发现这个名字是自解释的,但我们需要更好的解释。这里会以简短的方式解释IoU,如果想深入理解,可以参考&a href=&https://link.zhihu.com/?target=https%3A//www.pyimagesearch.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Adrian Rosebrock&/a&的&a href=&https://link.zhihu.com/?target=https%3A//www.pyimagesearch.com//intersection-over-union-iou-for-object-detection/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&这篇文章(Intersection over Union (IoU) for object detection)&/a&。&/p&&p&&b&IoU&/b&&/p&&p&IoU是预测框与ground truth的交集和并集的比值。这个量也被称为Jaccard指数,并于20世纪初由Paul Jaccard首次提出。为了得到交集和并集,我们首先将预测框与ground truth放在一起,如图所示。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-1d8ed51d8cf6c3c7927ba_b.jpg& data-rawwidth=&640& data-rawheight=&424& data-size=&normal& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-1d8ed51d8cf6c3c7927ba_r.jpg&&&figcaption&预测框与ground truth(这里只给出horse)&/figcaption&&/figure&&p&对于每个类,预测框和ground truth重叠的区域是交集,而横跨的总区域就是并集。其中horse类的交集和并集如下图所示(这个例子交集比较大):&/p&&figure&&img src=&https://pic4.zhimg.com/v2-98bf94c581b61dca7ded387a2428983f_b.jpg& data-rawwidth=&299& data-rawheight=&323& data-caption=&& data-size=&normal& class=&content_image& width=&299&&&/figure&&p&其中蓝绿色部分是交集,而并集还包括橘色的部分。那么,IoU可以如下计算:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-d6dbc90af51a734bf2df0baba60eed4f_b.jpg& data-rawwidth=&422& data-rawheight=&391& data-size=&normal& class=&origin_image zh-lightbox-thumb& width=&422& data-original=&https://pic1.zhimg.com/v2-d6dbc90af51a734bf2df0baba60eed4f_r.jpg&&&figcaption&图片启发自 pyimagesearch,后者启发自University of Pittsburg’s CS1699课程&/figcaption&&/figure&&p&&b&鉴别正确的检测结果并计算precision和recall&/b&&/p&&p&为了计算precision和recall,与所有机器学习问题一样,我们必须鉴别出&b&True Positives&/b&(真正例)、&b&False Positives&/b&(假正例)、&b&True Negatives&/b&(真负例)和 &b&False Negatives&/b&(假负例)。&/p&&p&为了获得True Positives and False Positives,我们需要使用IoU。计算IoU,我们从而确定一个检测结果(Positive)是正确的(True)还是错误的(False)。最常用的阈值是0.5,即如果IoU& 0.5,则认为它是True Positive,否则认为是False Positive。而COCO数据集的评估指标建议对不同的IoU阈值进行计算,但为简单起见,我们这里仅讨论一个阈值0.5,这是PASCAL VOC数据集所用的指标。&/p&&p&为了计算Recall,我们需要Negatives的数量。由于图片中我们没有预测到物体的每个部分都被视为Negative,因此计算True Negatives比较难办。但是我们可以只计算False Negatives,即我们模型所漏检的物体。&/p&&p&另外一个需要考虑的因素是模型所给出的各个检测结果的置信度。通过改变置信度阈值,我们可以改变一个预测框是Positive还是 Negative,即改变预测值的正负性(不是box的真实正负性,是预测正负性)。基本上,阈值以上的所有预测(Box + Class)都被认为是Positives,并且低于该值的都是Negatives。&/p&&p&对于每一个图片,ground truth数据会给出该图片中各个类别的实际物体数量。我们可以计算每个Positive预测框与ground truth的IoU值,并取最大的IoU值,认为该预测框检测到了那个IoU最大的ground truth。然后根据IoU阈值,我们可以计算出一张图片中各个类别的正确检测值(True Positives, TP)数量以及错误检测值数量(False Positives, FP)。据此,可以计算出各个类别的precision:&br&&img src=&https://www.zhihu.com/equation?tex=%5C%5Cprecision+%3D+%5Cfrac%7BTP%7D%7BTP%2BFP%7D& alt=&\\precision = \frac{TP}{TP+FP}& eeimg=&1&&&/p&&p&既然我们已经得到了正确的预测值数量(True Positives),也很容易计算出漏检的物体数(False Negatives, FN)。据此可以计算出Recall(其实分母可以用ground truth总数):&br&&img src=&https://www.zhihu.com/equation?tex=%5C%5Crecall+%3D+%5Cfrac%7BTP%7D%7BTP%2BFN%7D& alt=&\\recall = \frac{TP}{TP+FN}& eeimg=&1&&&/p&&p&&b&计算mAP&/b&&/p&&p&mAP这个术语有不同的定义。此度量指标通常用于信息检索和目标检测领域。然而这两个领域计算mAP的方式却不相同。这里我们只谈论目标检测中的mAP计算方法。&/p&&p&在目标检测中,mAP的定义首先出现在PASCAL Visual Objects Classes(VOC)竞赛中,这个大赛包含许多图像处理任务,详情可以参考这个&a href=&https://link.zhihu.com/?target=http%3A//homepages.inf.ed.ac.uk/ckiw/postscript/ijcv_voc09.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&paper&/a&(里面包含各个比赛的介绍以及评估等)。&/p&&p&前面我们已经讲述了如何计算Precision和Recall,但是,正如前面所述,至少有两个变量会影响Precision和Recall,即IoU和置信度阈值。IoU是一个简单的几何度量,可以很容易标准化,比如在PASCAL VOC竞赛中采用的IoU阈值为0.5,而COCO竞赛中在计算mAP较复杂,其计算了一系列IoU阈值(0.05至0.95)下的mAP。但是置信度却在不同模型会差异较大,可能在我的模型中置信度采用0.5却等价于在其它模型中采用0.8置信度,这会导致precision-recall曲线变化。为此,PASCAL VOC组织者想到了一种方法来解决这个问题,即要采用一种可以用于任何模型的评估指标。在paper中,他们推荐使用如下方式计算Average Precision(AP):&/p&&blockquote&For a given task and class, the precision/recall curve is computed from a method’s ranked output. Recall is defined as the proportion of all positive examples ranked above a given rank. Precision is the proportion of all examples above that rank which are from the positive class. The AP summarises the shape of the precision/recall curve, and is defined as the mean precision at a set of eleven equally spaced recall levels [0,0.1,...,1]:&/blockquote&&p&可以看到,为了得到precision-recall曲线,首先要对模型预测结果进行排序(ranked output,按照各个预测值置信度降序排列)。那么给定一个rank,Recall和Precision仅在高于该rank值的预测结果中计算,改变rank值会改变recall值。这里共选择11个不同的recall([0, 0.1, ..., 0.9, 1.0]),可以认为是选择了11个rank,由于按照置信度排序,所以实际上等于选择了11个不同的置信度阈值。那么,AP就定义为在这11个recall下precision的平均值,其可以表征整个precision-recall曲线(曲线下面积)。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-2d1bcacd2d6d53faec2e4f0_b.jpg& data-rawwidth=&353& data-rawheight=&81& data-caption=&& data-size=&normal& class=&content_image& width=&353&&&/figure&&p&另外,在计算precision时采用一种插值方法(interpolate):&/p&&blockquote&The precision at each recall level r is interpolated by taking the maximum precision measured for a method for which the corresponding recall exceeds r:&br&The intention in interpolating the precision/recall curve in this way is to reduce the impact of the “wiggles” in the precision/recall curve, caused by small variations in the ranking of examples. &/blockquote&&p&及对于某个recall值r,precision值取所有recall&=r中的最大值(这样保证了p-r曲线是单调递减的,避免曲线出现摇摆):&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ad60aa8db6d41_b.jpg& data-rawwidth=&231& data-rawheight=&49& data-caption=&& data-size=&normal& class=&content_image& width=&231&&&/figure&&p&不过这里VOC数据集在2007年提出的mAP计算方法,而在2010之后却使用了所有数据点,而不是仅使用11个recall值来计算AP(详细参考这篇&a href=&https://link.zhihu.com/?target=http%3A//host.robots.ox.ac.uk/pascal/VOC/pubs/everingham15.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&paper&/a&):&/p&&blockquote&Up until 2009 interpolated average precision (Salton and Mcgill 1986) was used to evaluate both classification and detection. However, from 2010 onwards the method of computing AP changed to use all data points rather than TREC-style sampling (which only sampled the monotonically decreasing curve at a fixed set of uniformly-spaced recall values 0, 0.1, 0.2,..., 1). The intention in interpolating the precision–recall curve was to reduce the impact of the ‘wiggles’ in the precision–recall curve, caused by small variations in the ranking of examples. However, the downside of this interpolation was that the evaluation was too crude to discriminate between the methods at low AP.&/blockquote&&p&对于各个类别,分别按照上述方式计算AP,取所有类别的AP平均值就是mAP。这就是在目标检测问题中mAP的计算方法。可能有时会发生些许变化,如COCO数据集采用的计算方式更严格,其计算了不同IoU阈值和物体大小下的AP(详情参考&a href=&https://link.zhihu.com/?target=http%3A//cocodataset.org/%23detection-eval& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&COCO Detection Evaluation&/a&)。&/p&&p&当比较mAP值,记住以下要点:&/p&&ol&&li&mAP通常是在一个数据集上计算得到的。&/li&&li&虽然解释模型输出的绝对量化并不容易,但mAP作为一个相对较好的度量指标可以帮助我们。 当我们在流行的公共数据集上计算这个度量时,该度量可以很容易地用来比较目标检测问题的新旧方法。&/li&&li&根据训练数据中各个类的分布情况,mAP值可能在某些类(具有良好的训练数据)非常高,而其他类(具有较少/不良数据)却比较低。所以你的mAP可能是中等的,但是你的模型可能对某些类非常好,对某些类非常不好。因此,建议在分析模型结果时查看各个类的AP值。这些值也许暗示你需要添加更多的训练样本。&/li&&/ol&&h2&代码实现&/h2&&p&Facebook开源的Detectron包含&a href=&https://link.zhihu.com/?target=https%3A//github.com/facebookresearch/Detectron/blob/05d04d3a024f872d02f2f50669b3d/lib/datasets/voc_eval.py& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&VOC数据集的mAP计算&/a&,这里贴出其核心实现,以对mAP的计算有更深入的理解。首先是precision和recall的计算:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&# 按照置信度降序排序
sorted_ind = np.argsort(-confidence)
BB = BB[sorted_ind, :]
# 预测框坐标
image_ids = [image_ids[x] for x in sorted_ind] # 各个预测框的对应图片id
# 便利预测框,并统计TPs和FPs
nd = len(image_ids)
tp = np.zeros(nd)
fp = np.zeros(nd)
for d in range(nd):
R = class_recs[image_ids[d]]
bb = BB[d, :].astype(float)
ovmax = -np.inf
BBGT = R['bbox'].astype(float)
# ground truth
if BBGT.size & 0:
# intersection
ixmin = np.maximum(BBGT[:, 0], bb[0])
iymin = np.maximum(BBGT[:, 1], bb[1])
ixmax = np.minimum(BBGT[:, 2], bb[2])
iymax = np.minimum(BBGT[:, 3], bb[3])
iw = np.maximum(ixmax - ixmin + 1., 0.)
ih = np.maximum(iymax - iymin + 1., 0.)
inters = iw * ih
uni = ((bb[2] - bb[0] + 1.) * (bb[3] - bb[1] + 1.) +
(BBGT[:, 2] - BBGT[:, 0] + 1.) *
(BBGT[:, 3] - BBGT[:, 1] + 1.) - inters)
overlaps = inters / uni
ovmax = np.max(overlaps)
jmax = np.argmax(overlaps)
# 取最大的IoU
if ovmax & ovthresh:
# 是否大于阈值
if not R['difficult'][jmax]:
# 非difficult物体
if not R['det'][jmax]:
# 未被检测
tp[d] = 1.
R['det'][jmax] = 1
# 标记已被检测
fp[d] = 1.
fp[d] = 1.
# 计算precision recall
fp = np.cumsum(fp)
tp = np.cumsum(tp)
rec = tp / float(npos)
# avoid divide by zero in case the first detection matches a difficult
# ground truth
prec = tp / np.maximum(tp + fp, np.finfo(np.float64).eps)
&/code&&/pre&&/div&&p&这里最终得到一系列的precision和recall值,并且这些值是按照置信度降低排列统计的,可以认为是取不同的置信度阈值(或者rank值)得到的。然后据此可以计算AP:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def voc_ap(rec, prec, use_07_metric=False):
&&&Compute VOC AP given precision and recall. If use_07_metric is true, uses
the VOC 07 11-point method (default:False).
if use_07_metric:
# 使用07年方法
for t in np.arange(0., 1.1, 0.1):
if np.sum(rec &= t) == 0:
p = np.max(prec[rec &= t])
ap = ap + p / 11.
# 新方式,计算所有点
# correct AP calculation
# first append sentinel values at the end
mrec = np.concatenate(([0.], rec, [1.]))
mpre = np.concatenate(([0.], prec, [0.]))
# compute the precision 曲线值(也用了插值)
for i in range(mpre.size - 1, 0, -1):
mpre[i - 1] = np.maximum(mpre[i - 1], mpre[i])
# to calculate area under PR curve, look for points
# where X axis (recall) changes value
i = np.where(mrec[1:] != mrec[:-1])[0]
# and sum (\Delta recall) * prec
ap = np.sum((mrec[i + 1] - mrec[i]) * mpre[i + 1])
&/code&&/pre&&/div&&p&计算各个类别的AP值后,取平均值就可以得到最终的mAP值了。但是对于COCO数据集相对比较复杂,不过其提供了计算的API,感兴趣可以看一下&a href=&https://link.zhihu.com/?target=https%3A//github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocotools/cocoeval.py& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&cocodataset/cocoapi&/a&。&/p&&p&&br&&/p&&p&&b&&i&注:译文相比原文略有删改。&/i&&/b&&/p&&hr&&p&&b&码字不易,欢迎给个赞!&/b&&/p&&p&&b&欢迎交流与转载,文章会同步发布在公众号:机器学习算法工程师(Jeemy110)&/b&&/p&
码字不易,欢迎给个赞!欢迎交流与转载,文章会同步发布在公众号:机器学习算法工程师(Jeemy110)本文翻译自 对于使用机器学习解决的大多数常见问题…
&p&北京大学毕业&/p&&p&哈佛 牛津 剑桥任教&/p&&p&放着国务院部长的活不干&/p&&p&在中央在北京人民大会堂做过报告&/p&&p&女儿给哈佛校长当助理,精通五国语言&/p&&a class=&video-box& href=&//link.zhihu.com/?target=https%3A//www.zhihu.com/video/057216& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic2.zhimg.com/80/v2-7f6d6b70efceda9c98289bad20de5271_b.jpg& data-lens-id=&057216&&
&img class=&thumbnail& src=&https://pic2.zhimg.com/80/v2-7f6d6b70efceda9c98289bad20de5271_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/057216&/span&
&/a&&p&&/p&
北京大学毕业哈佛 牛津 剑桥任教放着国务院部长的活不干在中央在北京人民大会堂做过报告女儿给哈佛校长当助理,精通五国语言
&figure&&img src=&https://pic3.zhimg.com/v2-51cadcade852c5b82efea5_b.jpg& data-rawwidth=&1143& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&1143& data-original=&https://pic3.zhimg.com/v2-51cadcade852c5b82efea5_r.jpg&&&/figure&&p&本文投稿于&a href=&https://www.zhihu.com/people/18fd48ddf124& data-hash=&18fd48ddf124& class=&member_mention& data-hovercard=&p$b$18fd48ddf124&&@极视角&/a& 公众号,链接为 &a href=&https://link.zhihu.com/?target=http%3A//cvmart.net/community/article/detail/38& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&文章链接&/a&.&br&&/p&&p&上一篇&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&Video Analysis相关领域解读之Action Recognition(行为识别) - 知乎专栏&/a&介绍了 Action Recognition 领域的研究进展。Action Recognition主要是用于给分割好的视频片段分类,但实际中大部分视频都是未分割的长视频。所以这就引出了今天要介绍的领域:Temporal Action Detection(或者叫Temporal Action Localization,意思相同)。过去半年时间我也一直在做这个方向,投了两篇论文,如果能中的话应该会写笔记介绍一下~&/p&&br&&h2&&b&任务特点及分析&/b&&/h2&&p&&b&任务目的&/b&&/p&&p&给定一段未分割的长视频,算法需要检测视频中的行为片段(action instance),包括其开始时间、结束时间以及类别。一段视频中可能包含一个或多个行为片段。&/p&&p&&b&任务特点与难点&/b&&/p&&ul&&li&action recognition与temporal action detection之间的关系同 image classfication与 object detection之间的关系非常像。基于image classification问题,发展出了许多强大的网络模型(比如ResNet,VGGNet等),这些模型在object detection的方法中起到了很大的作用。同样,action recognition的相关模型(如2stream,C3D, iDT等)也被广泛的用在temporal action detection的方法中。&br&&/li&&li&由于temporal action detection和object detection之间存在一定的相似性,所以很多temporal action detection方法都采用了与一些object detection方法相似的框架(最常见的就是参考R-CNN系列方法)。具体的会在后面的论文介绍中讲到。&br&&/li&&li&时序行为检测的难点1:在目标检测中,物体目标的边界通常都是非常明确的,所以可以标注出较为明确的边界框。但时序行为的边界很多时候并不是很明确,什么时候一个行为算开始,什么时候行为算结束常常无法给出一个准确的边界(指精确的第几帧)。&br&&/li&&li&时序行为检测的难点2:只使用静态图像的信息,而不结合时序信息在行为识别中是可以的(虽然结合时序信息效果会更好)。但在时序行为检测中,是无法只使用静态图像信息的。必须结合时序的信息,比如使用RNN读入每帧图像上用CNN提取的特征,或是用时序卷积等。&br&&/li&&li& 时序行为检测的难点3:时序行为片段的时间跨度变化可能非常大。比如在ActivityNet中,最短的行为片段大概1s左右,最长的行为片段则超过了200s。巨大的时长跨度,也使得检测时序动作非常难。&br&&/li&&/ul&&br&&p&&b&任务关键点&/b&&br&&/p&&p&我认为设计一个好的时序行为检测方法的关键主要在于以下两点:&/p&&p&* 高质量的时序片段(行为的时序边界):很多方法都是使用Proposal + classification的框架。对于这类方法,重要的是较高的proposal质量(即在保证平均召回率的情况下,尽可能减少proposal的数量)。此外,对于所有方法,获取准确的时序行为边界都是非常重要的。&/p&&p&* 准确的分类(行为的类别):即能准确的得到时序行为片段的类别信息。这里通常都会使用行为识别中的一些方法与模型。&/p&&br&&h2&&b&数据库&/b&&/h2&&p&时序行为检测的数据库也有很多,下面主要介绍几个常用的主流数据库:&/p&&ul&&li& THUMOS 2014:该数据集即为THUMOS Challenge 2014,地址为&a href=&https://link.zhihu.com/?target=http%3A//crcv.ucf.edu/THUMOS14/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&crcv.ucf.edu/THUMOS14/&/span&&span class=&invisible&&&/span&&/a&。该数据集包括行为识别和时序行为检测两个任务。它的训练集为UCF101数据集,包括101类动作,共计13320段分割好的视频片段。THUMOS2014的验证集和测试集则分别包括个未分割过的视频。在时序行为检测任务中,只有20类动作的未分割视频是有时序行为片段标注的,包括200个验证集视频(包含3007个行为片段)和213个测试集视频(包含3358个行为片段)。这些经过标注的未分割视频可以被用于训练和测试时序行为检测模型。实际上之后还有THUMOS Challenge 2015,包括更多的动作类别和视频数,但由于上面可以比较的方法不是很多,所以目前看到的文章基本上还是在THUMOS14上进行实验。&br&&/li&&li& MEXaction2:MEXaction2数据集中包含两类动作:骑马和斗牛。该数据集由三个部分组成:YouTube视频,UCF101中的骑马视频以及INA视频,数据集地址为&a href=&https://link.zhihu.com/?target=http%3A//mexculture.cnam.fr/xwiki/bin/view/Datasets/Mex%2Baction%2Bdataset& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&mexculture.cnam.fr/xwik&/span&&span class=&invisible&&i/bin/view/Datasets/Mex+action+dataset&/span&&span class=&ellipsis&&&/span&&/a& 。其中YouTube视频片段和UCF101中的骑马视频是分割好的短视频片段,被用于训练集。而INA视频为多段长的未分割的视频,时长共计77小时,且被分为训练,验证和测试集三部分。训练集中共有1336个行为片段,验证集中有310个行为片段,测试集中有329个行为片断。且MEXaction2数据集的特点是其中的未分割视频长度都非常长,被标注的行为片段仅占视频总长的很低比例&br&&/li&&li& ActivityNet: 目前最大的数据库,同样包含分类和检测两个任务。数据集地址为&a href=&https://link.zhihu.com/?target=http%3A//activity-net.org/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Activity Net&/a& ,这个数据集仅提供视频的youtube链接,而不能直接下载视频,所以还需要用python中的youtube下载工具来自动下载。该数据集包含200个动作类别,20000(训练+验证+测试集)左右的视频,视频时长共计约700小时。由于这个数据集实在太大了,我的实验条件下很难完成对其的实验,所以我之前主要还是在THUMOS14和MEXaction2上进行实验。&br&&/li&&/ul&&br&&br&&h2&&b&研究进展&/b&&/h2&&p&temporal action detection近年的文章很多,这里也只简单介绍比较有代表性的几个工作。此外,此处仅介绍2016年底之前发布的相关工作,CVPR2017上的新工作我打算单独写一篇笔记进行更详尽的讨论,简要的介绍可见我之前的知乎回答&a href=&https://www.zhihu.com/question//answer/& class=&internal&&CVPR 2017 有什么值得关注的亮点?&/a& 。为了方便对比,下面的数据库均只介绍其在THUMOS14数据库上的结果。&/p&&p&&b&End-to-end learning of action detection from frame glimpses in videos (CVPR2016)&/b&&/p&&ul&&li&这篇文章是李飞飞实验室的工作。这篇文章使用强化学习的方法训练了一个基于RNN的代理(agent,不太确定应该怎么翻译)。这个agent不断观察视频帧并不断决定接下来要看哪里以及什么时候要生成一个动作预测。与后面很多基于proposal的方法不同,该方法是end-to-end且是直接生成行为预测的。&br&&/li&&li&该方法在THUMOS14上的mAP为17.1%(重叠度阈值取0.5)&br&&/li&&/ul&&br&&figure&&img src=&https://pic2.zhimg.com/v2-8299edc29c9bce58ce8af44fae8597f2_b.jpg& data-rawwidth=&1125& data-rawheight=&541& class=&origin_image zh-lightbox-thumb& width=&1125& data-original=&https://pic2.zhimg.com/v2-8299edc29c9bce58ce8af44fae8597f2_r.jpg&&&/figure&&br&&p&&b&Temporal Action Localization with Pyramid of Score Distribution Features (CVPR2016)&/b&&/p&&ul&&li&该方法在特征方面使用了传统的iDT特征。简单来说,该方法基于iDT特征对视频提取了一种分数分布金字塔特征(Pyramid of Score Distribution Feature, PSDF).之后再使用了LSTM网络对PSDF特征序列进行处理,并根据输出的frame-level的行为类别置信度分数处理得到行为片段的预测。&br&&/li&&li&PSDF方法效果还是不错的,表明传统特征其实也还有一战之力。但是iDT特征的提取实在是太耗时/耗储存空间了。(iDT特征的大小要比原始视频的大小都要大很多)。个人认为用iDT特征做行为检测的前景不大。&br&&/li&&li&该方法在THUMOS14上的mAP为18.8%(重叠度阈值取0.5)&br&&/li&&/ul&&br&&figure&&img src=&https://pic4.zhimg.com/v2-3e4bfa0ea361e97fe9dcaef_b.jpg& data-rawwidth=&619& data-rawheight=&324& class=&origin_image zh-lightbox-thumb& width=&619& data-original=&https://pic4.zhimg.com/v2-3e4bfa0ea361e97fe9dcaef_r.jpg&&&/figure&&br&&p&&b&Temporal action localization in untrimmed videos via multi-stage cnns (CVPR2016)&/b&&/p&&ul&&li&该方法的整体框架图如下所示。我之前写过这篇文章的论文笔记,见&a href=&https://link.zhihu.com/?target=http%3A//blog.csdn.net/wzmsltw/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SCNN-用于时序动作定位的多阶段3D卷积网络 - Will Lin的博客&/a& ,代码见&a href=&https://link.zhihu.com/?target=https%3A//github.com/zhengshou/scnn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&zhengshou/scnn&/a& 。该方法首先使用滑窗的方法生成多种尺寸的视频片段(segment),再使用多阶段的网络(Segment-CNN)来处理。SCNN主要包括三个子网络,均使用了C3D network。第一个是proposal network,用来判断当前输入的视频片段是一个动作的概率;第二个为classification network,该网络用于给视频片段分类,但该网络不用于测试环节,而只是用作初始化localization network;第三个子网络为localization network,该网络的输出形式依旧为类别的概率,但在训练时加入了重叠度相关的损失函数,使得网络能更好的估计一个视频片段的类别和重叠度。最后采用了非极大化抑制(NMS)来去除重叠的片段,完成预测。&br&&/li&&li&该方法实际上采用了类似于R-CNN的思路,后面有不少文章也采用了类似的思想,即先提proposal,再分类。这篇文章的封面图为该paper最后的效果展示图。&br&&/li&&li&该方法在THUMOS14上的mAP为19.0%(重叠度阈值取0.5)&br&&/li&&/ul&&br&&figure&&img src=&https://pic1.zhimg.com/v2-fb2c2b2d705c0f4d0233ecf6f6fa0ce3_b.jpg& data-rawwidth=&1027& data-rawheight=&480& class=&origin_image zh-lightbox-thumb& width=&1027& data-original=&https://pic1.zhimg.com/v2-fb2c2b2d705c0f4d0233ecf6f6fa0ce3_r.jpg&&&/figure&&br&&p&&b&Efficient Action Detection in Untrimmed Videos via Multi-Task Learning (WACV2016)&/b&&/p&&ul&&li&这篇文章实际上是将SCNN的多阶段网络放到了一个网络里面去,通过共享前面的卷积层,加快了算法的速度。但从效果上看,基本与SCNN完全相同。感觉算是SCNN的完善版本。&br&&/li&&li&该方法在THUMOS14上的mAP为19.0%(重叠度阈值取0.5).其余重叠度阈值下的表现也与SCNN基本一致。&br&&/li&&/ul&&br&&figure&&img src=&https://pic3.zhimg.com/v2-9df4b354e04dcf6c842efa_b.jpg& data-rawwidth=&1093& data-rawheight=&349& class=&origin_image zh-lightbox-thumb& width=&1093& data-original=&https://pic3.zhimg.com/v2-9df4b354e04dcf6c842efa_r.jpg&&&/figure&&br&&h2&&b&小结与讨论&/b&&/h2&&p&这两年时序行为检测领域发展的非常快,相对于目标检测来说,时序行为检测这个方向做的人相对还是少一些的,有很大的发(水)展(paper)空间。但一个很大的问题是处理视频数据计算量很大,所以这方面的研究很受硬件条件的影响,羡慕大佬们论文中各种四路titan,四路k40的配置啊。之后会再专门写笔记介绍CVPR2017中该领域的进展情况。&/p&
本文投稿于 公众号,链接为 . 上一篇介绍了 Action Recognition 领域的研究进展。Action Recognition主要是用于给分割好的视频片段分类,但实际中大部分视频都是未分割…
&h1&行为检测&/h1&&p&标签(空格分隔): 计算机视觉 行为检测 视频理解&/p&&hr&&p&[toc]&/p&&hr&&h1&1. 背景&/h1&&p&视频理解是目前计算机视觉领域非常热,也是极具挑战力的一个方向。视频理解方向包含众多的子研究方向,以CVPR组织的ACTIVITYNET为例,2017年总共有5个Task被提出。&/p&&ul&&li&Task1:未修剪视频分类(Untrimmed Video Classification)。这个有点类似于图像的分类,未修剪的视频中通常含有多个动作,而且视频很长。有许多动作或许都不是我们所关注的。所以这里提出的Task就是希望通过对输入的长视频进行全局分析,然后软分类到多个类别。&/li&&li&Task2:修剪视频识别(Trimmed Action Recognition)。这个在计算机视觉领域已经研究多年,给出一段只包含一个动作的修剪视频,要求给视频分类。&/li&&li&Task3:时序行为提名(Temporal Action Proposal)。这个同样类似于图像目标检测任务中的候选框提取。在一段长视频中通常含有很多动作,这个任务就是从视频中找出可能含有动作的视频段。&/li&&li&Task4:时序行为定位(Temporal Action Localization)。相比于上面的时序行为提名而言,时序行为定位于我们常说的目标检测一致。要求从视频中找到可能存在行为的视频段,并且给视频段分类。&/li&&li&Task5:密集行为描述(Dense-Captioning Events)。之所以称为密集行为描述,主要是因为该任务要求在时序行为定位(检测)的基础上进行视频行为描述。也就是说,该任务需要将一段未修剪的视频进行时序行为定位得到许多包含行为的视频段后,对该视频段进行行为描述。比如:man playing a piano&/li&&/ul&&p&而该调研报告主要聚焦于行为识别和行为检测。也就是上述任务描述中的Task2和Task4.&/p&&h1&2. 国内外研究现状&/h1&&p&在该方向上,国内有许多机构和学校也是主要的研究者,所以这里不再区分国内外,直接描述当前的研究现状。目前为止ActivityNet已经举办两届,下面是2017年的State-of-art。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-c45ecf81ae11be42dfe1ae_b.jpg& alt=&& class=&content_image&&&/figure&&h1&3. 行为分类&/h1&&p&行为分类(Trimmed Action Recognition)是视频理解方向很重要的一个问题,至今为止已经研究多年。深度学习出来后,该问题被逐步解决,现在在数据集上已经达到了比较满意的效果。如第2章所述 。行为分类问题简单的来说就是:对于给定的分割好的视频片段,按照其中的人类行为进行分类。比如女孩化妆、男生打球、跑步等等。该任务不需要确定视频中行为的开始时间和结束时间。&/p&&p&在深度学习出现之前,表现最好的算法是iDT&img src=&https://www.zhihu.com/equation?tex=%5E%7B%5B1%5D%5B2%5D%7D& alt=&^{[1][2]}& eeimg=&1&&,之后的工作基本上都是在iDT方法上进行改进。IDT的思路是利用光流场来获得视频序列中的一些轨迹,再沿着轨迹提取HOF,HOG,MBH,trajectory4中特征,其中HOF基于灰度图计算,另外几个均基于dense optical flow(密集光流计算)。最后利用FV(Fisher Vector)方法对特征进行编码,再基于编码训练结果训练SVM分类器。深度学习出来后,陆续出来多种方式来尝试解决这个问题,包含:Two-Stream&img src=&https://www.zhihu.com/equation?tex=%5E%7B%5B3%5D%5B4%5D%7D& alt=&^{[3][4]}& eeimg=&1&&、C3D(Convolution 3 Dimension)&img src=&https://www.zhihu.com/equation?tex=%5E%7B%5B6%5D%7D& alt=&^{[6]}& eeimg=&1&&,还有RNN&img src=&https://www.zhihu.com/equation?tex=%5E%7B%5B7%5D%7D& alt=&^{[7]}& eeimg=&1&&方向。&/p&&h2&3.1 研究难点&/h2&&p&行为识别虽然研究多年,但是至今还是处于实验室数据集测试阶段,没有真正的实用化和产业化。由此可见该任务目前还是没有非常鲁棒的解决方案。下面简单阐述一下本人对于该问题的看法。&/p&&p&&strong&任务特点&/strong&:行为识别和图像分类其实很相似,图像分类是按照图像中的目标进行软分类,行为识别也类似。最开始的时候类似于UCF数据集,都是采用的单标签,也就是一段视频只对应一个标签。现在CPVR举办的Activitynet(Kinetics 数据集)每段视频中包含多个标签。相比于图像分类,视频多了一个时序维度,而这个问题恰恰是目前计算机领域令人头疼的问题。&/p&&p&&strong&任务难点&/strong&&/p&&ul&&li&如上所说,行为识别处理的是视频,所以相对于图像分类来说多了一个需要处理的时序维度。&/li&&li&行为识别还有一个痛点是视频段长度不一,而且开放环境下视频中存在多尺度、多目标、摄像机移动等众多的问题。这些问题都是导致行为识别还未能实用化的重要原因。&/li&&/ul&&h2&3.2 数据集介绍&/h2&&p&目前还比较常用的数据库主要有3个,UCF101、HMDB51和Kinetics.&/p&&figure&&img src=&https://pic2.zhimg.com/v2-d83b02f78f3dbde84a5ef1dab8a286fb_b.jpg& alt=&& class=&content_image&&&/figure&&h2&3.3 传统方法&/h2&&p&在深度学习之前,iDT(improved Dense Trajectories)方法是最经典的一种方法。虽然目前基于深度学习的方法已经超过iDT,但是iDT的思路依然值得学习,而且与iDT的结果做ensemble后总能获得一些提升。iDT的思路主要是在《Dense Trajectories and Motion Boundary Descriptors for Action Recognition》和《Action Recognition with Improved Trajectories》两篇文章中体现。&/p&&p&下面本文简单的介绍DT(Dense Trajectories)方法。&/p&&h3&3.3.1 密集采样特征点&/h3&&p&如下图3.1所示,iDT算法框架主要包含:密集采样特征点,特征轨迹跟踪和基于轨迹的特征提取三个部分。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-369c8f3a8d657eded7f436_b.jpg& alt=&& class=&content_image&&&/figure&&p&DT方法通过网格划分的方式在多尺度图像中分别密集采样特征点。&/p&&h3&3.3.2 轨迹与轨迹描述子&/h3&&p&假设上一步骤中密集采样到的某个特征点的坐标为&img src=&https://www.zhihu.com/equation?tex=P_t%3D%28x_t%2Cy_t%29& alt=&P_t=(x_t,y_t)& eeimg=&1&&, 再用下面的公式计算该特征点在下一帧图像中的位置。&/p&&p&&img src=&https://www.zhihu.com/equation?tex=P_%7Bt%2B1%7D+%3D+%28x_%7Bt%2B1%7D%2C+y_%7Bt%2B1%7D%29+%3D+%28x_t%2C+y_t%29+%2B+%28M+%2A+w_t%29%7Cx_t%2Cy_t& alt=&P_{t+1} = (x_{t+1}, y_{t+1}) = (x_t, y_t) + (M * w_t)|x_t,y_t& eeimg=&1&&&/p&&p&上式中&img src=&https://www.zhihu.com/equation?tex=w_t& alt=&w_t& eeimg=&1&&为密集光流场,是&img src=&https://www.zhihu.com/equation?tex=I_t& alt=&I_t& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=I_%28t%2B1%29& alt=&I_(t+1)& eeimg=&1&&计算得到的。M代表的是中值滤波器,尺寸为3x3,,所以这个式子是通过计算特征点领域内的光流中值来得到特征点的运动方向。&/p&&h3&3.3.3 运动描述子&/h3&&p&除了轨迹形状特征,还需要更有力的特征来描述光流,DT/iDT中使用了HOF,HOG和MBH三种特征。下面简单的阐述一下这几种特征。&/p&&p&HOG特征:HOG特征计算的是灰度图像梯度的直方图。直方图的bin数目为8。所以HOG特征的长度为2&em&2&/em&3*8=96.&/p&&p&HOF特征:HOF计算的是光流的直方图。直方图的bin数目取为8+1,前8个bin与HOG都相同。额外的一个用于统计光流幅度小于某个阈值的像素。故HOF的特征长度为2&em&2&/em&3*9=108.&/p&&p&MBH特征:MBH计算的是光流图像梯度的直方图,也可以理解为在光流图像上计算的HOG特征。由于光流图像包括X方向和Y方向,故分别计算MBHx和MBHy。MBH总的特征长度为2*96=192.
最后进行特征的归一化,DT算法中对HOG,HOF和MBH均使用L2范数进行归一化。&/p&&h2&3.4 TWO STREAM方法&/h2&&p&Two-Stream方法是深度学习在该方向的一大主流方向。最早是VGG团队在NIPS上提出来的[3]。其实在这之前也有人尝试用深度学习来处理行为识别,例如李飞飞团队&img src=&https://www.zhihu.com/equation?tex=%5E%7B%5B8%5D%7D& alt=&^{[8]}& eeimg=&1&&,通过叠加视频多帧输入到网络中进行学习,但是不幸的是这种方法比手动提取特征更加糟糕。当Two-Stream CNN出来后才意味着深度学习在行为识别中迈出了重大的一步。&/p&&h3&3.4.1 TWO-STREAM CNN&/h3&&p&Two-Stream CNN网络顾名思义分为两个部分,一部分处理RGB图像,一部分处理光流图像。最终联合训练,并分类。这篇文章主要有以下三个贡献点。&/p&&ul&&li&首先,论文提出了two-stream结构的CNN网络,由空间(RGB)和时间(光流)两个维度的网络组成&/li&&li&其次,作者提出了利用网络训练多帧密度光流,以此作为输入能在有限训练数据的情况下取得不错的结果。&/li&&li&最后,采用多任务训练的方法将两个行为分类的数据集联合起来,增加训练数据,最终在两个数据集上都取得了更好的效果(作者提到,联合训练也可以去除过拟合的可能)。&/li&&/ul&&p&&strong&网络结构&/strong&:&/p&&p&因为视频可以分为空间和时间两个部分。空间部分,每一帧代表的是空间信息,比如目标、场景等等。而时间部分是指帧间的运动,包括摄像机的运动或者目标物体的运动信息。所以网络相应的由两个部分组成,分别处理时间和空间两个维度。&/p&&p&每个网络都是由CNN和最后的softmax组成,最后的softmax的fusion主要考虑了两种方法:平均,在堆叠的softmax上训练一个SVM。网络的结构图如下所示。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-8c4aebafcc53486abc905_b.jpg& alt=&& class=&content_image&&&/figure&&p&&strong&光流栈(Optical flow Stacking)&/strong&:&/p&&p&光流栈(Optical flow stacking),或者叫做光流的简单叠加。简单的来说就是计算每两帧之间的光流,然后简单的stacking。&/p&&p&假设考虑做动作的分类(行为识别主要包含两个方向,一个是动作分类,给出一个视频截断,判断视频的动作类别,或者称为offline。 另一个就是动作识别,给出一个自然视频,没有进行任何的裁剪,这个时候需要先知道动作的开始时间和结束时间,然后还要知道动作的类别)。 考虑对一小段视频进行编码,假设起始帧为T,连续L帧(不包含T帧)。计算两帧之间的光流,最终可以得到L张光流场,每张光流场是2通道的(因为每个像素点有x和y方向的移动)。&/p&&p&最后,我们将这些光流场输入,得到相应的特征图。&/p&&p&&strong&实验结果&/strong&:&/p&&p&最终该方法在UCF-101和HMDB-51上取得了与iDT系列最好的一致效果。在UCF-101上准确度为88.0%,在HMDB上准确度为59.4%。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-fff7c738225_b.jpg& alt=&& class=&content_image&&&/figure&&h3&3.4.2 TSN&/h3&&p&TSN(Temporal Segments Networks)[5]是在上述基础的two-Stream CNN上改进的网络。目前基于two-stream的方法基本上是由TSN作为骨干网络,所以这里进行简单的阐述。&/p&&p&3.4.1小节所述的two-stream的方法很大的一个弊端就是不能对长时间的视频进行建模,只能对连续的几帧视频提取temporal context。为了解决这个问题TSN网络提出了一个很有用的方法,先将视频分成K个部分,然后从每个部分中随机的选出一个短的片段,然后对这个片段应用上述的two-stream方法,最后对于多个片段上提取到的特征做一个融合。下图是网络的结构图。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-4c7cb296b884d585ac67afe0cd004b9b_b.jpg& alt=&& class=&content_image&&&/figure&&h2&3.5 C3D方法&/h2&&p&C3D(3-Dimensional Convolution)&img src=&https://www.zhihu.com/equation?tex=%5E%7B%5B6%5D%7D& alt=&^{[6]}& eeimg=&1&&是除了Two-Stream后的另外一大主流方法,但是目前来看C3D的方法得到的效果普遍比Two-Stream方法低好几个百分点。但是C3D任然是目前研究的热点,主要原因是该方法比Two-Stream方法快很多,而且基本上都是端到端的训练,网络结构更加简洁。该方法思想非常简单,图像是二维,所以使用二维的卷积核。视频是三维信息,那么可以使用三维的卷积核。所以C3D的意思是:用三维的卷积核处理视频。&/p&&p&&strong&网络结构&/strong&&/p&&p&C3D共有8次卷积操作,5次池化操作。其中卷积核的大小均为3&em&3&/em&3,步长为1&em&1&/em&1。池化核为2&em&2&/em&2,但是为了不过早的缩减在时序上的长度,第一层的池化大小和步长为1&em&2&/em&2。最后网络在经过两次全连接层和softmax层后得到的最终的输出结果。网络的输入为3&em&16&/em&112&em&112,其中3为RGB三通道,16为输入图像的帧数,112&/em&112是图像的输入尺寸。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-e1508c08dac354a14ed9fdc5f13320ba_b.jpg& alt=&& class=&content_image&&&/figure&&h2&3.6 RNN方法&/h2&&p&因为视频除了空间维度外,最大的痛点是时间序列问题。如果能很好的处理这个维度,那么效果是不是会显著提升呢?而众所周知,RNN网络在NLP方向取得了傲人的成绩,非常适合处理序列。所以除了上述两大类方法以外,另外还有一大批的研究学者希望使用RNN网络思想来解决这个问题。目前最新的进展是中科院深圳先进院乔宇老师的工作:《RPAN:An End-to-End Recurrent Pose-Attention Network for Action Recognition in Videos》[7]。这篇文章是ICCV2017年的oral文章。但是与传统的Video-level category训练RNN不同,这篇文章还提出了Pose-attention的机制。&/p&&p&这篇文章主要有以下几个贡献点。&/p&&ul&&li&不同于之前的pose-related action recognition,这篇文章是端到端的RNN,而且是spatial-temporal evolutionos of human pose&/li&&li&不同于独立的学习关节点特征(human-joint features),这篇文章引入的pose-attention机制通过不同语义相关的关节点(semantically-related human joints)分享attention参数,然后将这些通过human-part pooling层联合起来&/li&&li&视频姿态估计,通过文章的方法可以给视频进行粗糙的姿态标记。(这个方法还挺不错)。&/li&&/ul&&h3&3.6.1 网络结构&/h3&&p&RPAN网络框架可以分为三个大的部分。&/p&&ul&&li&特征生成部分:用Two-Stream的方法生成&/li&&li&姿态注意机制&/li&&li&LSTM时序处理网络&/li&&/ul&&p&下图是RPAN网络的结构图。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-db403ab75cf_b.jpg& alt=&& class=&content_image&&&/figure&&h3&3.6.2 特征生成&/h3&&p&RPAN网络中采用TSN(Temporal Segments Network)的网络框架生成Convolution Cubes。包含空间和时间上两个维度。具体内容可以查看3.4.2小节。&/p&&h3&3.6.3 姿态注意机制&/h3&&p&经过上述Two-Stream网络后生成了K1&em&K2&/em&dc的特征图。之后作者经过一系列的操作将姿态和上述的特征图结合起来得到姿态特征图,最后输入LSTM中。具体的,文章进行了如下几步操作。&/p&&p&&strong&Step1:空间特征向量&/strong&文章中定义一个&img src=&https://www.zhihu.com/equation?tex=C_t& alt=&C_t& eeimg=&1&&,表示第t个视频帧在不同空间位置上的特征向量。空间图是K1xK2的大小,共dc个通道。所以&img src=&https://www.zhihu.com/equation?tex=C_t& alt=&C_t& eeimg=&1&&是K1xk2个dc维的向量。Ct的定义如下。&/p&&p&&img src=&https://www.zhihu.com/equation?tex=C_t+%3D+%5C%7BC_t%281%29%2C......%2CC_t%28K_1+%2A+K_2%29%5C%7D& alt=&C_t = \{C_t(1),......,C_t(K_1 * K_2)\}& eeimg=&1&&&/p&&p&&strong&Step2:人体部位定义&/strong&&br&因为要涉及到姿态检测,所以文章中先定义了一个关节点,总共13个。然后由这些13个关节点,定义了5个身体的部位。定义如下图所示。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ddc4af5d8917b_b.jpg& alt=&& class=&content_image&&&/figure&&h3&3.6.4 LOSS FUNCTION&/h3&&p&文章中定义了一个联合训练的Loss Function,将行为损失和姿态损失联合起来。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-dd7836bbd09a449b4eb3_b.jpg& alt=&& class=&content_image&&&/figure&&h2&3.7 总结&/h2&&p&行为识别目前还是视频理解方向的热点,而且至今为止也没有得到很好的解决。由于视频中目标复杂,场景复杂,所以单纯的Two-Stream和C3D方法表现得都不太如意。RPAN中引入了姿态监督的机制,或许能提高视频分类的效果。&/p&&h1&4 行为检测&/h1&&p&行为检测也是目前视频理解方向的研究主要热点,因为该任务更加贴近生活,在监控安防中有潜在的巨大价值。但是相比于行为分类,行为检测难度更高,不仅需要定位视频中可能存在行为动作的视频段,还需要将其分类。而定位存在行为动作的视频段是一个更加艰巨的任务。&/p&&p&因为行为检测任务有点类似于目标检测任务,都是需要先定位目标,然后识别目标。所以目前很多行为检测方法都是借鉴于目标检测,主要思想基本上是Temporal Proposal提取,然后进行分类与回归操作。这类方法包含,利用Faster R-CNN框架&img src=&https://www.zhihu.com/equation?tex=%5E%7B%5B9%5D%5B10%5D%7D& alt=&^{[9][10]}& eeimg=&1&&思路,利用SSD框架思路&img src=&https://www.zhihu.com/equation?tex=%5E%7B%5B11%5D%7D& alt=&^{[11]}& eeimg=&1&&,还有基于TAG网络&img src=&https://www.zhihu.com/equation?tex=%5E%7B%5B12%5D%7D& alt=&^{[12]}& eeimg=&1&&等等。还有一类方法是基于C3D做帧分类(Frame Label),然后预测存在行为的视频段并分类,例如2017年ICCV的CDC网络&img src=&https://www.zhihu.com/equation?tex=%5E%7B%5B13%5D%7D& alt=&^{[13]}& eeimg=&1&&。&/p&&h2&4.1
研究难点&/h2&&p&上面简单阐述了行为检测的难点,这里总结一下主要有以下三点。&/p&&ul&&li&时序信息。与行为识别/分类一样,视频理解的通用难点就是时序信息的处理。所以针对这一点目前的主要方法基本上都是使用RNN读入CNN提取的特征,或者直接使用C3D一样的时序卷积。&/li&&li&边界不明确。不同于行为识别的是,行为检测要求做精确的动作区间检测,而生活中一个动作的产生往往边界不是十分确定的,所以这也是导致目前行为检测mAP偏低的原因。&/li&&li&时间跨度大。在生活中,一个行为动作往往跨度非常大,短的动作几秒左右,比如挥手。长的动作有的持续数十分钟,比如攀岩、骑行等等。这使得我们在提取Proposal的时候变得异常的艰难。&/li&&/ul&&h2&4.2
数据集介绍&/h2&&p&&strong&行为检测方向常用的数据集主要是THUMOS 2014和ActivityNet&/strong&。THUMOS 2014来自于THUMOS Challenge 2014,。它的训练集为UCF101数据集,验证集和测试集分别包括个未分割的视频片段。在行为检测任务中只有20类动作的未分割视频是有时序行为片段标注的,包括200个验证集(3007个行为片段)和213个测试集视频(包含3358个行为片段)。&/p&&p&&strong&MEXaction2&/strong&:MEXaction2数据集中包含两类动作:骑马和斗牛。该数据集由三个部分组成:YouTube视频,UCF101中的骑马视频以及INA视频。其中YouTube视频片段和UCF101中的骑马视频是分割好的短视频片段,被用于训练集。而INA视频为多段长的未分割的视频,时长共计77小时,且被分为训练,验证和测试集三部分。训练集中共有1336个行为片段,验证集中有310个行为片段,测试集中有329个行为片断。且MEXaction2数据集的特点是其中的未分割视频长度都非常长,被标注的行为片段仅占视频总长的很低比例。&/p&&p&&strong&ActivityNet&/strong&: 目前最大的数据库,同样包含分类和检测两个任务。这个数据集仅提供视频的youtube链接,而不能直接下载视频,所以还需要用python中的youtube下载工具来自动下载。该数据集包含200个动作类别,20000(训练+验证+测试集)左右的视频,视频时长共计约700小时。由于这个数据集实在太大了,我的实验条件下很难完成对其的实验,所以我之前主要还是在THUMOS14和MEXaction2上进行实验。&/p&&h2&4.3 CDC网络&/h2&&p&CDC网络&img src=&https://www.zhihu.com/equation?tex=%5E%7B%5B13%5D%7D& alt=&^{[13]}& eeimg=&1&&是在C3D网络基础上,借鉴了FCN的思想。在C3D网络的后面增加了时间维度的上采样操作,做到了帧预测(frame level labeling)。以下是文章主要贡献点。&/p&&ul&&li&第一次将卷积、反卷积操作应用到行为检测领域,CDC同时在空间下采样,在时间域上上采样。&/li&&li&利用CDC网络结构可以做到端到端的学习。&/li&&li&通过反卷积操作可以做到帧预测(Per-frame action labeling)。&/li&&/ul&&h3&4.3.1 网络结构&/h3&&p&CDC网络在C3D的基础上用反卷积,将时序升维。做到了帧预测。以下是CDC网络的结构图。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-7a34e6357f9dbe40e8c64e9ad647469e_b.jpg& alt=&& class=&content_image&&&/figure&&p&网络步骤如下所示。&/p&&ul&&li&输入的视频段是112x112xL,连续L帧112x112的图像&/li&&li&经过C3D网络后,时间域上L下采样到 L/8, 空间上图像的大小由 112x112下采样到了4x4&/li&&li&CDC6: 时间域上上采样到 L/4, 空间上继续下采样到 1x1&/li&&li&CDC7: 时间域上上采样到 L/2&/li&&li&CDC8:时间域上上采样到 L,而且全连接层用的是 4096xK+1, K是类别数&/li&&li&softmax层&/li&&/ul&&h3&4.3.2 CDC FILTER&/h3&&p&文章的还有一大贡献点是反卷积的设计,因为经过C3D网络输出后,存在时间和空间两个维度,文章中的CDC6完成了时序上采样,空间下采样的同时操作。&/p&&p&如下图所示,一般的都是先进行空间的下采样,然后进行时序上采样。但是CDC中设计了两个独立的卷积核(下图中的红色和绿色)。同时作用于112x112xL/8的特征图上。每个卷积核作用都会生成2个1x1的点,如上conv6,那么两个卷积核就生成了4个。相当于在时间域上进行了上采样过程。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-94a0ebd2e1cd_b.jpg& alt=&& class=&content_image&&&/figure&&h3&4.3.3 LOSS FUNCTION&/h3&&p&根据上述的网络结构图可以知道,经过softmax后会输出 (K+1, 1, 1),也就是说针对每一帧,都会有一个类别的打分输出。所以作者说做到了每帧标签。&/p&&p&假设总共有N个training segments,我们取出第n个training sample,那么经过网络后会得到(K+1, 1, 1),经过CDC8后的输出为On[t], 然后经过softmax层,针对这个样本的第t帧,我们能得到它对应的第i个类别的打分如下。&/p&&p&&img src=&https://www.zhihu.com/equation?tex=P_N%5E%7B%28i%29%7D%5Bt%5D+%3D+%5Cfrac+%7Be%5E%7BO_n%5E%7B%28i%29%7D%5Bt%5D%7D%7D%7B%5Csum_%7Bj%3D1%7D%5E%7BK%2B1%7De%5E%7BO_n%5E%7B%28j%29%7D%5Bt%5D%7D%7D& alt=&P_N^{(i)}[t] = \frac {e^{O_n^{(i)}[t]}}{\sum_{j=1}^{K+1}e^{O_n^{(j)}[t]}}& eeimg=&1&&&/p&&p&最终总的Loss Function如下。&/p&&p&&img src=&https://www.zhihu.com/equation?tex=L+%3D+%5Cfrac+%7B1%7D%7BN%7D+%5Csum_%7Bn%3D1%7D%5E%7BN%7D%5Csum_%7Bt%3D1%7D%5E%7BL%7D%28-log%28P_n%5E%7B%28z_n%29%7D%5Bt%5D%29%29& alt=&L = \frac {1}{N} \sum_{n=1}^{N}\sum_{t=1}^{L}(-log(P_n^{(z_n)}[t]))& eeimg=&1&&&/p&&h2&4.4
R-C3D网络&/h2&&p&R-C3D(Region 3-Dimensional Convolution)网络[10]是基于Faster R-CNN和C3D网络思想。对于任意的输入视频L,先进行Proposal,然后用3D-pooling,最后进行分类和回归操作。文章主要贡献点有以下3个。&/p&&ul&&li&可以针对任意长度视频、任意长度行为进行端到端的检测&/li&&li&速度很快(是目前网络的5倍),通过共享Progposal generation 和Classification网络的C3D参数&/li&&li&作者测试了3个不同的数据集,效果都很好,显示了通用性。&/li&&/ul&&h3&4.4.1 网络结构&/h3&&p&R-C3D网络可以分为4个部分。&/p&&ul&&li&特征提取网络:对于输入任意长度的视频进行特征提取&/li&&li&Temporal Proposal Subnet: 用来提取可能存在行为的时序片段(Proposal Segments)&/li&&li&Activity Classification Subnet: 行为分类子网络&/li&&li&Loss Function&/li&&/ul&&p&下图是整个网络结构图。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-267e75c1994dac968fc42d524e45e148_b.jpg& alt=&& class=&content_image&&&/figure&&h3&4.4.2 特征提取网络&/h3&&p&骨干网络作者选择了C3D网络,经过C3D网络的5层卷积后,可以得到512 x L/8 x H/16 x W/16大小的特征图。这里不同于C3D网络的是,R-C3D允许任意长度的视频L作为输入。&/p&&p&&strong&Temporal Proposal Subnet&/strong&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&这一部分是时序候选框提取网络,类似于Faster R-CNN中的RPN,用来提取一系列可能存在目标的候选框。这里是提取一系列可能存在行为的候选时序。
&/code&&/pre&&/div&&figure&&img src=&https://pic1.zhimg.com/v2-8cbae88bf7d4c903f13b58d3f99bbb23_b.jpg& alt=&& class=&content_image&&&/figure&&p&&strong&Step1:候选时序生成&/strong&&/p&&p&输入视频经过上述C3D网络后得到了512 x L/8 x H/16 x W/16大小的特征图。然后作者假设anchor均匀分布在L/8的时间域上,也就是有L/8个anchors,每个anchors生成K个不同scale的候选时序。&/p&&p&&strong&Step2: 3D Pooling&/strong&&/p&&p&得到的 512xL/8xH/16xW/16的特征图后,为了获得每个时序点(anchor)上每段候选时序的中心位置偏移和时序的长度,作者将空间上H/16 x W/16的特征图经过一个3x3x3的卷积核和一个3D pooling层下采样到 1x1。最后输出 512xL/8x1x1.&/p&&p&&strong&Step3: Training&/strong&类似于Faster R-CNN,这里也需要判定得到的候选时序是正样本还是负样本。文章中的判定如下。
正样本:IoU & 0.7,候选时序帧和ground truth的重叠数
负样本: IOU & 0.3
为了平衡正负样本,正/负样本比例为1:1.&/p&&h3&4.4.3 ACTIVITY CLASSIFICATION SUBNET&/h3&&p&行为分类子网络有如下几个功能:&/p&&ul&&li&从TPS(Temporal Proposal subnet)中选择出Proposal segment&/li&&li&对于上述的proposal,用3D RoI 提取固定大小特征&/li&&li&以上述特征为基础,将选择的Proposal做类别判断和时序边框回归&/li&&/ul&&figure&&img src=&https://pic4.zhimg.com/v2-e997b2a8e8f4da9b5bc5b_b.jpg& alt=&& class=&content_image&&&/figure&&p&&strong&Step1: NMS&/strong&&/p&&p&针对上述Temporal Proposal Subnet提取出的segment,采用NMS(Non-maximum Suppression)非极大值抑制生成优质的proposal。NMS 阈值为0.7.&/p&&p&&strong&Step2:3D RoI&/strong&&/p&&p&RoI (Region of interest,兴趣区域).这里,个人感觉作者的图有点问题,提取兴趣区域的特征图的输入应该是C3D的输出,也就是512xL/8xH/16xW/16,可能作者遗忘了一个输入的箭头。
假设C3D输出的是 512xL/8x7x7大小的特征图,假设其中有一个proposal的长度(时序长度)为lp,那么这个proposal的大小为512xlpx7x7,这里借鉴SPPnet中的池化层,利用一个动态大小的池化核,ls x hs x ws。最终得到 512x1x4x4大小的特征图&/p&&p&&strong&Step3: 全连接层&/strong&&/p&&p&经过池化后,再输出到全连接层。最后接一个边框回归(start-end time )和类别分类(Activity Scores)。&/p&&p&&strong&Step4: Traning&/strong&&/p&&p&在训练的时候同样需要定义行为的类别,如何给一个proposal定label?同样采用IoU。&/p&&ul&&li&IoU & 0.5,那么定义这个proposal与ground truth相同&/li&&li&IoU 与所有的ground truth都小于0.5,那么定义为background&/li&&/ul&&p&这里,训练的时候正/负样本比例为1:3。&/p&&h3&4.4.4 LOSS FUNCTION&/h3&&p&文章将分类和回归联合,而且联合两个子网络。分类采用softmax,回归采用smooth L1。&/p&&ul&&li&其中的N都代表batch size&/li&&li&lamda 为1&/li&&/ul&&h1&5 参考文献&/h1&&p&[1] Wang H, Schmid C. Action recognition with improved trajectories[C]//Computer Vision (ICCV), 2013 IEEE International Conference on. IEEE, -3558.&br&[2] Wang H, Kl?ser A, Schmid C, et al. Dense trajectories and motion boundary descriptors for action recognition[J]. International journal of computer vision, ): 60-79.&br&[3] Simonyan K, Zisserman A. Two-stream convolutional networks for action recognition in videos[C]//Advances in neural information processing systems. 6.
[4] Feichtenhofer C, Pinz A, Zisserman A P. Convolutional two-stream network fusion for video action recognition[J]. 2016.&br&[5] Wang L, Xiong Y, Wang Z, et al. Temporal segment networks: Towards good practices for deep action recognition[C]//European Conference on Computer Vision. Springer, Cham, .&br&[6] Tran D, Bourdev L, Fergus R, et al. Learning spatiotemporal features with 3d convolutional networks[C]//Computer Vision (ICCV), 2015 IEEE International Conference on. IEEE, -4497.&br&[7] Du W, Wang Y, Qiao Y. Rpan: An end-to-end recurrent pose-attention network for action recognition in videos[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. -3734.&br&[8] Karpathy A, Toderici G, Shetty S, et al. Large-scale video classification with convolutional neural networks[C]//Proceedings of the IEEE conference on Computer Vision and Pattern Recognition. -1732.&br&[9] Dai X, Singh B, Zhang G, et al. Temporal Context Network for Activity Localization in Videos[C]//2017 IEEE International Conference on Computer Vision (ICCV). IEEE, -5736.&br&[10]
Xu H, Das A, Saenko K. R-c3d: Region convolutional 3d network for temporal activity detection[C]//The IEEE International Conference on Computer Vision (ICCV). .&br&[11]
Lin T, Zhao X, Shou Z. Single shot temporal action detection[C]//Proceedings of the 2017 ACM on Multimedia Conference. ACM, 6.&br&[12]
Zhao Y, Xiong Y, Wang L, et al. Temporal action detection with structured segment networks[C]//The IEEE International Conference on Computer Vision (ICCV). 2017, 8.&br&[13]
Shou Z, Chan J, Zareian A, et al. CDC: convolutional-de-convolutional networks for precise temporal action localization in untrimmed videos[C]//2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). IEEE, -1426.&/p&&hr&&blockquote&&strong&&个人网页blog已经上线,一大波干货即将来袭:&a href=&https://link.zhihu.com/?target=https%3A//faiculty.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&faiculty.com/&/span&&span class=&invisible&&&/span&&/a&&&/strong&&br&版权声明:公开学习资源,只供线上学习,不可转载,如需转载请联系本人 .&br&QQ交流群:&/blockquote&
行为检测标签(空格分隔): 计算机视觉 行为检测 视频理解[toc]1. 背景视频理解是目前计算机视觉领域非常热,也是极具挑战力的一个方向。视频理解方向包含众多的子研究方向,以CVPR组织的ACTIVITYNET为例,2017年总共有5个Task被提出。Task1:未修剪视频分…
&b&理论学习&/b&:&br&1.最全面、权威的计算机专业课程,&a href=&//link.zhihu.com/?target=http%3A//study.163.com/curricula/cs.htm& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&study.163.com/curricula&/span&&span class=&invisible&&/cs.htm&/span&&span class=&ellipsis&&&/span&&/a&&br&2.学堂在线--清华大学MOOC平台,&a href=&//link.zhihu.com/?target=http%3A//www.xuetangx.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&xuetangx.com/&/span&&span class=&invisible&&&/span&&/a&&br&3.慕课网---国内最大的IT技能学习平台,&a href=&//link.zhihu.com/?target=http%3A//www.imooc.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&imooc.com/&/span&&span class=&invisible&&&/span&&/a&&br&4.维基百科中文版的计算机方面的主题,&a href=&//link.zhihu.com/?target=https%3A//zh.wikipedia.org& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&zh.wikipedia.org&/span&&span class=&invisible&&&/span&&/a&&br&&br&&b&在线编程或在线实验室&/b&:&br&1.实验楼--国内第一家以&b&实验&/b&为核心的IT在线教育平台,&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&shiyanlou.com/&/span&&span class=&invisible&&&/span&&/a&&br&2.计蒜客--在线交互式学习计算机,&a href=&//link.zhihu.com/?target=http%3A//www.jisuanke.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jisuanke.com/&/span&&span class=&invisible&&&/span&&/a&&br&2. 汇智网 - 最前沿的在线互动编程学习平台,&a href=&//link.zhihu.com/?target=http%3A//www.hubwiz.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&hubwiz.com/&/span&&span class=&invisible&&&/span&&/a&
理论学习: 1.最全面、权威的计算机专业课程, 2.学堂在线--清华大学MOOC平台, 3.慕课网---国内最大的IT技能学习平台, 4.维基百科中文版的计算机方面的主题, 在线编程…
&figure&&img src=&https://pic2.zhimg.com/v2-bbf4_b.jpg& data-rawwidth=&720& data-rawheight=&365& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic2.zhimg.com/v2-bbf4_r.jpg&&&/figure&&p&计算机视觉是人工智能技术的一个重要领域,打个比方(不一定恰当),我认为&b&计算机视觉是人工智能时代的眼睛&/b&,可见其重要程度。计算机视觉其实是一个很宏大的概念,下图是有人总结的计算机视觉所需要的技能树。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-3bdddbad4d849b72476cc2a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1063& data-rawheight=&539& class=&origin_image zh-lightbox-thumb& width=&1063& data-original=&https://pic3.zhimg.com/v2-3bdddbad4d849b72476cc2a_r.jpg&&&/figure&&p&如果你是一个对计算机视觉一无所知的小白,千万不要被这棵技能树吓到。没有哪个人能够同时掌握以上所有的技能,这棵树只是让你对计算机视觉有个粗浅的认识。&/p&&p&先来打点鸡血,看看计算机视觉有什么用吧。下面的视频是计算机视觉在自动驾驶上的实际应用,其中涉及立体视觉、光流估计、视觉里程计、三维物体检测与识别、三维物体跟踪等计算机视觉领域的关键技术。&/p&&a class=&video-box& href=&http://link.zhihu.com/?target=https%3A//www.zhihu.com/video/036800& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic3.zhimg.com/80/v2-ae5e1a2d889b44c65b6cf3a_b.jpg& data-lens-id=&036800&&
&img class=&thumbnail& src=&https://pic3.zhimg.com/80/v2-ae5e1a2d889b44c65b6cf3a_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/036800&/span&
&p&以下是我站在一个小白的视角给出一个入门计算机视觉的相对轻松的姿势。 &/p&&h2&&b&一、宏观认识&/b&&/h2&&p&小白通常看到这么多的细分方向大脑一片茫然,到底是学习人脸识别、物体跟踪,又或者是计算摄影,三维重建呢?不知道该怎么下手。其实这些细分方向有很多共通的知识,我的建议是心急吃不了热豆腐,&b&只有对计算机视觉这个领域有了一个初步的全面了解,你才能够结合实际问题找到自己感兴趣的研究方向&/b&,而兴趣能够支持一个自学的小白克服困难持续走下去。&/p&&p&&b&1、入门书籍&/b&&/p&&p&既然说是入门,这里就不推荐类似《 Multiple View Geometry in Computer Vision》这种虽然经典但是小白看了容易放弃的书了。&/p&&p&像素级的图像处理知识是计算机视觉的底层基础知识。不管你以后从事计算机视觉的哪个细分领域,这些基础知识都是必须要了解的。即使一个急切入门的小白,这一关也必须走的踏实。看到网上有人说直接从某个项目开始,边做边学,这样学的快。对此我表示部分赞成,原因是他&b&忽略了基础知识的重要性&/b&,脑子里没有基本的术语概念知识打底,很多问题他根本不知道如何恰当的表达,遇到问题也没有思路,不知道如何搜索,这会严重拖慢进度,也无法做较深入的研究,欲速则不达。&/p&&p&入门图像处理的基础知识也不是直接去啃死书,否则几个公式和术语可能就会把小白打翻在地。这里推荐两条途径,都是&b&从实践出发并与理论结合&/b&:一个是OpenCV,一个是MATLAB。&/p&&p&OpenCV以C++为基础,需要具备一定的编程基础,可移植性强,运行速度比较快,比较&b&适合实际的工程项目&/b&,在公司里用的较多;MATLAB只需要非常简单的编程基础就可以很快上手,实现方便,代码比较简洁,可参考的资料非常丰富,方便快速尝试某个算法效果,适合做&b&学术研究&/b&。当然两者搭配起来用更好啦。下面分别介绍一下。&/p&&p&&br&&/p&&p&&b&用MATLAB学习图像处理&/b&&/p&&p&推荐使用冈萨雷斯的《数字图像处理(MATLAB版)》(英文原版2001年出版,中译版2005年)。不需要一上来就全部过一遍,只需要结合MATLAB学习一下基本原理、图像变换、形态学处理、图像分割,以上章节&b&强烈建议按照书上手动敲一遍代码&/b&(和看一遍的效果完全不同),其他章节可快速扫描一遍即可。但这本书比较注重实践,对理论的解释不多,理论部分不明白的可以在配套的冈萨雷斯的《数字图像处理(第二版)》这本书里查找,这本书主要是作为工具书使用,以后遇到相关术语知道去哪里查就好。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-061b68d18f29fc1cf67b44cf902389fd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&702& data-rawheight=&501& class=&origin_image zh-lightbox-thumb& width=&702& data-original=&https://pic2.zhimg.com/v2-061b68d18f29fc1cf67b44cf902389fd_r.jpg&&&/figure&&p&&b&用OpenCV学习图像处理&/b&&/p&&p&OpenCV(Open Source Computer Vision Library)是一个开源跨平台计算机视觉程序库,主要有C++预研编写,包含了500多个用于图像/视频处理和计算机视觉的通用算法。&/p&&p&学习OpenCV参考《学习OpenCV》或者《OpenCV 2 计算机视觉编程手册》都可以。这两本都是偏实践的书,理论知识较少,按照书上的步骤敲代码,可以快速了解到OpenCV的强大,想要实现某个功能,只要学会查函数(在&a href=&http://link.zhihu.com/?target=https%3A//www.docs.opencv.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&docs.opencv.org/&/span&&span class=&invisible&&&/span&&/a&查询对应版本),调函数就可以轻松搞定。由于每个例子都有非常直观的可视化图像输出,所以学起来比较轻松有趣。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-a53ad138c3834dedc27d2e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&658& data-rawheight=&382& class=&origin_image zh-lightbox-thumb& width=&658& data-original=&https://pic3.zhimg.com/v2-a53ad138c3834dedc27d2e_r.jpg&&&/figure&&p&&br&&/p&&p&&b&2、进阶书籍&/b&&/p&&p&经过前面对图像处理的基本学习,小白已经了解了图像处理的基础知识,并且会使用OpenCV或MATLAB来实现某个简单的功能。但是这些知识太单薄了,并且比较陈旧,计算机视觉领域还有大量的新知识在等你。&/p&&p&同样给你两种选择,当然两个都选更佳。一本书是2010年出版的美国华盛顿大学Richard Szeliski写的《Computer Vision: Algorithms and Application》;一本是2012年出版的,加拿大多伦多大学Simon J.D. Prince写的《Computer Vision: Models, Learning, and Inference》。两本书侧重点不同,&b&前者侧重视觉和几何知识,后者侧重机器学习模型&/b&。当然两本书也有互相交叉的部分。虽然都有中文版,但是如果有一定的英语阅读基础,推荐看英文原版(见文末获取方式)。老外写的书,图和示例还是挺丰富的,比较利于 理解。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-ef1b90faba621f99b21bed6c21545f79_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&675& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-ef1b90faba621f99b21bed6c21545f79_r.jpg&&&/figure&&p&&br&&/p&&p&&b&《Computer Vision: Algorithms and Application》&/b&&/p&&p&这本书图文并茂地介绍了计算机视觉这门学科的诸多大方向,有了前面《数字图像处理》的基础,这本书里有些内容你已经熟悉了,没有那么强的畏惧感。相对前面的图像处理基础本书增加了许多新的内容,比如特征检测匹配、运动恢复结构、稠密运动估计、图像拼接、计算摄影、立体匹配、三维重建等,这些都是目前比较火非常实用的方向。如果有时间可以全书浏览,如果时间不够,你可以根据兴趣,选择性的看一些感兴趣的方向。这本书的中文版翻译的不太好,可以结合英文原版看。&/p&&p&&br&&/p&&p&&b&《Computer Vision: Models, Learning, and Inference》&/b&&/p&&p&该书从基础的概率模型讲起,涵盖了计算机视觉领域常用的概率模型、回归分类模型、图模型、优化方法等,以及偏底层的图像处理、多视角几何知识,图文并茂,并辅以非常多的例子和应用,非常适合入门。在其主页:&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.computervisionmodels.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&computervisionmodels.com&/span&&span class=&invisible&&/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&上可以免费下载电子书。此外还有非常丰富的学习资源,包括给教师用的&b&PPT、每章节对应的开源项目、代码、数据集链接&/b&等,非常有用。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-396eb749ce3a492d72b59a13ae5475d6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&797& data-rawheight=&542& class=&origin_image zh-lightbox-thumb& width=&797& data-original=&https://pic3.zhimg.com/v2-396eb749ce3a492d72b59a13ae5475d6_r.jpg&&&/figure&&h2&&b&二、深入实践&/b&&/h2&&p&当你对计算机视觉领域有了比较宏观的了解,下一步就是选一个感兴趣的具体的领域去深耕。这个时期就是具体编程实践环节啦,实践过程中有疑问,根据相关术语去书里查找,结合Google,基本能够解决你大部分问题。&/p&&p&那么具体选择什么方向呢?&/p&&p&如果你实验室或者公司有实际的项目,最好选择当前项目方向深耕下去。如果没有具体方向,那么继续往下看。&/p&&p&我个人认为&b&计算机视觉可以分为两大方向:基于学习的方法和基于几何的方法。其中基于学习的方法最火的就是深度学习,而基于几何方法最火的就是视觉SLAM&/b&。下面就这两个方向给出一个相对轻松的入门姿势。&/p&&p&&br&&/p&&p&&b&1、深度学习&/b&&/p&&p&深度学习(Deep Learning)的概念是Hinton等人于2006年提出的,最早最成功的应用领域就是计算机视觉,经典的卷积神经网络就是为专门处理图片数据而生。目前深度学习已经广泛应用在计算机视觉、语音识别、自然语言处理、智能推荐等领域。&/p&&p&学习深度学习需要一定的数学基础,包括微积分、线性代数,很多小白一听到这些课程就想起了大学时的噩梦,其实只用了非常基础的概念,完全不用担心。不过如果一上来就啃书本,可能会有强烈的畏难情绪,很容易早早的放弃。&/p&&p&Andrew Ng (吴恩达)的深度学习视频课程我觉得是一个非常好的入门资料。首先他本人就是斯坦福大学的教授,所以很了解学生,可以很清晰形象、深入浅出的从最基本的导数开始讲起,真的非常难得。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-4f37c030fa02a213c2475_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&835& data-rawheight=&410& class=&origin_image zh-lightbox-thumb& width=&835& data-original=&https://pic2.zhimg.com/v2-4f37c030fa02a213c2475_r.jpg&&&/figure&&p&该课程可以在网易云课程上免费观看,有中文字幕,但没有配套习题。也可以在吴恩达自己创办的在线教育平台Coursera上学习,有配套习题,限时免费,结业通过后有相应证书。&/p&&p&该课程非常火爆,不用担心听不懂,网上有数不清的学习笔记可以参考。简直小白入门必备佳肴。&/p&&p&&br&&/p&&p&&b&2、视觉SLAM&/b&&/p&&p&SLAM(Simultaneous Localization and Mapping)(详见《&a href=&http://link.zhih}

我要回帖

更多关于 李飞飞的老公 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信