Melakukan Pencarian Visi dengan Milvus dan FiftyOne
FiftyOne adalah alat sumber terbuka untuk membangun dataset berkualitas tinggi dan model visi komputer. Panduan ini membantu Anda mengintegrasikan kemampuan pencarian kemiripan Milvus ke FiftyOne, sehingga Anda dapat melakukan pencarian visi pada set data Anda sendiri.
FiftyOne menyediakan API untuk membuat koleksi Milvus, mengunggah vektor, dan menjalankan kueri kemiripan, baik secara terprogram di Python maupun melalui tunjuk-dan-klik di Aplikasi. Demonstrasi di halaman ini berfokus pada integrasi terprogram.
Prasyarat
Sebelum memulai, pastikan Anda memiliki yang berikut ini:
- Server Milvus yang sedang berjalan.
- Lingkungan Python dengan
pymilvus
danfiftyone
terinstal. - Sebuah kumpulan data gambar untuk dicari.
Persyaratan Instalasi
Untuk contoh ini, kita akan menggunakan pymilvus
dan fiftyone
. Anda dapat menginstalnya dengan menjalankan perintah berikut:
python3 -m pip install pymilvus fiftyone torch torchvision
Resep dasar
Alur kerja dasar untuk menggunakan Milvus untuk membuat indeks kemiripan pada dataset FiftyOne Anda dan menggunakannya untuk menanyakan data Anda adalah sebagai berikut:
- Muat dataset ke FiftyOne
- Hitung embedding vektor untuk sampel atau patch dalam dataset Anda, atau pilih model untuk menggunakan embedding yang dihasilkan.
- Gunakan metode
compute_similarity()
untuk menghasilkan indeks kemiripan Milvus untuk sampel atau tambalan objek dalam dataset dengan mengatur parameterbackend="milvus"
dan menentukanbrain_key
pilihan Anda. - Gunakan indeks kemiripan Milvus ini untuk menanyakan data Anda dengan
sort_by_similarity()
. - Jika diinginkan, hapus indeks tersebut.
Prosedur
Contoh di bawah ini menunjukkan alur kerja di atas.
1. Muat set data ke FiftyOne dan hitung penyematan untuk sampel
Kode berikut ini menggunakan kumpulan gambar sampel yang disediakan oleh FiftyOne untuk mendemonstrasikan integrasi. Anda dapat menyiapkan set gambar Anda sendiri dengan merujuk ke artikel ini.
import fiftyone as fo
import fiftyone.brain as fob
import fiftyone.zoo as foz
# Step 1: Load your data into FiftyOne
dataset = foz.load_zoo_dataset("quickstart")
# Steps 2 and 3: Compute embeddings and create a similarity index
milvus_index = fob.compute_similarity(
dataset,
brain_key="milvus_index",
backend="milvus",
)
2. Melakukan pencarian kemiripan penglihatan
Sekarang Anda dapat menggunakan indeks kesamaan Milvus untuk melakukan pencarian kesamaan visi pada kumpulan data Anda.
# Step 4: Query your data
query = dataset.first().id # query by sample ID
view = dataset.sort_by_similarity(
query,
brain_key="milvus_index",
k=10, # limit to 10 most similar samples
)
# Step 5 (optional): Cleanup
# Delete the Milvus collection
milvus_index.cleanup()
# Delete run record from FiftyOne
dataset.delete_brain_run("milvus_index")
3. Menghapus indeks
Jika Anda tidak lagi memerlukan indeks kemiripan Milvus, Anda dapat menghapusnya dengan menggunakan kode berikut:
# Step 5: Delete the index
milvus_index.delete()
Menggunakan backend Milvus
Secara default, memanggil compute_similarity()
atau sort_by_similarity()
akan menggunakan backend sklearn.
Untuk menggunakan backend Milvus, cukup setel parameter backend opsional compute_similarity()
ke "milvus"
:
import fiftyone.brain as fob
fob.compute_similarity(..., backend="milvus", ...)
Atau, Anda dapat mengonfigurasi FiftyOne secara permanen untuk menggunakan backend Milvus dengan mengatur variabel lingkungan berikut:
export FIFTYONE_BRAIN_DEFAULT_SIMILARITY_BACKEND=milvus
atau dengan mengatur parameter default_similarity_backend
pada konfigurasi otak Anda yang terletak di ~/.fiftyone/brain_config.json
:
{
"default_similarity_backend": "milvus"
}
Otentikasi
Jika Anda menggunakan server Milvus khusus, Anda dapat memberikan kredensial Anda dengan berbagai cara.
Variabel lingkungan (disarankan)
Cara yang disarankan untuk mengonfigurasi kredensial Milvus Anda adalah dengan menyimpannya dalam variabel lingkungan yang ditunjukkan di bawah ini, yang secara otomatis diakses oleh FiftyOne setiap kali koneksi ke Milvus dibuat.
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_URI=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_USER=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_PASSWORD=XXXXXX
# also available if necessary
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_SECURE=true
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_TOKEN=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_DB_NAME=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_CLIENT_KEY_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_CLIENT_PEM_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_CA_PEM_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_SERVER_PEM_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_SERVER_NAME=XXXXXX
Konfigurasi FiftyOne Brain
Anda juga dapat menyimpan kredensial Anda dalam konfigurasi otak Anda yang terletak di ~/.fiftyone/brain_config.json
:
{
"similarity_backends": {
"milvus": {
"uri": "XXXXXX",
"user": "XXXXXX",
"password": "XXXXXX",
# also available if necessary
"secure": true,
"token": "XXXXXX",
"db_name": "XXXXXX",
"client_key_path": "XXXXXX",
"client_pem_path": "XXXXXX",
"ca_pem_path": "XXXXXX",
"server_pem_path": "XXXXXX",
"server_name": "XXXXXX"
}
}
}
Perhatikan bahwa file ini tidak akan ada sampai Anda membuatnya.
Argumen kata kunci
Anda dapat secara manual memberikan kredensial Milvus Anda sebagai argumen kata kunci setiap kali Anda memanggil metode seperti compute_similarity()
yang membutuhkan koneksi ke Milvus:
import fiftyone.brain as fob
milvus_index = fob.compute_similarity(
...
backend="milvus",
brain_key="milvus_index",
uri="XXXXXX",
user="XXXXXX",
password="XXXXXX",
# also available if necessary
secure=True,
token="XXXXXX",
db_name="XXXXXX",
client_key_path="XXXXXX",
client_pem_path="XXXXXX",
ca_pem_path="XXXXXX",
server_pem_path="XXXXXX",
server_name="XXXXXX",
)
Perhatikan bahwa, ketika menggunakan strategi ini, Anda harus memberikan kredensial secara manual ketika memuat indeks nanti melalui load_brain_results()
:
milvus_index = dataset.load_brain_results(
"milvus_index",
uri="XXXXXX",
user="XXXXXX",
password="XXXXXX",
# also available if necessary
secure=True,
token="XXXXXX",
db_name="XXXXXX",
client_key_path="XXXXXX",
client_pem_path="XXXXXX",
ca_pem_path="XXXXXX",
server_pem_path="XXXXXX",
server_name="XXXXXX",
)
Parameter konfigurasi Milvus
Backend Milvus mendukung berbagai parameter kueri yang dapat digunakan untuk menyesuaikan kueri kemiripan Anda. Parameter-parameter ini meliputi:
collection_name(Tidak ada): nama koleksi Milvus yang akan digunakan atau dibuat. Jika tidak ada yang disediakan, koleksi baru akan dibuat
metrik ("dotproduct"): metrik jarak sematan yang akan digunakan saat membuat indeks baru. Nilai yang didukung adalah (
"dotproduct"
,"euclidean"
)consistency_level ("Session"): tingkat konsistensi yang akan digunakan. Nilai yang didukung adalah (
"Strong"
,"Session"
,"Bounded"
,"Eventually"
)
Untuk informasi terperinci tentang parameter ini, lihat dokumentasi otentikasi Milvus dan dokumentasi tingkat konsistensi Milvus.
Anda dapat menentukan parameter-parameter ini melalui salah satu strategi yang dijelaskan di bagian sebelumnya. Berikut ini contoh konfigurasi otak yang mencakup semua parameter yang tersedia:
{
"similarity_backends": {
"milvus": {
"collection_name": "your_collection",
"metric": "dotproduct",
"consistency_level": "Strong"
}
}
}
Namun, biasanya parameter-parameter ini secara langsung diteruskan ke compute_similarity()
untuk mengonfigurasi indeks baru yang spesifik:
milvus_index = fob.compute_similarity(
...
backend="milvus",
brain_key="milvus_index",
collection_name="your_collection",
metric="dotproduct",
consistency_level="Strong",
)
Mengelola brain run
FiftyOne menyediakan berbagai metode yang dapat Anda gunakan untuk mengelola brain run.
Sebagai contoh, Anda dapat memanggil list_brain_runs()
untuk melihat kunci otak yang tersedia pada kumpulan data:
import fiftyone.brain as fob
# List all brain runs
dataset.list_brain_runs()
# Only list similarity runs
dataset.list_brain_runs(type=fob.Similarity)
# Only list specific similarity runs
dataset.list_brain_runs(
type=fob.Similarity,
patches_field="ground_truth",
supports_prompts=True,
)
Atau, Anda dapat menggunakan get_brain_info()
untuk mengambil informasi tentang konfigurasi brain run:
info = dataset.get_brain_info(brain_key)
print(info)
Gunakan load_brain_results()
untuk memuat SimilarityIndex
untuk menjalankan brain run.
Anda dapat menggunakan rename_brain_run()
untuk mengganti nama kunci otak yang terkait dengan hasil run kemiripan yang sudah ada:
dataset.rename_brain_run(brain_key, new_brain_key)
Terakhir, Anda dapat menggunakan delete_brain_run()
untuk menghapus brain run:
dataset.delete_brain_run(brain_key)
Memanggil delete_brain_run()
hanya akan menghapus catatan brain run dari kumpulan data FiftyOne Anda; ini tidak akan menghapus koleksi Milvus yang terkait, yang dapat Anda lakukan sebagai berikut:
# Delete the Milvus collection
milvus_index = dataset.load_brain_results(brain_key)
milvus_index.cleanup()
Untuk alur kerja pencarian vektor umum pada dataset FiftyOne menggunakan backend Milvus, lihat Contoh di sini.