#image #onnx #search #deep-learning #vision #search-engine #computer-vision

bin+lib visual-search

使用深度学习模型提取特征的图像视觉搜索引擎

3个版本

0.1.2 2022年2月18日
0.1.1 2022年2月18日
0.1.0 2021年6月18日

#21 in #vision

AGPL-3.0-or-later

4.5MB
2K SLoC

Rust 1.5K SLoC // 0.0% comments Python 532 SLoC // 0.2% comments Jupyter Notebooks 157 SLoC // 0.2% comments Shell 3 SLoC

Rust中的视觉搜索

Rust Web应用程序用于视觉搜索。它是RecoAI的一部分,RecoAI是一个功能齐全的电子商务推荐系统引擎。

Rust中的视觉搜索是一个具有单一职责的服务/库,执行类似的图像查询。它通过使用选定的深度学习模型提取特征,并使用近似最近邻算法对其进行索引来实现。

示例

以下是一些使用电子商务图像数据集的搜索结果示例。每个集合大约有500-600张图片。

Similar shoes images Similar girls' dresses

功能

  • 能够从任何ONNX模型中提取特征(《https://github.com/onnx/models/tree/master/vision/classification》)
  • 完全用Rust编写的图像变换管道
  • 支持索引本地图像文件(字节)或远程(URL)
  • 独立的图像相似度搜索服务器(使用近似最近邻算法)
  • 用作服务器或库
  • 多线程和异步索引
  • Python SDK

请参阅如何使用SDK的示例

工作原理

visual-search封装ONNX格式并创建一个结构,该结构包括

  • 模型的URL(在这种情况下为来自Microsoft仓库的ONNX模型)
  • 处理图像所需的图像变换管道
  • 提取特征的层名称(它几乎总是倒数第二层)

据我们所知,这个结构应该能够定义ONNX仓库中的任何模型。从模型中提取图像特征并在预定义的图像集合中对其进行索引。

let model_config = ModelConfig {
    model_name: "SqueezeNet".into(),
    model_url: "https://github.com/onnx/models/raw/master/vision/classification/squeezenet/model/squeezenet1.1-7.onnx".into(),
    image_transformation: TransformationPipeline {
        steps: vec![
            ResizeRGBImageAspectRatio { image_size: ImageSize { width: 224, height: 224 }, scale: 87.5, filter: FilterType::Nearest }.into(),
            CenterCrop { crop_size: ImageSize {width: 224, height: 224} }.into(),
            ToArray {}.into(),
            Normalization { sub: [0.485, 0.456, 0.406], div: [0.229, 0.224, 0.225], zeroone: true }.into(),
            ToTensor {}.into(),
        ]
    },
    image_size: ImageSize { width: 224, height: 224 },
    layer_name: Some("squeezenet0_pool3_fwd".to_string()),
    channels: Channels::CWH
}

安装

从源代码安装

  1. 克隆此存储库
  2. 运行 cargo build --release
  3. 运行服务器 target/release/image-embedding-rust --config config/config.toml

在生产环境中,请记得在config.toml中更改bearer令牌

基准测试

使用4个工作进程,使用MobileNetV2主干模型索引1000张图片需要100秒。

搜索单张图像需要150毫秒。

联系方式

如果您需要支持,请给我们发送电子邮件至pawel(at)logicai.io。

许可证

我们选择了AGPL v3,如果您想将此crate用于商业目的,您必须遵守许可证。

待办事项

  • 持久化(目前服务器完全在内存中)
  • 日志记录
  • 清除所有警告

依赖项

~54–74MB
~1M SLoC