คำนวณการฝังคลิปได้อย่างง่ายดายและสร้างระบบ clip retrieval ด้วยคลิปเหล่านั้น การฝังข้อความ+รูปภาพ 100 ล้านรายการสามารถประมวลผลได้ภายใน 20 ชั่วโมงโดยใช้ 3080
การดำเนินการตั้งแต่ต้นจนจบทำให้สามารถสร้างระบบค้นหาความหมายแบบง่ายๆ ได้ สนใจที่จะเรียนรู้เกี่ยวกับการค้นหาความหมายโดยทั่วไปหรือไม่ คุณสามารถอ่านโพสต์ขนาดกลางของฉันในหัวข้อ
ดูเพิ่มเติมที่ laion5B และการค้นหาเชิงความหมายในระดับหลายพันล้านเพื่ออ่านเพิ่มเติมเกี่ยวกับวิธีทำให้มาตราส่วนนี้เป็นตัวอย่างนับพันล้าน
หากคุณเชื่อในการสร้างเครื่องมือที่นำมาใช้ซ้ำได้เพื่อทำให้ข้อมูลสำหรับ ML ใช้งานได้ง่าย และคุณต้องการที่จะมีส่วนร่วม โปรดเข้าร่วมแชท DataToML
pip ติดตั้งการดึงคลิป
หากคุณสนใจที่จะเรียกใช้ดัชนี laion5B โปรดดูเอกสารนี้
ClipClient
อนุญาตให้ทำการสืบค้นแบ็กเอนด์การดึงคลิปจากระยะไกลผ่าน python
ดู ClipClient
- การเริ่มต้นใช้งานสมุดบันทึก สำหรับตัวอย่างสมุดบันทึก jupyter
ในระหว่างการเริ่มต้น คุณสามารถระบุพารามิเตอร์บางอย่างได้:
backend_url
: URL ของแบ็กเอนด์ (ที่จำเป็น)indice_name
: ระบุชื่อดัชนีที่คุณต้องการใช้ (ที่จำเป็น)aesthetic_score
: คะแนนด้านสุนทรียภาพที่ได้รับการจัดอันดับโดยเครื่องมือทำนายด้านสุนทรียภาพ ค่าเริ่มต้นคือ 9
use_mclip
: จะใช้ CLIP เวอร์ชันหลายภาษาหรือไม่ ค่าเริ่มต้นเป็น False
aesthetic_weight
: น้ำหนักของคะแนนความสวยงาม ค่าเริ่มต้นคือ 0.5
modality
: ค้นหารูปภาพหรือข้อความในดัชนี หนึ่งใน Multimodal.IMAGE
หรือ Multimodal.TEXT
ค่าเริ่มต้นคือ Multimodal.IMAGE
num_images
: จำนวนรูปภาพที่จะส่งคืนจาก API ค่าเริ่มต้นคือ 40
deduplicate
: ว่าจะขจัดข้อมูลที่ซ้ำกันโดยการฝังรูปภาพหรือไม่ ค่าเริ่มต้นเป็นจริงuse_safety_model
: ว่าจะลบรูปภาพที่ไม่ปลอดภัยออกหรือไม่ ค่าเริ่มต้นเป็นจริงuse_violence_detector
: ว่าจะลบภาพที่มีความรุนแรงหรือไม่ ค่าเริ่มต้นเป็นจริงตัวอย่างเช่น หากต้องการสอบถามแบ็กเอนด์ที่โฮสต์สำหรับ Laion5B ด้วยพารามิเตอร์เริ่มต้น:
from clip_retrieval . clip_client import ClipClient , Modality
client = ClipClient ( url = "https://knn.laion.ai/knn-service" , indice_name = "laion5B-L-14" )
คุณสามารถค้นหาภาพที่มีคำบรรยายคล้ายกับข้อความที่คุณให้ไว้
results = client . query ( text = "an image of a cat" )
results [ 0 ]
> { 'url' : 'https://example.com/kitten.jpg' , 'caption' : 'an image of a kitten' , 'id' : 14 , 'similarity' : 0.2367108941078186 }
คุณยังสามารถค้นหาภาพที่มีคำบรรยายคล้ายกับภาพที่คุณให้ไว้ได้ รูปภาพสามารถส่งผ่านเส้นทางท้องถิ่นหรือ url
cat_results = client . query ( image = "cat.jpg" )
dog_results = client . query ( image = "https://example.com/dog.jpg" )
คุณยังสามารถค้นหาภาพที่มีคำบรรยายคล้ายกับคลิปที่คุณใส่ไว้ได้
cat_results = client . query ( embedding_input = cat_embedding )
หากต้องการปรับปรุงชุดข้อมูลที่มีอยู่ด้วยคู่ข้อความ/รูปภาพที่คล้ายกัน คุณสามารถค้นหาไดเรกทอรีของรูปภาพและรวมผลลัพธ์ได้
all_results = [ result for result in [ client . query ( image = image ) for image in os . listdir ( "my-images" )]]
with open ( "search-results.json" , "w" ) as f :
json . dump ( all_results , f )
คุณสามารถสร้างชุดข้อมูลโดยใช้ผลลัพธ์ json ที่บันทึกไว้และเครื่องมือ img2dataset
img2dataset " search-results.json "
--input_format= " json "
--output_folder= " knn_search_dataset "
--caption_col= " caption "
ขั้นแรก เลือกชุดข้อมูลของ URL รูปภาพและคำอธิบายภาพ (ตัวอย่าง) จากนั้นเรียกใช้:
คุณอาจต้องการเรียกใช้ export CUDA_VISIBLE_DEVICES=
เพื่อหลีกเลี่ยงการใช้ GPU ของคุณหากมี VRAM ไม่เพียงพอ
wget https://github.com/rom1504/img2dataset/raw/main/tests/test_files/test_1000.parquet
clip-retrieval end2end test_1000.parquet /tmp/my_output
จากนั้นไปที่ http://localhost:1234 และเพลิดเพลินกับการค้นหารูปภาพของคุณ
ใช้ --run_back False
หากคุณไม่ต้องการเรียกใช้แบ็กเอนด์
รับภาพบางส่วนใน example_folder
เช่นโดยทำ:
pip install img2dataset
echo 'https://placekitten.com/200/305' >> myimglist.txt
echo 'https://placekitten.com/200/304' >> myimglist.txt
echo 'https://placekitten.com/200/303' >> myimglist.txt
img2dataset --url_list=myimglist.txt --output_folder=image_folder --thread_count=64 --image_size=256
คุณยังสามารถใส่ไฟล์ข้อความที่มีชื่อเดียวกันกับรูปภาพในโฟลเดอร์นั้นได้ เพื่อรับการฝังข้อความ
จากนั้นเรียกใช้ clip-retrieval inference --input_dataset image_folder --output_folder embeddings_folder
โฟลเดอร์เอาท์พุตจะประกอบด้วย:
ซึ่งขยายได้ถึงล้านตัวอย่าง ที่ 1400 ตัวอย่าง/วินาทีของ 3080 สามารถประมวลผลตัวอย่าง 10 ล้านตัวอย่างได้ภายใน 2 ชั่วโมง
clip_inference เปลี่ยนชุดข้อความ+รูปภาพเป็นการฝังคลิป
"open_clip:ViT-B-32/laion2b_s34b_b79k"
เพื่อใช้ open_clip หรือ "hf_clip:patrickjohncyh/fashion-clip"
เพื่อใช้โมเดลคลิปหน้ากอด DeepSparse เป็นรันไทม์การอนุมานสำหรับการอนุมานโมเดลแบบกระจัดกระจายที่รวดเร็วบน CPU มีแบ็กเอนด์ที่พร้อมใช้งานภายในการดึงคลิปโดยการติดตั้งด้วย pip install deepsparse-nightly[clip]
และระบุ clip_model
ด้วยคำนำหน้า "nm:"
เช่น "nm:neuralmagic/CLIP-ViT-B-32-256x256-DataComp-s34B-b86K-quant-ds"
หรือ "nm:mgoin/CLIP-ViT-B-32-laion2b_s34b_b79k-ds"
หากคุณต้องการควบคุมวิธีเรียกใช้การอนุมานได้มากขึ้น คุณสามารถสร้างและโทรหาผู้ปฏิบัติงานได้โดยตรงโดยใช้ clip-retrieval inference.worker
ตัวอย่างการใช้งาน:
clip-retrieval inference.worker
--tasks= " [0] "
--input_dataset= " input/folder/{000000..000100}.tar "
--output_folder= " example/path "
--input_format= " webdataset "
--output_partition_count= " 1 "
การทำเช่นนี้จะเรียกใช้ผู้ปฏิบัติงานเพียงคนเดียวที่สามารถสั่งให้มุ่งเน้นไปที่ชุดย่อยเฉพาะของ input_dataset
ผู้ปฏิบัติงานนั้นจะประมวล tasks
ที่ส่งผ่านไปตามลำดับ ที่นี่ tasks
คือรายการของ partition_id
ที่ผู้ปฏิบัติงานรายนี้จะรับผิดชอบ
หากต้องการคำนวณจำนวนงานด้วยตนเอง ให้ใช้สูตรต่อไปนี้: number_samples / wds_number_file_per_input_file
API คล้ายกับ clip-retrieval inference
อย่างมาก โดยมีการเปลี่ยนแปลงเล็กน้อยบางประการ:
partition_id
ที่ผู้ปฏิบัติงานรายนี้รับผิดชอบในการคำนวณ ( ที่จำเป็น )"open_clip:ViT-B-32-quickgelu"
เพื่อใช้ open_clip หรือ "hf_clip:patrickjohncyh/fashion-clip"
เพื่อใช้โมเดลคลิปหน้ากอดหมายเหตุ : ผู้ปฏิบัติงานไม่ยอมรับข้อโต้แย้งต่อไปนี้
- write_batch_size เขียนขนาดแบตช์ (ค่าเริ่มต้น 10**6 )
- distribution_strategy เลือกวิธีกระจายงาน ดูส่วนการแจกจ่ายเพื่อดูรายละเอียด ( ลำดับ เริ่มต้น )
- การประมาณค่า wds_number_file_per_input_file ของจำนวนตัวอย่างต่อ tar หากใช้ wds และไม่ได้ระบุ output_partition_count (ค่าเริ่มต้น 10,000 )
- อาร์กิวเมนต์ SLURM ใด ๆ
ตัวอย่างการสืบค้น hdfs โดยใช้รูปแบบ webdataset: `clip_inference --input_dataset "pipe:hdfs dfs -cat /myfolder/webdataset/{00000..00010}.tar" --output_folder "hdfs://myfolder/embeddings" --input_format webdataset
`clip_inference --input_dataset "pipe:aws s3 cp --quiet s3://myfolder/webdataset/{00000..00010}.tar -" --output_folder "s3://myfolder/embeddings" --input_format ชุดข้อมูลเว็บ
หากต้องการเรียกใช้สิ่งนี้บนหลายโหนด (และหลาย GPU) โปรดดูบทช่วยสอนที่ docs/distributed_clip_inference.md
ดัชนีคลิปใช้เป็นอินพุตเอาต์พุตของการอนุมานคลิป และสร้างดัชนีโดยใช้ระบบอัตโนมัติ
clip-retrieval index --embeddings_folder embeddings_folder --index_folder index_folder
--max_index_memory_usage "16G"
อนุญาตให้กำหนดค่าจำนวน RAM ที่ดัชนีจะใช้ RAM มากขึ้น การเรียกคืน KNN ที่ดีขึ้น (ค่าเริ่มต้น 4G
)--current_memory_available 24G
อนุญาตให้ควบคุมจำนวน RAM ที่ใช้ในระหว่างกระบวนการสร้าง (ค่าเริ่มต้น 16G
)--image_subfolder "img_emb"
อนุญาตให้ระบุโฟลเดอร์ย่อยสำหรับการฝังรูปภาพซึ่งต่อเข้ากับตัวเลือก --embeddings_folder
(ค่าเริ่มต้น img_emb
)--text_subfolder "text_emb"
อนุญาตให้ระบุโฟลเดอร์ย่อยสำหรับการฝังข้อความซึ่งต่อเข้ากับตัวเลือก --embeddings_folder
(ค่าเริ่มต้น text_emb
)--copy_metadata True
ทำให้สามารถเลือกได้ว่าจะคัดลอกข้อมูลเมตาหรือไม่เมื่อสิ้นสุดกระบวนการ (ค่าเริ่มต้น True
)--nb_cores 8
อนุญาตให้ควบคุมจำนวนเธรด (ค่าเริ่มต้น None
ซึ่งจะใช้คอร์ทั้งหมด)ผลลัพธ์เป็นโฟลเดอร์ที่มี:
ต้องขอบคุณระบบออโต้เฟซและไฟส์ ทำให้สามารถขยายตัวอย่างได้หลายร้อยล้านตัวอย่างภายในเวลาไม่กี่ชั่วโมง
คุณอาจต้องการเลือกจำนวนหน่วยความจำที่จะใช้สำหรับดัชนีของคุณอย่างระมัดระวัง เพื่อเพิ่มการเรียกคืน knn ให้สูงสุด colab การเลือกดัชนี autofaiss สามารถช่วยพร้อมกับคำสั่ง autofaiss score_index
เพื่อตรวจสอบการเรียกคืนดัชนีของคุณ โดยทั่วไปดัชนีที่ใช้หน่วยความจำมากขึ้นจะได้รับการเรียกคืนที่ดีขึ้น และด้วยเหตุนี้จึงใกล้เคียงกับ knn ที่ไร้เดียงสา (ช้า) มากขึ้น
เมื่อคำนวณการฝังแล้ว คุณอาจต้องการกรองข้อมูลออกตามคำค้นหาเฉพาะ เพื่อให้คุณสามารถเรียกใช้ clip-retrieval filter --query "cat" --output_folder "cat/" --indice_folder "indice_folder"
มันจะคัดลอกรูปภาพที่ดีที่สุด 100 ภาพสำหรับแบบสอบถามนี้ในโฟลเดอร์เอาต์พุต การใช้ --num_results
หรือ --threshold
อาจเป็นประโยชน์ในการปรับแต่งตัวกรอง
ด้วยดัชนี knn ที่รวดเร็ว ทำให้สามารถรันแบบเรียลไทม์ (<10ms) สำหรับค่า K ขนาดใหญ่ (100000) และในหน่วยนาทีสำหรับค่า K ที่มีขนาดใหญ่มาก
สคริปต์นี้ใช้ได้กับชุดข้อมูลขนาดเล็ก สำหรับขนาดใหญ่ โปรดตรวจสอบ [notebook/simple_filter.ipynb]
Clip back เป็นแบ็กเอนด์บริการ knn ที่เรียบง่าย หากใช้ทั้งการแมปหน่วยความจำ hdf5 และ faiss จะใช้เฉพาะหน่วยความจำที่ใช้โดยคลิปซึ่งก็คือ 4GB
Run (output_folder คือเอาต์พุตของดัชนีคลิป)
echo ' {"example_index": "output_folder"} ' > indices_paths.json
clip-retrieval back --port 1234 --indices-paths indices_paths.json
ตัวเลือก:
--use_jit True
ใช้ jit สำหรับโมเดลคลิป--clip_model "ViT-B/32"
ให้เลือกรุ่นคลิปที่ต้องการใช้งาน คำนำหน้าด้วย "open_clip:"
เพื่อใช้โมเดล open_clip--enable_mclip_option True
โหลดโมเดล mclip ทำให้สามารถค้นหาในภาษาใดก็ได้--columns_to_return='["url", "image_path", "caption", "NSFW"]
ช่วยให้คุณสามารถระบุคอลัมน์ที่ควรดึงมาจากข้อมูลเมตาและส่งคืนโดยแบ็กเอนด์ มีประโยชน์ในการระบุน้อยลงในกรณีของการแคช hdf5 เพื่อเพิ่มความเร็วในการสืบค้น--enable_faiss_memory_mapping=True
เพื่อใช้ดัชนีที่มีการแมปหน่วยความจำได้ ซึ่งจะลดการใช้หน่วยความจำให้เป็นศูนย์--enable_hdf5 True
สามารถส่งผ่านเพื่อเปิดใช้งานการแคช hdf5 สำหรับข้อมูลเมตา การแคช HDF5 ทำให้สามารถใช้ข้อมูลเมตาได้โดยแทบไม่ต้องใช้หน่วยความจำเลย--use_arrow True
อนุญาตให้ใช้ลูกศรแทน hdf5 ควรใช้ควบคู่กับ clip_back_prepro สำหรับชุดข้อมูลที่มีขนาดใหญ่มาก (พันล้าน)--reorder_metadata_by_ivf_index True
ใช้ประโยชน์จากคุณสมบัติ data locality ของผลลัพธ์ของดัชนี knn ivf โดยจะสั่งการรวบรวมข้อมูลเมตาตามลำดับของคลัสเตอร์ IVF นั่นทำให้สามารถเรียกข้อมูลเมตาดาต้าได้เร็วขึ้นมาก เนื่องจากการอ่านจะเข้าถึงส่วนต่างๆ ของเมตาดาต้าที่เรียงตามลำดับเป็นส่วนใหญ่ แทนที่จะเข้าถึงส่วนที่ไม่ต่อเนื่องหลายๆ ส่วน ในทางปฏิบัตินั่นหมายถึงความสามารถในการดึงข้อมูล 1M รายการใน 1 วินาที ในขณะที่สามารถดึงข้อมูลได้เพียง 1,000 รายการใน 1 วินาทีโดยไม่ต้องใช้วิธีนี้ วิธีนี้จะเรียงลำดับข้อมูลเมตาโดยใช้ดัชนีรูปภาพแรก--provide_safety_model True
จะดาวน์โหลดและโหลดโมเดลความปลอดภัยโดยอัตโนมัติ คุณต้อง pip install autokeras
การพึ่งพาเพิ่มเติมเพื่อให้สิ่งนี้ทำงานได้--provide_violence_detector True
จะโหลดกระดาษตรวจจับความรุนแรง--provide_aesthetic_embeddings True
จะโหลดการฝังที่สวยงามและอนุญาตให้ผู้ใช้ทำให้การค้นหาย้ายไปยังจุดที่ดีกว่าของพื้นที่คลิปตัวเลือกเหล่านี้สามารถระบุได้ในไฟล์กำหนดค่าเพื่อให้มีตัวเลือกที่แตกต่างกันสำหรับแต่ละดัชนี ตัวอย่าง:
{
"laion5B" : {
"indice_folder" : " /mnt/laion5B/prepared_data " ,
"provide_safety_model" : true ,
"enable_faiss_memory_mapping" : true ,
"use_arrow" : true ,
"enable_hdf5" : false ,
"reorder_metadata_by_ivf_index" : false ,
"columns_to_return" : [ " url " , " caption " ],
"clip_model" : " ViT-L/14 " ,
"enable_mclip_option" : false
},
"laion_400m" : {
"indice_folder" : " /mnt/laion400M/index100 " ,
"provide_safety_model" : true ,
"enable_faiss_memory_mapping" : true ,
"enable_hdf5" : true ,
"use_arrow" : false ,
"reorder_metadata_by_ivf_index" : true ,
"enable_mclip_option" : true ,
"clip_model" : " ViT-B/32 "
}
}
hdf5 หรือ arrow caching เป็นความคิดที่ดีที่จะใช้หาก:
ณ จุดนี้ คุณมีเซิร์ฟเวอร์ขวดแบบธรรมดาที่ทำงานบนพอร์ต 1234 และสามารถตอบคำถามเหล่านี้ได้:
/indices-list
-> ส่งคืนรายการดัชนี/knn-service
ที่ใช้เป็นอินพุต: {
"text" : "a text query" ,
"image" : "a base64 image" ,
"image_url" : "http://some-url.com/a.jpg" ,
"modality" : "image" , // image or text index to use
"num_images" : 4 , // number of output images
"indice_name" : "example_index" ,
"num_result_ids" : 4 // optional, if specified fetch this number of results in total but only num_images with metadata
}
text, image และ image_url เป็นแบบเอกสิทธิ์เฉพาะบุคคลและส่งคืน:
[
{
"image" : "base 64 of an image" ,
"text" : "some result text" ,
"id" : 543
} ,
{
"image" : "base 64 of an image" ,
"text" : "some result text" ,
"id" : 782
}
]
แต่ละออบเจ็กต์อาจมีฟิลด์ url หากข้อมูลเมตาระบุไว้
id คือตำแหน่งของรายการในดัชนี อาจใช้ในการสืบค้นข้อมูลเมตาด้วยจุดสิ้นสุด /metadata:
{
"indice_name" : "example_index" ,
"ids" : [ 543 , 782 ]
}
ซึ่งส่งคืน:
{
"image" : "base 64 of an image" ,
"text" : "some result text"
// any other key available in the metadata and specified in columns_to_return cli option
}
อาร์กิวเมนต์ num_result_ids
ของ /knn-service
และ /metadata
สามารถใช้ร่วมกันเพื่อทำการสืบค้น knn ขนาดใหญ่ จากนั้นดึงข้อมูลเมตาเมื่อจำเป็นเท่านั้น มันสมเหตุสมผลแล้วที่ทำเช่นนั้น เนื่องจากการค้นหา knn นั้นมีประสิทธิภาพมาก เนื่องจากมีการอ้างอิงดัชนี knn IVF ในพื้นที่ที่แข็งแกร่ง ทำให้ทำ knn ด้วย K ขนาดใหญ่ได้อย่างรวดเร็ว ในขณะที่การนำข้อมูลเมตาไปใช้งานบนดิสก์ (hdf5) ในปัจจุบันไม่มีสิ่งนั้น คุณสมบัติจึงไม่สามารถจัดการเรียกไอเท็มสุ่มจำนวนมากได้อย่างรวดเร็ว โดยเฉพาะอย่างยิ่งสิ่งนี้สามารถใช้เพื่อใช้งานการเลื่อนแบบไม่มีที่สิ้นสุดในส่วนหน้า
ตามค่าเริ่มต้น แบ็กเอนด์จะแสดงส่วนหน้าด้วย ส่วนหน้านั้นจะกระทบกับแบ็กเอนด์นี้ตามค่าเริ่มต้น อย่างไรก็ตาม คุณอาจต้องระบุว่าสิ่งนี้เกิดขึ้นบน http หรือ https ในกรณีนี้ ให้ใช้ตัวเลือก --default_backend
เพื่อระบุ URL ของแบ็กเอนด์ --url_column
อนุญาตให้ระบุชื่อของ URL คอลัมน์สำหรับด้านหน้า
แบ็กเอนด์นี้มีเวลาแฝง 50ms หากใช้ดัชนีที่แมปและข้อมูลเมตา ปริมาณงานอยู่ที่ประมาณ 20 คิวรี/วินาที เพื่อให้มีปริมาณงานสูง จำเป็นต้องใช้เซิร์ฟเวอร์ grpc เช่นเดียวกับ GPU สำหรับการอนุมานคลิปที่รวดเร็ว การปิดตัวเลือกการแมปหน่วยความจำยังช่วยเพิ่มความเร็วให้กับคำขอได้ โดยมีค่าใช้จ่ายในการใช้งาน RAM สูง
แบ็กเอนด์นี้ยังเปิดเผยจุดสิ้นสุด prometheus /metrics
ตลอดจนข้อมูลสรุปที่มนุษย์อ่านได้ที่ /metrics-summary
สามารถใช้สิ่งนี้ (เป็นทางเลือก) เพื่อตั้งค่าแดชบอร์ด grafana สำหรับการตรวจสอบ:
จะเห็นได้บนแดชบอร์ดนี้ว่าส่วนที่ช้าที่สุดของการโทรคือการดึงรูปภาพตาม URL ในกรณีของการค้นหา URL ของรูปภาพ ซึ่งใช้เวลานานถึง 300ms สำหรับการสืบค้นข้อความหรือรูปภาพ เวลาแฝงจะอยู่ที่ประมาณ 50ms นี่คือตัวอย่างผลลัพธ์ในการสรุปเมตริก:
Among 20.0 calls to the knn end point with an average latency of 0.1889s per request, the step costs are (in order):
name description calls average proportion
0 download_time Time spent downloading an url 6 0.3215s 170.2%
1 metadata_get_time Time spent retrieving metadata 20 0.0415s 21.9%
2 knn_index_time Time spent doing a knn on the index 20 0.0267s 14.1%
3 image_clip_inference_time Time spent doing a image clip inference 6 0.0206s 10.9%
4 text_clip_inference_time Time spent doing a text clip inference 14 0.0186s 9.8%
5 image_prepro_time Time spent doing the image preprocessing 6 0.0097s 5.2%
6 text_prepro_time Time spent doing the text preprocessing 14 0.0020s 1.0%
หน้าคลิปเป็น UI ธรรมดาที่เชื่อมต่อกับคลิปหลังและแสดงผล คุณสามารถใช้มันได้ที่ UI การดึงคลิป
หรือคุณสามารถรันด้วยตัวเองด้วย:
npm install -g clip-retrieval-front
clip-retrieval-front 3005
คุณยังสามารถรันโดยใช้ clip-retrieval front
หรือด้านหลังจากแพ็คเกจ python
สำหรับการพัฒนา ให้ไปที่ด้านหน้าแล้วรัน npm install
จากนั้น npm start
ไม่ว่าจะในเครื่องหรือใน gitpod (ทำการ export PIP_USER=false
ที่นั่น)
ตั้งค่า virtualenv:
python3 -m venv .env
source .env/bin/activate
pip install -e .
เพื่อทำการทดสอบ:
pip install -r requirements-test.txt
แล้ว
make lint
make test
คุณสามารถใช้ make black
เพื่อฟอร์แมตโค้ดใหม่ได้
python -m pytest -x -s -v tests -k "test_runner"
เพื่อรันการทดสอบเฉพาะ
หากคุณต้องการใช้ส่วนหน้าผ่านแบ็กเอนด์หรือฟรอนต์เอนด์ของ python ให้เรียกใช้
cd front
npm install
npm run build
cd ..
pip install -e .
@misc{beaumont-2022-clip-retrieval,
author = {Romain Beaumont},
title = { clip retrieval : Easily compute clip embeddings and build a clip retrieval system with them},
year = {2022},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/rom1504/clip-retrieval}}
}