42 poin oleh xguru 2025-02-03 | 5 komentar | Bagikan ke WhatsApp
  • Mencoba sebuah proyek untuk melatih model gambar AI milik sendiri selama beberapa jam, agar bisa membuat foto yang tampak seperti diambil langsung sendiri
    • Contoh: menghasilkan foto diri sendiri dengan kostum "Superman"
  • Alasan mencobanya: terdengar menyenangkan, bagus untuk dimainkan bersama anak-anak, dan bisa belajar lebih jauh tentang model kustom/bagian AI yang lebih mendalam
  • 12–18 bulan lalu pekerjaan ini cukup rumit, tetapi sekarang sudah menjadi sangat mudah
  • Dalam waktu kurang dari 2 jam, model berhasil dibuat dan gambar yang diinginkan didapatkan; kuncinya adalah cepat memahami alat yang tepat

Memilih model/pola pelatihan

  • Elemen yang dibutuhkan
    • model dasar (base model)
    • teknik pelatihan/fine-tuning
    • dataset pelatihan (misalnya beberapa foto diri sendiri)
  • Banyak AI merekomendasikan Stable Diffusion, tetapi karena model Flux yang digunakan Pieter Levels dikatakan memberi performa lebih baik, maka dipilih Flux
    • Memang bukan model SOTA paling mutakhir, tetapi sudah cukup bagus
  • Untuk teknik pelatihan digunakan LoRA(Low-Rank Adaptation)
    • Bukan melatih ulang seluruh model, melainkan hanya melatih bagian yang terhubung ke "kata ajaib" tertentu
    • Contoh: mengajarkan kata yang tidak umum seperti "czue" ke model, lalu saat kata itu dipakai dalam prompt, model akan mencerminkan karakteristik dari dataset tersebut

Membuat set pelatihan

  • Perlu menyiapkan beberapa foto subjek yang akan dipelajari (sekitar 10–15 foto)
    • Semakin beragam ekspresi, latar belakang, pencahayaan, dan sudutnya, semakin baik
    • Sebaiknya hanya ada satu orang dalam satu foto
  • Saat pelatihan, dibutuhkan deskripsi teks, dan di dalamnya harus ada kata ajaib tersebut
    • Contoh: "a photo of czue on the beach, wearing a blue shirt"
  • Namun, alat-alat terbaru kini otomatis membuat caption gambar, jadi tidak perlu lagi menulis deskripsinya sendiri

Melatih model

  • Awalnya ingin melatih secara lokal, tetapi sulit karena GPU dan RAM tidak mencukupi
  • Kode sebenarnya bisa dijalankan langsung di server cloud GPU, tetapi akhirnya menggunakan Replicate
    • Ini adalah layanan penyewaan GPU, dan resep yang sudah jadi bisa langsung dipakai
  • Untuk kasus ini digunakan resep ostris/flux-dev-lora-trainer
    • Setelah membuat akun Replicate, perlu mengatur informasi penagihan
  • Parameter utama
    • input_images: foto pelatihan (zip)
    • trigger_word: kata ajaib, misalnya "czue"
    • hf_repo_id, hf_token: repositori/token Hugging Face
    • autocaption_prefix: frasa yang ditempel di depan caption yang dibuat otomatis (contoh: "A photo of czue,")

Menyimpan model di Hugging Face

  • Hugging Face adalah platform untuk menyimpan dan membagikan model
  • Replicate juga menyimpan model terlatih di suatu tempat, tetapi jika diunggah ke Hugging Face akan lebih mudah diintegrasikan dengan alat lain
  • Setelah membuat akun dan model, kirimkan hf_repo_id
  • Setelah pelatihan selesai, file besar bernama "lora.safetensors" (sekitar 180MB) akan diunggah ke Hugging Face

Menghasilkan gambar dengan model

  • Setelah pelatihan selesai, masuk ke proses inferensi, yaitu membuat gambar dengan memasukkan teks ke model
  • Ini juga bisa dicoba secara lokal, tetapi sekali lagi memanfaatkan Replicate
    • Di lucataco/flux-dev-lora cukup isi field hf_lora
      • Bisa berupa ID repositori Hugging Face publik atau tautan model hasil pelatihan yang diunggah ke Replicate
  • Contoh: jika memasukkan "a photo of czue surfing", akan diperoleh gambar diri sendiri sedang berselancar seperti berikut

Menjalankan model secara terprogram

  • Jika ingin mencoba berbagai prompt dan menyimpan hasil secara otomatis, cara pemanggilan API lebih praktis
  • Skrip Python di bawah ini ditulis sebagai contoh (kode lengkap ada di 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()  
    
  • Contoh penggunaan
    uv run main.py "a photo of czue, a 40 year old man, writing a blog post" \  
     --model="czue/me-v1" \  
     --count=4  
    

Hasil

  • Performa model naik-turun
    • Kadang cukup mirip dalam menangkap ciri seseorang, tetapi sesekali juga menghasilkan orang yang berbeda
    • Jika usia, gender, dan sebagainya dituliskan lebih spesifik di prompt, hasilnya menjadi lebih akurat
  • Misalnya, "a photo of czue, a 40 year old man, writing a blog post" menghasilkan gambar yang relatif konsisten
  • Sebaliknya, "a photo of czue writing a blog post" memberi hasil yang jauh lebih bervariasi
  • Jika memasukkan orang lain bersama subjek, muncul masalah seperti wajah yang bercampur
    • Saat mencoba membuat foto bersama Barack Obama, beberapa bagian wajah penulis tercermin pada Obama, dan sebaliknya juga begitu
  • Meski begitu, ini tetap cukup menyenangkan dan berguna, sehingga bisa mencoba banyak hal bersama anak-anak

Biaya

  • Tidak gratis, tetapi juga tidak terlalu mahal
  • Melatih 3 model untuk diri sendiri dan anak-anak, masing-masing sekitar ~$2.50
  • Pembuatan gambar sekitar $0.03 per lembar, jadi menghasilkan 30 gambar pun hanya sekitar $1
  • Seluruh eksperimen menghabiskan kurang dari $10, dan biayanya terasa lebih ringan dari perkiraan sehingga cukup memuaskan
  • Jika tertarik pada pelatihan model AI dan pembuatan gambar, ini lebih mudah dicoba daripada yang dibayangkan, jadi layak untuk dicoba

5 komentar

 
cladio 2025-02-04

Saya iseng mencobanya, dan ternyata memang sangat mudah.
(https://www.youtube.com/watch?v=sNpQ9ULDMoo)
Saya tertawa lama sambil mencoba membuat ini-itu...

 
botplaysdice 2025-02-04

Pada akhirnya, bukankah sebelum kita mati kita akan mencoba mengunggah model yang dilatih agar seperti diri kita ke jaringan, lalu mati? Seperti naluri untuk bertahan hidup... meski itu bukan 'aku'.

 
sollscherr 2025-02-03

Melihat teknologinya membuat saya teringat pada sebuah novel, jadi saya perkenalkan. Ini adalah cerpen berjudul 'Chronos' yang dimuat dalam kumpulan cerpen Bisutbangul Pong karya novelis Lee Yu-ri. Cerita itu membahas AI yang menyimpan dan mempelajari data seseorang, yaitu data dirinya sendiri. Seperti kucing di komentar itu. Seorang ibu yang menderita demensia menggunakannya sebelum gejalanya menjadi lebih parah. Lalu anak-anaknya pun mengalami konflik. Mereka merasa terhibur, tetapi juga diliputi rasa bersalah. Jika Anda tertarik pada teknologi ini, atau pada kisah kucing itu, cobalah membacanya.

 
xguru 2025-02-03

Salah satu komentar di Hacker News cukup menarik perhatian

  • Saya pernah mencoba melakukan ini untuk kucing saya yang sudah mati dan sangat saya sayangi. Saya cukup suka dengan hasilnya, tetapi pada suatu titik saya tiba-tiba merinding memikirkan apa yang sedang saya lakukan
    • Sepertinya ini bisa menjadi bisnis besar. Saya mungkin telah mengirim ratusan ribu email, pesan teks, chat, dan sebagainya; sangat mungkin untuk melatih korpus komunikasi orang yang kita cintai agar kita bisa mengobrol dengan 'mereka' bahkan setelah mereka meninggal dunia
    • Setelah ayah saya meninggal, saya melakukan ini dengan suara ayah saya, lalu menyiapkan fungsi agar bisa berbicara dengan asisten yang didukung LLM dan mendapat respons dengan suara serta cara bicara ayah saya. Itu adalah masa ketika saya menghadapi dan berduka dengan cara yang sangat ganjil, dan pada akhirnya saya merasa apa yang saya lakukan benar-benar aneh
    • Ini mirip dengan episode Black Mirror "Be Right Back"

Ada juga komentar yang informatif

  • Untuk Flux, text encoder memiliki jauh lebih banyak kemampuan, dan Anda bisa menulis prompt dengan kalimat yang jauh lebih bermakna dan komprehensif
    • Karena itu, frasa singkat lama yang dipisahkan koma seperti yang biasa terlihat di Stable Diffusion bisa dikurangi
  • Selain itu, hal yang sama juga perlu dilakukan pada gambar pelatihan. Sebaiknya beri caption pada semua hal yang tidak ingin diingat model sebagai 'saya' (apa yang sedang dilakukan, pakaian yang dikenakan, orang yang bersama, aksesori, dan sebagainya)
 
humblebee 2025-02-03

"Teknologi yang cukup maju tidak dapat dibedakan dari sihir - Arthur C. Clarke"

Baru dua tahun lalu hal seperti ini terasa seperti sesuatu yang hanya bisa dilihat di film fiksi ilmiah, dan sekarang kita benar-benar sedang menyaksikan momen ketika sihir menjadi kenyataan secara real time 😳