Hub documentation
Lance
Lance
Lance๋ AI๋ฅผ ์ํ ์คํ ๋ฉํฐ๋ชจ๋ฌ ๋ ์ดํฌํ์ฐ์ค ํ
์ด๋ธ ํ์์
๋๋ค. Hugging Face ๊ฒฝ๋ก(hf://)๋ฅผ ์ฌ์ฉํ์ฌ Hub์ Lance ๋ฐ์ดํฐ์
์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด Hugging Face Hub์ ๋๊ท๋ชจ ๋ฐ์ดํฐ์
์ ๋ก์ปฌ๋ก ์ ์ฒด๋ฅผ ๋ณต์ฌํ์ง ์๊ณ ๋ ์ค์บ ๋ฐ ๊ฒ์ํ ์ ์์ต๋๋ค.

์์ํ๊ธฐ
์์ํ๋ ค๋ฉด pylance์ pyarrow๋ฅผ pip๋ก ์ค์นํ์ธ์:
pip install pylance pyarrow
์ Lance์ธ๊ฐ์?
- ML/AI ์ํฌ๋ก๋์ ์ต์ ํ: Lance๋ ์ค์บ ์ฑ๋ฅ์ ์ ํดํ์ง ์์ผ๋ฉด์๋ ๋น ๋ฅธ ๋๋ค ์ก์ธ์ค๋ฅผ ์ง์ํ๋ ํ๋์ ์ธ ์ปฌ๋ผํ ํฌ๋งท์ผ๋ก, ๊ฒ์, ๋ถ์, ํ์ต, ํผ์ฒ ์์ง๋์ด๋ง ๋ฑ ๋ค์ํ ์ฌ์ฉ ์ฌ๋ก์ ์ ์ฉํฉ๋๋ค.
- ๋ฉํฐ๋ชจ๋ฌ ์์ฐ์ ์๋ฒ ๋ฉ๊ณผ ์ ํต์ ์ธ ์ค์นผ๋ผ ๋ฐ์ดํฐ์ ํจ๊ป Lance์์ ๋ฐ์ดํธ, ์ฆ ๋ฐ์ด๋๋ฆฌ ๊ฐ์ฒด("ํ์ผ๋ก ์ ์ฅ๋ blob")๋ก ์ ์ฅ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด Hub๋ฅผ ํตํด ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์ ๊ด๋ฆฌํ๊ณ ๊ณต์ ํ๋ฉฐ ๋ฐฐํฌํ๋ ๊ฒ์ด ๋ ์ฌ์์ง๋๋ค.
- ์ธ๋ฑ์ฑ์ 1๊ธ ์๋ฏผ(ํฌ๋งท ์์ฒด์ ๋ค์ดํฐ๋ธ)์ ๋๋ค: Lance์๋ ๋ฐ์ดํฐ์ ๊ณผ ํจ๊ป Hub์ ๋ฐ๋ก ๋ฐฐ์น๋๋ ๋น ๋ฅด๊ณ , ๋์คํฌ ๊ธฐ๋ฐ์ด๋ฉฐ, ํ์ฅ ๊ฐ๋ฅํ ๋ฒกํฐ ๋ฐ FTS ์ธ๋ฑ์ค๊ฐ ํฌํจ๋์ด ์์ด, ์ฌ์ฉ์๊ฐ ๋ค์ ๊ณ์ฐํ ํ์ ์์ด ๋ฐ์ดํฐ๋ฟ๋ง ์๋๋ผ ์๋ฒ ๋ฉ๊ณผ ์ธ๋ฑ์ค๋ ๊ณต์ ํ ์ ์์ต๋๋ค.
- ์ ์ฐํ ์คํค๋ง์ ๋ฐ์ดํฐ ์งํ๋ฅผ ํตํด ์๋ก์ด ๊ธฐ๋ฅ/์ด(๋ชจ๋๋ ์ด์ ํ๊ทธ, ์๋ฒ ๋ฉ ๋ฑ)์ ์ ์ฒด ํ ์ด๋ธ์ ๋ค์ ์์ฑํ์ง ์๊ณ ๋ ์ ์ง์ ์ผ๋ก ์ถ๊ฐํ ์ ์์ต๋๋ค.
๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ๊ณณ์ ์ ์ฅํ์ธ์
Lance์์๋ ๋ฉํฐ๋ชจ๋ฌ ๋ฐ์ดํฐ ์์ฐ(์ด๋ฏธ์ง, ์ค๋์ค, ๋น๋์ค)์ด ์ค์นผ๋ผ ๋ฉํ๋ฐ์ดํฐ์ ์๋ฒ ๋ฉ๊ณผ ํจ๊ป ์์ ๋ฐ์ดํธ๋ก ์ ์ฅ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ ์ ์ฅ ์์คํ ์ ํตํฉํ ํ์ ์์ด ํ ๊ณณ์์ ๋ฐ์ดํฐ์ ์ ์ค์บํ๊ณ ํํฐ๋งํ ์ ์์ต๋๋ค.
datasets๋ก Hub์์ ์คํธ๋ฆฌ๋ฐ
load_dataset(..., streaming=True)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ๋ก ๋ค์ด๋ก๋ํ์ง ์๊ณ ์ค์บํ๊ณ ๋ฐ๋ณตํฉ๋๋ค.
from datasets import load_dataset
# Return as a Hugging Face dataset
ds = load_dataset(
"lance-format/laion-1m",
split="train",
streaming=True
)
# Take first three rows
for row in ds.take(3):
print(row["caption"])Streaming์ ๋ณด์ ๋ฐ์ดํฐ๋ฅผ ํ์
ํ๊ธฐ ์ํด ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ํ๋งํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. ๋ฒกํฐ ๊ฒ์์ด๋ ๋์ฉ๋ ๋ฐ์ด๋๋ฆฌ ๋ธ๋กญ์ ๋ค๋ฃจ๋ ค๋ฉด ์๋์์ ์ค๋ช
ํ๋ Lance dataset API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Streaming์ ๋จ์ํ ์ค์นผ๋ผ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ํ๋งํ๋ ๋ฐ๋ ๋น ๋ฅด์ง๋ง, ์๋ฒ ๋ฉ์ด๋ ๋๊ท๋ชจ ๋ฉํฐ๋ชจ๋ฌ ์์ ์ ์ฒ๋ฆฌํ๋ ๋ฐ๋ ์๋์ ์ผ๋ก ๋๋ฆฝ๋๋ค. ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์ ๋ค๋ฃจ๋ ค๋ฉด ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ค์บํ์ฌ ํ์ํ ๋ถ๋ถ ์งํฉ์ ์๋ณํ ํ, ํด๋น ๋ถ๋ถ๋ง ๋ก์ปฌ๋ก ๋ค์ด๋ก๋ํ์ฌ Hub์ ๋ ์ดํธ ๋ฆฌ๋ฐ ๋ฌธ์ ๋ฅผ ํผํ๋ ๊ฒ์ด ์ข์ต๋๋ค:
hf download lance-format/laion-1m --repo-type dataset --local-dir ./laion
lance.dataset๋ก Hub์์ ์คํธ๋ฆฌ๋ฐ
Hugging Face Hub์ ์ ์ฅ๋ Lance ๋ฐ์ดํฐ์
์ hf:// ๊ฒฝ๋ก ์ง์ ์๋ฅผ ์ฌ์ฉํ์ฌ ์ค์บํ ์๋ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ก์ปฌ๋ก ๋ค์ด๋ก๋ํ์ง ์๊ณ ์๊ฒฉ ๋ฐ์ดํฐ์
์ ์ค์บํ ์ ์์ต๋๋ค. Lance dataset API๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ํ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๋๋ก ์ ํ, ํํฐ ๋ฐ ํ๋ก์ ์
์ ์ค์ ํ๋ ๊ฒ์ด ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
import lance
# Return as a Lance dataset
ds = lance.dataset("hf://datasets/lance-format/laion-1m/data/train.lance")
scanner = ds.scanner(
columns=["caption", "url", "similarity"],
limit=5
)
rows = scanner.to_table().to_pylist()
for row in rows:
print(row)๋ฐ์ด๋๋ฆฌ ์์ฐ ์์
์๋ ์์์์๋ Lance ๋ฐ์ดํฐ์
์์ image ์ปฌ๋ผ์ ์ด๋ฏธ์ง๊ฐ ์๋ณธ JPEG ๋ฐ์ดํธ๋ก ๊ฐ์ ธ์์ ธ ํ์ ๋จ๊ณ์์ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ds.take๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํธ๋ฅผ ๊ฐ์ ธ์ ๋์คํฌ์ ์ ์ฅํ๋ฉด ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
import lance
from pathlib import Path
ds = lance.dataset("hf://datasets/lance-format/laion-1m/data/train.lance")
dir_name = "laion_samples"
Path(dir_name).mkdir(exist_ok=True)
rows = ds.take([0, 1], columns=["image", "caption"]).to_pylist()
for idx, row in enumerate(rows):
with open(f"{dir_name}/{idx}.jpg", "wb") as f:
f.write(row["image"])
print(f"Wrote image with caption: {row['caption']}")Write a subset to a new Lance dataset
๋์ฉ๋ ๋ฐ์ดํฐ์ ์ ๋ค๋ฃจ๊ณ ๊ณ์ ๊ฐ์? Hub์์ ํ์ ํ์ ์งํฉ์ ์ ํํ๊ธฐ ์ํด ํํฐ๋ง๋ ์ค์บ์ ์คํํ๊ณ ์ด๋ฅผ ๋ก์ปฌ Lance ๋ฐ์ดํฐ์ ์ผ๋ก ๊ตฌํํ๋ ๊ฒ์ ๊ฐ๋จํฉ๋๋ค.
import lance
ds = lance.dataset("hf://datasets/lance-format/laion-1m/data/train.lance")
scanner = ds.scanner(
columns=["image", "caption", "width", "height"],
filter="width >= 200 AND height >= 100",
limit=10,
)
subset = scanner.to_table()
lance.write_dataset(subset, "./laion_subset")์ธ๋ฑ์ค ์์ฑ
๋ฐ์ดํฐ์ ์ ์ด๋ฏธ ์ธ๋ฑ์ค๊ฐ ์ฐ๊ฒฐ๋์ด ์์ง ์์ ๊ฒฝ์ฐ, ๋ก์ปฌ๋ก ๋ค์ด๋ก๋ํ ํ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
# ds is a local Lance dataset
ds.create_index(
"img_emb",
index_type="IVF_PQ",
num_partitions=256,
num_sub_vectors=96,
replace=True,
)๋ฒกํฐ ์ธ๋ฑ์ค ์์ฑ์ ๋ํ ๋ ์์ธํ ์์ ๋ Lance ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ธ์. ๋ฒกํฐ ์ธ๋ฑ์ค๊ฐ ์์ฑ๋๋ฉด ์๋ฒ ๋ฉ์ ํตํด ๋ฐ์ดํฐ์์ ์ ์ฌ๋ ๊ฒ์์ ์คํํ ์ ์์ต๋๋ค.
๋ฒกํฐ ๊ฒ์
Lance์์ ์ธ๋ฑ์ค๋ ์ผ๊ธ ์๋ฏผ(first-class citizen)์ด๋ฏ๋ก, ๋ฐ์ดํฐ๋ฟ๋ง ์๋๋ผ ์๋ฒ ๋ฉ๊ณผ ์ธ๋ฑ์ค๋ ํจ๊ป ์ ์ฅํ๊ณ Hub์์ ์ง์ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค. describe_indices() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์
์ ์ธ๋ฑ์ค ์ ๋ณด๋ฅผ ๋์ดํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ์
์ ์ธ๋ฑ์ค๊ฐ ์๋ ๊ฒฝ์ฐ, lance.write_dataset()๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์
์ ๋ก์ปฌ ๋ฒ์ ์ ์์ฑํ๊ณ LanceDataset.create_index๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์๋ ์์๋ img_emb ํ๋์ ๋ฒกํฐ ์ธ๋ฑ์ค๊ฐ ์ด๋ฏธ ์๋ ๋ฐ์ดํฐ์
์ ๋ณด์ฌ์ค๋๋ค:
import lance
ds = lance.dataset("hf://datasets/lance-format/laion-1m/data/train.lance")
print(ds.list_indices())
# Returns
# [
# IndexDescription(
# name=img_emb_idx,
# type_url=/lance.table.VectorIndexDetails,
# num_rows_indexed=1209588,
# fields=[15],
# field_names=["img_emb"],
# num_segments=1
#. )
# ]โฆ ์๊ฒฉ ๋ฐ์ดํฐ์ ์ ๋ค์ด๋ก๋ํ์ง ์๊ณ ๋ ๋ฒกํฐ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์คํํ ์ ์์ต๋๋ค(์ํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ์ ์ ๋ก์ปฌ๋ก ๋ค์ด๋ก๋ํ์ฌ ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์๋ ์์ต๋๋ค). ์๋ ์์ ๋ ์ด๋ฏธ์ง ์๋ฒ ๋ฉ์ ์ฟผ๋ฆฌ ๋ฒกํฐ๋ก ์ฌ์ฉํ์ฌ ๋ฒกํฐ ์ธ๋ฑ์ค์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ด์ ๊ฒ์์ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
import lance
import pyarrow as pa
ds = lance.dataset("hf://datasets/lance-format/laion-1m/data/train.lance")
emb_field = ds.schema.field("img_emb")
ref = ds.take([0], columns=["img_emb"]).to_pylist()[0]["img_emb"]
query = pa.array([ref], type=emb_field.type)
neighbors = ds.scanner(
nearest={
"column": emb_field.name,
"q": query[0],
"k": 6,
"nprobes": 16,
"refine_factor": 30,
},
columns=["caption", "url", "similarity"],
).to_table().to_pylist()ํฐ
k๋๋nprobes๊ฐ์ ์ค์ ํ๊ฑฐ๋, ๋๋์ ์ฟผ๋ฆฌ๋ฅผ ํ ๋ฒ์ ๋ณด๋ด๋ฉด Hub์ ์๋ ์ ํ์ ๋๋ฌํ ์ ์์ต๋๋ค. ๋๋ ์ฌ์ฉ์ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ์ (๋๋ ๊ทธ ์ผ๋ถ)์ ๋ก์ปฌ๋ก ๋ค์ด๋ก๋ํ ํ Lance๋ฅผ ๋ก์ปฌ ๊ฒฝ๋ก๋ก ์ง์ ํ์ฌ ์๋ ์ ํ์ ํผํ์ธ์.
๋ฐ์ดํฐ์ ์ ์งํ
Lance์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ์ค ํ๋๋ ์ ์ฐํ๊ณ ๋น์ฉ์ด ๋ค์ง ์๋ ๋ฐ์ดํฐ ์งํ์ ๋๋ค. ์ด๋ ์๋ณธ ํ ์ด๋ธ์ ๋ค์ ์์ฑํ์ง ์๊ณ ๋ ํ์๋ ์ปฌ๋ผ์ ์์ฝ๊ฒ ์ถ๊ฐํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋์ฉ๋ ๋ธ๋กญ์ด ๋ง์ด ํฌํจ๋ ๋งค์ฐ ํฐ ํ ์ด๋ธ์ ๊ฒฝ์ฐ, I/O ์ ๊ฐ ํจ๊ณผ๊ฐ ์๋นํ ํด ์ ์์ต๋๋ค. ML/AI ์์ง๋์ด๋ง ์์ ์ ์ํด ๋ฐ์ดํฐ๋ฅผ ์คํํ๊ณ , ์๋ก์ด ํน์ง, ์๋ฒ ๋ฉ, ๋๋ ํ์๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ ์ด ๊ธฐ๋ฅ์ด ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
์๋ ์์๋ ๊ธฐ์กด ์ ์ ์ปฌ๋ผ์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ NSFW๋ก ํ์ํ๋ ํ์ moderation_label ์ปฌ๋ผ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ด ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ๋, ์ ์ปฌ๋ผ์ ๋ฐฑํํ๋ฉด ์๋ณธ ์ด๋ฏธ์ง ๋ธ๋กญ์ด๋ ๋ค๋ฅธ ์ปฌ๋ผ์ ๋ฐ์ดํฐ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์ ์ปฌ๋ผ ๋ฐ์ดํฐ๋ง ๊ธฐ๋ก๋ฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ฐฑํํ์ง ์๊ณ ์ ์ปฌ๋ผ ์คํค๋ง๋ง ์ถ๊ฐํ๋ ๊ฒ๋ ์ ํํ ์ ์์ต๋๋ค.
import lance
import pyarrow as pa
# Assumes you ran the export to Lance example above to store a local subset of the data
local_ds = lance.dataset("./laion_subset")
# schema only (data to be added later)
local_ds.add_columns(pa.field("moderation_label", pa.string()))
# with data backfill
local_ds.add_columns(
{
"moderation_label": "case WHEN \"NSFW\" > 0.5 THEN 'review' ELSE 'ok' END"
}
)Lance ๋ฐ์ดํฐ์ ์์ ์ปฌ๋ผ์ ์์ ํ๊ณ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๋ ค๋ฉด ๋ฐ์ดํฐ ์งํ์ ๋ํ Lance ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
๋น๋์ค blob ์์
Lance ํ
์ด๋ธ์ ๋์ฉ๋ ์ธ๋ผ์ธ ๋น๋์ค ๋ธ๋กญ๋ ์ง์ํฉ๋๋ค. ์ด ๋
ผ๋ฌธ์ OpenVid-1M ๋ฐ์ดํฐ์
์๋ ๊ณ ํ์ง์ด๊ณ ํํ๋ ฅ์ด ํ๋ถํ ๋น๋์ค์ ๊ทธ์ ๋ํ ์บก์
์ด ํฌํจ๋์ด ์์ต๋๋ค. ๋น๋์ค ๋ฐ์ดํฐ๋ Hub์ ๋ค์ Lance ๋ฐ์ดํฐ์
์ video_blob ์ปฌ๋ผ์ ์ ์ฅ๋์ด ์์ต๋๋ค.
import lance
lance_ds = lance.dataset("hf://datasets/lance-format/Openvid-1M/data/train.lance")
blob_file = lance_ds.take_blobs("video_blob", ids=[0])[0]
video_bytes = blob_file.read()๋ค๋ฅธ ๋ฐ์ดํฐ ํฌ๋งท๊ณผ ๋ฌ๋ฆฌ, ๋๊ท๋ชจ ๋ฉํฐ๋ชจ๋ฌ ๋ฐ์ด๋๋ฆฌ ๊ฐ์ฒด(blob)๋ Lance์์ ์ผ๊ธ ์๋ฏผ(first-class citizen)์ ๋๋ค. blob API๋ Lance ๋ฐ์ดํฐ์ ์ ๋๊ท๋ชจ blob์ ์ ์ฅํ๊ณ ๊ฒ์ํ๊ธฐ ์ํ ๊ณ ์์ค API๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ค์ ์์ ๋ ๋ฌด๊ฑฐ์ด ๋น๋์ค blob์ ๋ก๋ํ์ง ์๊ณ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ํ ํ, ํ์ํ ๋น๋์ค blob์ ์จ๋๋งจ๋๋ก ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
import lance
ds = lance.dataset("hf://datasets/lance-format/Openvid-1M/data/train.lance")
# 1. Browse metadata without loading video blobs.
metadata = ds.scanner(
columns=["caption", "aesthetic_score"],
filter="aesthetic_score >= 4.5",
limit=2,
).to_table().to_pylist()
# 2. Fetch a single video blob by row index.
selected_index = 0
blob_file = ds.take_blobs("video_blob", ids=[selected_index])[0]
with open("video_0.mp4", "wb") as f:
f.write(blob_file.read())ํ์ต์ ์ํ ๋ฐ์ดํฐ ์ค๋น
Training์ Lance์ ๋น ๋ฅธ ๋๋ค ์ก์ธ์ค ๋ฐ ์ค์บ ์ฑ๋ฅ์ด ์ ์ฉํ๊ฒ ํ์ฉ๋ ์ ์๋ ๋ ๋ค๋ฅธ ์์ญ์ ๋๋ค. ํ์ต ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฉ์ปค๋์ฆ์ผ๋ก Lance ๋ฐ์ดํฐ์ ์ ์ฌ์ฉํ๊ณ , ํ์ต ํ์ดํ๋ผ์ธ์ ์ผ๋ถ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ํ๋งํ๊ณ ๋ฐฐ์น๋ก ๋ก๋ํ ์ ์์ต๋๋ค.
Lance์ blob API๋ torchcodec๊ณผ ํธํ๋๋ฏ๋ก, ๋น๋์ค blob์ torch ํ
์๋ก ์ฝ๊ฒ ๋์ฝ๋ฉํ ์ ์์ต๋๋ค:
from torchcodec.decoders import VideoDecoder
decoder = VideoDecoder(blob_file)
tensor = decoder[0] # uint8 tensor of shape [C, H, W]ํจ์จ์ ์ธ ๋น๋์ค ๋์ฝ๋ฉ์ ์ํ ์ถ๊ฐ ํจ์๋ torchcodec ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ธ์.
์ถ๊ฐ๋ก, ์์ฒด ์ด๋ฏธ์ง ๋ชจ๋ธ์ ํ์ตํ๊ธฐ ์ํด torchvision์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ๋ ๋ง์ ์์ ๋ Lance ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ธ์.
๋ ๋ง์ Lance ๋ฐ์ดํฐ์ธํธ ํ์
Lance๋ ์ ํต์ ์ธ ํ ์ด๋ธ ๋ฐ์ดํฐ์ ํจ๊ป ๋ฉํฐ๋ชจ๋ฌ ๋ธ๋กญ์ ๋ํ ๋ค์ดํฐ๋ธ ์ง์์ ์ ๊ณตํ๋ ์คํ ํฌ๋งท์ ๋๋ค. Hugging Face Hub ํตํฉ์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง, ์ค๋์ค, ๋น๋์ค, ํ ์คํธ, ์๋ฒ ๋ฉ, ์ค์นผ๋ผ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ํ ๊ณณ์์ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์์ต๋๋ค.
Hugging Face Hub์์ ๋ ๋ง์ Lance ๋ฐ์ดํฐ์ ์ ํ์ํ๊ณ , ์ปค๋ฎค๋ํฐ์ ๋ค๋ฅธ ์ฌ์ฉ์์ ์ง์ ๋ง๋ Lance ๋ฐ์ดํฐ์ ์ ๊ณต์ ํด ๋ณด์ธ์. ๋ ๋ง์ ์ฝ๋ ์ค๋ํซ๊ณผ ์์ ๋ lance.org์์ ํ์ธํด ๋ณผ ์ ์์ต๋๋ค.
Update on GitHub