3个版本
0.1.2 | 2022年2月18日 |
---|---|
0.1.1 | 2022年2月18日 |
0.1.0 | 2021年6月18日 |
#21 in #vision
4.5MB
2K SLoC
Rust中的视觉搜索
Rust Web应用程序用于视觉搜索。它是RecoAI的一部分,RecoAI是一个功能齐全的电子商务推荐系统引擎。
Rust中的视觉搜索是一个具有单一职责的服务/库,执行类似的图像查询。它通过使用选定的深度学习模型提取特征,并使用近似最近邻算法对其进行索引来实现。
示例
以下是一些使用电子商务图像数据集的搜索结果示例。每个集合大约有500-600张图片。
功能
- 能够从任何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
}
安装
从源代码安装
- 克隆此存储库
- 运行
cargo build --release
- 运行服务器
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