Giter VIP home page Giter VIP logo

negoruyorsun's Introduction

Ne Görüyorsun?

Ne Görüyorsun, çeşitli resimleri metinsel olarak tasvir eden GPT2 ve CLIP modellerini kullanan Türkçe Doğal Dil İşleme projesi.

image

Kaggle

Projenin Motivasyonu

Görme engellilerin en büyük problemi dış çevreyi tanımlamaktır. Bu sorunu çözebilmek için onlara dış çevreyi tasvir eden bir yapay zeka projesi geliştirdim.

Bu proje bir resim alır ve bu resmi analiz edip size yazıyla tasvir eder. Model eğitilirken kendi oluşturduğum wikipedia resim-metin veriseti, Turkish MSCOCO ve Tasvir Et verisetleri kullanılmıştır. Datasets kısmından daha fazla ayrıntıya bakabilirsiniz.

Model Kaggle ortamında yaklaşık 10 saat eğitildi. Her bir epoch 3 saat sürdü yani yaklaşık 3 epoch eğitilidi.

Teknofest Sunum Linki:https://docs.google.com/presentation/d/1U-gMP8bJkzaW_pu14nTu5CHa3S7SChhUdHkBMDg0tWQ

Örnek

demo_video.mp4

Modelin Detayları

Proje iki kısımdan oluşuyor, image encoder ve text decoder. İmage encoder, verilen resmi 512 uzunluğunda bir vektöre dönüştürür. Bu vektör içinde resimdeki önemli detayları(eşyalar,onların renkleri vs.) barındırır. Oluşturulan bu vektör başka küçük bir model sayesinde text decoder'a verilmek için boyutu arttırılır. Arttırılan bu vektör text decoder modeline verilir. Bu model ise aldığı vektöre bakarak yeni bir metin oluşturur. Oluşturulan bu metin, modelin resimde gördükleri olur.

CLIP
İmage Captioning Modeli

Projeyi yaparken daha önceden Türkçe verilerle eğitilmiş GPT-2 modeli kullanıldı. Bunun nedeni modelin daha hızlı Türkçe metinlere uyum sağlamasıydı. İmage encoder olarak da OpenAI'ın yayınlamış olduğu CLIP Image Encoder modeli kullanıldı. Bu modeli kullanmış olmamın nedeni, modelin daha önceden 400 milyon fotoğraf üzerinde eğitilmesi. Bu sayede model daha hızlı optimize edilebildi.

Model Sonuçları

Bir kız doğum günü pastasında mumları üfler. Sörf yapan bir adam. Bir grup otobüs, bir otoparkta park edildi.
Bir köpek bir yöne bakıyor. Elmanın yakın plan görüntüsü. Çimlerin altında duran bir yavru kedi.

Modeli Eğitmek

1. Projeyi Kendi Bilgisayarınıza Yükleyin

git clone enes3774/NeGoruyorsun 

2. Bağımlılıkları İndir

Modeli eğitmek için öncelikle requirements.txt dosyasındaki kütüphanelerin kurulmuş olması gerekir.

pip install -r requirements.txt

Bir de CLIP kütüphanesini github sayfasından yüklemeniz gerekiyor.

pip install git+https://github.com/openai/CLIP.git

3. Örnek Dataseti veya Kendi Datasetinizi İndirin

Modeli eğitmek için resimlere ve resimlerin Türkçe metinleri olan bir json dosyasına ihtiyacınız var.

  • Örnek olarak MSCOCO resimlerini buradan indirin ve proje dosyasında "images_data/" klasorü oluşturup içine atın.
  • Bu resimlerin Türkçe metinlerini barındıran json dosyasını da buradan indirip "dataset.json" olarak proje dosyasına koyun. Faklı verisetleri hakkında daha fazla bilgiyi datasets klasorunde bulabilirsiniz.

Dataseti hazırladıktan dosya klasoru bu şekilde olmalı:

.
├── images                  # Github için kullanılan resimler burada 
├── datasets                # verisetleri ve kullanımı hakkında 
├── İmageCaptioning         # Projenin modeli bu dosyada bulunuyor
├── images_data                  #içerisinde kullandığın verisetinin fotoğrafları olmalı
├── .gitignore            
├── dataset.json             #images içindeki resimlerin dosya adları ve o resme karşılık gelen metinleri barındırıyor 
├── LICENSE
├── requirements.txt
└── README.md

Kullandığınız dataset flickr ise train.py kodunda 4. satırı okuyun.

4. Modeli Eğitmek

Modeli eğitmek için aşağıdaki kodu yazın.

 python İmageCaptioning/train.py

Train dosyasındaki hiperparametreleri(epoch sayısı, batch_size, learning rate vb.) düzenleyip modeldeki sonuçları gözlemleyebilirsiniz(şuanki hiperparametrelerde model doğru sonuç verecektir.). Modeli bu veriyle 1 epoch eğitmeniz bile yeterli olacaktır.

Test Aşaması

1. Eğitilen Modeli Kaydetmek

Eğittiğiniz modeli ImageCaptioning dosyası içinde "checkpoints/" klasorune "model_latest.pth" şeklinde koymanız gerekiyor(Modeli eğitirken her 6000 adımda bir ve epoch sonunda kaydediliyor. Train ederken model doğru yere kaydedilecektir.). Hazır bir model checkpoint paylaşmayacağım çünkü model çok hızlı bir şekilde(yaklaşık 1-2 saate çalışan bir model elde edebilirsiniz.) eğitebiliyor olmanız.

2. Modeli Test Etmek

Modeli belirtlien dosyaya koyduktan sonra test kodunu çalıştırın.

python İmageCaptioning/test.py

Test kodundaki resmi değiştirip farklı resimler için modeli test edebilirisiniz.

📓 Kaggle

  • Modeli Kaggle ortamında yaklaşık 2 saatte eğitebilirsiniz. İçerisinde eğittiğiniz modeli kullanmak için beam_search ve greedy olmak üzere 2 algoritma bulunuyor.

Videoları Tasvir Etmek

Bu model ile videoları tasvir etmek de mümkün. Bununla alakalı PredictVideoCaption.py kodunu paylaştım. Bunu yaparken verdiğiniz videodan 5 saniyede bir resim alınıp modelden geçiriliyor. Elde ettiğiniz metinler toplanıyor ve bu sizin videoda ne yaptığınızın özeti oluyor. Burada cümleler birbirine benzeyebilir. Bunu önlemek için birbirine çok benzeyen cümleleri atabilirsiniz.

Bunu kullanarak tam zamanlı görüntü tasviri yapabilirsiniz.

Örnek

!!!LÜTFEN SESİ AÇIN

Video.demo.mp4

NOT: Oluşturulan cümleler tamamen eğittiğim yapay zeka tarafından elde edildi. Projenin işlevselliğini ortaya çıkarmak için bir video düzenleyicisinden seslendirme ve altyazı eklenmiştir. Bunu Google Text to Speech gibi bir API kullanarak otomatik şekilde yapmak mümkün.

Risk Puanı Hesaplanması

Elde edilen cümleler üzerinde kullanıcıyı tehdit eden durumlar tespit edilmesi ve kullanıcıyı uyarmak için risk puanı hesaplanmıştır. Bununla alakalı CalculateTestScore.ipynb kodu hazırlandı. Yaptığı şey, verdiğiniz metni almak ve bu cümlenin bir görme engelli için ne kadar tehlikeli olduğunu döndürmek. Bunu yaparkenki aşamaları:

  1. Cümleler kelimelere ayrıldı ve her bir kelimenin kökü alındı
  2. Alınan kelime köklerinin, daha önceden verilen tehlikeli kelimelerle olan benzerliği hesaplandı. Bu sayede o kelimenin ne kadar tehlikeli olduğu öğrenildi.
  3. Elde edilen kelimelerin tehlike puanları toplanıp o cümlenin tehlike skoru hesaplandı.

Gelecek Hedefler

  1. Veriyi Genişletmek Modele günlük hayatta olmayan veriler(animasyonlar, hayali figürler, sanatlar) vererek modelin her konuda fikir sahibi olmasını sağlamak.

  2. Modelin videoları daha iyi anlaması için frame değil birden çok frame’i aynı anda alıp değerlendiren bir video encoder model kullanılması.

  3. Projenin mobil app halinde kullanılabilir olması.

  4. Giyilebilir bir teknoloji ile görme engelliler için projeyi hayata geçirmek. Eğer model sonuçları arttırıl

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.