42 puan yazan xguru 2025-02-03 | 5 yorum | WhatsApp'ta paylaş
  • Birkaç saat içinde yalnızca bana özel bir yapay zeka görüntü modeli eğitip, sanki gerçekten benim çekilmiş fotoğraflarım gibi görseller üretmeye yönelik bir proje denedim
    • Örnek: "Süperman" kostümü giymiş benim fotoğrafımı üretmek
  • Deneme nedenim: eğlenceli görünüyordu, çocuklarla birlikte oynamak için uygundu ve özel model/gelişmiş yapay zeka tarafında biraz daha fazla şey öğrenebiliyordum
  • 12-18 ay önce bu iş oldukça karmaşıktı, ama artık çok kolay hale gelmiş
  • 2 saatten kısa sürede modeli oluşturup istediğim görselleri elde ettim; işin püf noktası doğru araçları hızlıca belirlemekti

Model/eğitim deseni seçimi

  • Gerekli bileşenler
    • temel model (base model)
    • eğitim/fine-tuning tekniği
    • eğitim veri seti (kendinizin birkaç fotoğrafı gibi)
  • Pek çok yapay zeka aracı Stable Diffusion önerse de, Pieter Levels'ın kullandığı Flux modelinin daha iyi performans verdiği söylendiği için Flux'u seçtim
    • Tam anlamıyla en yeni SOTA model değil, ama fazlasıyla iyi
  • Eğitim tekniği olarak LoRA(Low-Rank Adaptation) kullandım
    • Tüm modeli yeniden eğitmek yerine, yalnızca belirli bir "sihirli kelime" ile bağlantılı kısmı eğitiyor
    • Örnek: modele "czue" gibi nadir bir kelimeyi öğretip, prompt içinde bu kelime kullanıldığında veri setinin özelliklerini yansıtmasını sağlamak

Eğitim seti oluşturma

  • Eğitilecek öznenin birkaç fotoğrafını (yaklaşık 10-15 adet) hazırlamak gerekiyor
    • Yüz ifadesi, arka plan, ışık, açı gibi unsurlar ne kadar çeşitli olursa o kadar iyi
    • Bir fotoğrafta yalnızca bir kişi olması tercih edilir
  • Eğitim sırasında metinsel açıklama gerekir ve bu açıklamada sihirli kelime yer almalıdır
    • Örnek: "a photo of czue on the beach, wearing a blue shirt"
  • Ancak son dönemdeki araçlar görüntü açıklamalarını otomatik oluşturduğu için bunları elle yazmaya gerek kalmıyor

Model eğitimi

  • Başta modeli yerelde eğitmeyi düşündüm ama GPU ve RAM yetersizliği nedeniyle zor oldu
  • GPU bulut sunucusunda kodu doğrudan çalıştırmak mümkün olsa da, sonunda Replicate'i kullandım
    • Bu bir GPU kiralama hizmeti ve hazır tarifleri doğrudan kullanabiliyorsunuz
  • Bu örnekte ostris/flux-dev-lora-trainer tarifini kullandım
    • Replicate hesabı oluşturduktan sonra faturalama bilgilerini ayarlamak gerekiyor
  • Başlıca parametreler
    • input_images: eğitim fotoğrafları (zip)
    • trigger_word: sihirli kelime, ör. "czue"
    • hf_repo_id, hf_token: Hugging Face repository/token
    • autocaption_prefix: otomatik üretilen açıklamaların başına eklenecek ifade (ör. "A photo of czue,")

Modeli Hugging Face'e kaydetme

  • Hugging Face, modelleri saklama ve paylaşma platformudur
  • Replicate de eğitilmiş modeli bir yerde saklıyor, ama Hugging Face'e yüklerseniz diğer araçlarla entegrasyon daha kolay oluyor
  • Hesabı ve modeli oluşturduktan sonra hf_repo_id değerini veriyorsunuz
  • Eğitim tamamlandığında "lora.safetensors" adlı büyük bir dosya (yaklaşık 180MB) Hugging Face'e yükleniyor

Modelle görsel üretme

  • Eğitim tamamlandıktan sonra, modele metin verip görsel üreten inference sürecine geçiliyor
  • Bunu yerelde de deneyebilirdim ama yine Replicate kullandım
    • lucataco/flux-dev-lora üzerinde yalnızca hf_lora alanını ayarlamak yeterli
      • public Hugging Face repository ID'si veya Replicate'e yüklenmiş eğitilmiş model bağlantısı
  • Örneğin "a photo of czue surfing" yazarsanız, aşağıdakine benzer şekilde sörf yapan kendi görselinizi elde edersiniz

Modeli programatik olarak çalıştırma

  • Farklı prompt'ları denemek ve sonuçları otomatik kaydetmek istiyorsanız API çağrısı yöntemi daha pratiktir
  • Aşağıdaki Python betiğini örnek olarak hazırladım (tam kod Github'da)
    # /// 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()  
    
  • Örnek kullanım
    uv run main.py "a photo of czue, a 40 year old man, writing a blog post" \  
     --model="czue/me-v1" \  
     --count=4  
    

Sonuçlar

  • Model performansı dalgalı
    • Kişinin özelliklerini zaman zaman oldukça benzer yakalıyor, ama bazen tamamen başka birini de üretebiliyor
    • Prompt içine belirli yaş, cinsiyet gibi bilgileri eklemek doğruluğu biraz artırıyor
  • Örneğin "a photo of czue, a 40 year old man, writing a blog post" görece tutarlı görseller üretiyor
  • Buna karşılık "a photo of czue writing a blog post" çok daha dağınık sonuçlar verdi
  • Başka bir kişiyi birlikte eklediğinizde yüzlerin karışması gibi sorunlar yaşanabiliyor
    • Barack Obama ile birlikte bir fotoğraf üretmeye çalıştığımda, yüzümün bazı kısımları Obama'ya yansıyor ve tersi de oluyordu
  • Yine de yeterince eğlenceli ve kullanışlıydı; çocuklarla birlikte farklı denemeler yapabildik

Maliyet

  • Ücretsiz değil ama çok pahalı da değil
  • Benim ve çocukların toplamında 3 model eğittim; her biri yaklaşık ~$2.50 tuttu
  • Görsel üretimi görsel başına yaklaşık $0.03, yani 30 görsel üretseniz bile yaklaşık $1 ediyor
  • Tüm deney için $10'dan az harcadım ve maliyetin beklediğimden düşük olmasından memnun kaldım
  • Yapay zeka modeli eğitimi ve görsel üretimi ilginizi çekiyorsa, düşündüğünüzden daha kolay denenebildiği için denemeye değer

5 yorum

 
cladio 2025-02-04

Eğlencesine ben de denedim; gerçekten çok kolaymış.
(https://www.youtube.com/watch?v=sNpQ9ULDMoo)
Bir şeyler yapıp denerken epey güldüm...

 
botplaysdice 2025-02-04

Sonunda hepimiz, ölmeden önce benim gibi eğitilmiş bir modeli ağa yükleyip sonra ölmeye çalışmayacak mıyız? Hayatta kalma içgüdüsü gibi... O "ben" değil ama.

 
sollscherr 2025-02-03

Teknolojiyi görünce aklıma bir roman geldi, onu tanıtmak istedim. Yazar Lee Yuri’nin yayımladığı Bisutbangul Pong adlı öykü kitabında yer alan Chronos adlı kısa öykü; bir insanı, yani kendi verilerini depolayıp öğrenen bir yapay zekayı konu alıyor. Tıpkı o yorumdaki kedi gibi. Demansa yakalanan anne, belirtiler daha da ağırlaşmadan önce onu kullanıyor. Sonra çocukları da çatışma yaşıyor. Hem teselli buluyorlar hem de suçluluk hissediyorlar. Bu teknolojiye ve o kedinin hikâyesine ilgi duyan biriyseniz, bir kez okuyun derim.

 
xguru 2025-02-03

Bir Hacker News yorumu dikkat çekiyor

  • Sevdiğim, ölmüş kedim için bunu denedim. Sonuç hoşuma gitmişti ama bir noktada birden yaptığım şey yüzünden ürperdim
    • Büyük bir iş olacağını düşünüyorum. Muhtemelen yüz binlerce e-posta, mesaj ve sohbet göndermişimdir; sevdiğiniz birinin iletişim külliyatını eğitip onlar öldükten sonra bile 'onlarla' sohbet edebilmek fazlasıyla mümkün
    • Babam öldükten sonra bunu onun sesiyle yaptım ve LLM destekli bir asistanla konuşabilmem için, babamın sesiyle ve onun tarzında yanıt verecek şekilde ayarladım. Başa çıkmanın ve yas tutmanın çok tuhaf bir dönemiydi; sonunda yaptığım şeyin gerçekten çok tuhaf olduğunu düşünmeye başladım
    • Bu, Black Mirror'daki "Be Right Back" bölümüyle benzer

Bilgilendirici bir yorum da var

  • Flux'ta metin kodlayıcısı çok daha fazla yeteneğe sahip ve daha anlamlı, daha kapsamlı cümlelerle prompt yazabiliyorsunuz
    • Bu yüzden Stable Diffusion'da görülen, virgülle ayrılmış kısa kalıp ifadeleri azaltabilirsiniz
  • Aynı işlemi eğitim görsellerinde de yapmanız gerekir. Modelin sizi olarak hatırlamasını istemediğiniz her şeye (ne yaptığınız, ne giydiğiniz, yanınızdaki kişiler, aksesuarlar vb.) açıklama eklemek iyi olur
 
humblebee 2025-02-03

"Yeterince gelişmiş bilim ve teknoloji sihirden ayırt edilemez - Arthur C. Clarke"

Daha sadece 2 yıl önce bile ancak bir SF filminde görebileceğimiz bir şeydi; şimdi ise sihrin gerçeğe dönüştüğü ana gerçekten de canlı canlı tanıklık ediyoruz 😳