- 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- Token akses bisa diterbitkan di settings/tokens
- 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
- Di lucataco/flux-dev-lora cukup isi field hf_lora
- 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
Saya iseng mencobanya, dan ternyata memang sangat mudah.
(https://www.youtube.com/watch?v=sNpQ9ULDMoo)
Saya tertawa lama sambil mencoba membuat ini-itu...
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'.
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.
Salah satu komentar di Hacker News cukup menarik perhatian
Ada juga komentar yang informatif
"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 😳