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. 1 milyon görsel barındıran bir gerçek hayat veri seti için yaklaşık 10 ay ve 400 bin $ gerekirken bu oran sentetik veride 500 bin 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.
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.
Işıklandırma için kullanacağımız python kodu açıklamaları ile birlikte aşağıdaki şekildedir.
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.
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.
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.
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.
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.
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.
Ş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.
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.
Veriler belirttiğimiz dosya yolunda rgb klasörünün içinde şekillerde görüldüğü biçimde çıkacaktır.
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.
Yukarıdaki kodun çıktısı aşağıdaki biçimde olmalıdır. Bu şekilde sentetik veri üretimini tamamlıyoruz.
OPENZEKA HABERLERİ
Hesaplarınızda paylaşmak ister misiniz?