- Published on
Yapay Zeka ile Video Kodlamayı Geliştirme - Bölüm 3/6
Bu yazı serimizde yapay zeka ile video kodlamayı nasıl geliştirebileceğimiz hakkında konuşmaya devam ediyoruz. Bu yazıda video kodlayıcı bileşenlerini yapay zeka ile nasıl geliştirebileceğimiz konusuna bakıyoruz.
Meylü't-Terakki: Yapay Zeka ile Daha Gelişmiş Video Kodlayıcılara Doğru
Video içeriğine olan talebin artışı ve görüntü teknolojilerindeki sürekli gelişmeler (daha yüksek çözünürlük vb.); daha etkili bir video kodlayıcı geliştirmenin önemini gün geçtikçe arttırıyor. Bu yüzdendir ki standard video kodlayıcıları geliştirmek hala daha üzerine yoğun çalışmalar yüretilen bir konu. Fakat, her ne kadar yeni geliştirilen video kodlayıcılar kendilerinden önceki nesle nazaran kodlama verimini arttırsalar da, bu artış bedavaya köfte yok felsefesi gereği beraberinde ciddi şekilde yükselmiş bir kodlama zamanı ile geliyor. Daha iyi anlamak için son üç nesil video kodlayıcı arasındaki kodlama verimliliği ve kodlama zamanı değişimini gösteren aşağıdaki figüre bakabiliriz. Her nesilde video boyutu düşse de video kodlamak için gereken zaman ciddi miktarda artıyor.
Öte yandan, günümüzde yapay zekanın dahil olmadığı bir uygulama alanı neredeyse kalmadı gibi. Hal böyleyken video kodlayıcılar da bu çılgınlıktan nasibine düşen payı almış durumda. Yapay zeka yöntemleri kullanılarak video kodlayıcıları geliştirme çalışmaları son yıllarda hız kazanmış durumda. Burada genel olarak iki tip yaklaşım var, video kodlayıcı bileşenlerinden birini yapay zeka ile desteklemek veyahut o bileşeni tamamıyla yapay zeka tabanlı bir bileşenle değiştirmek.
Video kodlama sırasında verilmesi gereken kararların çok komplike ve çok sayıda ihtimal içermesi, bu karar mekanizmalarını yapay zeka ile desteklemeyi mümkün hale getiriyor. Bu yazı serimizin ilk kısmında bahsettiğimiz üzere, video kodlamadaki ilk adım video karesini ufak ufak bloklara ayırmak. Bu basit bir görev gibi gözükebilir; ancak, bu blokların sahip olabilecekleri ayrılma şekillerinin sayıca çok fazla olması bu süreci aşırı çok zaman alır hale getiriyor.
Hareketin çok olduğu bölgelere daha küçük blok boyutları ayırmak, bu bölgelerdeki harekete daha isabetli yakalamaya imkan vereceğinden, oldukça önem arz ediyor. Benzer mantıkla, hareketin az olduğu bölgelerde çok detaylı hareket tespiti yapmamız gerekmediği için, daha büyük bloklar ayırmak işlem kolaylığı açısından önemli. Bahsettiğimiz blok boyutu ayırma süreci, genel olarak kaba kuvvet, yani olabilecek tüm ihtimalleri deneyip video boyutu-kalitesi dengesi açısından en uygununu seçmek, şeklinde yapılıyor.
Burada işin önemini anlamak açısından bir örnek verelim. Son çıkan video kodlama standardlarından olan HEVC, Coding Tree Unit (CTU) adı verilen ve varsayılan boyutu 64x64 olan bir blok kullanır. Her bir CTU ise kendi içerisinde dört eşit boyutlu kareye ayrılmak suretiyle, üç kez daha bölünebilir (en küçük blok boyutu 8x8 oluyor).
Her bir video karesi öncelikle 64x64 boyutlarındaki bloklara bölünür. Elimizdeki video karesi 1920x1080 boyutlarında ise, bu 510 adet blok olacağı anlamına geliyor. Bu ilk bölünmeyi takiben, her bir blok da kendi içerisindeki hareket miktarına göre tekrardan bölünmeye devam edebilir. 64x64 boyutundaki blok bölündüğü zaman, 32x32 boyutlarında 4 adet alt-blok oluşmuş olacaktır. Bu bloklardan her biri de bu işlemi iki kere daha devam ettirebilir. Hesaplamayı yaptığımız zaman, 64x64 boyutlarındaki her bir CTU için, toplamda 83522 adet farklı bölünme şekli olduğunu görebiliyoruz. Bu sadece tek bir blok için gereken hesaplama miktarı. Tek bir karede 510 adet blok olduğunu ve tipik bir videonun saniyede 30 kare içerdiğini göz önüne alırsak, bu sürecin tamamlanması için gereklenen işlem miktarının çokluğunu ve neden bu kadar zaman aldığını anlayabiliriz.
Peki ya farklı bir çözüm olsaydı? Ya her bir seçeneği tek tek denemek yerine, bazı seçenekleri denemeden eleyebilsek veyahut direkt olarak izlememiz gereken blok bölünmesi yapısını tahmin edebilseydik? Bunlar ve benzeri sorular bu alanda çalışan araştırmacılar tarafından defalarca soruldu ve çözüm olarak yapay zeka destekli yaklaşımlar geliştirilmeye çalışıldı.
Bu, yapay zekanın video kodlamayı nasıl geliştirebileceği hakkında sadece bir örnemkti. Video kodlama sürecinde benzer şekilde desteklenebilecek çok sayıda işlem bulunmakta. Aşağıdaki figürde bir takım örnekler vermeye çalıştım.
Yapay zeka destekli geliştirmeler video kodlama sürecinde karar verme mekanizmalarının olduğu her yerde uygulanabilirler. Gerek işlem sürecini azaltmak için blok yapısını tahmin etme olsun gerek pikseller arası hareket akışını tahmin etmek olsun, yapay zeka destekli geliştirmelerin video kodlama sürecinde her zaman bir uygulama alanları olacaktır.
Bu yazımızda yapay zekanın video kodlamayı nasıl geliştirebileceğine dair ufak bir örnek verdik. Bir sonraki yazıda ise yapay zekayı video kodlama sürecinin kalan yerlerinde nasıl kullanabileceğimiz hakkında konuşacağız.