CLIP

CLIP एक मशीन लर्निंग मॉडल है जो छवियों और पाठ के लिए एम्बेडिंग उत्पन्न करने में सक्षम है। इन एम्बेडिंग्स का उपयोग जीरो शॉट क्लासिफिकेशन, सेमांटिक इमेज सर्च, और कई अन्य उपयोग मामलों के लिए किया जा सकता है। Roboflow Inference Server पर CLIP का उपयोग करने के लिए तीन मार्ग उपलब्ध हैं:

  • embed_image: छवि एम्बेडिंग की गणना के लिए उपयोग किया जाता है

  • embed_text: पाठ एम्बेडिंग की गणना के लिए उपयोग किया जाता है

  • compare: पाठ और छवियों की एम्बेडिंग की गणना और तुलना करने के लिए उपयोग किया जाता है

छवि एम्बेड करें

किसी छवि को एम्बेड करना उस छवि की जानकारी को एक अधिक प्रबंधनीय आकार में संपीड़ित करने जैसा है। जब हम एक छवि को एम्बेड करते हैं, तो हम छवि को इनपुट के रूप में लेते हैं जिसमें दसियों हज़ार पिक्सल होते हैं और हम उसे कुछ सौ संख्याओं में परिष्कृत करते हैं, जिन्हें एम्बेडिंग कहा जाता है। ये एम्बेडिंग्स मानव आंख के लिए विशेष रूप से अर्थपूर्ण होती हैं, लेकिन जब अन्य एम्बेडिंग्स से तुलना की जाती है, तो वे बहुत उपयोगी साबित हो सकती हैं।

CLIP और Roboflow Inference Server का उपयोग करके छवि एम्बेडिंग उत्पन्न करने के लिए:

#अनुरोध पेलोड परिभाषित करें
infer_clip_payload = {
    #छवियां url के रूप में या base64 एन्कोडेड स्ट्रिंग्स के रूप में प्रदान की जा सकती हैं
    "image": {
        # "type" भी "base64" हो सकता है
        "type": "url",
        # "value" छवि डेटा की base64 एन्कोडेड स्ट्रिंग भी हो सकता है
        "value": "https://images.freeimages.com/images/large-previews/36c/raccoons-in-the-wild-4-1624830.jpg",
    },
}

# इनफेरेंस सर्वर url परिभाषित करें (localhost:9001, infer.roboflow.com, आदि)
base_url = "https://infer.roboflow.com"

# अपना Roboflow API Key परिभाषित करें
api_key = <यहां अपना API KEY डालें>

res = requests.post(
    f"{base_url}/clip/embed_image?api_key={api_key}",
    json=infer_clip_payload,
)

embeddings = res.json()['embeddings']

print(embeddings)
[[-0.4853120744228363, ... ]]

एक अनुरोध में कई छवियों को एम्बेड किया जा सकता है:

#अनुरोध पेलोड परिभाषित करें
infer_clip_payload = {
    #छवियां url के रूप में या base64 एन्कोडेड स्ट्रिंग्स के रूप में प्रदान की जा सकती हैं
    "image": [
        {
            "type": "url",
            "value": "https://images.freeimages.com/images/large-previews/36c/raccoons-in-the-wild-4-1624830.jpg",
        },
        {
            "type": "url",
            "value": "https://images.freeimages.com/images/large-previews/36c/raccoons-in-the-wild-4-1624830.jpg",
        }
    ],
}

res = requests.post(
    f"{base_url}/clip/embed_image?api_key={api_key}",
    json=infer_clip_payload,
)

पाठ एम्बेड करें

CLIP छवियों की तरह ही पाठ के लिए भी एम्बेडिंग उत्पन्न कर सकता है।

#अनुरोध पेलोड परिभाषित करें
infer_clip_payload = {
    "text": "the quick brown fox jumped over the lazy dog",
}

res = requests.post(
    f"{base_url}/clip/embed_text?api_key={api_key}",
    json=infer_clip_payload,
)

embeddings = res.json()['embeddings']

print(embeddings)
[[0.56842650744228363, ... ]]

कई पाठ ब्लॉकों को एक ही अनुरोध में बैच किया जा सकता है:

#अनुरोध पेलोड परिभाषित करें
infer_clip_payload = {
    "text": [
        "the quick brown fox jumped over the lazy dog",
        "how vexingly quick daft zebras jump"
    ]
}

res = requests.post(
    f"{base_url}/clip/embed_text?api_key={api_key}",
    json=infer_clip_payload,
)

तुलना करें

CLIP का वास्तविक मूल्य तब महसूस होता है जब एम्बेडिंग्स की तुलना की जाती है। तुलना दो एम्बेडिंग्स के बीच गणितीय दूरी है, जो कोसाइन समानता का उपयोग करके गणना की जाती है। इस दूरी को समानता स्कोर के रूप में सोचा जा सकता है। यदि दो एम्बेडिंग्स की कोसाइन समानता 1 के पास है, तो वे समान हैं।

तुलना करते समय, आप एक प्रॉम्प्ट और एक या एक से अधिक विषय परिभाषित करते हैं। चूंकि आप पाठ या छवियों के किसी भी संयोजन की तुलना कर सकते हैं, आपको प्रॉम्प्ट प्रकार और विषय प्रकार भी परिभाषित करना होगा।

#अनुरोध पेलोड परिभाषित करें
infer_clip_payload = {
    "prompt": {
        "type": "url",
        "value": "https://images.freeimages.com/images/large-previews/36c/raccoons-in-the-wild-4-1624830.jpg",
    },
    "prompt_type": "image",
    "subject": "A very cute raccoon",
    "subject_type": "text",
}

res = requests.post(
    f"{base_url}/clip/compare?api_key={api_key}",
    json=infer_clip_payload,
)

similarity = res.json()['similarity']

print(similarity)
[0.30969720949239016]

कई प्रॉम्प्ट (एक अनुरोध में आठ तक) सूची के रूप में पास किए जा सकते हैं:

infer_clip_payload = {
    "subject": {
        "type": "url",
        "value": "https://i.imgur.com/Q6lDy8B.jpg",
    },
    "subject_type": "image",
    "prompt": [
        "A very cute raccoon",
        "A large dog",
        "A black cate",
    ],
    "prompt_type": "text",
}
[0.80559720949239016, 0.20329720949239016, 0.505559720949239016]

Last updated

Was this helpful?