• Forumu şuan da Ziyaretçi olarak görüntülüyorsunuz. Forum ziyaretçileri tüm konu ve bağlantıları görüntüleyemez ve kaynaklara erişimi yoktur. Eğer üye iseniz buradan üye girişi yapın ya da burayı tıklayarak şimdi üye olun.
  • Ubden® Topluluk Projelerine, Aracılığınızla Destek Vermektedir.

    Topluluk projelerine katkı yapmak ve topluğumuza ulaşan genç girişimcilere destek olmak için Buradaki  bağlantıdan işlem kanallarına ulaşabilirsiniz.

    Desteklerinizle 7.000 kişilik bir ekosistem olduk ve büyümeye devam ediyoruz. Desteğiniz için teşekkürler.

Haber Replicator ile Sentetik Veri Üretimi

  • Konbuyu başlatan blog
  • Başlangıç tarihi
B

blog

Misafir
Misafir
Isaac Sim

Bu yazımızda Isaac SIM içerisindeki Replicator Core aracını kullanarak nasıl sentetik veri üretebileceğimize değineceğiz.

Sentetik Veri Nedir?​


Sentetik veriler, bilgisayar simülasyonlarının veya algoritmalarının gerçek dünya verilerine alternatif olarak ürettiği etiketlenmiş bilgilerdir.

Sentetik veriler yapay olabilir ama matematiksel veya istatistiksel olarak gerçek dünya verilerini yansıtır. Araştırmalar, bir yapay zeka modelini eğitmek için gerçek nesnelere, olaylara veya insanlara dayanan veriler kadar iyi veya hatta daha iyi olabileceğini göstermektedir.

Neden Sentetik veriye İhtiyaç Duyuyoruz? Avantajları Neler?​


1. Sentetik veriler gerçek hayatta karşılaşma imkanımızın düşük olduğu ancak çözüm getirmemiz gereken durumları yansıtmamıza imkan tanıyan bir veri tipidir.

2. Nesne tespiti algoritmalarının en iyi şekilde eğitilebilmesi için özenli bir şekilde ve doğru etiketlenmiş veriye ihtiyaç duyuyoruz. Veri etiketleme işlemi son derece maliyetli ve zaman alıcı bir iş haline gelmiş durumda. Sentetik veriler yapay zeka algoritmaları tarafından doğru bir şekilde etiketlendiğinden etiketleme
yükünden de kurtulmuş oluyoruz.

3. Sentetik veriler gerçek veriye oranla son derece düşük maliyetlidir. 1Milyon görsel barındıran bir gerçek hayat veri seti için yaklaşık 10 ay ve 400bin $ gerekirken bu oran sentetik veride 500bin fotoğraf için yalnızca 1 ay ve 20bin $.

4. Sentetik veriler yalnızca hedeflediğimiz nesnenin değil aynı zamanda çevresel etkenlerin de (Işık rengi, parlaklık, arka plan vs.) çeşitlendirilmesini sağlayarak veri çeşidinin artmasını ve nesne tespiti modelimizin farklı çevre ortamlarında daha doğru çalışmasını sağlıyor.

Uygulama aşaması​


Bu aşamada Bir Isaac SIM örneği olan UR10 Pallettizing üzerinden ilerleyeceğiz. Örneği çalıştırmak için aşağıdaki adımları izleyebilirsiniz.


Bu adımları uyguladıktan sonra konveyör üzerinden inen kutuların UR10 robotu tarafından öncelikle kontrol platformuna ardından ise palet üzerine istiflendiğini görebilirsiniz.

Bu örnekte robotumuzun kutuları istifleme işlemini üzerindeki kamerayı kullanarak en iyi şekilde yapabilmesi için bir çok kombinasyonu barındıran veriye ihtiyaç duyuyoruz. Üreteceğimiz veri, kutuya ait her türlü renk, malzeme, parlaklık, ve çevre etkenlerini içermeli ve kameranın farklı bakış açılarından gözükebilir olmalıdır.

Aynı zamanda ortam ışığını da renk ve parlaklık olarak sürekli olarak değiştirerek bir çok çeşitte veri elde edeceğiz. Bunun için Replicator Core tarafından sunulan çeşitli kodları kullanacağız.

Işıklandırmanın ve Kameraların Oluşturulması​


Kutular üzerinde farklı ışık çeşitlerinin oluşturulması bize veri çeşitliliği açısından büyük kolaylık sağlayacaktır. Aynı zamanda her bir karede farklı açıdan bakan bi kamera ile daha çeşitli veri üretim şansına sahip olabileceğiz.

Bunun için Sol üstteki Window sekmesinden Window →Script Editor yolunu takip edelim ve python kodu yazabileceğimiz editöre erişelim.

Oznitelik-Olceklendirme-1024x576.png


Işık parametreleri, kutu materyali ve palet materyalinin değiştirilmesi gibi 3 farklı aşamanın her biri için bir python bloğu açmak yazdığımız kodları görmek açısından bizim için daha yararlı olacaktır. Bunun için script üzerindeki Tab →Add Tab yolunu izleyebilir ya da Ctrl+N kısayolunu kullanabilirsiniz.

Oznitelik-Olceklendirme-1-1024x576.png


Işıklandırma için kullanacağımız python kodu açıklamaları ile birlikte aşağıdaki şekildedir.

Copy to Clipboard
import omni.replicator.core as rep #Replicatoru içeri aktaralım #RGB formatına göre bir renk paleti oluşturalım color_palette = [(1, 0, 0), (0, 1, 0), (0, 0, 1)] #Işık randomizayonu fonksiyonunu tanımlayalım def randomize_bin_holder_lights(): #Işıklarımızı oluşuturalım ve özelliklerini belirleyelim lights = rep.create.light( light_type="Sphere", temperature=rep.distribution.normal(6500, 2000), intensity=rep.distribution.normal(9500, 15000), position=rep.distribution.uniform( (0.25, 0.25, 0.5),(1, 1, 0.75)), scale=rep.distribution.uniform(0.5, 0.8), color=rep.distribution.choice(color_palette), count=3, ) return lights.node #Oluşturmuş olduğumuz fonksiyonu replicatora dahil edelim. rep.randomizer.register(randomize_bin_holder_lights) #Kamera için 4 adet pozisyonu belirledik (X,Y,Z Koordinatları) camera_positions = [(1.96, 0.72, -0.34),(1.48, 0.70, 0.90),(0.79, -0.86, 0.12),(-0.49, 1.47, 0.58)] #Kamera oluşturalım camera = rep.create.camera() #Kameramızı ışık her değiştiğinde farklı bir açıdan bakacak şekilde #fonksiyonumuza dahil edelim ve look_at parametresi ile odak noktasını #ayarlayalım. look_at değişkeni bir koordinat ya da prim path (Bir nesnenin stage #sekmesi üzerindeki yolu) olarak ayarlanabilir. #Buradaki look_at parametresi robotumuzun kutuları kontrol için koymuş olduğu platform #olarak belirlenmiştir. with rep.trigger.on_frame(): rep.randomizer.randomize_bin_holder_lights() with camera: rep.modify.pose( position=rep.distribution.sequence(camera_positions), look_at=(0.78, 0.72, 0.1))


Yukarıda belirtilen kodu script editor üzerinde Python 0 bloğu üzerinde (Ctrl+Enter) komutları ile çalıştırdığınızda Stage sekmesinde Replicatorun oluştuğunu göreceksiniz. Çalıştırmak için sol üstteki Replicator sekmesinden Start butonuna tıklayarak sonucu görebilirsiniz. Eğer kamera pozisyonunun sürekli olarak değişimini görmek istiyorsanız aşağıdaki yolu takip ederek kamerayı seçebilirsiniz. Replicator çalıştığı sürece pozisyonun sürekli olarak değiştiğini göreceksiniz.

isaac-sim-replicator-1024x576.png

Kutu Materyalinin Sürekli Olarak Değiştirilmesi​


Işık renklerini sürekli olarak değiştiriyoruz. Şimdi ise kutu materyali üzerinde değişiklikler uygulayarak veri çeşidinin artmasını sağlayacağız. Kutu materyalinin sürekli değiştirilmesi için kullanacağımız python kodu açıklamaları ile birlikte aşağıdaki şekildedir.

Copy to Clipboard
#Replicatoru içeri aktaralım import omni.replicator.core as rep #36 kutunun her biri için dosya yolunu basit bir for döngüsü ile listeye aktaralım bin_paths = [f"/environments/env/bins/bin_{i}" for i in range(36)] bins_node = rep.get.prim_at_path(bin_paths) #Materyal çeşitlerini belirli parametreler arasından #Uniform dağılım (tekdüze dağılım) ile seçelim. mats = rep.create.material_omnipbr( diffuse=rep.distribution.uniform((0.2, 0.1, 0.3), (0.6, 0.6, 0.7)), roughness=rep.distribution.choice([0.1, 0.9]), count=10, ) #Material randomizer fonksiyonumuzu oluşturalım def randomize_bin_materials(): with bins_node: rep. randomizer.materials (mats) return bins_node. node #Fonksiyonumuzu replicatora dahil edelim rep.randomizer.register(randomize_bin_materials) #Burada materyal fonksiyonu ile birlikte sürekli olarak farklı pozisyonlardan palete bakacak bir kamera oluşturuyoruz #Işıklandırma kodunda bahsettiğimiz gibi look_at parametresi için burada prim_path kullandık. camera = rep.create.camera() with rep.trigger.on_frame(): rep.randomizer.randomize_bin_materials() with camera: rep.modify.pose( position=rep.distribution.uniform((0, -2, 2),(2, 1, 3)), look_at="/environments/env/pallet")


Bu kodu Python 1 bloğu üzerinde çalıştırdığımızda ise kutu materyalinin sürekli olarak değiştiğini görebilirsiniz. Stage sekmesinde oluşan Looks bölümünde ise random olarak dağıtılmış materyalleri görebilirsiniz.

Eğer replicator çalışıyorsa tekrardan start demenize gerek yok, materyallerin sürekli olarak değiştiğini göreceksiniz.

Palet için oluşan kamerayı görmek için platform için kullanmış olduğumuz şekilde kameralar sekmesinden son kamerayı seçebiliriz.

isaac-sim-1024x576.png

Palet Dokusunun Sürekli Olarak Değiştirilmesi​


Şimdi ise az önce kamera yerleştirmiş olduğumuz paletin üzerindeki dokunun (texture) sürekli olarak değişmesini sağlayacağız. Palet materyalinin sürekli değiştirilmesi için kullanacağımız python kodu açıklamaları ile birlikte aşağıdaki şekildedir.

Copy to Clipboard
#Kutularda olduğu gibi palet içinde bir palet node u belirleyelim ve bunun üzerinde işlemlerimizi yapalım pallet_node = rep.get.prim_at_path("/environments/env/pallet") def randomize_pallet_textures(): root_path = "omniverse://localhost/NVIDIA/Materials/Base/Wood" with pallet_node: #Randomizer fonksiyonumuzu tanımlayalım. Paletimiz, yolunu belirttiğimiz #4 doku ile sürekli olarak değiştirilecek. rep.randomizer.texture( textures=[ f"{root_path}/Oak/Oak_BaseColor.png", f"{root_path}/Ash/Ash_BaseColor.png", f"{root_path}/Plywood/Plywood_BaseColor.png", f"{root_path}/Timber/Timber_BaseColor.png",], #Oluşturulan dokunun açısının 80 ila 95 arasında değişmesini sağlıyoruz texture_rotate=rep.distribution.uniform(80, 95), ) return pallet_node.node #Fonkisyonumuzu replicatora dahil edelim. rep.randomizer.register(randomize_pallet_textures) with rep.trigger.on_frame(interval=4, rt_subframes=4): rep.randomizer.randomize_pallet_textures()


Bu kodu Python 2 bloğu üzerinde çalıştırdığımızda ise palet dokusunun sürekli olarak değiştiğini görebilirsiniz. Stage sekmesinde oluşan Looks bölümünde ise random olarak dağıtılmış materyalleri görebilirsiniz.

Şimdi ise sonucumuzu görmek için robotumuz çalışırken Replicatoru başlatalım.

Yaptıklarımız sonucunda randomizasyon işlemini çalıştırdık. Şimdi ise bu ortamdan veri üretelim. Bunun için Synthetic data recorder aracını kullanacağız.

Veri Üretim Aşaması​


Mevcut kullanmış olduğumuz ortamda (Simple Warehouse) tüm nesnelere etiketli. Ancak kendi ortamımızda veriler etiketli olmayacak bunun için öncelikle veri etiketleme sekmesi olan Semantic Schema Editor’u kullanacağız.

Semantic Schema Editor ve Synthetic Data Recorder ilk başta açık olarak gelmelidir. Eğer gelmiyorsa sol üst taraftaki replicator sekmesinden açabilirsiniz.

replicator-recorder-1024x576.png


Eğer verileriniz etiketli değilse Semantic Schema Editor ile verilerinizi etiketleyebilirsiniz. İsterseniz seçtiğiniz objelere istediğiniz etiketi vererek kullanabileceğiniz Apply semantic data on selected objects sekmesini kullanabilir ya da Isaac Simin nesnedeki ön veya son ekleri kaldırarak objeleri isimleri ile etiketlemesi için Apply semantic data using prim names sekmesini kullanabilirsiniz.

replicator-core.jpg

Şimdi ise sentetik veri üretimi için kullanacağımız Synthetic data recorder aracınının kullanımına bakacağız. Synthetic data recorder çok kolay ve rahat bir kullanım arayüzüne sahiptir.

Writer ve Control olmak üzere iki sekmede incelenir. Writer, kaç kamerayla hangi boyutta kayıt yapılacağı, oluşacak verinin nereye depolanacağı, hangi yapay zeka modeli için veri üretileceği (Nesne tespiti, segmentasyon vs…) gibi özellikleri belirlemek için kullanılır. Control ise kaç veri toplanacağı ve verinin nasıl toplanacağı parametrelerinin ayarlanması için kullanılır.

replicator-start-1024x576.png


Eğer Number of Frames değerini 0 olarak ayarlarsanız, stop butonuna tıklanana kadar veri üretimine devam edilecektir.

Veri üretimi için yukarıda görüldüğü gibi sürekli pozisyon değiştiren kameralarımızı render product olarak ekleyelim. Bunu yapmak için kamera yolunu ayarlamanıza gerek yok, tüm render productları kaldırarak viewport üzerinde veri toplayacağınız kameraya geçiş yapın. Ardından Add New Render Product butonuna tıkladığınızda kameranın eklendiğini görebilirsiniz.

Şimdi parametre ayarları yukarıdaki gibi olacak biçimde sentetik veri üretimine start butonuna tıklayarak başlayalım.

Eğer isterseniz Manual Control sekmesi altındaki Init ardından Step butonunu kullanarak tek frame olarak veri toplayabilirsiniz.

init.jpg

step.jpg

Veriler belirttiğimiz dosya yolunda rgb klasörünün içinde şekillerde görüldüğü biçimde çıkacaktır.

rgb-1.jpg

rgb-2.jpg


Seçmiş olduğumuz bounding_box_2d_tight seçeneğinin ise dosyası rgb klasörünün yanında oluşacaktır. Bu dosya içerisindeki .npy dosyalarında kutuların bulunduğu koordinatları belirten etiket dosyaları, .json dosyalarında ise nesneye ait etiketlerin ismi bulunmaktadır (kutu, box vs.). .npy dosyalarını OpenCV ile görselleştirirsek verilerimizin gayet iyi ve doğru bir şekilde etiketlendiğini görebiliriz.

Bunun için ise aşağıdaki kod üzerinde belirtilen düzenlemeleri yaparak etiketleri görselleştirebilirsiniz.

Copy to Clipboard
import cv2 #Npy dosyasından koordinatları alın import numpy as np import pandas as pd numpy_dosya_yolu = ".NPY (etiket) dosyasının yolunu girin!" rgb_dosya_yolu = ".PNG (etikete ait görsel) dosyasının yolunu girin" data = pd.DataFrame(np.load(numpy_dosya_yolu)) #Koordinatlara ait fotoğrafı cv2 ile okuyun img = cv2.imread(rgb_dosya_yolu) #Etiketleri görselleştirin , #Shift ile ilerleyebilirsiniz. for i in range(len(data)): image = cv2.rectangle(img,(data["x_min"],data["y_min"]),(data["x_max"],data["y_max"]),(255, 0, 0),2) cv2.imshow("image",image) cv2.waitKey(0) cv2.destroyAllWindows()


Yukarıdaki kodun çıktısı aşağıdaki biçimde olmalıdır. Bu şekilde sentetik veri üretimini tamamlıyoruz.

cv-1.jpg

cv-2.jpg


Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
 
Üst