ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ содСрТимому

Ultralytics API ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊΠ°

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Open In Colab API Explorer - это Python API для исслСдования Ρ‚Π²ΠΎΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΈ поиск ΠΏΠΎ Ρ‚Π²ΠΎΠ΅ΠΌΡƒ Π½Π°Π±ΠΎΡ€Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SQL-запросов, поиск ΠΏΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠΌΡƒ сходству ΠΈ сСмантичСский поиск.



Π‘ΠΌΠΎΡ‚Ρ€ΠΈ: Ultralytics ΠžΠ±Π·ΠΎΡ€ API Explorer

Установка

Explorer зависит ΠΎΡ‚ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… своих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Они автоматичСски ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ использовании. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ эти зависимости, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

pip install ultralytics[explorer]

ИспользованиС

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data='coco128.yaml', model='yolov8n.pt')

# Create embeddings for your dataset
explorer.create_embeddings_table()

# Search for similar images to a given image/images
dataframe = explorer.get_similar(img='path/to/image.jpg')

# Or search for similar images to a given index/indices
dataframe = explorer.get_similar(idx=0)

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π’Π°Π±Π»ΠΈΡ†Π° Π²ΠΊΡ€Π°ΠΏΠ»Π΅Π½ΠΈΠΉ для Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ создаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ. Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ LanceDB, которая ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π½Π° дискС, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ моТСшь ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вкраплСния для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ COCO, Π½Π΅ исчСрпывая памяти.

Если Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π²ΠΊΡ€Π°ΠΏΠ»Π΅Π½ΠΈΠΉ, Ρ‚Ρ‹ моТСшь ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ force=True Π½Π° create_embeddings_table ΠΌΠ΅Ρ‚ΠΎΠ΄.

Π’Ρ‹ моТСшь ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прямой доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ LanceDB, Ρ‡Ρ‚ΠΎΠ±Ρ‹ провСсти Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ "Π Π°Π±ΠΎΡ‚Π° с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Embeddings".

Поиск ΠΏΠΎ сходству - это Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ изобраТСния Π½Π° Π·Π°Π΄Π°Π½Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ. Она основана Π½Π° ΠΈΠ΄Π΅Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ изобраТСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ вкраплСния. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π²ΠΊΡ€Π°ΠΏΠ»Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ построСна, Ρ‚Ρ‹ смоТСшь Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСмантичСский поиск Π»ΡŽΠ±Ρ‹ΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… способов:

  • На Π·Π°Π΄Π°Π½Π½ΠΎΠΌ индСксС ΠΈΠ»ΠΈ спискС индСксов Π² Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…: exp.get_similar(idx=[1,10], limit=10)
  • На любом ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ спискС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…: exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)

Если Π²Ρ…ΠΎΠ΄ΠΎΠ² нСсколько, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΈΡ… Π²ΠΊΡ€Π°ΠΏΠ»Π΅Π½ΠΈΠΉ.

Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡˆΡŒ Ρ„Ρ€Π΅ΠΉΠΌ Π΄Π°Π½Π½Ρ‹Ρ… pandas с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ limit ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… Π½Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ… расстояниС Π² пространствС встраивания. Π’Ρ‹ моТСшь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… для дальнСйшСй Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ

БСмантичСский поиск

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.pt')
exp.create_embeddings_table()

similar = exp.get_similar(img='https://ultralytics.com/images/bus.jpg', limit=10)
print(similar.head())

# Search using multiple indices
similar = exp.get_similar(
                        img=['https://ultralytics.com/images/bus.jpg',
                             'https://ultralytics.com/images/bus.jpg'],
                        limit=10
                        )
print(similar.head())
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.pt')
exp.create_embeddings_table()

similar = exp.get_similar(idx=1, limit=10)
print(similar.head())

# Search using multiple indices
similar = exp.get_similar(idx=[1,10], limit=10)
print(similar.head())

НанСсСниС ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ моТСшь ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ plot_similar ΠΌΠ΅Ρ‚ΠΎΠ΄. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Π΅ ΠΆΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈ get_similar ΠΈ выстраиваСт ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ изобраТСния Π² сСтку.

НанСсСниС ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.pt')
exp.create_embeddings_table()

plt = exp.plot_similar(img='https://ultralytics.com/images/bus.jpg', limit=10)
plt.show()
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.pt')
exp.create_embeddings_table()

plt = exp.plot_similar(idx=1, limit=10)
plt.show()

2. Бпроси ИИ (запрос Π½Π° СстСствСнном языкС)

Π­Ρ‚ΠΎ позволяСт Ρ‚Π΅Π±Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ свой Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ СстСствСнный язык. Π’Π΅Π±Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² написании SQL-запросов. Наш Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ запросов Π½Π° основС искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° автоматичСски сдСлаСт это ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ. НапримСр, Ρ‚Ρ‹ моТСшь ΡΠΊΠ°Π·Π°Ρ‚ΡŒ: "ΠŸΠΎΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΌΠ½Π΅ 100 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΈ 2 собаки. Π’Π°ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹", ΠΈ ΠΎΠ½ сам сгСнСрируСт запрос ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Ρ‚Π΅Π±Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’ этой Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ LLM ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ, поэтому Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ вСроятностными ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡˆΠΈΠ±Π°Ρ‚ΡŒΡΡ.

Бпроси искусствСнный ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚

from ultralytics import Explorer
from ultralytics.data.explorer import plot_query_result


# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.pt')
exp.create_embeddings_table()

df = exp.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(df.head())

# plot the results
plt = plot_query_result(df)
plt.show()

3. Запросы Π½Π° SQL

Π’Ρ‹ моТСшь Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ SQL-запросы ΠΊ своСму Π½Π°Π±ΠΎΡ€Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ sql_query ΠœΠ΅Ρ‚ΠΎΠ΄. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ SQL-запрос ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ pandas dataframe с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ.

SQL-запрос

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.pt')
exp.create_embeddings_table()

df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² SQL-запросов

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ моТСшь ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² SQL-запроса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ plot_sql_query ΠΌΠ΅Ρ‚ΠΎΠ΄. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Π΅ ΠΆΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈ sql_query ΠΈ выстраиваСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² Π²ΠΈΠ΄Π΅ сСтки.

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² SQL-запросов

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.pt')
exp.create_embeddings_table()

# plot the SQL Query
exp.plot_sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%' LIMIT 10")

4. Π Π°Π±ΠΎΡ‚Π° с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Π²ΠΊΡ€Π°ΠΏΠ»Π΅Π½ΠΈΠΉ

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ моТСшь Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Π²ΠΊΡ€Π°ΠΏΠ»Π΅Π½ΠΈΠΉ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π²ΠΊΡ€Π°ΠΏΠ»Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ создана, Ρ‚Ρ‹ смоТСшь ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΉ доступ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Explorer.table

ΠŸΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° LanceDB Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’Ρ‹ моТСшь ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Explorer.table ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ выполняй Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ запросы, Π½Π°ΠΆΠΈΠΌΠ°ΠΉ ΠΏΡ€Π΅- ΠΈ ΠΏΠΎΡΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΈ Ρ‚.Π΄.

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ моТСшь ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стола:

ΠŸΠΎΠ»ΡƒΡ‡ΠΈ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ вкраплСния

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

embeddings = table.to_pandas()["vector"]
print(embeddings)

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ запросы с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

from ultralytics import Explorer

exp = Explorer(model="yolov8n.pt")
exp.create_embeddings_table()
table = exp.table

# Dummy embedding
embedding = [i for i in range(256)]
rs = table.search(embedding).metric("cosine").where("").limit(10)

Π‘ΠΎΠ·Π΄Π°ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΉ индСкс

ΠŸΡ€ΠΈ использовании Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ моТСшь ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΉ индСкс для Π±ΠΎΠ»Π΅Π΅ быстрого выполнСния запросов. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ create_index ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π΅ LanceDB.

table.create_index(num_partitions=..., num_sub_vectors=...)

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ доступных Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… индСксах Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ здСсь Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ создания Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… индСксов прямо ΠΈΠ· API Explorer.

5. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΠΊΡ€Π°ΠΏΠ»Π΅Π½ΠΈΠΉ

Π’Ρ‹ моТСшь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π²ΠΊΡ€Π°ΠΏΠ»Π΅Π½ΠΈΠΉ для провСдСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π°Π½Π°Π»ΠΈΠ·ΠΎΠ². Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:

ИндСкс сходства

Explorer поставляСтся с similarity_index опСрация:

  • Он пытаСтся ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, насколько каТдая Ρ‚ΠΎΡ‡ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅.
  • Для этого ΠΎΠ½ подсчитываСт, сколько Π²ΠΊΡ€Π°ΠΏΠ»Π΅Π½ΠΈΠΉ изобраТСния Π»Π΅ΠΆΠ°Ρ‚ Π±Π»ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ max_dist ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ Π² сгСнСрированном пространствС встраивания, учитывая top_k ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ изобраТСния Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„Ρ€Π΅ΠΉΠΌ Π΄Π°Π½Π½Ρ‹Ρ… pandas со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ:

  • idx: ИндСкс изобраТСния Π² Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…
  • im_file: ΠŸΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ
  • count: ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π±Π»ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ max_dist ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ
  • sim_im_files: Бписок ΠΏΡƒΡ‚Π΅ΠΉ ΠΊ count ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ изобраТСния

НаконСчник

Для Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… модСль, max_dist & top_k сгСнСрированный ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ индСкс сходства Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ. Π’ случаС Ссли Ρ‚Π²ΠΎΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… измСнился ΠΈΠ»ΠΈ Ρ‚Π΅Π±Π΅ просто Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ индСкс сходства, Ρ‚Ρ‹ моТСшь ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ force=True.

ИндСкс сходства

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()

sim_idx = exp.similarity_index()

Π’Ρ‹ моТСшь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСкс сходства для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… условий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, Ρ‚Ρ‹ моТСшь ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ изобраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

import numpy as np

sim_count = np.array(sim_idx["count"])
sim_idx['im_file'][sim_count > 30]

Визуализация пространства встраивания

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ моТСшь Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ пространство встраивания с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠ±ΠΎΠΉ инструмСнта для построСния Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ². НапримСр, Π²ΠΎΡ‚ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с использованиСм matplotlib:

import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Reduce dimensions using PCA to 3 components for visualization in 3D
pca = PCA(n_components=3)
reduced_data = pca.fit_transform(embeddings)

# Create a 3D scatter plot using Matplotlib Axes3D
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')

# Scatter plot
ax.scatter(reduced_data[:, 0], reduced_data[:, 1], reduced_data[:, 2], alpha=0.5)
ax.set_title('3D Scatter Plot of Reduced 256-Dimensional Data (PCA)')
ax.set_xlabel('Component 1')
ax.set_ylabel('Component 2')
ax.set_zlabel('Component 3')

plt.show()

Начни ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свои собствСнныС ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ ΠΎΠ± исслСдовании Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… CV, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ API Explorer. Для вдохновСния посмотри

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, созданныС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ultralytics Explorer

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ Π½Π°ΡˆΡƒ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ графичСского интСрфСйса Π½Π° основС API Explorer

Π‘ΠΊΠΎΡ€ΠΎ Π±ΡƒΠ΄Π΅Ρ‚

  • [ ] ОбъСдини ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈΠ· Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ - Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС person Π­Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΊΠΈ ΠΎΡ‚ COCO ΠΈ car Π­Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΊΠΈ с городских ΠΏΠ΅ΠΉΠ·Π°ΠΆΠ΅ΠΉ
  • [ ] Π£Π΄Π°Π»ΠΈ изобраТСния, индСкс сходства ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€ΠΎΠ³Π°.
  • [ ] АвтоматичСскоС сохранСниС Π½ΠΎΠ²Ρ‹Ρ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… послС слияния/удалСния записСй
  • [ ] Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…


Боздано 2024-01-07, ОбновлСно 2024-04-27
Авторы: glenn-jocher (8), 0xSynapse (1), RizwanMunawar (2), AyushExel (2)

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ