陈室余,Zilliz 数据工程师,毕业于西安电子科技大学计算机学系。自退出 Zilliz 以来,致力于在音视频剖析、化学分子式检索等各畛域为 Milvus 开源我的项目摸索解决方案,目前也在继续摸索更多乏味的计划。为了好好生存、祛病延年,平时十分酷爱静止。
周末在看《失控玩家》时,感觉巴迪保安眼生,演过什么却说不上来,脑子里想的全是“这?人?谁?啊?”模摸糊糊有印象,越焦急越想不进去 💢
还有一次,视频中男主喝的饮料是本人之前很喜爱的,想下单却忘了品牌。
跃然纸上,总也不出。“啪”,我的脑子像是断网了。
这种话到嘴边说不出的“舌尖景象”(Tip of the tongue),在看影片的时候真是太令人抓狂了,我特地心愿有一个相似于“以图搜图”零碎,让我搜寻视频、剖析视频。
以前,我用 Milvus 搭建过一个以图搜图零碎。视频剖析和图片剖析多少有些相似,于是,我搭建了一个基于 Milvus 的视频剖析零碎 🚀
物体检测
概述
首先,要想剖析视频中的物体,得先进行指标检测。如何高效、精确地辨认视频中的物体是这项工作的次要挑战。
从晚期的传统图像算法到以后的深度神经网络,支流的指标检测(Object Detection)办法包含:RCNN、FRCNN、SSD、YOLO 等。本文介绍的基于 Milvus 的视频剖析零碎,能够通过联合深度学习模型,智能并疾速地辨认指标。
实现计划
为了实现视频中的物体检测和辨认,首先须要对视频截帧,利用指标检测技术辨认图片上的物体,再对检测到的物体图片做特征提取,通过特征向量剖析其是否蕴含该指标,最终得出结论。
- 视频截帧
视频剖析问题通常会利用截帧技术获取单帧画面,转换为图像剖析问题。目前截帧技术非常成熟,FFmpeg、OpenCV 等都能够依照肯定的工夫来截取视频帧。本文将利用 OpenCV 对视频按每秒进行截帧。
- 指标检测
指标检测的工作是心愿在截取到的图片帧中找到物体,同时依据该物体的地位提取出相应的截图。如下图所示,能够检测出自行车、狗和汽车三个物体,并提取出它们的图像。本文将利用 YOLOv3 网络做指标检测,这也是目前比拟风行的网络检测形式。
- 图像特征提取
特征提取是指将机器难以辨认的非结构化数据转化为容易辨认的特征向量。比方,图像能够通过深度学习神经网络模型转换为多维特征向量,目前比拟风行的图像识别 AI 模型有 VGG、CNN、ResNet 等。本文将利用 ResNet50 模型对视频中的指标物体图片进行特征提取。
- 特征向量剖析
将提取到的图像特征向量与图像库进行类似度比拟,找出与检测到的物体图像最类似的后果,最终得出物体检测的相干信息。
当特征向量数据规模较大时,向量计算将会是一个微小的挑战。本文将采纳 Milvus 向量数据库来剖析特征向量数据。
关键技术
OpenCV
OpenCV 是一个跨平台的计算机视觉库, 它实现了图像处理和计算机视觉方面的很多通用算法,在计算机视觉畛域应用非常宽泛。以下将应用 Python 编程,用 OpenCV 按肯定距离截取视频帧,并保留为图片:
import cv2
cap = cv2.VideoCapture(file_path)
framerate = cap.get(cv2.CAP_PROP_FPS)
allframes = int(cv2.VideoCapture.get(cap, int(cv2.CAP_PROP_FRAME_COUNT)))
success, image = cap.read()
cv2.imwrite(file_name, image)
YOLOv3
YOLOv3 是近年来提出的单阶段检测器,该检测器与达到同样精度的传统指标检测办法相比,推断速度能达到近两倍。本文应用 PaddlePaddle 实现的 YOLOv3 加强模型,在该版本中应用了多种优化办法,推断速度更快。
ResNet50
ResNet 模型曾在 ImageNet 较量中夺得图像分类工作第一名。因为它简略与实用并存,之后很多图像分析方法都会在 ResNet50 或者 ResNet101 的根底上实现。图像检测、宰割、辨认等畛域都纷纷应用 ResNet,能够看出 ResNet 的确非常受欢迎。
Milvus
Milvus 是一款开源的向量数据库,反对应用多种 AI 模型将非结构化数据向量化,并为向量数据提供搜寻服务,可广泛应用于计算机视觉、自然语言解决、语音辨认、举荐零碎以及新药发现等。具体实现形式是:
- 通过深度学习模型将非结构化数据转化为特征向量,并导入 Milvus 库。
- 对特征向量进行存储并建设索引。
- 接管到用户的向量搜寻申请后,返回与输出向量类似的后果。
零碎实现
通过后面的介绍,置信你对基于 Milvus 的视频剖析零碎曾经有所理解。如下图所示,该零碎次要分为两局部:
- 红色箭头示意的数据导入过程:利用 ResNet50 模型提取图像数据集的特征向量,而后将特征向量导入 Milvus 向量数据库。
- 彩色箭头示意的视频剖析过程:首先将视频截帧,而后把截取到的图片利用 YOLOv3 进行指标检测提取出物体图像,而后再通过 ResNet50 模型提取图像的特征向量,最初在 Milvus 中检索物体图像的特征向量,找出视频中呈现的物体信息。
对于零碎的具体实现过程和源码,请参考咱们的 bootcamp 我的项目。
数据导入
数据导入过程非常简略,首先将待导入的数据转化为 2048 维向量数据,而后把向量数据导入 Milvus。
vector = image_encoder.execute(filename)
entities = [vector]
collection.insert(data=entities)
视频剖析
正如后面所介绍的,视频剖析须要先进行视频截帧,而后对每帧图片做指标检测,将检测到的物体图像通过提取,失去特征向量数据,最初在 Milvus 中应用欧氏间隔(“L2”)进行类似度计算,返回检测到的后果。
images = extract_frame(filename, 1, prefix)
detector = Detector()
run(detector, DATA_PATH)
vectors = get_object_vector(image_encoder, DATA_PATH)
search_params = {"metric_type": "L2", "params": {"nprobe": 10}}
results = collection.search(vectors, param=search_params, limit=10)
总结
越来越多的 AI 平台集成了指标检测技术和图像处理技术,实现了很多能够落地的利用场景。
比方,以图搜图,声纹识别,还有……本文实现的基于 Milvus 向量数据库的视频识别系统✨
看视频失忆抓狂?有 Milvus 在手,你就能够疾速辨认视频信息,妈妈再也不必放心我看剧暴走啦!
参考文献
[1] A. D. Bagdanov, L. Ballan, M. Bertini, A. Del Bimbo.“Trademark matching and retrieval in sports video databases.”Proceedings of the international workshop on Workshop on multimedia information retrieval, ACM, 2007.
[2] J. Kleban, X. Xie, W.-Y. Ma.“Spatial pyramid mining for logo detection in natural scenes.”IEEE International Conference, 2008.
[3] R. Boia, C. Florea, L. Florea, R. Dogaru.“Logo localization and recognition in natural images using homographic class graphs.”Machine Vision and Applications 27 (2), 2016.
[4] R. Boia, C. Florea, L. Florea.“Elliptical asift agglomeration in class prototype for logo detection.”BMVC, 2015.
Zilliz 以从新定义数据迷信为愿景,致力于打造一家寰球当先的开源技术创新公司,并通过开源和云原生解决方案为企业解锁非结构化数据的暗藏价值。
Zilliz 构建了 Milvus 向量数据库,以放慢下一代数据平台的倒退。Milvus 目前是 LF AI & Data 基金会的毕业我的项目,可能治理大量非结构化数据集。咱们的技术在新药发现、计算机视觉、举荐引擎、聊天机器人等方面具备宽泛的利用。