Qwen-Image-Layered: Panduan Praktis untuk Dekomposisi Gambar
Pelajari cara mengotomatiskan pengeditan gambar dengan Python. Gunakan Qwen-Image-Layered untuk memecah gambar menjadi layer RGBA yang dapat diedit dan menyusunnya kembali dalam aplikasi Streamlit.
Pengguna Photoshop menghabiskan berjam-jam untuk menandai (masking) objek secara manual dan mengecat latar belakang. Qwen-Image-Layered, model baru dari tim Qwen di Alibaba, melakukan ini secara otomatis: berikan satu gambar, dan ia mengembalikan beberapa layer RGBA dengan latar belakang transparan.
Tutorial ini membahas apa itu Qwen-Image-Layered, bagaimana perbedaannya dari alat segmentasi seperti SAM, dan cara menjalankannya di Python. Anda akan memecah sebuah gambar menjadi layer, lalu mengedit dan menggabungkan kembali layer tersebut menjadi komposit baru. Pada akhirnya, Anda akan memiliki alur kerja pengeditan gambar terprogram yang sepenuhnya melewati masking manual.
Jika Anda baru dalam menangani data gambar dan transparansi dalam kode, lihat kursus Image Processing in Python kami untuk membangun fondasi yang kuat sebelum terjun. Saya juga merekomendasikan membaca panduan kami tentang model generasi gambar terbaru dari Google, Nano Banana 2.
Apa itu Qwen-Image-Layered?
Qwen-Image-Layered dibangun di atas Qwen2.5-VL, sebuah model visi-bahasa dari Alibaba. Tulang punggung VL membuat model memahami isi gambar secara semantik: ia dapat membedakan produk dari bayangannya dan dari permukaan tempat ia berada, bukan sekadar mendeteksi tepi. SepertiVision Transformers, ia memproses gambar melalui mekanisme attention alih-alih pendekatan konvolusional tradisional.
Saat Anda menjalankan inferensi, Anda menentukan berapa banyak layer yang diinginkan. Minta 4, dan model mendistribusikan konten gambar ke 4 keluaran RGBA. Minta 8, dan Anda mendapatkan pemisahan yang lebih halus. Model memutuskan apa yang masuk ke mana berdasarkan struktur adegan.
Model mengambil gambar komposit dan memisahkannya menjadi layer RGBA yang dapat diedit satu per satu dengan transparansi.
Gambar promosi permen dipecah menjadi empat layer berbeda: latar belakang starburst, orang berbaju oranye, teks dan branding "Sour Candy", serta potongan permen individual. Setiap layer keluar dengan latar belakang transparan (ditunjukkan dengan pola kotak-kotak), siap untuk diedit atau diatur ulang.
Model mendistribusikan elemen visual ke berbagai layer berdasarkan kedalaman dan pemahaman semantik. Grafik latar belakang masuk ke layer 0, subjek utama (orang) ke layer 1, overlay teks ke layer 2, dan objek latar depan kecil (potongan permen) ke layer 3. Setiap elemen terpisah rapi dengan transparansi yang tepat.
Qwen-Image-Layered vs Segment Anything Model
Jika Anda pernah bekerja dengan segmentasi gambar, Anda mungkin bertanya-tanya bagaimana Qwen-Image-Layered dibandingkan dengan alat yang sudah ada, khususnya Segment Anything Model (SAM).
SAM dan model segmentasi serupa menghasilkan mask: peta biner tentang piksel mana yang termasuk objek mana. Berguna, tetapi mask hanya memberi tahu Anda di mana sesuatu berada. Mengekstrak objek tetap menyisakan lubang pada gambar asli.
Sebaliknya, Qwen-Image-Layered menghasilkan layer lengkap. Objek latar depan keluar dengan transparansi, dan layer latar belakang di belakangnya sudah terisi. Ketika Anda menghapus atau memindahkan layer nanti, tidak ada yang perlu ditambal.
Fitur
Qwen-Image-Layered
Segment Anything Model 2 (SAM 2)
Tujuan utama
Dekomposisi layer (menciptakan aset yang dapat diedit)
Segmentasi (mengidentifikasi dan mengisolasi piksel)
Keluaran kunci
Tumpukan gambar RGBA (layer transparan)
Mask biner (garis besar hitam & putih)
Penanganan latar belakang
Inpaint oklusi: Menghasilkan piksel untuk mengisi "lubang" di belakang objek.
Tidak ada: Membiarkan latar belakang kosong/hitam di tempat objek dihapus.
Modalitas input
Gambar + prompt teks (opsional)
Gambar/video + titik, kotak, atau mask
Tipe arsitektur
Generatif (berbasis difusi, Qwen2.5-VL)
Diskriminatif (berbasis transformer)
Dukungan video
Terbatas (penerapan per frame)
Native (pelacakan objek video mutakhir)
Kendali pengguna
Layer variabel (mis., "pecah menjadi 4 layer vs 8 layer")
Dapat diprompt (klik titik atau gambar kotak untuk memilih objek spesifik)
SAM menggunakan pendekatan diskriminatif, menganalisis piksel yang ada untuk mendefinisikan batas objek secara presisi. Sebaliknya, Qwen-Image-Layered menggunakan arsitektur generatif berbasis difusi yang merekonstruksi wilayah yang teroklusi atau tersembunyi melalui generasi gambar yang dipelajari.
Sementara SAM menghasilkan mask yang mendefinisikan apa yang perlu dihapus, Qwen-Image-Layered menghasilkan konten latar belakang yang masuk akal untuk menyelesaikan dekomposisi berlapis. Perlu dicatat, SAM dapat mencapai pengisian latar belakang serupa bila digabungkan dengan model inpainting khusus, tetapi Qwen-Image-Layered mengintegrasikan kapabilitas ini secara ujung-ke-ujung dalam proses dekomposisinya.
Mekanisme kendali inputnya juga berbeda: SAM bergantung pada prompt interaktif yang presisi, mengharuskan Anda mengklik titik atau menggambar bounding box untuk memilih target spesifik. Qwen-Image-Layered bekerja lebih holistik, memungkinkan Anda cukup menentukan jumlah layer yang diinginkan (mis., "pecah menjadi 4 layer") untuk mengatur struktur gambar secara otomatis.
Perlu kami catat bahwa SAM 2 dirancang secara eksplisit untuk video, mampu melacak objek melalui urutan menggunakan arsitektur streaming dengan memori (mempertahankan ~6 frame terbaru) dengan konsistensi temporal tinggi. Qwen-Image-Layered terspesialisasi untuk dekomposisi gambar statis dan saat ini belum menawarkan pelacakan objek native untuk pengeditan video.
Mendekomposisi Gambar dengan Qwen-Image-Layered
Sekarang bagian praktiknya. Sebelum menulis kode, ada pertimbangan praktis: di mana menjalankan model.
Mengapa menggunakan API?
Qwen-Image-Layered memerlukan lebih dari 57GB bobot model dan GPU kelas atas dengan VRAM yang besar.
Saya menguji menjalankannya secara lokal di Google Colab dengan GPU T4, dan sesi kehabisan RAM sebelum model selesai diunduh. Penggunaan disk naik ke 90GB dari 112GB yang tersedia di runtime GPU. Model ini terlalu besar untuk lingkungan cloud tingkat gratis.
Model generatif besar sepertiStable Diffusion menghadapi tantangan hosting serupa, itulah sebabnya API terkelola menjadi umum.
Untuk tutorial ini, kita akan menggunakan API terkelola Replicate. Setiap dekomposisi biayanya sekitar $0,03, yang memberi Anda run yang stabil dan dapat direproduksi tanpa pusing keterbatasan memori atau konflik dependensi. Jika Anda hanya ingin mencoba model tanpa menulis kode, Hugging Face Space menawarkan antarmuka web gratis tempat Anda bisa mengunggah gambar dan mengunduh layer secara manual.
Hugging Face Space memungkinkan Anda menguji model tanpa kode, tetapi API memberi kendali terprogram.
Menyiapkan lingkungan
Buat direktori proyek baru dan pasang paket yang diperlukan:
Pengumuman model resmi biasanya menampilkan contoh terpilih di mana model berkinerja terbaik. Mari uji dengan gambar dunia nyata sebagai gantinya untuk melihat performa yang realistis.
Ini adalah gambar yang akan kita dekomposisi menjadi layer:
Foto tersebut menampilkan tiga produk perawatan kulit di atas permukaan mint dengan latar ungu muda: kotak kado putih dengan pita hitam, botol serum pink, dan pot krim kecil. Komposisi bersih, objek berbeda, bayangan halus. Kasus uji yang baik untuk pemisahan layer.
Menjalankan inferensi
import replicate
from dotenv import load_dotenv
load_dotenv()withopen("data/healthcare_products.jpg","rb")as f:
output = replicate.run("qwen/qwen-image-layered",input={"image": f,"num_layers":4,"go_fast":True,"output_format":"png","seed":42,})Didukung oleh
Parameter num_layers mengendalikan seberapa halus model membagi gambar. Nilainya dapat berkisar dari 2 hingga 8. Dengan 4 layer, Anda mendapatkan keseimbangan yang masuk akal antara granularitas dan keterkelolaan. Menetapkan seed ke nilai tetap membuat keluaran dapat direproduksi.
API juga menerima URL secara langsung, jadi Anda bisa melewati penanganan berkas jika gambar Anda dihosting di suatu tempat:
output = replicate.run("qwen/qwen-image-layered",input={"image":"https://example.com/photo.jpg","num_layers":4,"go_fast":True,"output_format":"png",})Didukung oleh
Menyimpan layer
API mengembalikan daftar objek FileOutput. Masing-masing memiliki metode .read() yang memberi Anda byte gambar:
for i, layer inenumerate(output):withopen(f"layer_{i}.png","wb")as f:
f.write(layer.read())Didukung oleh
Layer diurutkan dari bawah ke atas: indeks 0 adalah latar belakang, dan indeks yang lebih tinggi menumpuk di atasnya. Setiap PNG adalah gambar RGBA dengan transparansi, di mana layer lain akan terlihat menembus.
Berikut hasilnya:
Model menempatkan latar belakang (dinding ungu muda dan permukaan mint) pada layer 0, pot krim pada layer 1, kotak kado pada layer 2, dan botol serum pada layer 3. Setiap produk keluar dengan tepi yang bersih dan transparansi yang akurat.
Namun, lihat layer latar belakang dan Anda akan melihat sisa bayangan samar di tempat produk berada sebelumnya. Ini muncul secara konsisten dalam pengujian saya: model menangani isolasi objek dengan baik, tetapi kesulitan merekonstruksi latar belakang saat melibatkan bayangan.
Semakin menonjol bayangan pada gambar sumber Anda, semakin terlihat artefak ini. Ini adalah model pertama dari jenisnya, jadi harapkan tim Qwen menyempurnakannya dalam pembaruan mendatang.
Menggabungkan Kembali Layer Dengan Qwen-Image-Layered
Dekomposisi hanyalah setengah dari alur kerja. Layer menjadi berguna ketika Anda mengedit dan merakitnya kembali menjadi sesuatu yang baru.
Menukar latar belakang
Fotografer produk sering membutuhkan bidikan yang sama dengan latar belakang berbeda untuk A/B testing, kampanye musiman, atau persyaratan spesifik platform. Dengan layer yang terpisah, ini hanya perlu beberapa baris kode.
from PIL import Image
# Muat layer hasil dekomposisi
layers =[Image.open(f"layer_{i}.png")for i inrange(4)]# Buat latar belakang baru (solid coral)
new_bg = Image.new("RGBA", layers[0].size,(255,180,162,255))# Ganti layer latar belakang asli
layers[0]= new_bg
# Komposit dari bawah ke atas
result = layers[0]for layer in layers[1:]:
result = Image.alpha_composite(result, layer)
result.save("coral_background.png")Didukung oleh
Fungsi alpha_composite() menangani blending RGBA secara otomatis. Ia menghormati transparansi di setiap layer, sehingga objek latar depan tampak alami di atas latar belakang apa pun yang Anda sediakan.
PIL memudahkan manipulasi gambar, dan jika Anda perlu menerapkan transformasi yang lebih kompleks, kapabilitas pemrosesan gambar PyTorch terintegrasi dengan baik dengan alur kerja PIL.
Berikut hasilnya:
Produk yang sama, lingkungan berbeda, tanpa masking manual. Anda bisa mengganti gradien, tekstur, atau foto lain sepenuhnya. Prosesnya tetap sama: ganti layer 0, komposit sisanya.
Menghapus atau memosisikan ulang objek
Pola yang sama berlaku untuk edit lainnya. Hapus objek dengan melewati layer-nya:
# Komposit tanpa pot krim (layer 1)
layers_without_jar =[layers[0], layers[2], layers[3]]
result = layers_without_jar[0]for layer in layers_without_jar[1:]:
result = Image.alpha_composite(result, layer)Didukung oleh
Untuk memosisikan ulang objek dengan menempelkannya pada koordinat berbeda, gunakan metode paste() dengan offset x/y pilihan Anda:
# Pindahkan botol serum 50 piksel ke kiri
canvas = Image.new("RGBA", layers[0].size,(0,0,0,0))
canvas.paste(layers[3],(-50,0), layers[3])
layers[3]= canvas
# Lalu komposit seperti biasaDidukung oleh
Alur kerjanya selalu sama:
Modifikasi layer yang Anda perlukan: Ubah ukuran, ubah warna, hapus, atur ulang.
Kemudian, komposit semuanya kembali.
Setiap operasi terjadi pada layer terisolasi, sehingga edit tetap terkontrol.
Membangun Editor Qwen-Image-Layered Dengan Streamlit
Menjalankan operasi ini di notebook cocok untuk edit sekali jalan, tetapi siklus umpan baliknya lambat. Anda menulis kode, mengeksekusi sel, memeriksa keluaran, menyesuaikan, ulangi. Untuk pekerjaan iteratif di mana Anda ingin menyalakan-matikan layer, membandingkan komposisi, dan mengunduh hasil tanpa menjalankan ulang sel, GUI ringan lebih masuk akal.
Kita akan membangun aplikasi Streamlit sekitar 160 baris yang memungkinkan Anda mengunggah gambar, mendekomposisinya, menyalakan-matikan layer, dan melihat pratinjau langsung. Buat berkas bernama streamlit_app.py di direktori proyek Anda.
Menyiapkan Streamlit
Mulai dengan impor dan konfigurasi dasar:
import os
import io
import time
from typing import List
import streamlit as st
from PIL import Image, ImageDraw
from dotenv import load_dotenv
import replicate
load_dotenv()# Konstanta
MAX_LAYERS, MIN_LAYERS, DEFAULT_LAYERS =8,2,4
THUMBNAIL_SIZE =(150,150)# Inisialisasi session stateif"layers"notin st.session_state:
st.session_state.layers =[]
st.session_state.layer_visibility =[]
st.session_state.original_image =None
st.set_page_config(page_title="Qwen-Image-Layered", page_icon="🎨", layout="wide")
st.title("🎨 Qwen-Image-Layered")
st.markdown("Decompose images into editable RGBA layers")Didukung oleh
Session state bertahan di seluruh rerun Streamlit. Tanpanya, layer Anda akan hilang setiap kali seseorang mengklik tombol.
Pemeriksaan token API
Sebelum memanggil Replicate, pastikan token ada:
token = os.environ.get("REPLICATE_API_TOKEN")ifnot token:
st.error("REPLICATE_API_TOKEN not found. Set it in your .env file.")
st.code("export REPLICATE_API_TOKEN=your_token_here", language="bash")
st.stop()Didukung oleh
st.stop() menghentikan eksekusi jika token tidak ada. Tidak ada gunanya merender sisa UI.
Fungsi dekomposisi gambar yang di-cache
Panggilan API dekomposisi biayanya $0,03 per panggilan dan memakan waktu 30–60 detik. Caching mencegah panggilan berulang yang tidak perlu:
@st.cache_data(show_spinner=False)defdecompose_image(_image_bytes:bytes, num_layers:int, seed:int)-> List[bytes]:"""Call Replicate API with retry logic for 502 errors."""for attempt inrange(3):try:
output = replicate.run("qwen/qwen-image-layered",input={"image": io.BytesIO(_image_bytes),"num_layers": num_layers,"go_fast":True,"output_format":"png","seed": seed,},)return[layer.read()for layer in output]except Exception as e:if attempt <2and("502"instr(e)or"Replicate"instr(type(e).__name__)):
time.sleep(5)continueraiseDidukung oleh
Prefiks garis bawah pada _image_bytes memberi tahu Streamlit untuk tidak melakukan hash pada parameter itu (bytes mahal untuk di-hash). Loop retry menangani sesekali error 502 dari Replicate dengan menunggu 5 detik dan mencoba hingga 3 kali.
Visualisasi dan komposisi gambar
Berikutnya, kita definisikan utilitas kecil untuk visualisasi dan komposit:
defcreate_checkerboard(size:tuple)-> Image.Image:"""Create a checkerboard pattern to show transparency."""
img = Image.new("RGBA", size,(220,220,220,255))
draw = ImageDraw.Draw(img)
square =10for y inrange(0, size[1], square):for x inrange(0, size[0], square):if(x // square + y // square)%2:
draw.rectangle([x, y, x + square, y + square],
fill=(255,255,255,255),)return img
defcomposite_layers(
layers: List[Image.Image],
visibility: List[bool],)-> Image.Image:"""Composite visible layers from bottom to top."""ifnot layers ornotany(visibility):return Image.new("RGBA",
layers[0].size if layers else(400,400),(0,0,0,0),)
result =Nonefor layer, visible inzip(layers, visibility):if visible:
result = layer.copy()if result isNoneelse Image.alpha_composite(result, layer)return result or Image.new("RGBA", layers[0].size,(0,0,0,0))Didukung oleh
Pola kotak-kotak membuat transparansi terlihat (konvensi editor gambar standar). Fungsi komposit mencerminkan apa yang kita lakukan di notebook, kini dikendalikan oleh status kotak centang.
Unggah gambar dan pengaturan dekomposisi
Bilah sisi menangani unggah gambar dan pengaturan dekomposisi:
with st.sidebar:
st.header("🖼️ Image Upload")
uploaded_file = st.file_uploader("Choose an image",type=["png","jpg","jpeg"],help="Upload an image to decompose",)if uploaded_file isnotNone:
st.session_state.original_image = uploaded_file
st.image(uploaded_file, caption="Uploaded", use_container_width=True)
st.divider()
st.header("⚙️ Settings")
num_layers = st.slider("Number of layers",
MIN_LAYERS,
MAX_LAYERS,
DEFAULT_LAYERS,)
seed = st.number_input("Random seed",0,999999,42,help="For reproducibility",)# Decompose buttonif st.button("🔄 Decompose Image",
disabled=uploaded_file isNone,
use_container_width=True,type="primary",):if st.session_state.original_image isnotNone:
image_bytes = st.session_state.original_image.getvalue()with st.spinner(f"Decomposing into {num_layers} layers... (30-60s)"):try:
layer_bytes = decompose_image(image_bytes, num_layers, seed)
st.session_state.layers =[
Image.open(io.BytesIO(lb)).convert("RGBA")for lb in layer_bytes
]
st.session_state.layer_visibility =[True]*len(
st.session_state.layers
)
st.success(f"Decomposed into {len(st.session_state.layers)} layers!")except Exception as e:if"502"instr(e):
st.error("Replicate API error (502). Try again or use fewer layers.")else:
st.error(f"Error: {e}")# Reset buttonif st.session_state.layers and st.button("🗑️ Reset", use_container_width=True):
st.session_state.layers =[]
st.session_state.layer_visibility =[]
st.session_state.original_image =None
st.rerun()Didukung oleh
Tombol dekomposisi dinonaktifkan sampai gambar diunggah. Jika berhasil, layer disimpan di session state, dan semua toggle visibilitas default ke True.
Menambahkan kontrol layer gambar
Dua kolom menampilkan kontrol layer dan pratinjau langsung:
col1, col2 = st.columns([1,1])# two equal-width columns [web:61]with col1:
st.subheader("📑 Layers")ifnot st.session_state.layers:
st.info("Upload an image and decompose to see layers here.")else:
st.caption("Toggle layers on/off. Layer 0 is the background.")
cols = st.columns(min(len(st.session_state.layers),4))for i, layer inenumerate(st.session_state.layers):with cols[i %4]:
thumb = layer.copy()
thumb.thumbnail(THUMBNAIL_SIZE)
checkerboard = create_checkerboard(thumb.size)
display = Image.alpha_composite(checkerboard, thumb)
st.image(display, caption=f"Layer {i}", use_container_width=True)
st.session_state.layer_visibility[i]= st.checkbox(f"Show Layer {i}",
value=st.session_state.layer_visibility[i],
key=f"layer_{i}",)with col2:
st.subheader("👁️ Preview")ifnot st.session_state.layers:
st.info("Composite preview will appear here.")else:
composite = composite_layers(
st.session_state.layers,
st.session_state.layer_visibility,)
visible =sum(st.session_state.layer_visibility)
st.caption(f"Showing {visible} of {len(st.session_state.layers)} layers")
st.image(composite, caption="Composite result", use_container_width=True)if visible >0:
buf = io.BytesIO()
composite.save(buf,format="PNG")
st.download_button("⬇️ Download Result",
data=buf.getvalue(),
file_name="composite.png",
mime="image/png",
use_container_width=True,)Didukung oleh
Saat Anda menghapus centang pada layer, Streamlit menjalankan ulang skrip. Kotak centang memperbarui layer_visibility, fungsi komposit menghitung ulang pratinjau, dan UI menyegarkan secara otomatis.
Aplikasi memiliki gambar yang telah didekomposisi. Matikan layer untuk menghapus objek dari pratinjau.
Unggah gambar, klik decompose, lalu nyalakan-matikan layer. Pratinjau diperbarui seketika. Unduh hasilnya saat Anda menemukan komposisi yang Anda sukai. Seluruh alur kerja terjadi di browser tanpa menjalankan ulang sel notebook.
Kesimpulan
Qwen-Image-Layered menghadirkan pendekatan berbeda untuk pengeditan gambar: alih-alih memasking piksel, ia memisahkan konten menjadi layer RGBA lengkap dengan latar belakang yang di-inpaint. Anda mendapatkan isolasi objek tanpa pekerjaan pembersihan. Model ini kesulitan dengan artefak bayangan dalam adegan kompleks, tetapi ekstraksi objeknya sendiri bekerja dengan baik.
Alur kerja Python-nya sederhana. Panggil API Replicate, dapatkan daftar layer, dan komposit dengan PIL. Penukaran latar belakang dan penghapusan objek menjadi beberapa baris kode. Aplikasi Streamlit membungkus logika itu dalam GUI untuk iterasi lebih cepat.
Ini adalah model pertama dari jenisnya. Tim Qwen merilis pembaruan dengan cepat, jadi harapkan penyempurnaan pada rekonstruksi latar belakang dan penanganan yang lebih baik untuk gambar dengan bayangan berat. paper riset membahas arsitektur jika Anda ingin memahami cara kerja dekomposisi layer variabel di balik layar.
Siap mengeksplorasi lebih banyak model AI open-source? Kuasai ekosistem di balik Qwen dengan mengikuti Hugging Face Fundamentals skill track di DataCamp.
Qwen-Image-Layered FAQs
Apa itu Qwen-Image-Layered dan bagaimana cara kerjanya?⌄
Qwen-Image-Layered adalah model visi-bahasa dari Alibaba yang mendekomposisi gambar menjadi beberapa layer RGBA dengan transparansi. Tidak seperti alat segmentasi yang hanya menyediakan mask, model ini menghasilkan layer lengkap dengan latar belakang yang di-inpaint, sehingga Anda dapat mengedit atau menghapus objek tanpa pembersihan manual.
Apa perbedaan Qwen-Image-Layered dengan SAM (Segment Anything Model)?⌄
SAM menghasilkan mask biner yang menunjukkan di mana objek berada, tetapi mengekstraknya meninggalkan lubang pada gambar asli. Qwen-Image-Layered menghasilkan layer RGBA lengkap di mana latar belakang di belakang objek latar depan sudah terisi. Anda dapat menghapus atau memindahkan layer tanpa perlu menambal apa pun.
Bisakah saya menjalankan Qwen-Image-Layered secara lokal di komputer saya?⌄
Model ini memerlukan lebih dari 57GB bobot dan VRAM GPU yang signifikan, sehingga penyebaran lokal menantang. Bahkan GPU T4 Google Colab kehabisan RAM saat penyiapan. Artikel merekomendasikan menggunakan API terkelola Replicate (sekitar $0,03 per dekomposisi) atau Hugging Face Space gratis untuk pengujian.
Jenis pengeditan apa yang dapat saya lakukan dengan layer hasil dekomposisi?⌄
Setelah Anda memiliki layer, Anda bisa menukar latar belakang untuk A/B testing, menghapus objek dengan melewati layer-nya, memosisikan ulang elemen dengan menempel pada koordinat berbeda, atau mengomposit susunan kustom. Tutorial menunjukkan contoh menggunakan PIL untuk pengeditan terprogram dan membangun aplikasi Streamlit untuk penyalakan-pemadaman layer secara interaktif.
Apa keterbatasan Qwen-Image-Layered?⌄
Model ini kesulitan dengan rekonstruksi latar belakang ketika bayangan menonjol. Anda mungkin melihat sisa bayangan samar di layer latar belakang di tempat objek sebelumnya. Semakin kompleks bayangan pada gambar sumber Anda, semakin terlihat artefak ini. Ini adalah model generasi pertama, jadi harapkan peningkatan dari tim Qwen.
Saya adalah kreator konten data science dengan pengalaman lebih dari 2 tahun dan salah satu dengan jumlah pengikut terbesar di Medium. Saya suka menulis artikel mendalam tentang AI dan ML dengan sedikit gaya sarkastik—karena harus ada sesuatu untuk membuatnya tidak terlalu membosankan. Saya telah menghasilkan lebih dari 130 artikel dan satu kursus di DataCamp, dengan satu lagi sedang dalam proses. Konten saya telah dilihat oleh lebih dari 5 juta pasang mata, dan 20 ribu di antaranya menjadi pengikut di Medium dan LinkedIn.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Temukan model AI open-source terbaru, dataset, dan aplikasi, bangun agen AI, dan sesuaikan model bahasa besar (LLMs) dengan Hugging Face. Bergabunglah dengan komunitas AI terbesar hari ini!
Gunakan keterampilan Python Anda untuk mengolah data gambar! Dari pra-pemrosesan hingga deep learning, Anda akan menemukan berbagai cara untuk memanfaatkan data gambar.
Pengguna Photoshop menghabiskan berjam-jam untuk menandai (masking) objek secara manual dan mengecat latar belakang. Qwen-Image-Layered, model baru dari tim Qwen di Alibaba, melakukan ini secara otomatis: berikan satu gambar, dan ia mengembalikan beberapa layer RGBA dengan latar belakang transparan.
Tutorial ini membahas apa itu Qwen-Image-Layered, bagaimana perbedaannya dari alat segmentasi seperti SAM, dan cara menjalankannya di Python. Anda akan memecah sebuah gambar menjadi layer, lalu mengedit dan menggabungkan kembali layer tersebut menjadi komposit baru. Pada akhirnya, Anda akan memiliki alur kerja pengeditan gambar terprogram yang sepenuhnya melewati masking manual.
Jika Anda baru dalam menangani data gambar dan transparansi dalam kode, lihat kursus Image Processing in Python kami untuk membangun fondasi yang kuat sebelum terjun. Saya juga merekomendasikan membaca panduan kami tentang model generasi gambar terbaru dari Google, Nano Banana 2.
Apa itu Qwen-Image-Layered?
Qwen-Image-Layered dibangun di atas Qwen2.5-VL, sebuah model visi-bahasa dari Alibaba. Tulang punggung VL membuat model memahami isi gambar secara semantik: ia dapat membedakan produk dari bayangannya dan dari permukaan tempat ia berada, bukan sekadar mendeteksi tepi. Seperti Vision Transformers, ia memproses gambar melalui mekanisme attention alih-alih pendekatan konvolusional tradisional.
Saat Anda menjalankan inferensi, Anda menentukan berapa banyak layer yang diinginkan. Minta 4, dan model mendistribusikan konten gambar ke 4 keluaran RGBA. Minta 8, dan Anda mendapatkan pemisahan yang lebih halus. Model memutuskan apa yang masuk ke mana berdasarkan struktur adegan.
Contoh Visual
Beginilah tampilan dekomposisinya dalam pengumuman Qwen:
Model mengambil gambar komposit dan memisahkannya menjadi layer RGBA yang dapat diedit satu per satu dengan transparansi.
Gambar promosi permen dipecah menjadi empat layer berbeda: latar belakang starburst, orang berbaju oranye, teks dan branding "Sour Candy", serta potongan permen individual. Setiap layer keluar dengan latar belakang transparan (ditunjukkan dengan pola kotak-kotak), siap untuk diedit atau diatur ulang.
Model mendistribusikan elemen visual ke berbagai layer berdasarkan kedalaman dan pemahaman semantik. Grafik latar belakang masuk ke layer 0, subjek utama (orang) ke layer 1, overlay teks ke layer 2, dan objek latar depan kecil (potongan permen) ke layer 3. Setiap elemen terpisah rapi dengan transparansi yang tepat.
Qwen-Image-Layered vs Segment Anything Model
Jika Anda pernah bekerja dengan segmentasi gambar, Anda mungkin bertanya-tanya bagaimana Qwen-Image-Layered dibandingkan dengan alat yang sudah ada, khususnya Segment Anything Model (SAM).
SAM dan model segmentasi serupa menghasilkan mask: peta biner tentang piksel mana yang termasuk objek mana. Berguna, tetapi mask hanya memberi tahu Anda di mana sesuatu berada. Mengekstrak objek tetap menyisakan lubang pada gambar asli.
Sebaliknya, Qwen-Image-Layered menghasilkan layer lengkap. Objek latar depan keluar dengan transparansi, dan layer latar belakang di belakangnya sudah terisi. Ketika Anda menghapus atau memindahkan layer nanti, tidak ada yang perlu ditambal.
Fitur
Qwen-Image-Layered
Segment Anything Model 2 (SAM 2)
Tujuan utama
Dekomposisi layer (menciptakan aset yang dapat diedit)
Segmentasi (mengidentifikasi dan mengisolasi piksel)
Keluaran kunci
Tumpukan gambar RGBA (layer transparan)
Mask biner (garis besar hitam & putih)
Penanganan latar belakang
Inpaint oklusi: Menghasilkan piksel untuk mengisi "lubang" di belakang objek.
Tidak ada: Membiarkan latar belakang kosong/hitam di tempat objek dihapus.
Modalitas input
Gambar + prompt teks (opsional)
Gambar/video + titik, kotak, atau mask
Tipe arsitektur
Generatif (berbasis difusi, Qwen2.5-VL)
Diskriminatif (berbasis transformer)
Dukungan video
Terbatas (penerapan per frame)
Native (pelacakan objek video mutakhir)
Kendali pengguna
Layer variabel (mis., "pecah menjadi 4 layer vs 8 layer")
Dapat diprompt (klik titik atau gambar kotak untuk memilih objek spesifik)
Kasus penggunaan terbaik
Desain grafis, pembuatan aset, pengeditan "tanpa Photoshop".
Pengeditan video, pelacakan objek, analisis ilmiah, robotika.
SAM menggunakan pendekatan diskriminatif, menganalisis piksel yang ada untuk mendefinisikan batas objek secara presisi. Sebaliknya, Qwen-Image-Layered menggunakan arsitektur generatif berbasis difusi yang merekonstruksi wilayah yang teroklusi atau tersembunyi melalui generasi gambar yang dipelajari.
Sementara SAM menghasilkan mask yang mendefinisikan apa yang perlu dihapus, Qwen-Image-Layered menghasilkan konten latar belakang yang masuk akal untuk menyelesaikan dekomposisi berlapis. Perlu dicatat, SAM dapat mencapai pengisian latar belakang serupa bila digabungkan dengan model inpainting khusus, tetapi Qwen-Image-Layered mengintegrasikan kapabilitas ini secara ujung-ke-ujung dalam proses dekomposisinya.
Mekanisme kendali inputnya juga berbeda: SAM bergantung pada prompt interaktif yang presisi, mengharuskan Anda mengklik titik atau menggambar bounding box untuk memilih target spesifik. Qwen-Image-Layered bekerja lebih holistik, memungkinkan Anda cukup menentukan jumlah layer yang diinginkan (mis., "pecah menjadi 4 layer") untuk mengatur struktur gambar secara otomatis.
Perlu kami catat bahwa SAM 2 dirancang secara eksplisit untuk video, mampu melacak objek melalui urutan menggunakan arsitektur streaming dengan memori (mempertahankan ~6 frame terbaru) dengan konsistensi temporal tinggi. Qwen-Image-Layered terspesialisasi untuk dekomposisi gambar statis dan saat ini belum menawarkan pelacakan objek native untuk pengeditan video.
Mendekomposisi Gambar dengan Qwen-Image-Layered
Sekarang bagian praktiknya. Sebelum menulis kode, ada pertimbangan praktis: di mana menjalankan model.
Mengapa menggunakan API?
Qwen-Image-Layered memerlukan lebih dari 57GB bobot model dan GPU kelas atas dengan VRAM yang besar.
Saya menguji menjalankannya secara lokal di Google Colab dengan GPU T4, dan sesi kehabisan RAM sebelum model selesai diunduh. Penggunaan disk naik ke 90GB dari 112GB yang tersedia di runtime GPU. Model ini terlalu besar untuk lingkungan cloud tingkat gratis.
Model generatif besar seperti Stable Diffusion menghadapi tantangan hosting serupa, itulah sebabnya API terkelola menjadi umum.
Untuk tutorial ini, kita akan menggunakan API terkelola Replicate. Setiap dekomposisi biayanya sekitar $0,03, yang memberi Anda run yang stabil dan dapat direproduksi tanpa pusing keterbatasan memori atau konflik dependensi. Jika Anda hanya ingin mencoba model tanpa menulis kode, Hugging Face Space menawarkan antarmuka web gratis tempat Anda bisa mengunggah gambar dan mengunduh layer secara manual.
Hugging Face Space memungkinkan Anda menguji model tanpa kode, tetapi API memberi kendali terprogram.
Menyiapkan lingkungan
Buat direktori proyek baru dan pasang paket yang diperlukan:
Dapatkan token API Anda dari pengaturan akun Replicate dan simpan di berkas
.env:Gambar sumber
Pengumuman model resmi biasanya menampilkan contoh terpilih di mana model berkinerja terbaik. Mari uji dengan gambar dunia nyata sebagai gantinya untuk melihat performa yang realistis.
Ini adalah gambar yang akan kita dekomposisi menjadi layer:
Foto oleh Karola G di Pexels
Foto tersebut menampilkan tiga produk perawatan kulit di atas permukaan mint dengan latar ungu muda: kotak kado putih dengan pita hitam, botol serum pink, dan pot krim kecil. Komposisi bersih, objek berbeda, bayangan halus. Kasus uji yang baik untuk pemisahan layer.
Menjalankan inferensi
Parameter
num_layersmengendalikan seberapa halus model membagi gambar. Nilainya dapat berkisar dari 2 hingga 8. Dengan 4 layer, Anda mendapatkan keseimbangan yang masuk akal antara granularitas dan keterkelolaan. Menetapkanseedke nilai tetap membuat keluaran dapat direproduksi.API juga menerima URL secara langsung, jadi Anda bisa melewati penanganan berkas jika gambar Anda dihosting di suatu tempat:
Menyimpan layer
API mengembalikan daftar objek
FileOutput. Masing-masing memiliki metode.read()yang memberi Anda byte gambar:Layer diurutkan dari bawah ke atas: indeks 0 adalah latar belakang, dan indeks yang lebih tinggi menumpuk di atasnya. Setiap PNG adalah gambar RGBA dengan transparansi, di mana layer lain akan terlihat menembus.
Berikut hasilnya:
Model menempatkan latar belakang (dinding ungu muda dan permukaan mint) pada layer 0, pot krim pada layer 1, kotak kado pada layer 2, dan botol serum pada layer 3. Setiap produk keluar dengan tepi yang bersih dan transparansi yang akurat.
Namun, lihat layer latar belakang dan Anda akan melihat sisa bayangan samar di tempat produk berada sebelumnya. Ini muncul secara konsisten dalam pengujian saya: model menangani isolasi objek dengan baik, tetapi kesulitan merekonstruksi latar belakang saat melibatkan bayangan.
Semakin menonjol bayangan pada gambar sumber Anda, semakin terlihat artefak ini. Ini adalah model pertama dari jenisnya, jadi harapkan tim Qwen menyempurnakannya dalam pembaruan mendatang.
Menggabungkan Kembali Layer Dengan Qwen-Image-Layered
Dekomposisi hanyalah setengah dari alur kerja. Layer menjadi berguna ketika Anda mengedit dan merakitnya kembali menjadi sesuatu yang baru.
Menukar latar belakang
Fotografer produk sering membutuhkan bidikan yang sama dengan latar belakang berbeda untuk A/B testing, kampanye musiman, atau persyaratan spesifik platform. Dengan layer yang terpisah, ini hanya perlu beberapa baris kode.
Fungsi
alpha_composite()menangani blending RGBA secara otomatis. Ia menghormati transparansi di setiap layer, sehingga objek latar depan tampak alami di atas latar belakang apa pun yang Anda sediakan.PIL memudahkan manipulasi gambar, dan jika Anda perlu menerapkan transformasi yang lebih kompleks, kapabilitas pemrosesan gambar PyTorch terintegrasi dengan baik dengan alur kerja PIL.
Berikut hasilnya:
Produk yang sama, lingkungan berbeda, tanpa masking manual. Anda bisa mengganti gradien, tekstur, atau foto lain sepenuhnya. Prosesnya tetap sama: ganti layer 0, komposit sisanya.
Menghapus atau memosisikan ulang objek
Pola yang sama berlaku untuk edit lainnya. Hapus objek dengan melewati layer-nya:
Untuk memosisikan ulang objek dengan menempelkannya pada koordinat berbeda, gunakan metode
paste()dengan offset x/y pilihan Anda:Alur kerjanya selalu sama:
Setiap operasi terjadi pada layer terisolasi, sehingga edit tetap terkontrol.
Membangun Editor Qwen-Image-Layered Dengan Streamlit
Menjalankan operasi ini di notebook cocok untuk edit sekali jalan, tetapi siklus umpan baliknya lambat. Anda menulis kode, mengeksekusi sel, memeriksa keluaran, menyesuaikan, ulangi. Untuk pekerjaan iteratif di mana Anda ingin menyalakan-matikan layer, membandingkan komposisi, dan mengunduh hasil tanpa menjalankan ulang sel, GUI ringan lebih masuk akal.
Kita akan membangun aplikasi Streamlit sekitar 160 baris yang memungkinkan Anda mengunggah gambar, mendekomposisinya, menyalakan-matikan layer, dan melihat pratinjau langsung. Buat berkas bernama
streamlit_app.pydi direktori proyek Anda.Menyiapkan Streamlit
Mulai dengan impor dan konfigurasi dasar:
Session state bertahan di seluruh rerun Streamlit. Tanpanya, layer Anda akan hilang setiap kali seseorang mengklik tombol.
Pemeriksaan token API
Sebelum memanggil Replicate, pastikan token ada:
st.stop()menghentikan eksekusi jika token tidak ada. Tidak ada gunanya merender sisa UI.Fungsi dekomposisi gambar yang di-cache
Panggilan API dekomposisi biayanya $0,03 per panggilan dan memakan waktu 30–60 detik. Caching mencegah panggilan berulang yang tidak perlu:
Prefiks garis bawah pada
_image_bytesmemberi tahu Streamlit untuk tidak melakukan hash pada parameter itu (bytes mahal untuk di-hash). Loop retry menangani sesekali error 502 dari Replicate dengan menunggu 5 detik dan mencoba hingga 3 kali.Visualisasi dan komposisi gambar
Berikutnya, kita definisikan utilitas kecil untuk visualisasi dan komposit:
Pola kotak-kotak membuat transparansi terlihat (konvensi editor gambar standar). Fungsi komposit mencerminkan apa yang kita lakukan di notebook, kini dikendalikan oleh status kotak centang.
Unggah gambar dan pengaturan dekomposisi
Bilah sisi menangani unggah gambar dan pengaturan dekomposisi:
Tombol dekomposisi dinonaktifkan sampai gambar diunggah. Jika berhasil, layer disimpan di session state, dan semua toggle visibilitas default ke True.
Menambahkan kontrol layer gambar
Dua kolom menampilkan kontrol layer dan pratinjau langsung:
Saat Anda menghapus centang pada layer, Streamlit menjalankan ulang skrip. Kotak centang memperbarui
layer_visibility, fungsi komposit menghitung ulang pratinjau, dan UI menyegarkan secara otomatis.Menjalankan aplikasi
Simpan berkas dan jalankan:
Aplikasi memiliki gambar yang telah didekomposisi. Matikan layer untuk menghapus objek dari pratinjau.
Unggah gambar, klik decompose, lalu nyalakan-matikan layer. Pratinjau diperbarui seketika. Unduh hasilnya saat Anda menemukan komposisi yang Anda sukai. Seluruh alur kerja terjadi di browser tanpa menjalankan ulang sel notebook.
Kesimpulan
Qwen-Image-Layered menghadirkan pendekatan berbeda untuk pengeditan gambar: alih-alih memasking piksel, ia memisahkan konten menjadi layer RGBA lengkap dengan latar belakang yang di-inpaint. Anda mendapatkan isolasi objek tanpa pekerjaan pembersihan. Model ini kesulitan dengan artefak bayangan dalam adegan kompleks, tetapi ekstraksi objeknya sendiri bekerja dengan baik.
Alur kerja Python-nya sederhana. Panggil API Replicate, dapatkan daftar layer, dan komposit dengan PIL. Penukaran latar belakang dan penghapusan objek menjadi beberapa baris kode. Aplikasi Streamlit membungkus logika itu dalam GUI untuk iterasi lebih cepat.
Ini adalah model pertama dari jenisnya. Tim Qwen merilis pembaruan dengan cepat, jadi harapkan penyempurnaan pada rekonstruksi latar belakang dan penanganan yang lebih baik untuk gambar dengan bayangan berat. paper riset membahas arsitektur jika Anda ingin memahami cara kerja dekomposisi layer variabel di balik layar.
Siap mengeksplorasi lebih banyak model AI open-source? Kuasai ekosistem di balik Qwen dengan mengikuti Hugging Face Fundamentals skill track di DataCamp.