[TOC]
概念介绍 (可跳转至 search 仓库的概念介绍页)
术语 Operator 是指在 Omnisearch 的一次查询中,对图片的一次操作。Operator 一般基于一个训练好的模型进行推理。Omnisearch 的 Operator 当前支持使用 TensorFlow/paddlepaddle 作为机器学习后端进行模型推理得到特征向量。
Omnisearch 当前内置了一些 Operator 可以完成最简单的使用。如果你想创建一个 Omnisearch 未支持的流程,你可以尝试自己编写一个 Operator,并且用来组合出自己的 search 流程。
根据输入和输出的不同进行划分,我们将 Operator 分成了两类,分别是 Processor 和 Encoder。Encoder 类 Operator 接收图片作为输入,经过内部的模型推理得到表征图片特征的信息作为输出,该信息目前支持特征向量和图片标签两种。Processor 类 Operator 接收图片作为输入,经过内部的模型推理,输出为一组图片,代表为各类Detector。如目标检测器,输入为一张图片,输出为原图片中的物体图片。
下面将会按 Processor 和 Encoder 的分类分别对内置 Operator 的详细介绍,
- MTCNN-face-detector
- 镜像名: face-detector
- 功能: 识别输入图片中的人脸
- 接受: image
- 返回: 识别出的一组人脸图片
- 样例 pipeline:mtcnn_detect_face -> face_embedding
以 facenet 实现,使用 github 项目 https://github.com/davidsandberg/facenet.git
- Mask-RCNN-object-detector
- 镜像名: mask-rcnn-detector
- 功能: 识别输入图片中的物体
- 接受: image
- 返回: 识别出的一组物体图片
- 样例 pipeline:mask_rcnn -> vgg/xception
附上 mask-rcnn github 链接
- SSD-object-detector
- 镜像名: ssd-detector
- 功能: 识别输入图片中的物体
- 接受: image
- 返回: 识别出的一组物体图片
- 样例pipeline:ssd -> vgg/xception
- YOLOv3-object-detector
- 镜像名:yolov3-detector
- 功能: 识别输入图片中的物体
- 接受: image
- 返回: 识别出的一组物体图片
- 样例 pipeline:yolo -> vgg/xception
以 paddlepaddle yolo v3 模型实现,附链接
- Vgg16
- 镜像名: vgg16-encoder
- 向量维度: 512
- 计算方式: 需要测试
- 使用场景:
- 功能: 对输入的图片进行 embedding,得到表征图片的特征向量
以 Keras Application 中 Vgg16 实现该 encoder。
- Xception
- 镜像名:xception-encoder
- 向量维度: 2048
- 计算方式: 需要测试
- 使用场景:
- 功能: 对输入的图片进行 embedding,得到表征图片的特征向量
以 Keras Application 中 Xception 实现该 encoder。
- Face-encoder
- 镜像名:face-encoder
- 向量维度: 128
- 计算方式: 需要测试
- 使用场景:
- 功能: 对识别出来的人脸图片进行 embedding,得到表征人脸特征的向量
Implemented by facenet model. 附上链接
- SSD-encoder
- 镜像名: ssd-encoder
- 标签:MSCOCO 的90种类别
- 计算方式: 结构化数据
- 使用场景:
- 功能: 对输出的图片进行物体检测,得到表征图片中的物品信息的标签。
附上 github 链接
PS: 待 docker hub 确定后上传拉取 (需要修改相关参数)
# 拉取对应版本的 docker 镜像, ${tag}应替换为可选的tag
docker pull zilliz/face-encoder:${tag}
# 以该镜像快速启动一个容器,同时设置容器配置:
# 1. 将容器的50004端口映射到本机,50004是 face-encoder 默认的映射端口
# 2. 将容器的 /app/tmp 目录映射到本机,以方便查看/调试 encoder 内部图片缓存
docker run -p 50004:50004 -v `pwd`/tmp:/app/tmp -d zilliz/face-encoder:${tag}
更多的,更详细的方式可参考快速开始
Ominisearch 支持最大灵活度地接入自定义的Operator,核心只要实现预定义的 rpc/rpc.proto
中的 grpc 接口。
以下列出的是实现定制化 Operator 推荐的必要事项,任何人都可以实现这些步骤接入 Search。
- 准备模型。
- 实现 rpc 目录下的 grpc 接口,以便正常接入 Search。
- 编写必要的编译文件以便在多数环境下正常运行。(推荐编写 makefile、 dockerfile)
P.S. 更详细的定制化 Operator 以及 快速实现的样例可参考如何添加自定义 Operator