Pemulihan gambar
Pemulihan gambar mengambil gambar yang rusak dan menghasilkan gambar yang bersih. LibreYOLO menampilkannya sebagai pemulihan task, yang mencakup pengurangan noise, penghapusan blur, dan super-resolusi di belakang satu kontrak keluaran: satu gambar RGB masuk, satu gambar RGB keluar.
Definisi
restore task memetakan satu gambar ke gambar lain. Penghilangan noise, penghilangan blur, dan
super-resolusi semuanya adalah task yang sama di sini, karena mereka berbagi satu kontrak:
model mengkonsumsi gambar RGB dan mengembalikan gambar RGB, dan degradasi yang
dilatih untuk dibatalkan adalah sifat dari checkpoint daripada API.
Sebuah prediksi mengisi result.restored, muatan RestoredImage yang memegang
array RGB uint8 (H, W, 3). .array mengembalikannya sebagai NumPy dan .save(path)
menuliskannya ke disk. result.restore_scale mencatat faktor peningkatan yang
membawa, yang merupakan 1 untuk checkpoint yang mempertahankan resolusi.
result.boxes tetap kosong, sehingga conf, iou, dan max_det diterima untuk
paritas tanda tangan tetapi tidak memiliki efek, dan save=True menulis gambar yang dipulihkan
secara langsung daripada foto yang diberi anotasi.
Model
Tiga keluarga melayani restore, dibagi menurut degradasi yang mereka batalkan.
NAFNet adalah denoiser, dan satu-satunya restore family LibreYOLO yang dapat dilatih. Arsitekturnya menggantikan aktivasi nonlinier dari blok UNet dengan perkalian elemen demi elemen, dan checkpoint yang dipublikasikan dilatih pada noise gambar nyata SIDD. Keluaran tetap pada resolusi input.
Real-ESRGAN adalah penguat skala praktis: tiga titik pemeriksaan dilatih terhadap degradasi sintetis daripada hanya bicubic penurunan skala, pada 4x, 2x, dan generator 4x yang lebih kecil dan lebih cepat yang dibuat untuk lebih rendah latensi.
SwinIR meningkatkan skala 4x dengan Swin Transformer backbone, dalam tiga ukuran mencakup generator ringan resmi dan dua dunia nyata generator.
Prediksi
Bobot diunduh dari Hugging Face saat penggunaan pertama dan disimpan secara lokal.
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Generator kompak 4x; batas ubin memuncak pada penggunaan memori sumber yang besar.model = LibreYOLO("LibreRealESRGANx4t-restore.pt")result = model(SAMPLE_IMAGE, tile=512, tile_pad=10) result.restored.save("upscaled.png")print(result.restored.array.shape) # 4x input di setiap sumbufrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Dilatih pada noise gambar nyata SIDD; output tetap pada ukuran input.model = LibreYOLO("LibreNAFNetl-restore-sidd.pt")result = model(SAMPLE_IMAGE) result.restored.save("denoised.png")print(result.restore_scale) # 1: tidak ada peningkatan skala untuk ini checkpointRestorasi dijalankan pada resolusi gambar sumber itu sendiri daripada resolusi tetap
kanvas jaringan, padding hanya pada faktor downsample jaringan, sehingga keduanya waktu
dan memori meningkat seiring dengan jumlah piksel dari input Anda. tile membagi maju
melewati ubin yang saling tumpang tindih dan menyatukan kembali jahitannya, dan tile_pad
apakah halo ditambahkan di sekitar setiap ubin sebelum dipotong kembali; keduanya adalah
Argumen kata kunci Python. Lihat prediksi untuk sumber, streaming
dan penanganan hasil.
Format dataset
Restorasi memasangkan setiap gambar input yang rusak dengan gambar target yang bersih secara tepat resolusi yang sama, dicocokkan berdasarkan nama berkas.
dataset/
data.yaml
inputs/
train/photo.jpg
val/photo.jpg
targets/
train/photo.jpg
val/photo.jpgpath: dataset
train: inputs/train
val: inputs/val
input_dir: inputs
target_dir: targets
degradation: denoise
dataset: MyDataset
nc: 1
names: {0: image}nc dan names adalah placeholder skema; sebuah model pemulihan mengembalikan
Results.restored, bukan deteksi. degradation dan dataset bersifat opsional
. target_stem_suffix mencakup dataset yang memberi nama gambar
bersih secara berbeda dari pasangannya yang terdegradasi. Validasi mempertahankan resolusi asli dan
hanya menambahkan padding secukupnya untuk menumpuk batch, sehingga metrik dihitung pada kanvas asli
. Lihat dataset formats untuk kontrak lengkap
.
Latih
NAFNet adalah satu-satunya restore family dengan implementasi pelatihan.
Real-ESRGAN.train() dan SwinIR.train() sama-sama meningkatkan NotImplementedError:
checkpoint tersebut berasal dari pelatihan GAN melalui jalur degradasi sintetis,
dan trainer restore berpasangan akan berjalan tanpa mereproduksi resep tersebut.
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt")model.train(data="my-dataset.yaml", epochs=100, imgsz=256, batch=16, lr0=1e-3)from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt") # degradasi dan dataset ditulis ke dalam checkpoint yang disimpan untuk# asal-usul; mereka tidak berperan dalam pelatihan.model.train( data="my-dataset.yaml", epochs=100, degradation="denoise", dataset="MyDataset",)Pelatih mengambil pasangan hasil panen dari input dan target, sehingga kedua sisi tetap selaras. Lihat pelatihan untuk dataset, multi-GPU dan pencatat log, dan halaman NAFNet untuk default family ini dan pooling saat inferensi yang dilepaskan saat pelatihan.
Validasi
val() membandingkan keluaran yang dipulihkan dengan target bersih, dalam RGB, pada
kanvas asli, tanpa pemotongan tepi dan tanpa pengubahan ukuran.
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt") # val() mengembalikan dict biasa, bukan objek.metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/PSNR"]) # kecocokanprint(metrics["metrics/SSIM"])metrics/PSNR adalah rasio puncak sinyal terhadap kebisingan dalam desibel, dan itu juga
fitness, pembacaan pemilihan best-checkpoint. metrics/SSIM adalah
kesamaan struktural dalam [0, 1], dihitung dengan jendela Gaussian 11x11 pada
sigma 1.5 dan dirata-ratakan di ketiga saluran warna. Semakin tinggi semakin baik untuk kedua-duanya.
Ekspor
Model restore yang diekspor dimuat kembali melalui LibreYOLO() pada akhiran berkasnya,
sehingga berkas .onnx atau .engine berperilaku seperti checkpoint dan mengembalikan .onnx yang sama,
dengan restored membawa gambar keluaran.
from libreyolo import LibreYOLO model = LibreYOLO("LibreNAFNetl-restore-sidd.pt") # imgsz diperbaiki dalam grafik, jadi masukkan ukuran yang sebenarnya digunakan deployment Anda# untuk memberi makan model.model.export(format="onnx", imgsz=256)from libreyolo import LibreYOLO, SAMPLE_IMAGE # Pabrik mengalihkan berdasarkan akhiran berkas, jadi artefak yang diekspor dimuat# seperti halnya checkpoint dan mengembalikan objek Results yang sama.model = LibreYOLO("LibreNAFNetl-restore-sidd.onnx")result = model(SAMPLE_IMAGE) result.restored.save("denoised.png")Ekspor restore menetapkan resolusi spasial ke dalam grafik, jadi masukkan imgsz
yang akan digunakan dalam penerapan Anda untuk benar-benar memberi makan model. Untuk NAFNet, ukuran itu harus dapat dibagi
oleh faktor downsample jaringan, dan hanya dimensi batch yang tetap dinamis
di bawah dynamic=True. Untuk Real-ESRGAN dan SwinIR, meninggalkan imgsz akan kembali ke default
ke ukuran patch internal kecil daripada resolusi kerja Anda. Per-format
cakupan ada di setiap halaman model dan di
matriks ekspor penuh. Ekspor
mencantumkan argumen yang diterima setiap format.