Thursday, November 16, 2017

Video - 17/11

Sunday, November 5, 2017

MathJax: Web Sayfalarinda Javascript ile Matematik Formülleri

LaTeX ile yazilan matematik formullerinin HTML icinde gosterilebilmesi icin MathJax Javascript kutuphanesi var. Gerekli JS dosyalari diger HTML, CSS dosyalari ile birlikte ayni dizinde olur, gerektikce servis makinasindan alinir, ve formul grafiginin uretilmesi icin islem zaten Javascript ile kullanicinin tarayicisinda yapilir.

Kurmak icin GH'dan kod alinir, 


Depo icinde gereken dosya / dizinler

config/
extensions/
jax/
MathJax.js

Bu dosyalar sayfalarla beraber web servis makinasindan servis edilecek. Simdi bu dosyalarla ayni seviyede olan bir HTML dosyasi icinde

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    tex2jax: {inlineMath: [["$","$"],["\\(","\\)"]]}
  });
</script>
<script type="text/javascript" src="MathJax.js?config=TeX-AMS_HTML-full"></script>

</head>
<body>

<p>
Eğer $a \ne 0$ olursa  \(ax^2 + bx + c = 0\) denkleminin çözümü iki tanedir
ve bunlar $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
</p>

</body>
</html>

Bu dosya tarayicida gosterilince 


MathJax yaklasimi guzel cunku ek bir "uretme komutu"na gerek duymuyor - kod HTML icinde, bildigimiz LaTeX olarak kaliyor, servis tarafinda neredeyse hic islem yapilmiyor, sayfayi gormek isteyen kisinin bilgisayari gerekli islemi yaparak formulu goruyor. 

Monday, October 30, 2017

YOLO - Evrişimsel Derin Ağlar ile Hızlı Obje Tanıma (Object Recognition)

Evrişimsel Derin Ağlar ile obje tanıma alanında hızlı gelişmeler oluyor. Yapay görüş (computer vision) zaten derin öğrenmenin "geri dönüşünün" ilk gözlendiği alandı, MNİST sayı tanıma problemindeki en iyi hata oranı bir DYSA ile alınmıştı, ardından araçlar, yaklaşımlarda ilerlemeler oldu, şimdi R-CNN, Mask R-CNN ile obje tanımakta ilerlemeler kaydedildi. Evrişimsel derin yapı obje tanımada verimli bir şekilde kullanılabilmeye başlandı.

Yeni ve çok hızlı işleyen bir başka yaklaşım YOLO. Kısaltma "sadece bir kere bakarız (you only look önce)" cümlesinden türetilmiş, söylenmek istenen insanların tek bir karedeki görüntüde olan objeleri hızlı bir şekilde bir bakışta bulabilmesi. YOLO'nun amaçı bu hiza erişmek.

https://pjreddie.com/darknet/yolo/

YOLO tasarımcılarına göre görüntü karesini solda sağa taramak (ve o sırada ufak bir kutu içine düşen piksellere bakmak), ya da obje yeri hakkında teklif üretmek (r-cnn) gerekli değil. Tüm kare ve o karedeki tüm obje tipleri, yerleri hakkında global bir karar verilebilir.


Yöntem aslında basit: tüm görüntü önce S x S parçaya bölünür  (S=7 diyelim), ve tüm bu parçalar ile B tane obje arasında bir regresyon ilişkisi kurulur. Tabii denetimli bir eğitimden bahsediyoruz, elde görüntü, ve o görüntüdeki objeler, onların yerleri, büyüklüğü bilgisi olmalı. Bu eğitim verisi açık şekilde mevcut, o problem değil, ünlü Pascal VOC verisi bunlardan biri. Regresyon hedefi olan objeler x,y,w,h,g değerleri ile temsil ediliyor, x,y objenin parçaya göre yeri, w,h genişliği ve yüksekliği, g ise obje hakkındaki bir güven değeri. Ayrıca bir diğer regresyon her parçanın Ç tane obje tipi için bir kategorizasyon tahmini yapması. Eğer B=2, C=20 ise, yani her parça iki tane objeyi tahmin ediyor ve elimizde 20 tane kategori var ise S x S (B * 5 + C) formülü, 7 * 7 * (2 * 5 + 2) büyüklüğünde bir tensor var demektir. Bu tensor tahmin hedefi bu arada, yani bir regresyonda y ~ x dediğimizde kullanılan y.


Hedef icin verilen kaynak parca icine dusen pikseller, daha dogrusu bu piksellerin evrisimden gecirilmis hali. Bu evrisim tabakasi oldukca standart, unlu MNIST icin kullanilan DYSA tabakalarindan pek farkli degil.

Bu kadar. Üstteki bağlantıda kod ve önceden eğitilmiş bir DYSA'nın ağırlık değerleri bulunabilir. Verilen kodu denedik, sonuçlar iyi. Altta trafik lambası ve dur işareti üzerinde işlettiğimiz deneyin sonuçları görülüyor. Sadece eğitilmiş YSA'nın ağırlıklarını indirdik, kodu derledik ve başka hiçbir ek işlem yapmadan bu tanıma yapıldı.



YOLO yaklaşımını TensorFlow ile yapan bazı kodlar altta,

https://github.com/nilboy/tensorflow-yolo

https://github.com/hizhangp/yolo_tensorflow

Başka TF kodları da Github'da var.. YOLO C++ ile yazılmış, bu arkadaşlar TF Python ile aynı işi yapmışlar, kimisi üstteki aynı DYSA ağırlıklarını olduğu gibi kullanabildiğini iddia ediyor. TF bilindiği gibi Android üzerinde de işler, yani cep telefonunu tutup sak diye bir karedeki tüm objeleri tanıyabildiğimiz bir uygulama yazmak mümkün. Orijinal kod ile arkadaşlar saniyede 40 kareden daha fazlasını işleyebildiklerini söylüyorlar, o zaman canlı bir şekilde video da işlenebilir demektir.

Ekler

Eğitim sırasında hangi parça hangi obje ile eşlenir? Eğitim verisindeki obje etrafındaki kutunun orta noktasına bakılır, bu orta nokta hangi parça içine düşüyorsa, o parça ile obje arasında ilişki kurulur. Peki bir obje ile alakası olmayan parçalar ne yapılır? Onlara da kendileri merkezli B tane "obje" ile ilişki kurulur fakat bu ilişkideki güven katsayısı sıfır olarak verilir, yani böylece "orada obje yok" demiş oluyoruz.

DYSA yapisina bakarsak ardi ardina evrisim ve max havuz (pool) katmanlari goruyoruz.

Evrisim katmanlarindaki notasyon, mesela 7 x 7 x 64-s2 su demek, 7 x 7 boyutunda 64 tane filtre uygulaniyor ve bu filtreler her uygulama sonrasi 2 hucre kenara kaydiriliyor (stride).

Mimarıda tamamen bağlanmış (fully connected) katmandan bir önceki 7 x 7 x 1024 boyutlarındaki tensor, girdi imajının işlene işlene oluşturulmuş son hali. Bu tensorda her imaj parçası 1024 kanallik bir vektör haline gelmiştir. Mesela üstten 2. soldan 1. parçanın verisi bu tensorda [1,0,:] ile erişiliyor olabilirdi, ve bu 1024 öğeli vektör o parçayı temsil eden girdidir. Sonuç tensor'u ile regresyona sokulan bu veridir.

Baglantilar

http://machinethink.net/blog/object-detection-with-yolo/ - bilgilendirici bir yazi

https://youtu.be/NM6lrxy0bxs - YOLO tasarimcisinin video'su

Tuesday, October 24, 2017

HTML Ders Notları

LaTeX ile yazilmis olan ders notlari make4ht ile HTML'e cevirildi, ve alttaki adresten servis ediliyor.

https://burakbayramli.github.io/dersblog

HTML sayfalarini Github Pages ile servis ediyoruz. Github bilindigi gibi kaynak kod deposu Git uzerine kurulu, Pages servisi ile GH'da bir depoyu "servis edilebilir" olarak isaretleyince bu depo icindeki kod / sayfa [kullanici].github.io/[depo] uzerinden yayinlanabiliyor, yani depoya konan bir html dosyasi bu adres uzerinden erisilebilir hale geliyor. Bu isaretleme islemi depo | settings ve en alttaki kisimda sayfalarin hangi kod dalindan (branch) geldigini secince tamamlaniyor.


Google reklamlari kullanmak isteyenler icin iyi haber, Github bunun icin bir kisitlama getirmemis, yani reklam kodunu html icine koyunca reklam yayinlaniyor.

Sunday, October 15, 2017

Seslendirme, Dublaj Nasil Yapilir

Diyelim YouTube'dan bir video'ya Turkce seslendirme yapmak istiyoruz. Once video'yu indiririz, youtube-dl araci bu is kullanilabilir,

sudo pip install youtube-dl

youtube-dl [youtube video url adresi]

Video alindiktan sonra, mesela video-en.webm diye bir dosya olsun, video'yu baslatiriz, ayni anda Android cep telefonunda Voice Recorder aracini baslatiriz. Benim yaklasimim ana video'dan 5-10 saniye kadar izlemek, video dondurmak (pause), izledigim / duydugum konusmayi aklimda tercume edip aninda VR ile mikrofonda kaydetmek. Yani baska hicbir on hazirlik yapmadan direk  kaydi yapmak. Gayet basit. Tabii video / kayit donduruldugunda dusunmek icin bol vakit var, ve bu izle-tercume-kaydet islemini 5 dakikalik buyuk bloklara ayiriyorum, boylece aralarda mola vermek, hata ihtimalini azaltmak kolaylassin. VR ile kaydedilenler bir daha geri gidip duzeltilmiyor, o sebeple cok hatali bir kayit varsa sadece son 5 dakikalik blok tekrar kaydedilir, gerisi kaybedilmez.

Neyse, diyelim 15 dakikalik ana video'dan sonra 3 tane 5'er dakikalik tercume kayit edildi. VR kayitlari m4a formatinda dosyalar, bu dosyalari alip dizustune getiririz, v1.m4a, v2.m4a,.. olsun,

ffmpeg  -i v1.m4a  v1.mp3
ffmpeg  -i v2.m4a  v3.mp3
ffmpeg  -i v3.m4a  v4.mp3

diye mp3 formatina ceviririz. Bu dosyalari birlestirip tek bir dosya yaratalim,

cat v*.m4a > voice.mp3

Simdi nihai seslendirme icin video'nun ses kismini bizim kaydettigimiz mp3 yapalim,

ffmpeg -i video_en.webm -i voice.mp3  -map 0:v -map 1:a -c:v copy -c:a libvorbis -ac 2 -shortest video_tr.webm

Artik video_tr.webm icinde seslendirilmis video var.