Gönderen Konu: Deep Learning ile Spectrum grafikleri oluşturma  (Okunma sayısı 7772 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı madcat

  • RAAT
  • Retroman
  • *
  • İleti: 25
Deep Learning ile Spectrum grafikleri oluşturma
« : 27 Ekim 2018, 22:35:54 »

Bu projeyi 5-6 ay önce bir boş vaktimde kurcalamıştım. Yazmaya ancak fırsat buluyorum.

Spectrum ZX ekranda her 8x8 piksellik blok için 15 renklik sabit bir paletten sadece 2 renk seçebiliyor. Gerçek renkli bir resmi bu moda çevirebilmek için dithering vb gibi teknikler kullanılıyor. Ben böyle bir çevrimin deep learning teknikleriyle otomatik olarak yapılıp yapılamayacağına bir baktım.

Deep learning için bol miktarda örnek gerekiyor. Bu konuda ZXart.ee çok faydalı bir kaynak, bir sürü ZX imajı var (SCR formatında) ve en önemlisi çoğu imajın orijinal renkli resmi de png/jpg olarak eklenmiş.

Yapmak istediğim şey basit bit 8x8 -> 8x8 mapping değildi, resmin tamamının işlenmesini istiyordum. Ayrıca ZXart resimleri bire bire çevrimler değildi, objelerin yerleri, bazen şekilleri arasında ufak farklar vardı.

Bu konuda en başarılı model CycleGAN oldu. Burada iki farklı resim ortamından öbürüne çeviren iki adet neural network var. İki diğer network de bunların çıktılarının hedef ortama ait olup olmadığına dair bir sonuç üretiyor. Bu kontrol networklerini her ortamın doğal imajları ile train ediyoruz. Çevrim networkleri de kontrol networklerinin çıktısı yanında bir ortamdan diğerine, sonra da önceki ortama geri çevrimin orijinal imajı ne kadar bozduğu oranı ile train ediliyor. İki ortamın resimlerinin eşleştirilmesine gerek yok, dolayısıyla elde farklı sayılarda imajlar olsa da sonuç başarılı oluyor.

Özellikle resimleri bir stilden diğerine çevirmek konusunda çok başarılı. Orijinal makalede resimlerdeki atları zebralara çevirmek için kullanılıyordu.

Kodlar https://github.com/meduketto/retrogfx adresinde bulunabilir. Model dosyaları çeyrek GB boyutunda olduğu için koymadım. fetchzxartee.py scriptiyle resimleri çektikten sonra, standart bir Jupyter+keras+tensorflow ile notebook'u açıp deneyebilirsiniz. Minimum 1040 4GB GPU şart.

Bazı örnekler:

Windows arkaplanı -> Spectrum -> Geriye (RGB) çevrim



Görüldüğü gibi Spectrum versiyonu hatasız değil, tam bir SCR olması için son bir filtreden geçirmek gerekli.

Ama asıl ilginç olan Spectrum'dan RGB oluşturmak. Şu örnek Dizzy oyunundan bir kareyi RGB resme çeviriyor:

Dizzy orijinal:



Dizzy renklendirilmiş:



CycleGAN network leri çok büyük oluyor, o yüzden elimdeki HW ideal sonuç için yeterli olmadı. Öğrenme parametreleri üzerinde oynayarak çok daha iyi sonuçlar alınabilir.

Düşünürseniz, 4GB ram + kim bilir kaç yüz tane çekirdekli bir GPU ile ZX gibi bir makineye resim oluşturmak çok ironik bir durum :)

Öbür yönde çevrimin faydalı uygulamaları olabilir, bir emulatore display driver olarak mesela.

Çevrimdışı Alco

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2127
  • "Kahraman olmak, dürüst olmaktan kolaydır" Luigi P
    • Sizin Amstrad
Ynt: Deep Learning ile Spectrum grafikleri oluşturma
« Yanıtla #1 : 28 Ekim 2018, 15:08:26 »
Zamanlama manidar. Daha dün şöyle bir etkinlik yapmışken, birkaç saat sonra böyle bir başlık görmek... Bizi mi gözetliyorsunuz taaa oralardan :)

https://facebook.com/story.php?story_fbid=10156893366870762&id=709265761

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2866
  • Advanced User Simulator
    • ae unutmadan
Ynt: Deep Learning ile Spectrum grafikleri oluşturma
« Yanıtla #2 : 28 Ekim 2018, 17:20:52 »

Bu projeyi 5-6 ay önce bir boş vaktimde kurcalamıştım. Yazmaya ancak fırsat buluyorum.

Spectrum ZX ekranda her 8x8 piksellik blok için 15 renklik sabit bir paletten sadece 2 renk seçebiliyor. Gerçek renkli bir resmi bu moda çevirebilmek için dithering vb gibi teknikler kullanılıyor. Ben böyle bir çevrimin deep learning teknikleriyle otomatik olarak yapılıp yapılamayacağına bir baktım.

Deep learning için bol miktarda örnek gerekiyor. Bu konuda ZXart.ee çok faydalı bir kaynak, bir sürü ZX imajı var (SCR formatında) ve en önemlisi çoğu imajın orijinal renkli resmi de png/jpg olarak eklenmiş.

Yapmak istediğim şey basit bit 8x8 -> 8x8 mapping değildi, resmin tamamının işlenmesini istiyordum. Ayrıca ZXart resimleri bire bire çevrimler değildi, objelerin yerleri, bazen şekilleri arasında ufak farklar vardı.

Bu konuda en başarılı model CycleGAN oldu. Burada iki farklı resim ortamından öbürüne çeviren iki adet neural network var. İki diğer network de bunların çıktılarının hedef ortama ait olup olmadığına dair bir sonuç üretiyor. Bu kontrol networklerini her ortamın doğal imajları ile train ediyoruz. Çevrim networkleri de kontrol networklerinin çıktısı yanında bir ortamdan diğerine, sonra da önceki ortama geri çevrimin orijinal imajı ne kadar bozduğu oranı ile train ediliyor. İki ortamın resimlerinin eşleştirilmesine gerek yok, dolayısıyla elde farklı sayılarda imajlar olsa da sonuç başarılı oluyor.

Özellikle resimleri bir stilden diğerine çevirmek konusunda çok başarılı. Orijinal makalede resimlerdeki atları zebralara çevirmek için kullanılıyordu.

Kodlar https://github.com/meduketto/retrogfx adresinde bulunabilir. Model dosyaları çeyrek GB boyutunda olduğu için koymadım. fetchzxartee.py scriptiyle resimleri çektikten sonra, standart bir Jupyter+keras+tensorflow ile notebook'u açıp deneyebilirsiniz. Minimum 1040 4GB GPU şart.

Bazı örnekler:

Windows arkaplanı -> Spectrum -> Geriye (RGB) çevrim



Görüldüğü gibi Spectrum versiyonu hatasız değil, tam bir SCR olması için son bir filtreden geçirmek gerekli.

Ama asıl ilginç olan Spectrum'dan RGB oluşturmak. Şu örnek Dizzy oyunundan bir kareyi RGB resme çeviriyor:

Dizzy orijinal:



Dizzy renklendirilmiş:



CycleGAN network leri çok büyük oluyor, o yüzden elimdeki HW ideal sonuç için yeterli olmadı. Öğrenme parametreleri üzerinde oynayarak çok daha iyi sonuçlar alınabilir.

Düşünürseniz, 4GB ram + kim bilir kaç yüz tane çekirdekli bir GPU ile ZX gibi bir makineye resim oluşturmak çok ironik bir durum :)

Öbür yönde çevrimin faydalı uygulamaları olabilir, bir emulatore display driver olarak mesela.

vay arkadaş.

hazır kurulmuşu olduğu için ve 1070 8gb kartım bulunduğu için bu işi makineye kurup bakayım bir ara. Aslında train dataları da bir şekilde alabilsek süper olur. Şimdi saatler alır o.

github'da olduğuna göre ben bunu duyuruyorum zx boardlarda. İlgilenenler çıkabilir.


Çevrimdışı madcat

  • RAAT
  • Retroman
  • *
  • İleti: 25
Ynt: Deep Learning ile Spectrum grafikleri oluşturma
« Yanıtla #3 : 28 Ekim 2018, 18:05:17 »
@Alco: valla zamanlama çocuk+iş+ev derken bir türlü bulunamayan boş anlardan kaynaklı, ama denk geldiyse güzel olmuş :)

@Ref: duyur tabi, belki daha gelişmiş bir hale getirebilir birileri. Doğru modeli (cyclegan) buluna kadar çok şey denedim, parametreleri finetune etmeye zaman kalmadı. Spectrum'a çevirmek için klasik algoritmalardan daha iyi sonuç vermesi çok zor, ama iyi bir training ile RGB'ye çevirmek işinde çok başarılı olabilir ki yoktan bilgi var etmek gerektiği için klasik yöntemlerle yapılması çok zor.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2866
  • Advanced User Simulator
    • ae unutmadan
Ynt: Deep Learning ile Spectrum grafikleri oluşturma
« Yanıtla #4 : 28 Ekim 2018, 21:51:05 »
@Ref: duyur tabi, belki daha gelişmiş bir hale getirebilir birileri. Doğru modeli (cyclegan) buluna kadar çok şey denedim, parametreleri finetune etmeye zaman kalmadı. Spectrum'a çevirmek için klasik algoritmalardan daha iyi sonuç vermesi çok zor, ama iyi bir training ile RGB'ye çevirmek işinde çok başarılı olabilir ki yoktan bilgi var etmek gerektiği için klasik yöntemlerle yapılması çok zor.

Valla bu işlerin bir gerçek dünya karşılığı yok ama bence çok enteresan çıktılar üretebiliyorlar. Örneğin dizzy'nin gerçekte neye benzediğini spectrum camiasına düşündürtmüş gibi oluyorsun aslında. Kullanılan veri seti sonuçta speccy scene'inin elle ürettiği şeyler. Demekki spectrum'un "ortak bilinc"i bunlar. Yerli ve milli fikirler :P