PyACL ile Veri İşleme— DVPP

Serkan Celik
Huawei Developers - Türkiye
5 min readDec 1, 2023
Görsel Referansı

Giriş

Merhaba! Bu yazımızda, pyACL API ile daha fazla neler yapabileceğimizi inceleyeceğiz. Ele alacağımız konu veri ön işleme aşamaları olacaktır. Veri ön işleme aşaması, yapay zeka modellerinin önemli bir noktasıdır. Modellerin eğitimi sırasında, eğitilmiş modellerin çıkarım senaryoları sırasında ve uygulamaların geliştirilmesinde yaygın olarak kullanılır.

pyACL’nin temelleri, nasıl çalıştığı, uygulama akış şemaları, “NPU” kaynaklarının tahsisi ve basit örneklerden başlamak isterseniz, pyACL API’a Giriş yazısına göz atabilirsiniz.

Tipik Seneryolar

Kaynak görüntünün veya videonun çözünürlüğü ve biçimi, model gereksinimlerini karşılamak için işlenebilir. Örnek olarak tipik bir senaryoya göz atalım.

Video Çözme ve yeniden boyutlandırma

Nesne algılama görevi için bir YOLOv3 modelimiz olduğunu düşünelim. Giriş videosunun da H.264 / H.265 kodlama formatında ve çözünürlüğün 1920x1080 olduğunu düşünelim. YOLOv3 modelinden çıkarım almak için 416x416 çözünürlüğe sahip bir RGB veya YUV giriş görüntüsüne ihtiyacımız vardır. Bu durumda, videoyu aşağıdaki gibi işlememiz gerekir.

Görsel Referansı

Görüntü çözme, yeniden boyutlandırma ve format dönüştürme

Sınıflandırma görevi için bir ResNet-50 modelimiz olduğunu varsayalım. Giriş görüntümüzü de JPEG formatında ve çözünürlüğünü de 1280x720 olarak düşünelim. ResNet-50 modeli, 224x224 çözünürlüğe sahip bir RGB giriş görüntüsü gerektirir. Bu durumda, görüntüyü aşağıdaki gibi işlemeliyiz.

Görsel Referansı

Görüntü kırpma, yeniden boyutlandırma ve format dönüştürme

Aynı şekilde sınıflandırma görevi için bir ResNet-50 modelimiz olduğunu varsayalım. Giriş görüntüsünü YUV420SP formatında ve çözünürlüğünü de 1280x720 olarak düşünelim. ResNet-50 modeli, 224x224 çözünürlüğe sahip bir RGB giriş görüntüsü gerektirir. Bu durumda, görüntüyü aşağıdaki gibi işlememiz gerekmekte.

Görsel Referansı

Bu süreç hakkında daha fazla örnek verebiliriz. Görüldüğü gibi, veri ön işleme aşaması AI modelleri için önemlidir. Çünkü yapay zeka modelleri için çıkarım süreçleri yapmak istiyorsak, model girdisinin ihtiyaçlarını karşılamamız gerekiyor.

Veri İşleme Metodları

Ascend CANN, DVPP ve AIPP olarak adlandırılan iki görüntü / video veri işleme modu sağlar. DVPP, Digital Vision Pre-Processing ve AIPP, Artificial Intelligence Pre-Processing ifadesinin kısaltmasıdır. AIPP ve DVPP ayrı ayrı veya birlikte kullanılabilir. Kombine uygulamalarda, DVPP ilk olarak görüntüleri veya videoları çözmek, kırpmak ve yeniden boyutlandırmak için kullanılır. Bununla birlikte, DVPP donanım kısıtlamaları nedeniyle, DVPP’den sonraki görüntü formatı ve çözünürlüğü model gereksinimlerini karşılamayabilir. Bu nedenle AIPP, renk alanı dönüştürme (CSC), görüntü kırpma ve sınır oluşturma için gereklidir.

Görsel Referansı

İşlev Destekleri

pyACL farklı medya veri işleme API’leri sağlar. Sağlanan fonksiyon türleri şöyledir;

Görsel Referansı

VPC ile neler yapabileceğimize bir örnek verelim. İlk olarak, API çağrı dizisi hakkında konuşarak başlayabiliriz. Örnek olarak, giriş resmimizi model girişlerimize göndermeden önce kırpma ve yeniden boyutlandırma yaptığımız bir senaryo düşünelim.

Görsel Referansı

Çağrı sırası çizelgesinde gördüğümüz gibi, veri işlemeye başlamak için bir kanal oluşturarak başlayabiliriz. Kanalı oluşturduktan sonra, sırasıyla ROI konum yapılandırmasını ve yapılandırmayı yeniden boyutlandırmayı oluşturmamız gerekir.

Kırpma ve yeniden boyutlandırma aşamasına başlamadan önce, giriş veya çıkış verilerini depolamak için arabellekler ayırmamız gerekir. Bu nedenle, her resim dosyası için cihaz arabellekleri ayırmamız gerekir. İşlemlerimizi gerçekleştirdikten sonra, kırpma ve yeniden boyutlandırma yapmaya hazırız demektir.

Kırpma aşaması hakkında, bir giriş görüntüsünden seçilen ROI’yi kırpmak için API’yi çağırabiliriz. Yapabileceğimiz bir diğer işlem ise kırpma ve yapıştırma işlemidir. Girdi görüntüsünden seçilen bir ROI kırpma yapmak için dvpp_vpc_crop_and_paste işlevini çağırabilir ve kırpma ROI’sini hedef görüntüde çıkış görüntüsü olarak belirtilen alana yapıştırabiliriz.

Yeniden boyutlandırma aşaması hakkında, giriş görüntüsünü yeniden boyutlandırmak için dvpp_vpc_resize_async işlevini çağırabiliriz. Belirtilen akıştaki tüm görevler tamamlanana kadar synchronize_stream işlevini çağırmayı unutmamalıyız.

Kırpma ve yeniden boyutlandırma işlemlerini bitirdikten sonra, ilk aşamada tahsis ettiğimiz kaynakları kaldırmamız gerekir. Kaynakları kaldırmak için dvpp_free fonksiyonunu çağırabiliriz.

Son olarak, ROI yapılandırmalarını silmemiz ve yapılandırmaları sırasıyla yeniden boyutlandırmamız gerekir. Yapılandırmaları sildikten sonra kanal ve kanal açıklama bilgilerini de silebiliriz.

Tüm süreci açıklığa kavuşturmak için, DVPP ile basit bir kırpma örneğine bakalım. Bu sayede tüm süreci daha iyi anlayabiliriz.

DVPP ile Resim Kırpma Örneği

Kırpma işlemini başlatmak için acl kütüphanesini çağırmamız gerekiyor.

Çalışma zamanı kaynaklarını ayırmamız gerekiyor. Sırasıyla, cihazı, bağlamı ve akışı ayırmamız gerekir.

Çağrı sırası çizelgesinde belirttiğimiz gibi, kırpma alanı konfigürasyonlarını tanımlamamız gerekiyor. Bu aşamada, kırpma alanının ROI’sini tanımlıyoruz.

Ayrıca, bir veri işleme kanalı oluşturmamız gerekiyor. dvpp_create_channel_desc() fonksiyonu ile bu işlem kanalını oluşturabiliriz.

Veri işlem şemasına göre; bir sonraki aşama giriş/çıkış görüntü tanımlarını oluşturma olmalıdır. Kanalı oluşturduktan sonra giriş ve çıkış verisi için bilgileri içeren bir kanal oluşturmalıyız.

Her aşamayı tanımladıktan sonra, DVPP kullanarak kırpma işlemine başlayabiliriz. Önce dvpp_vpc_crop_async() fonksiyonunu çağırmalıyız, bundan sonra işlemi eşitlememiz gerekir. Bu amaçla synchronize_stream() fonksiyonunu çağırabiliriz.

Bu kısımda, tahsis ettiğimiz kaynakları yok etmemiz gerekiyor. Sırasıyla, görüntünün giriş/çıkış açıklamaları, arabellek kaynakları, kanal ve kanal açıklamaları bellekten kaldırılmalıdır. “ret” kodları süreci kontrol etmemizi sağlayacak bilgilendirme kodları içerir. Ret kodları süreçleri yok ettikten sonra “0” değerini alırsa, işlemimiz başarıyla sonlanmış demektir.

Benzer şekilde, açıklama bilgilerini yok ederek, sırasıyla akış, bağlam ve cihaz kaynaklarını kaldırmamız gerekir.

Son kısımda ise “acl” kaynaklarını sonlandırmamız/kaldırmamız gerekiyor.

Bu ön işleme akışının sonunda, önceden işlenmiş görüntü verilerimizi alabiliriz. Verilerimizi model çıkarım aşaması için kullanabiliriz.

Sonuç

Digital Vision Pre-Processing özelliğinin temellerini pyACL API ile öğrendik. Bu DVPP fonksiyonlarını NPU cihazlarında ön işleme aşamalarını kullanabiliriz. DVPP işlevlerini kullanmak, NPU cihazlarında daha hızlı ön işleme süreleri elde etmemizi sağlayacaktır. Daha fazla bilgi için, referanslar bölümünü kontrol edebilirsiniz.

Gelecek yazılarda görüşmek üzere :)

Görsel Referansı

Kaynaklar

--

--