Özgün çalışma: Abe Haskins
Annie derleyin ve organize edin
Qubit Üretildi | Genel Hesap QbitAI
Bu eğiticide, Google mühendisi Abe Haskins, çekim yapabilen bir yapay zeka üretmek için Unity3D ve TensorFlow'u kullanmayı öğretmek için basit ve anlaşılması kolay bir dil kullanıyor.
Pek çok kişi makaledeki bu giflerin bir gün boyunca görüntülenebileceğini söyledi! NBA oyuncularını saniyeler içinde öldürmek için yapay zekayı kullanmayı öğreten okul otobüsü başlamak üzere. Otobüse binmeye hazır mısınız?
Resmi eğitime başlamadan önce, aşağıdaki araçlara sahip olup olmadığınızı kontrol edin:
İhtiyaç duyulan tüm araçlar bu. Sonra, size bu araçları nasıl kullanacağınızı öğreteceğim. Sonraki öğrenmeyi ve anlamayı kolaylaştırmak için herkesin önce açık kaynak kodunu indirmesini öneririm.
Kod adresi:
https://github.com/abehaskins
Hedefi daha basit düşünmek, hedefe ulaşmak için daha elverişlidir.Bu görevi basit bir problem olarak düşünebiliriz, burada atıcı ile basket arasındaki mesafe x ve saha y ise gol atılır.
Bu şekilde düşündüğünüzde, modelin çok basit olduğunu hissediyor musunuz? Unity'de nasıl daha karmaşık AI yapılacağıyla ilgileniyorsanız, Unity'den ML-Agents projesinin tamamını görüntüleyebilirsiniz.
ML-Agents proje adresi:
https://github.com/Unity-Technologies/ml-agents
Bu oyunda sadece basket atmamız gerekiyor. Kullanmanız gereken ilk şey Unity'dir.Genellikle oyun oynarken gördüğünüz küpün logosu Unity logosudur. Tüm platformlar için 2D ve 3D oyunlar oluşturabilen bir oyun motorudur.
Unity, temel 3B modelleme ve komut dosyası çalışma zamanını (Mono) içeren yerleşik bir fiziksel dünya sistemine sahiptir ve C # programlamayı destekler.
Stadyumun büyük çevresini birleştirmek karmaşık değil:
Evet, resimdeki kırmızı bloklar oyuncuları temsil ediyor. Topun sepetin içinden geçtiği belirli zamanı tespit etmeye yardımcı olmak için simüle edilmiş sepete görünmez bir tetikleyici yerleştirilmiştir.
Tetikleme eğitimi:
https://unity3d.com/cn/learn/tutorials/topics/physics/colliders-triggers
Yukarıdaki şekilde gösterildiği gibi, Unity düzenleyicide, yeşil görünmez tetik çıplak gözle görülebilir. Tetiğin üst ve alt olmak üzere iki tetikleyiciye bölündüğü gözlemlenebilir, böylece topun sepetin üstünden altına kadar geçirdiği süre hesaplanabilir. Bu iki tetikleyici /Assets/BallController.cs içindeki OnTriggerEnter içinde görüntülenebilir.
Yukarı ve aşağı tetikleyicilere sahip olmanın bir başka avantajı, topun malzemesini buna göre değerlendirebilmeniz ve mesafe ve kuvvet gibi iki temel değişkene hakim olmanıza yardımcı olabilmenizdir.
Basketbol üretmekten ve potaya vurmaya çalışmaktan sorumlu bir betik olan /Assets/BallSpawnerController.cs dosyasını açın. Bu kodu Shoot () sonunda da görüntüleyebilirsiniz.
Örnekleme kodunun, atış gücünü ve arkalığa olan mesafeyi ayarlayabileceğiniz yepyeni bir örneği temsil ettiğini fark ettiniz mi bilmiyorum.
/Assets/BallController.cs dosyasında açtıysanız, Start () yöntemini kontrol edebilirsiniz ve yeni bir basketbol eklerken bu kodu burada kullanacaksınız.
Başka bir deyişle, yeni bir top yaratırız ve ardından ona belirli bir kuvvet uygularız, yeni topların sürekli akışıyla başa çıkabilmemiz için top 30 saniye sonra otomatik olarak imha edilir.
Her şeyi ayarladıktan sonra, All-Star nişancımızın nasıl çekim yaptığına bir göz atalım. Unity editöründeki oynat butonuna tıklayabilirsiniz ve göreceğiz ...
Eksik!
Neden böyle bir durum var? Cevap, Assets / BallController.cs kodundaki float force = 0.2f satırında yatmaktadır. Bu çizgi tüm topların yörüngesini tutarlı hale getirdi, bu yüzden servis atmadan trajik bir son oldu.
Tabii ki ~ istediğimiz bu değil, bu yüzden bir sonraki adıma ve araştırmaya geçtim.
Gücü rastgele olarak değiştirerek rastgele bir gürültü ortaya çıkarabiliriz.
Bu şekilde, ne tür bir gücün vurulabileceğini anlayabiliriz. Tabii biraz zaman alacak ~
Şekilde gösterildiği gibi, kırmızı, atılmamış topu temsil eder ve yeşil, atılan topu temsil eder. Bu noktada, herhangi bir yoğunlukta çekim, kullanabileceğimiz bir veri noktasıdır ve bunlar aşağıda tartışılacaktır.
Aynı zamanda, kırmızı topun herhangi bir pozisyondan başarılı bir şekilde vurulmasını istediğimizi düşünmemiz gerekiyor, bu yüzden tek bir yerden atış yapmaktan daha fazlasına ihtiyacımız var. Assets / BallSpawnController.cs konumunda bu satırları bulun ve bu sorunu çözmek için MoveToRandomDistance () öğesini kaldırın.
Böylelikle tekrar koşarsak her atıştan sonra kırmızı topun şevkle sahada zıpladığını görebiliriz.
Rastgele hareket ve rastgele gücün birleşimi çok tuhaf bir şey yaratır: veri. Şu anda Unity'de konsolu kontrol ederseniz, her çekim için kaydedilen verileri görebilirsiniz.
Her başarılı atış kaydedilecek ve o ana kadar yapılan atış sayısı, sepete olan mesafe ve topa vurmak için gereken kuvvet görüntülenebilir. Bu veri artışlarının hızı nispeten yavaştır, MoveToRandomDistance () içindeki 0.3f parametresini (her atışın gecikmesi 300 milisaniyedir) 0.05f'ye (50 milisaniye gecikme) değiştirebiliriz.
Şimdi, parametre hata ayıklamamızın sonucuna bakın:
Bunun aslında iyi bir eğitim yöntemi olduğunu ve sistemin% 6,4'lük bir başarı oranı gösterdiğini keşfettiniz mi? Bir sonraki adımda, bu verileri Unity'den çıkaracağız ve gerekli gücü tahmin etmek için bir model oluşturacağız.
TensorFlow'u kullanmadan önce, Unity ortamındaki kırmızı topun yaklaşık 50 vuruşu tamamlamasına izin verdik.
Bu noktada, Unity projesinin kök dizinini kontrol ederseniz, success_shots.csv adlı yeni bir dosya görebilmelisiniz. Bu, Unity'nin orijinal dökümüdür. Bu verileri Excel'de analiz etmek için dışa aktarıyoruz.
Bu .csv dosyasında yalnızca üç satır, dizin, mesafe ve kuvvet vardır. Bu dosyayı Google E-Tablolar'a aktardım ve verilerin dağılımını anlayabilmek için trend çizgileri olan bir dağılım grafiği oluşturdum.
Bu noktalar, bazı kuralları bulmak için birleştirilebilir. Y ekseni kuvvettir ve x ekseni mesafedir. Bazı istisnalar dışında, gerekli mesafe ile atış mesafesi arasında net bir ilişki olduğu görülebilir.
TensorFlow'un piyasaya çıkma ve benzer kodlarla daha karmaşık modeller oluşturmamıza yardımcı olma zamanı. Örneğin, eksiksiz bir oyuna bazı yeni özellikler ekleyebiliriz.
Şimdi TensorFlow.js modelimizi oluşturmamız gerekiyor.
En sevdiğiniz düzenleyicide tsjs / index.js dosyasını açın, bu, veri eğitim modeline dayalı bir script success_shots.csv'dir. Modeli eğitme ve kaydetme yöntemi aşağıdaki gibidir:
Bir dizi x ve y koordinat noktası oluşturmak için .csv dosyasından veri yüklüyoruz, modelin bu verilere uymayı öğrenmesine izin veriyoruz ve sonra kaydediyoruz!
Ne yazık ki, TensorFlowSharp, Tensorflow.js'nin kaydedebileceği model biçimini kabul etmiyor ve modeli Unity'ye tanıtmak için bazı çeviri çalışmaları yapmamız gerekiyor.
Genel olarak konuşursak, TensorFlow.js Biçimi, bir denetim noktası oluşturmak için Keras Biçimine dönüştürülebilir; ayrıca bir denetim noktası oluşturmak için bunları Protobuf Grafik Tanımı ile birleştirebiliriz.
Şimdi, Unity'deki Assets / BallSpawnController.cs altındaki GetForceFromTensorFlow () içindeki modelin neye benzediğini görelim.
Yukarıdaki tamamlanmış sistemi kullanarak model üzerinde bir varyant oluşturduk. 500 kez antrenman yaparken simüle edilmiş basketbolun yörüngesi şu şekildedir:
Doğru oran 10 kat arttı!
Bu sadece 500 kez eğitimin sonucudur ve gerisi size kalmış ~ Oluşturduğum son sonuca geri dönüp bakmayı unutmayın, bu ne kadar güzel bir oyun ~
Orijinal blog adresi:
https://medium.com/tensorflow/tf-jam-shooting-hoops-with-machine-learning-7a96e1236c32?linkId=54634097
Açık kaynak kodu burada:
https://github.com/abehaskins
İyi şanslar ~
- Bitiş -
Stajyer işe alım
Qubit, etkinlik operasyonu stajyerlerini işe alıyor, AI yıldız şirketlerinin CEO'larını ve yöneticilerini içeren çevrimiçi / çevrimdışı etkinlikleri planlıyor ve yürütüyor ve AI sektör liderleriyle doğrudan iletişim kurma fırsatına sahip. Çalışma yeri Pekin, Zhongguancun'da. Lütfen özgeçmişinizi quxin@qbitai.com adresine gönderin.
Ayrıntılar için lütfen QbitAI diyalog arayüzünde "Stajyer" yazarak yanıt verin.
Qubit QbitAI · Toutiao İmzalayan Yazar
' ' Yapay zeka teknolojisi ve ürünlerindeki yeni eğilimleri takip edin