अपने बारे में AI image model को खुद train करने का तरीका
(coryzue.com)- कुछ घंटों में अपना खुद का 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
- lucataco/flux-dev-lora में सिर्फ़ hf_lora field सेट करनी होती है
- उदाहरण: "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 टिप्पणियां
मज़े के लिए इसे फ़ॉलो करके देखा, और यह सच में बहुत आसान है।
(https://www.youtube.com/watch?v=sNpQ9ULDMoo)
यह-वह बनाकर मैं काफ़ी देर तक हँसता रहा...
आखिरकार, क्या हम मरने से पहले अपने जैसे प्रशिक्षित मॉडल को नेटवर्क पर अपलोड करके मरना नहीं चाहेंगे? जैसे कोई survival instinct... हालांकि वह 'मैं' नहीं होगा।
तकनीक को देखकर मुझे एक उपन्यास याद आया, इसलिए परिचय दे रहा हूँ। यह लेखिका Lee Yuri के कहानी-संग्रह Bisutbangul Pong में शामिल
Chronosनाम की एक लघुकथा है। यह लोगों, यानी अपने डेटा को स्टोर और सीखने वाले AI, के बारे में है। बिल्कुल उस टिप्पणी वाली बिल्ली की तरह। डिमेंशिया से पीड़ित माँ, लक्षण और गंभीर होने से पहले, उसका इस्तेमाल करती है। फिर बच्चों के बीच टकराव होता है। उन्हें सांत्वना भी मिलती है और अपराधबोध भी महसूस होता है। अगर आपको ऊपर की तकनीक में, और उस बिल्ली की कहानी में दिलचस्पी है, तो इसे एक बार पढ़िए।एक Hacker News टिप्पणी ध्यान खींचती है
एक जानकारीपूर्ण टिप्पणी भी है
"पर्याप्त रूप से विकसित विज्ञान और तकनीक जादू से अलग नहीं की जा सकती - Arthur C. Clarke"
सिर्फ 2 साल पहले तक यह ऐसी चीज़ लगती थी जो केवल SF फिल्मों में दिखे, लेकिन अब हम सचमुच उस पल को रियल-टाइम में देख रहे हैं जब जादू हकीकत बन रहा है 😳