42 पॉइंट द्वारा xguru 2025-02-03 | 5 टिप्पणियां | WhatsApp पर शेयर करें
  • कुछ घंटों में अपना खुद का AI image model train करके ऐसी तस्वीरें बनाने का प्रोजेक्ट आज़माया, जो मानो खुद खींची गई हों
    • उदाहरण: "Superman" की वेशभूषा में मेरी तस्वीर बनाना
  • इसे आज़माने की वजह: यह मज़ेदार लगा, बच्चों के साथ खेलने के लिए अच्छा था, और custom model/advanced AI के बारे में थोड़ा और सीखने का मौका मिला
  • 12~18 महीने पहले यह काम काफ़ी जटिल था, लेकिन अब बहुत आसान हो गया है
  • 2 घंटे के भीतर model बनाकर मनचाही image मिल गई, और असली बात सही tools को जल्दी समझ लेना था

model/train pattern चुनना

  • ज़रूरी चीज़ें
    • base model
    • training/fine-tuning technique
    • training dataset (जैसे अपनी कुछ तस्वीरें)
  • कई AI Stable Diffusion की सलाह देते हैं, लेकिन Pieter Levels द्वारा इस्तेमाल किया गया Flux model बेहतर performance देता है, ऐसा कहा गया था, इसलिए Flux चुना
    • यह बिल्कुल सबसे नया SOTA model नहीं है, लेकिन काफ़ी अच्छा है
  • training technique के रूप में LoRA(Low-Rank Adaptation) का इस्तेमाल किया
    • पूरे model को दोबारा train करने के बजाय, सिर्फ़ किसी खास "magic word" से जुड़े हिस्से को train किया जाता है
    • उदाहरण: model को "czue" जैसा कम इस्तेमाल होने वाला शब्द सिखाया जाए, तो prompt में वह शब्द देने पर dataset की विशेषताएँ झलकती हैं

training set बनाना

  • जिस व्यक्ति/विषय को सिखाना है उसकी कई तस्वीरें तैयार करनी होती हैं (लगभग 10~15)
    • expression, background, lighting, angle आदि जितने विविध हों, उतना बेहतर
    • एक तस्वीर में एक ही व्यक्ति होना बेहतर है
  • training के समय text description चाहिए होता है, और उसमें magic word शामिल होना चाहिए
    • उदाहरण: "a photo of czue on the beach, wearing a blue shirt"
  • लेकिन हाल के tools अपने आप image caption बना देते हैं, इसलिए description हाथ से लिखने की ज़रूरत नहीं होती

model training

  • शुरुआत में सोचा था कि local पर training करूँ, लेकिन GPU और RAM की कमी से मुश्किल हुई
  • GPU cloud server पर खुद code चलाया जा सकता है, लेकिन आख़िरकार Replicate का इस्तेमाल किया
    • यह GPU rental service है, और पहले से बने recipe तुरंत इस्तेमाल किए जा सकते हैं
  • इस मामले में ostris/flux-dev-lora-trainer recipe इस्तेमाल की गई
    • Replicate account बनाने के बाद billing information सेट करनी होती है
  • मुख्य parameters
    • input_images: training photos (zip)
    • trigger_word: magic word, उदाहरण "czue"
    • hf_repo_id, hf_token: Hugging Face repository/token
    • autocaption_prefix: auto-generated caption के आगे लगने वाला वाक्यांश (जैसे "A photo of czue,")

model को Hugging Face पर save करना

  • Hugging Face model को store और share करने का platform है
  • Replicate भी trained model को कहीं save करता है, लेकिन Hugging Face पर डालने से दूसरे tools के साथ integration आसान हो जाता है
  • account और model बनाने के बाद hf_repo_id दिया जाता है
    • access token settings/tokens से जारी किया जा सकता है
  • training पूरी होने पर "lora.safetensors" नाम की बड़ी file (लगभग 180MB) Hugging Face पर upload हो जाती है

model से image generate करना

  • training पूरी होने के बाद model में text देकर image बनाने की inference प्रक्रिया की जाती है
  • इसे local पर भी किया जा सकता है, लेकिन यहाँ फिर से Replicate का इस्तेमाल किया गया
    • lucataco/flux-dev-lora में सिर्फ़ hf_lora field सेट करनी होती है
      • public Hugging Face repository ID या Replicate पर upload किए गए trained model का link
  • उदाहरण: "a photo of czue surfing" डालने पर अपने surfing करते हुए जैसी image मिलती है

programmatically model चलाना

  • अलग-अलग prompts आज़माने और results को अपने आप save करने के लिए API call वाला तरीका सुविधाजनक है
  • नीचे उदाहरण के तौर पर Python script लिखी गई है (पूरा code Github में है)
    # /// script  
    # requires-python = ">=3.12"  
    # dependencies = [  
    #     "replicate",  
    # ]  
    # ///  
    import argparse  
    import os  
    import re  
    import replicate  
    import uuid  
    
    DEFAULT_MODEL = "czue/me-v1"  
    DEFAULT_COUNT = 1  
    
    def get_input(prompt, model=DEFAULT_MODEL, count=DEFAULT_COUNT):  
        return {  
            "prompt": prompt,  
            "hf_lora": model,  
            "num_outputs": count  
        }  
    
    def main():  
        parser = argparse.ArgumentParser()  
        parser.add_argument("prompt", help="Prompt for the photo")  
        parser.add_argument("--model", default=DEFAULT_MODEL,  
                          help="Model to use (default: %(default)s)")  
        parser.add_argument("--count", default=DEFAULT_COUNT,  
                          help="Number of photos to generate (default: %(default)s)", type=int)  
        args = parser.parse_args()  
    
        input = get_input(args.prompt, args.model, args.count)  
        output = replicate.run(  
            "lucataco/flux-dev-lora:091495765fa5ef2725a175a57b276ec30dc9d39c22d30410f2ede68a3eab66b3",  
            input=input  
        )  
    
        output_dir = "output"  
        os.makedirs(output_dir, exist_ok=True)  
    
        prompt_slug = "-".join(args.prompt.split(" ")[-3:])  
        prompt_slug = re.sub(r'[^a-zA-Z0-9\-]', '', prompt_slug).lower()  
    
        for index, item in enumerate(output):  
            file_id = uuid.uuid4().hex[:5]  
            output_path = os.path.join(output_dir, f"{prompt_slug}-{file_id}.webp")  
            with open(output_path, "wb") as file:  
                file.write(item.read())  
                print(f"Saved photo {output_path}")  
    
    if __name__ == "__main__":  
        main()  
    
  • इस्तेमाल का उदाहरण
    uv run main.py "a photo of czue, a 40 year old man, writing a blog post" \  
     --model="czue/me-v1" \  
     --count=4  
    

नतीजे

  • model की performance उतार-चढ़ाव वाली रही
    • कभी यह व्यक्ति की विशेषताओं को काफ़ी मिलते-जुलते तरीके से पकड़ लेता है, लेकिन कभी पूरी तरह अलग इंसान बना देता है
    • prompt में उम्र, gender जैसी बातें और स्पष्ट लिखने पर accuracy थोड़ी बेहतर हुई
  • उदाहरण के लिए, "a photo of czue, a 40 year old man, writing a blog post" अपेक्षाकृत अधिक consistent images बनाता है
  • वहीं "a photo of czue writing a blog post" के results काफ़ी बिखरे हुए थे
  • किसी दूसरे व्यक्ति को साथ में डालने पर चेहरों के मिल जाने जैसी समस्या आई
    • Barack Obama के साथ तस्वीर बनाने की कोशिश की, तो मेरे चेहरे के कुछ हिस्से Obama की तरफ़ चले गए और उल्टा भी हुआ
  • फिर भी यह काफ़ी मज़ेदार और उपयोगी रहा, और बच्चों के साथ तरह-तरह के प्रयोग किए जा सके

लागत

  • यह मुफ़्त नहीं है, लेकिन बहुत महँगा भी नहीं
  • मेरे और बच्चों के लिए कुल 3 models train किए, और हर एक पर लगभग ~$2.50 खर्च हुआ
  • image generation की लागत लगभग $0.03 प्रति image थी, इसलिए 30 images बनाने पर भी करीब $1 ही लगा
  • पूरे experiment में $10 से कम खर्च हुआ, और उम्मीद से कम लागत होने पर संतोष हुआ
  • अगर AI model training और image generation में रुचि है, तो इसे सोचे से कहीं ज़्यादा आसानी से आज़माया जा सकता है

5 टिप्पणियां

 
cladio 2025-02-04

मज़े के लिए इसे फ़ॉलो करके देखा, और यह सच में बहुत आसान है।
(https://www.youtube.com/watch?v=sNpQ9ULDMoo)
यह-वह बनाकर मैं काफ़ी देर तक हँसता रहा...

 
botplaysdice 2025-02-04

आखिरकार, क्या हम मरने से पहले अपने जैसे प्रशिक्षित मॉडल को नेटवर्क पर अपलोड करके मरना नहीं चाहेंगे? जैसे कोई survival instinct... हालांकि वह 'मैं' नहीं होगा।

 
sollscherr 2025-02-03

तकनीक को देखकर मुझे एक उपन्यास याद आया, इसलिए परिचय दे रहा हूँ। यह लेखिका Lee Yuri के कहानी-संग्रह Bisutbangul Pong में शामिल Chronos नाम की एक लघुकथा है। यह लोगों, यानी अपने डेटा को स्टोर और सीखने वाले AI, के बारे में है। बिल्कुल उस टिप्पणी वाली बिल्ली की तरह। डिमेंशिया से पीड़ित माँ, लक्षण और गंभीर होने से पहले, उसका इस्तेमाल करती है। फिर बच्चों के बीच टकराव होता है। उन्हें सांत्वना भी मिलती है और अपराधबोध भी महसूस होता है। अगर आपको ऊपर की तकनीक में, और उस बिल्ली की कहानी में दिलचस्पी है, तो इसे एक बार पढ़िए।

 
xguru 2025-02-03

एक Hacker News टिप्पणी ध्यान खींचती है

  • मैंने अपनी प्यारी, अब मर चुकी बिल्ली के लिए ऐसा करके देखा था। नतीजा मुझे पसंद आया, लेकिन एक पल पर अचानक मुझे अपने किए जा रहे काम को लेकर सिहरन महसूस हुई
    • यह बड़ा बिज़नेस बन सकता है। मैंने शायद सैकड़ों हज़ार ईमेल, टेक्स्ट, चैट आदि भेजे होंगे, इसलिए किसी प्रिय व्यक्ति के कम्युनिकेशन corpus को ट्रेन करके उनके इस दुनिया से जाने के बाद भी 'उनसे' चैट कर पाना पूरी तरह संभव है
    • पिता के गुजरने के बाद मैंने उनकी आवाज़ में यह किया, और LLM-सपोर्टेड assistant से बात करने की सुविधा सेट की ताकि वह मेरे पिता की आवाज़ और अंदाज़ में जवाब दे। वह समय बहुत अजीब तरह से संभलने और शोक में डूबे रहने का था, और आखिरकार मुझे लगा कि मैं जो कर रहा था वह सच में बहुत अजीब था
    • यह Black Mirror के "Be Right Back" एपिसोड जैसा है

एक जानकारीपूर्ण टिप्पणी भी है

  • Flux के मामले में, text encoder में कहीं ज़्यादा क्षमताएँ हैं और आप अधिक अर्थपूर्ण और व्यापक वाक्यों के साथ prompt कर सकते हैं
    • इसलिए Stable Diffusion में दिखने वाले पुराने comma-separated छोटे-छोटे phrases को कम किया जा सकता है
  • साथ ही training images पर भी वही काम करना चाहिए। जिन चीज़ों को आप नहीं चाहते कि मॉडल उन्हें 'मैं' के हिस्से के रूप में याद रखे—जैसे आप क्या कर रहे हैं, क्या पहन रहे हैं, साथ में कौन है, accessories वगैरह—उन पर caption लगाना अच्छा रहता है
 
humblebee 2025-02-03

"पर्याप्त रूप से विकसित विज्ञान और तकनीक जादू से अलग नहीं की जा सकती - Arthur C. Clarke"

सिर्फ 2 साल पहले तक यह ऐसी चीज़ लगती थी जो केवल SF फिल्मों में दिखे, लेकिन अब हम सचमुच उस पल को रियल-टाइम में देख रहे हैं जब जादू हकीकत बन रहा है 😳