YOLOv7 Modelinin Ascend İşlemcilerine Uyarlanması

Hüseyin Çayırlı
Huawei Developers - Türkiye
5 min readJul 14, 2023
Ascend 310 Inference İşlemcisi

Giriş

Merhaba! Bu yazımızda, popüler yapay zeka tabanlı nesne tespit modellerinden biri olan YOLOv7 modelini Ascend işlemcilerinde nasıl inference yapılabileceğinden bahsedeceğiz.

Başlayalım!

Huawei’nin Ascend işlemcileri, özel olarak tasarlanmış yapay zeka işlemcileridir. Da Vinci Mimarisi, yapay zeka modellerinin daha hızlı ve verimli bir şekilde eğitilmesini sağlamak için kullanılan bir yapıdır. Ascend işlemcileri, çok boyutlu matrisleri hızlı bir şekilde işleyerek yapay zeka uygulamalarında yüksek performans sunar. Detaylı bilgiye aşağıdaki Huawei Ascend: Geleceği Şekillendiren Teknoloji NPU adlı makaleden ulaşabilirsiniz.

Günümüzde, state-of-the-art yapay zeka tabanlı nesne tespit modelleri yüksek başarı sağlasa da gerçek zamanlı uygulamalarda kullanabilmek için yüksek işlem gücü kapasitesi gerektirir. Ascend işlemciler, nesne tespit modellerini gerçek zamanlı olarak çalıştırmak için gerekli işlem kapasitesini sağlayabilirler.

Aşağıda YOLOv7 ile inference uygulaması geliştirebileceğiniz bir cihaz olan Atlas 300I Pro Inference Card’a ait bir görsel yer almaktadır. Atlas 300I Pro Inference Card ve diğer Atlas cihazları hakkındaki detaylı bilgiye aşağıdaki Ascend Full-Stack AI Yazılım/Donanım Platformu adlı makaleden ulaşabilirsiniz.

Atlas 300I Pro Inference Card

YOLOv7, gerçek zamanlı nesne tespiti için popüler bir modeldir. YOLO (You Only Look Once) ailesine Temmuz 2022'de eklenmiştir. YOLOv7 makalesine göre, hızlı ve yüksek başarıma sahip gerçek zamanlı nesne tespit modelidir.

YOLOv7 modeli, YOLOv4, Scaled YOLOv4 ve YOLO-R modellerinden esinlenerek birçok değişiklik ve iyileştirme içermektedir. Bunlar arasında şunlar bulunur:

  1. Extended Efficient Layer Aggregation(ELAN) Ağları: ELAN, parametreler, hesaplamalar ve hesaplama yoğunluğuna dayalı verimli mimariler tasarlamaya odaklanır.
  2. Model Ölçeklendirme için Birleştirme Temelli Yaklaşım: Model ölçeklendirme, farklı çıkarım hızları için farklı ölçeklerde modeller oluşturmak için modelin özelliklerini ayarlar.
  3. Eğitilebilir Bag-of-Freebies: Eğitim maliyetini artırmadan model performansını iyileştirmek için kullanılan tekniklerdir. YOLOv7 modelinde yer alan RepConv, ResNet’e benzer bir konvolüsyon bloğu olarak tanıtılır, ancak ek bir 1x1 filtre bağlantısı vardır. RepConv ile eğitim maliyeti arttırılmadan perfomans iyileştirmesi yapılmıştır.
  4. Derin Denetim (Deep Supervision): Performansı artırmak için bir ağın orta katmanlarına yardımcı bir çıktı katmanı eklemeyi içerir. Bu yöntem modelin çeşitli görevlerdeki performansını önemli ölçüde artırır. YOLOv7 mimarisi, nihai çıktıdan sorumlu bir lider çıktı katmanı ve eğitim yardımı için bir yardımcı çıktı katmanı içerir.

Diğer YOLO modellerine kıyasla, YOLOv7 daha yüksek hız ve doğruluk sunmaktadır. YOLOv7 modelleri, 5 FPS ile 160 FPS arasında farklı hızlarda çalışabilir ve COCO veri kümesi üzerinde ortalama hassasiyet (mAP) açısından diğer modellerden daha iyi performans gösterir.

YOLO Modelleri Kıyaslama Tablosu

YOLOv7 modelini Ascend işlemcilerinde çalıştırabilmek için bazı ön işlemler yapmanız gerekmektedir. ATC ve ACL, bu ön işlemlerde ve inference sırasında kullanılacak olan araçlardır.

ATC, Ascend mimarisine sahip işlemcilerde çalışan bir tensor derleyicisidir. Yapay sinir ağı modellerini Ascend AI işlemcisi tarafından desteklenen offline modellere dönüştürmek için kullanılır. ATC, popüler model formatlarını destekler ve dönüşüm sürecinde optimizasyon işlemleri gerçekleştirir. Ayrıca, half precision hesaplama işlemlerini destekleyerek daha az bellek kullanımıyla yüksek performans sağlar. Sonuç olarak, ATC, Ascend AI işlemcileri için gerekli dönüştürme ve optimizasyon işlemlerini kolaylıkla yapabilen güçlü bir araçtır.

ACL (Ascend Computing Language), Ascend işlemcileri için geliştirilmiş bir arayüz fonksiyon koleksiyonudur. Kullanıcılara inference kodu oluşturma imkanı verir ve çeşitli işlevleri içerir. C++ ve C dillerini destekler ve derin sinir ağı uygulamaları için kullanılabilir. Python tabanlı bir sürümü olan PyACL ise ACL işlevlerini Python dilinde kullanmayı kolaylaştırır. ACL, Ascend işlemcileriyle uyumlu çalışmak için gereken araçları ve işlevleri sunar, bu da kullanıcıların bu işlemcilerde etkili ve verimli bir şekilde model çalıştırmasını sağlar.

ATC ve ACL hakkında detaylı bilgiye aşağıdaki Ascend İşlemcilerin Temel Komponentleri adlı makaleden ulaşabilirsiniz.

YOLOv7 modelini Ascend işlemcilerinde çalıştırmak için öncelikle ATC kullanarak modeli dönüştürmeniz ve ardından ACL kullanarak inference yapmanız gerekmektedir. Şimdi bu aşamaları daha detaylı olarak inceleyelim.

YOLOv7 Modelinin Ascend İşlemcilerinde Çalıştırılması

  1. İlk olarak, modeli ATC kullanarak dönüştürmemiz gerekmektedir. ATC, modelimizi Ascend işlemcisi tarafından desteklenen offline bir modele dönüştürmek için kullanılır. ATC komutu, Caffe, MindSpore, Tensorflow ve Onnx gibi popüler model formatlarını destekler. Bu yüzden Pytorch formatında olan YOLOv7 modelini ONNX’e dönüştürülür. ONNX formatındaki YOLOv7 modelini elde edebilmek için aşağıdaki adımları uyguluyoruz. Hazırlanan sanal environment için gerekli bağlılıklar sağlandıktan sonra uygun parametreler verilerek ONNX modelimizi elde edeceğiz.

2. Onnx dönüşümü tamamlandıktan sonra elde edilen yolov7.onnx modelini ATC kullanarak offline modele (.om formatına) dönüştürebiliriz. ATC komutunu kullanırken verilen girdi parametrelerini uygun bir şekilde doldurmalıyız. Girdi ve çıktı model isimleri ile birlikte modelin çalıştırılıcak olan Ascend işlemci tipini (Ascend310 veya Ascend910) ve input modelin frameworkunu belirtmemiz gerekiyor. Aşağıda verilen atc komutu örneğinde framework girdisi olarak verilen 5 değeri, modelin frameworkunun ONNX olduğunu belirtir. Bu komutu da terminalde çalıştırdıktan sonra Ascend işlemcinde çalıştıracağımız offline modeli (.om) elde edeceğiz.

3. Artık modelimizi Ascend işlemcimizde çalıştırabiliriz. Modelden çıktı alabilmek için pyACL kullanılan ve Ascend cihazlarda inference uygulaması geliştirmeyi kolaylaştıran ACLLite kütüphanesinden yararlanıyoruz. Ayrıca girdi ve çıktılar için gerekli fonksiyonlar da ekliyoruz.

4. ACL ile modeli çalıştırmadan önce, modelin ve girdilerin dosya yollarını tanımlamamız gerekmektedir.

5. ACLLite kullanarak YOLOv7 modeli tanımlanması gerekiyor. Offline modelimizi yüklemeden önce runtime resource’ları ayarlıyoruz. Context, Stream ve Memory uygulama için hazır hale getirmek için acl_resource.init() metodu kullanıyoruz. Artık modelimizi yüklemeye ve çalıştırmaya hazırız. Girdi olarak kullanılacak olan Ascend işlemcinin cihaz id’si ve .om formatındaki modelin dosya yolu veriyoruz.

6. Girdi imgesini cv2 kullanarak okuduktan sonra YOLOv7 modeline uygun hale getirmek için ön işlemler yapıyoruz. Girdi imgesi preprocessing fonksiyonundan çıktıktan sonra modele hazır geliyor. Preprocessing aşamasında orijinal repository’da uygulanan işlemlere ek olarak, imgemizi modelimize girdi olarak vermeden önce veri tipinin numpy array olması gerekmektedir. Bu işlemlerden sonra inference için girdi imgemiz hazır halde olacaktır.

7. Girdi imgesini modele veriyoruz. ACLLite kütüphanesinde yer alan execute fonksiyonu ile çıktıları elde ediyoruz. Model çıktılarına postprocessing uygulanarak sınırlayıcı kutular (Bounding boxes) elde ediyoruz.

8. Elde edilen sınırlayıcı kutuları kullanarak nesneleri tespit edebilir ve sonuçları görselleştirebiliriz.

YOLOv7 Nesne Tespit Çıktıları

Çalışmaya ait kaynak kodlarına bağlantıdan ulaşabilirsiniz.

Sonuç

Bu yazımızda, popüler bir nesne tespit modeli olan YOLOv7'nin Atlas cihazlarındaki Ascend işlemcilerinde nasıl uyarlanıp kullanılabileceğini anlatıldı. Huawei’nin geliştirdiği bu teknoloji sayesinde, gerçek zamanlı ve yüksek performanslı yapay zeka modelleri ve uygulamaları, çeşitli senaryolara uygun Atlas cihazları kullanılarak oluşturulabilmektedir. Yüksek performans gerektiren yapay zeka tabanlı nesne tespit modelleri için Ascend işlemcileri oldukça idealdir. Atlas cihazları ve Ascend işlemcileri hakkında daha fazla bilgi almak istiyorsanız bağlantıyı ziyaret edebilirsiniz.

--

--