Krita için Hızlı Eskiz Eklentisine Yakından Bakış
Hızlı Eskiz Temizleme Eklentisi
Giriş
Bu projeye, kullanıcıların eskizleri mürekkeplemede yardımcı olacak bir araç sağlamayı amaçlayarak başladık. Araç, Simo’nun ve Sierra’nın 2016 yılında yayınladığı bir araştırma makalesine dayanıyor ve sinir ağlarını (günümüzde genellikle yapay zeka olarak anılıyor) kullanıyor. Intel ile ortaklaşa geliştirilen bu araç hâlâ deneysel olarak kabul edilse de şimdiden kullanabilir ve sonuçlarını görebilirsiniz.
Aşağıdaki bölümde, gerçek kullanım örnekleri ve eklentiden elde edilen sonuçlar yer almaktadır. Sonuçlar çeşitlilik göstermekle birlikte, soluk kalem eskizlerini fotoğraflardan çıkarmak, çizgileri temizlemek ve çizgi roman mürekkeplemesi gibi işlemler için kullanılabilir.
Araçta kullanılan modeli kendimiz eğittik. Veri kümesindeki tüm veriler, kullanıcıların bize kendi fotoğraflarını göndererek bu kullanım durumu için onay verdikleri bağışlardan oluşuyor. Başka bir veri kullanılmadı. Ayrıca, eklentiyi kullandığınızda işleme yerel olarak bilgisayarınızda gerçekleştirilir; internet bağlantısı gerekmez, herhangi bir sunucuya bağlanmaz ve bir hesap gerektirmez. Şu anda yalnızca Windows’ta ve Linux’ta çalışıyor; ancak macOS için de uyumlu hale getirmek üzere çalışıyoruz.
Kullanım Alanları
Eklenti, çizgileri birleştirerek güçlü siyah çizgiler oluşturur; ancak sonuçlar bulanık veya düzensiz olabilir. Bununla birlikte, birçok durumda, kalem eskizlerini çıkarmak için yalnızca “Düzeyler” süzgecini kullanmaktan daha iyi çalışır. Bulanıklığı azaltmak için eklentiyi kullandıktan sonra “Düzeyler” süzgecini kullanmanız faydalı olabilir. Eklenti, beyaz tuval ve gri–siyah çizgilerle en iyi şekilde çalışır. Fotoğraflanmış kalem eskizleri veya çok açık çizim çizgileri durumunda, eklentiyi kullanmadan önce de “Düzeyler” süzgecini kullanmak iyi bir fikir olabilir.
Fotoğraflanmış kalem eskizini çıkarmak
Bu, çizgileri çıkarmak için bir eskiz üzerinde Düzeyler süzgecinin kullanılmasının standart prosedürünün sonucudur (görselin gölgeyi almasıyla sonuçlanır):
sketch_girl_original_procedure_comparison_small1843×1209 165 KB
Eskiz Tiar (KA profili) tarafından yapıldı.
Bu, SketchyModel (Düzeyler → eklenti → Düzeyler) ile eklentiyi kullanan prosedürdür:
sketch_girl_new_procedure_comparison_small1843×2419 267 KB
Karşılaştırma (siyah çizgiler için):
sketch_girl_procedures_comparison_small1920×1260 215 KB
Bir başka olası sonuç, daha güzel bir sonuçla sonuçlanan düzeyleri kullanarak siyah çizgileri zorlamadan eklentiyi durdurmaktır, sayfanın alt kısmını hala boş tutarken daha fazla kalem görünümü:
sketch_girl_after_plugin_small1536×2016 161 KB
Çizgi Roman Gibi Mürekkeplemek
Bir adamın resmi, BeARToys tarafından yapıldı.
Burada yukarıdaki resimlerde çizgi roman tarzı mürekkeplemeyi görebilirsiniz. Özgüne kıyasla biraz bulanık olan sonuç, bir Keskinleştir süzgeci kullanılarak daha da geliştirilebilir. Ejderha David Revoy (CC-BY 4.0) tarafından çizildi.
Çizgileri Temizlemek
Yaptığım eskiz örnekleri ve eklentinin sonucu, eklentinin güçlü ve zayıf noktalarını gösteriyor. Aşağıdaki resimlerin tümü SketchyModel kullanılarak yapılmıştır.
flower_001_detail681×456 22.1 KB
portrait_man_portrait_2_comparison_2_small1305×505 139 KB
portrait_man_portrait_2_detail646×1023 26.6 KB
Yukarıdaki resimlerin tümü Tiar (KA profili) tarafından yapıldı.
Aşağıdaki resimlerde, balıkların ölçeklerinde, modelin daha hafif çizgileri nasıl ayırt ettiğini ve daha güçlü çizgileri nasıl geliştirdiğini ve ölçekleri daha belirgin hale getirdiğini görebilirsiniz. Teoride bunu Düzeyler süzgecini kullanarak yapabilirsiniz; ancak pratikte sonuçlar daha kötü olacaktır; çünkü model çizginin yerel gücünü dikkate alır.
fish_square_sketchy_comparison_small1920×968 156 KB
Balık resmi Christine Garner (portföy) tarafından yapıldı.
Krita’da Nasıl Kullanılır
Krita’da Hızlı Eskiz Temizleme eklentisini kullanmak için şu adımları izleyin:
- Krita’yı Hazırlayın:
- Windows üzerinde:
- Ya tek bir pakette: Hızlı Eskiz Temizleme eklentisini içeren Krita 5.3.0-prealpha sürümünü indirin: https://download.kde.org/unstable/krita/5.3.0-prealpha-fast-sketch/krita-x64-5.3.0-prealpha-cdac9c31.zip
- Ya da ayrı olarak:
- Krita 5.2.6 (veya benzer bir sürümü; yine de çalışır) sürümünün taşınabilir olanını indirin.
- Hızlı Eskiz Temizleme eklentisini ayrı olarak buradan indirin: https://download.kde.org/stable/krita/FastSketchPlugin-1.0.2/FastSketchPlugin1.0.2.zip
- Dosyanın paketini krita-5.2.6/ klasörüne açın (klasör yapısını bozmayın).
- Sonra “Ayarlar → Krita’yı Yapılandır → Python Eklentisi Yöneticisi” sayfasına gidip Hızlı Eskiz Temizleme eklentisini etkinleştirip Krita’yı yeniden başlatın.
- Linux üzerinde:
- AppImage’i indirin: https://download.kde.org/unstable/krita/5.3.0-prealpha-fast-sketch/krita-5.3.0-prealpha-cdac9c31c9-x86_64.AppImage
- Windows üzerinde:
- (İsteğe Bağlı) Aygıtınızda NPU varsa NPU sürücülerini kurun (çok yeni bir Intel CPU’nuz varsa yalnızca Linux üzerinde gereklidir): Intel® NPU with OpenVINO™ — OpenVINO™ belgelendirmesi (Not: Eklentiyi CPU veya GPU üzerinde çalıştırabilirsiniz, NPU elzem değildir).
- Eklentiyi çalıştırın:
- Gri–beyaz vuruşlarla beyaz bir tuval açın veya oluşturun (eklentinin geçerli katmanın değil tuvalin geçerli projeksiyonunu alacağını unutmayın).
- “Araçlar → Hızlı Eskiz Temizleme” yolunu izleyin.
- Modeli seçin. Gelişmiş seçenekler sizin için kendiliğinden seçilir.
- İşlemeyi bitirene değin bekleyin (iletişim kutusu kendiliğinden kapanır).
- Sonucu içeren yeni bir katman oluşturduğunu görün.
İşlem Önerileri
Çoğu durumda SketchyModel.xml kullanılması daha iyi sonuç verir. Bu model genellikle SmoothModel.xml’den daha etkili çalışır.
Arka planın oldukça parlak olduğundan ve sonuçta korunmasını istediğiniz çizgilerin nispeten koyu olduğundan emin olun (örneğin, biraz koyu gri veya siyah; açık gri çizgiler birçok eksik çizgiyle sonuçlanabilir). İşlem öncesinde Düzeyler (Levels) gibi bir süzgeç kullanmak iyi bir fikir olabilir.
İşlemden sonra, sonuçları iyileştirmek için Düzeyler veya Keskinleştir (Sharpen) süzgeçlerini kullanmayı düşünebilirsiniz.
Teknoloji ve Bilimsel Arka Planı
Özgün Gereksinimler
İlk özgün gereksinim, her boyuttaki tuvalde çalışması gerektiğiydi. Bu, ağın, birçok görüntü işleme sinir ağında yaygın olan (belirli bir giriş boyutu gerektiren ve pikselin konumuna bağlı olarak farklı sonuçlar üreten) yoğun/tam bağlantılı doğrusal katmanlara sahip olmaması gerektiği anlamına geliyordu. Bunun yerine, yalnızca her piksel için aynı sonucu üreten konvolüsyonlar, havuzlama ya da benzeri katmanlar kullanıldı. Neyse ki, 2016 yılında yayımlanan Simo ve Sierra makalesi tam olarak böyle bir ağı tarif ediyordu.
Bir diğer zorluk, onların oluşturduğu modeli kullanamamamızdı; çünkü bu, Krita’nın lisansıyla uyumlu değildi. Hatta onların tarif ettiği tam model türünü bile kullanamadık; çünkü bu model dosyalarından biri Krita kadar büyük olabilirdi ve eğitimi çok uzun sürebilirdi. Biz, en az aynı derecede iyi çalışacak, ancak Krita’yı iki kat büyütmeden eklenebilecek kadar küçük bir şey istiyorduk. (Teorik olarak, diğer bazı şirketler gibi işleme işlemini bir tür sunucuda gerçekleştirebilirdik; ancak bu, istediğimiz bir şey değildi. Bu, bazı sorunlarımızı çözse bile kendi büyük zorluklarını da beraberinde getirecekti. Ayrıca, kullanıcılarımızın internet veya sunucularımıza bağımlı olmadan yerel olarak kullanabilmesini istiyorduk.) Dahası, modelin makul derecede hızlı ve RAM/VRAM tüketimi açısından da mütevazı olması gerekiyordu.
Bunun yanı sıra, kullanabileceğimiz bir veri setimiz yoktu. Simo & Sierra, beklenen görüntülerin tamamının sabit bir çizgi genişliği ve saydamlıkla çizildiği bir veri seti kullanmıştı; bu da eğitimin sonuçlarının bu özelliklere sahip olduğu anlamına geliyordu. Biz, çizgi genişlikleri değişen veya çizgilerin uçlarında yarı saydamlık bulunan, elle çizilmiş gibi görünen bir şey istiyorduk; bu nedenle, veri setimizin bu tür görüntüleri içermesi gerekiyordu. Lisans ve veri toplama süreciyle ilgili gereksinimlerimizi karşılayan herhangi bir veri seti bilmediğimiz için kendi topluluğumuzdan yardım istedik. Bu konuda Krita Artists’te açılan tartışma başlığını buradan okuyabilirsiniz: https://krita-artists.org/t/call-for-donation-of-artworks-for-the-fast-line-art-project/96401.
Tam veri kümemize ait bağlantıyı aşağıdaki Veri Kümesi bölümünde bulabilirsiniz.
Model Mimarisi
Tüm ana katmanlar ya konvolüsyonel ya da (modelin sonunda) dekonvolüsyoneldir. Son katman hariç her (de)konvolüsyonel katmandan sonra bir ReLu aktivasyon katmanı bulunmaktadır; son konvolüsyon katmanından sonra ise bir sigmoid aktivasyon katmanı yer alır.
Kullanılan Python Paketleri: Pillow, Numpy, PyTorch ve Openvino
Numpy, her türlü dizi ve ileri düzey dizi işlemleri için standart bir kitaplıktır. Görselleri okumak, bunları numpy dizilişlerine dönüştürmek ve yeniden geri dönüştürmek için Pillow kullandık. Eğitim sürecinde PyTorch kullanılırken, Krita eklentisinde ağdan geçiş işlemleri (inference) için Openvino kullanılmıştır.
Çıkarım İçin NPU Kullanımı
Aşağıdaki tablo, Intel’in Python paketi Openvino ile birlikte sunulan bir araç olan benchmark_app’in sonuçlarını göstermektedir. Bu araç, modeli rastgele veriler üzerinde izole bir şekilde sınar. Gördüğünüz gibi, NPU, aynı makinedeki CPU’dan birkaç kat daha hızlıydı.
Öte yandan, NPU’nun kullanılması bir zorluk getirdi: NPU üzerinde çalışabilen modeller yalnızca statik modellerdir, yani model dosyasına kaydedilirken giriş boyutu bilinmelidir. Bu sorunu çözmek için eklenti önce tuvali model dosyasına bağlı olarak belirli bir boyuttaki daha küçük parçalara böler, ardından tüm parçaları işler ve sonunda sonuçları birleştirir. Birleştirme alanlarının yakınında eserlerin (artifacts) oluşmasını önlemek için tüm parçalar biraz kenar boşluğu ile kesilir ve bu kenarlar daha sonra kesilerek çıkarılır.
Kendi Modelinizi Eğitmek
Kendi modelinizi eğitmek için bazı teknik becerilere, resim çiftlerine (girdi ve beklenen çıktı) ve güçlü bir bilgisayara ihtiyacınız olacak. Ayrıca sabit diskinizde oldukça fazla alan gerekebilir; ancak alan sıkıntısı yaşamaya başladığınızda eski ve gereksiz modelleri silebilirsiniz.
Sürücüler ve Hazırlık
Python3 ve şu paketleri kurmanız gerekecek: Pillow, Openvino, Numpy, Torch. Modelin kuantizasyonu için ayrıca nncf ve sklearn paketlerine gereksinim duyabilirsiniz. Eğer başka bir şey eksik olursa hata alırsınız; bu durumda eksik paketleri kurun.
Eğer Windows kullanıyorsanız büyük olasılıkla NPU ve ayrık GPU için sürücüler zaten kuruludur. Linux kullanıyorsanız NPU’yu kullanabilmek için sürücüleri kurmanız gerekebilir: https://docs.openvino.ai/2024/get-started/configurations/configurations-intel-npu.html.
Ayrıca, eğitimi CPU yerine iGPU üzerinde yapmak isterseniz (bu işlem CPU’dan hâlâ önemli ölçüde hızlı olabilir), PyTorch’un bir "XPU" cihazını (iGPU) kullanmasını sağlayan IPEX gibi bir araç kullanmanız gerekebilir. Ancak bu yöntem sınanmamıştır ve önerilmez; çünkü kişisel olarak Python sürümüm talep edilen sürümden daha yüksek olduğu için bunu kullanamadım. Yönergeler burada: https://pytorch-extension.intel.com/installation?platform=gpu&version=v2.5.10%2Bxpu.
Kurulumun sağlıklı olup olmadığını denetlemek için şu komutu çalıştırabilirsiniz:
python3 -c "import torch; import intel_extension_for_pytorch as ipex; print(f'Packages versions:'); print(f'Torch version: {torch.__version__}'); print(f'IPEX version: {ipex.__version__}'); print(f'Devices:'); print(f'Torch XPU device count: {torch.xpu.device_count()}'); [print(f'[Device {i}]: {torch.xpu.get_device_properties(i)}') for i in range(torch.xpu.device_count())];"
Bu komut, 0’dan fazla aygıtı temel özellikleriyle göstermelidir.
Eğer XPU aygıtını çalıştırmayı başarırsanız eğitim betiklerini düzenlemeniz gerekebilir: https://intel.github.io/intel-extension-for-pytorch/xpu/latest/tutorials/getting_started.html (betiklerin en üstüne şu satırı eklemeniz yeterli olabilir:
import intel_extension_for_pytorch as ipex
çalıştırırken aygıt adı olarak “xpu” kullanmanız gerekir. Ancak daha önce de belirtildiği gibi, bu betikler XPU üzerinde sınanmamıştır. Ayrıntılar için şu kılavuza göz atabilirsiniz: Intel Extension for PyTorch — Başlangıç Kılavuzu.
Veri Kümesi
Modelinizi eğitebilmek için bazı resimlere ihtiyacınız olacak. Bu resimler çiftler halinde olmalı ve her çift bir eskiz (girdi) ve bir çizim (beklenen çıktı) içermelidir. Veri kümesinin kalitesi ne kadar yüksekse sonuçlar da o kadar iyi olur.
Eğitimden önce veriyi artırmanız en iyisidir: Bu, resimlerin döndürülmesi, büyütülmesi veya küçültülmesi ve yansıtılması anlamına gelir. Şu anda veri artırma betiği, resimleri tersine çevirme işlemini de gerçekleştirir. Bunun nedeni, tersine çevrilmiş resimlerle yapılan eğitimin sonuçları daha hızlı getirebileceği varsayımıdır (siyahın sıfır, yani sinyal yok anlamına gelmesi ve bunun arka plan olarak kullanılmasını istediğimiz için; böylece modeller çizgileri öğrenir, çizgilerin çevresindeki arka planı değil).
Veri artırma betiğinin nasıl kullanılacağı, eğitimle ilgili ayrıntılı yönergelerde açıklanmıştır.
İşte kullandığımız veri kümesi (kullanmak isterseniz lisansı dikkatlice okuyun): https://files.kde.org/krita/extras/FastSketchCleanupPluginKritaDataset.zip
Model ve Diğer Parametrelerin Seçimi
Tez sonuçlar için tooSmallConv modelini kullanabilirsiniz; daha fazla zaman ve özkaynak ayırabiliyorsanız typicalDeep daha iyi bir seçenek olabilir. Güçlü bir GPU makinesine erişiminiz varsa,original veya originalSmaller modellerini deneyebilirsiniz. Bu modeller, 2016 yılında Simo ve Sierra tarafından SIGGRAPH makalesinde tanımlanan modelin özgününü ve daha küçük bir sürümünü temsil eder.
Eniyileyici olarak adadelta kullanın.
Kayıp işlevi olarak blackWhite veya mse kullanılabilir. mse klasik bir seçenektir, ancak blackWhite daha hızlı sonuçlar elde edilmesine yardımcı olabilir. Bunun nedeni, tam beyaz veya tam siyah alanlardaki göreceli hatayı azaltmasıdır (beklenen çıktı resmine dayanarak).
Eğitim
https://invent.kde.org/tymond/fast-line-art (33869b6 işlemesi) konumundaki depoyu klonlayın.
git clone https://invent.kde.org/tymond/fast-line-art.gitSonrasında klasörü hazırlayın:
- Eğitim için yeni bir klasör oluşturun.
- Klasörde şu komutu çalıştırın:
python3 [depo klasörü]/spawnExperiment.py --path [yeni klasöre olan yol, mutlak veya göreceli] --note "[deney üzerine olan notunuz]"
Veriyi hazırlayın:
- Var olan bir artırılmış veri kümeniz varsa tüm verilerinizi data/training/ ve data/verify/ klasörlerine yerleştirin. Eşli resimler, ink/ ve sketch/ alt klasörlerinde tam olarak aynı adlada sahip olmalıdır. Örneğin: sketch.png → sketch/ alt klasörüne ve ink.png → ink/ alt klasörüne.
- Artırılmış veri kümeniz yoksa:
- Ham verinizi data/raw/ klasörüne yerleştirin. Eşli resimlerin adları ink_ veya sketch_ öneki ile aynı olmalıdır. Örneğin: picture_1.png → sketch_picture.png ve picture_2.png → ink_picture.png
- Veri hazırlama betiğini çalıştırın:
python3 [depo klasörü]/dataPreparer.py -t taskfile.yml
Bu işlem, ham veriyi artırılmış bir şekilde hazırlayarak eğitimin daha başarılı olmasını sağlar.
taskfile.yml dosyasını düzenleyin. Değiştirilebilecek en önemli alanlar:
- Model türü: tinyTinier, tooSmallConv, typicalDeep veya tinyNarrowerShallow seçilebilir.
- Eniyileyici: adadelta veya sgd kullanın.
- Öğrenme hızı: Kullanılıyorsa sgd için öğrenme hızı.
- Kayıp işlevi: mse ortalama kare hatasını; blackWhite ise mse tabanlı ancak piksel değerleri 0,5’e yakın olanlarda daha küçük bir kayıp verir.
Eğitim kodunu çalıştırın:
python3 [depo klasörü]/train.py -t taskfile.yml -d "cpu"Linux üzerinde arka planda çalıştırmak için sonuna “&” ekleyin. Ön planda çalışıyorsa Kontrol+C yaparak veya arka planda ise süreç kimliğini bulup (“jobs -l” komutuyla veya “ps aux | grep train.py” ile çıkan ilk sayı süreç kimliğidir) onu “kill [süreç kimliği]” komutuyla eğitimi duraklatabilirsiniz. Sonuçlarınız yine klasörde olacaktır ve aynı komutla eğitimi sürdürebileceksiniz.
Modeli bir openvino modeline dönüştürün:
python3 [depo klasörü]/modelConverter.py -s [girdinin boyutu, 256 önerilir] -t [girdi modeli adı, pytorch üzerinden] -o [openvino modeli adı, .xml ile bitmelidir]Hem .xml hem .bin model dosyalarını Krita özkaynakları klasörüne diğer modellerin yanına koyun (pykrita/fast_sketch_cleanup alt klasörü) ve eklentide kullanın.