图像嵌入式
image-embeddings的Python项目详细描述
图像嵌入
使用efficientnet为检索提供嵌入。在
为什么要回购?嵌入技术是一种应用广泛的技术,在科学界是众所周知的。但它似乎没有得到充分利用,对大多数工程师来说并不是很出名。我想展示将事物表示为嵌入是多么容易,以及这将解锁多少应用程序。先签出demo!在
工作流程
- 下载一些图片
- 对它们进行推理以获得嵌入
- 简单的knn例子,要理解它的意义:点击一些图片并查看knn
简单安装
运行pip install image_embeddings
工作流示例
- 运行
image_embeddings save_examples_to_folder --images_count=1000 --output_folder=tf_flower_images
,这将从https://www.tensorflow.org/datasets/catalog/tf_flowers检索1000个图像文件(但您也可以选择任何其他数据集) - 使用
image_embeddings write_tfrecord --image_folder=tf_flower_images --output_folder=tf_flower_tf_records --shards=10
生成tf记录 - 用
image_embeddings run_inference --tfrecords_folder=tf_flower_tf_records --output_folder=tf_flower_embeddings
运行推断 - 对它们进行随机knn搜索
image_embeddings random_search --path=tf_flower_embeddings
如果您想在numpy中使用嵌入(在其他语言中),请运行image_embeddings embeddings_to_numpy --input_path=tf_flower_embeddings --output_path=tf_flower_numpy
。尤其可以在web demo中使用
$ image_embeddings random_search --path=tf_flower_embeddings
image_roses_261
160.83 image_roses_261
114.36 image_roses_118
102.77 image_roses_537
92.95 image_roses_659
88.49 image_roses_197
有关更多详细信息,请浏览Simple notebook。在
你可以在本地或try it in colab
From scratch笔记本提供了如何从头开始构建的说明。在
美国石油学会
图像_嵌入式.downloader
从tensorflow数据集下载程序。任何其他的图像集都可以代替
图像_embeddings.downloader.save_examples_到_文件夹(output_folder,images_count=1000,dataset=“tf_flowers”)
将https://www.tensorflow.org/datasets/catalog/tf_flowers保存到文件夹 也适用于其他tf数据集
图像_嵌入.推理
从图像文件中创建tf recor,并使用efficientnet模型应用推理。其他模型也可以使用。在
图像_embeddings.reference.write\tfrecord文件夹从映像文件夹写入tf记录图像_嵌入.推理.运行推理(tfrecords_文件夹,output_folder,batch_size=1000)
对提供的tf记录运行推断,并将其保存到文件夹中
图像_嵌入.knn
阅读、建立索引和应用搜索的方便方法。这些方法作为示例提供。 直接对较大的数据集使用faiss。在
图像_嵌入.knn.read_嵌入(路径)
从路径运行嵌入并返回一个元组
- 嵌入矩阵
- id命名字典
- 名称到标识字典
图像_embeddings.knn.build_索引(emb)
使用提供的嵌入矩阵构建一个简单的faiss内部产品索引
图像_嵌入.knn.搜索(索引,id_to_name,emb,k=5)
搜索查询嵌入并返回(距离,名称)图像数组
图像_嵌入.knn.显示图片(图像路径,图像名称)
在jupyter中显示给定路径和图像名称中的一张图片
图像_embeddings.knn.display_结果(图像路径,结果)
显示搜索方法的结果
图像_嵌入.knn.随机搜索(路径)
加载嵌入项,对其应用随机搜索并显示结果
图像_嵌入件.knn.嵌入件(输入路径,输出文件夹)
从输入文件夹以parquet形式加载嵌入项,并将其另存为
- 用于id->;名称映射的json
- 嵌入件的数量
对于从其他语言读取嵌入特别有用
高级安装
先决条件
请确保使用python>=3.6
和{setuptools
建议在新的虚拟环境中安装image_embeddings
。为
示例
python3 -m venv image_embeddings_env
source image_embeddings_env/bin/activate
pip install -U pip setuptools
pip install image_embeddings
使用Pip
pip install image_embeddings
来源
首先,使用
git clone https://github.com/rom1504/image_embeddings.git
cd image_embeddings
make install
要安装开发工具和测试需求,请运行
make install-dev
测试
要在当前环境中运行单元测试,请运行
make test
要在新的虚拟环境中运行lint+单元测试, 跑
make venv-lint-test
皮棉
运行black --check
:
make lint
使用black
自动格式化代码
make black
任务
- [x] python中的简单下载器
- [x] python中使用https://github.com/qubvel/efficientnet的简单推理
- [x] 使用https://github.com/facebookresearch/faiss构建python基本knn示例
- [x] 使用lit元素和一些强力knn来构建基本的ui,把它放到github页面中
- []用于演示嵌入博客文章
- 项目
标签: