Nesne Algılama: EdgeTPU'da YOLOv11 Çalıştırma
Bu yazıda, nesne tespiti için RAiV (içindeki EdgeTPU) ve Yolo v11'i nasıl kullanacağımızı göstereceğiz. Bu yazıyı, görsel yapay zeka modellerinin kullanımına yönelik bir hızlandırılmış kurs olarak düşünebilirsiniz.
Edge Yapay Zekaya Giriş
Yapay Zeka Modeli ve Uç Yapay Zeka Nedir?
En basit hali ile yapay zeka modeli, işlem katmanlarının (çarpma, toplama vb.) ve bu katmanlarla ilişkili ağırlıkların bir listesidir. İşlemciler, ağırlıklarla işlemleri baştan (giriş katmanı) başlayarak uygular ve çıktıyı hesaplar.
Yapay zeka modelleri genellikle PC'de veya bulut ortamında çalıştırılır. Bununla birlikte, bu modellerin bazıları daha küçük cihazlarda da çalıştırılabilir. Yapay zeka modellerinin bağımsız bir cihazda yerel olarak çalıştırılmasına Uç Yapay Zeka denir.
EdgeTPU Nedir?
Yapay zekâ modelinin çalıştırılması sırasında (bu işleme çıkarım denir), CPU hesaplama süreçlerini hızlandırmak için özel aygıtlar (donanım hızlandırıcılar) veya yardımcı kütüphaneler kullanabilir. Yardımcı aygıtlar veya kütüphanelerin kullanılmasına yetkilendirme (delegasyon) denir.
RAiV içinde kullanılan EdgeTPU bir delegasyon cihazıdır (donanım hızlandırıcı). CPU, uygun katmanları EdgeTPU'ya aktarır ve EdgeTPU bu katmanların hesaplamasını yapar. Ardından EdgeTPU sonuçları CPU'ya geri gönderir. Bu nedenle, EdgeTPU katmanları çalıştırmakla meşgulken, CPU diğer görevler üzerinde çalışabilir.
İş Akışı
Aşağıda RAiV ile yapay zeka modeli kullanımına ilişkin genel bir iş akışı bulabilirsiniz. Bu iş akışı sadece giriş niteliğindedir. Bu yazıda, eğitilmiş bir Yolo modeli kullanacağımız için iş akışının ilk adımını atlayacağız.
Yapay Zekayı Modeli Hazırlama
- Eğitim ve doğrulama veri kümelerini oluşturun.
- Yapay zeka modelini eğitin ve doğrulayın.
- Yapay zeka modelini EdgeTPU için dışa aktarın veya edgetpu_compiler ile derleyin.
Yükleme ve Yayınlama
- RAiV'in kullanıcı web arayüzünü kullanarak yapay zeka modelini yükleyin.
- RAiV'in kullanıcı web arayüzünü kullanarak modeli yayınlayın.
- RAiV, görüntü verilerini yapay zeka modeline besler ve çalıştırır, ardından çıktı katmanlarını veri hattına kaydeder.
Python Son İşleyicisini Hazırlama
- Veri işlem hattına erişmek için Python betiği kullanın.
- Çıktı verilerini inceleyin (eşikleme, birleştirme, yeniden şekillendirme, vb.).
Betikleri Yükleme
RAiV'in kullanıcı web arayüzünü kullanarak Python betiğini/betiklerini yükleyin.
Veri İşlem Hattını Tetikleme
Veri işlem hattını şu şekilde tetikleyin:
- Snapshot
- Live Stream
- Capture Frame
- Collect Samples
Yapay Zekayı Kullanalım
Daha önce de belirttiğimiz gibi, bu yazı RAiV'in uç yapay zeka yeteneklerini kullanmaya yönelik hızlı bir kurs niteliğindedir. Yazıyı basit tutmak için, popüler bir yapay zeka modelinin önceden eğitilmiş bir sürümünü kullanacağız. Ardından, Python betiği kullanarak çıktılarına son-işlem (postprocessing) uygulayacağız.
EdgeTPU için Yolo v11'i Hazırlama
YOLO (You Only Look Once), popüler bir görsel nesne algılama yapay zeka modelidir. Farklı YOLO sürümleri arasından, bu yazı için en son YOLO modelini (geliştirme tarihi itibariyle), Yolo-v11'i seçtik: coco_yolo11n_full_integer_quant_edgetpu.tflite. Model dosyasını Github Depomuzdan indirebilirsiniz. Yolo-v11 hakkında daha fazla bilgiyi resmi Yolo-v11 Web Sayfasında bulabilirsiniz.
Seçilen önceden eğitilmiş Yolo-v11 yapay zeka modeli, nesne tespiti için bilinen COCO veri kümesi üzerinde eğitilmiştir. Bu nedenle, hazır haliyle, çeşitli günlük nesneleri (kişi, dizüstü bilgisayar, portakal, kupa, otobüs vb.) tespit edebilir.
Modeli Yükle ve Yayınla
RAiV'in web arayüzünün kullanıcı hesabına giriş yapın. Yapay zeka ayarları parametre panelini açmak için sağdaki "AI Settings" düğmesine tıklayın. Açılan panelde, dosya seçim iletişim kutusunu açmak için "Upload AI Model" ipucu bulunan beyin simgesine tıklayın. İndirilen modeli seçin ve yükleyin.
Model başarıyla yüklendikten sonra, RAiV, modelin kullanılabilirliğini kontrol eder. Model kullanılabilir ise, yapay zeka parametreleri panelinde "READY" durumu gösterilir. Bu durumda, modelin kullanımını etkinleştirmek için sağda "Release AI" ipucu bulunan roket simgesine tıklayın. Yapay zeka modeli serbest bırakıldıktan sonra, veri hattı yüklenen yapay zeka modeline görüntüleri besleyecektir. Modeli yayından kaldırmak için, "Unrelease AI" ipucu bulunan paraşüt simgesine tıklayın.
Python ile Son Dokunuşlar
Veri Hattı - Yine
Yapay zeka modeli yüklendikten ve kullanıma sunulduktan sonra, veri işlem hattı görüntüleri yapay zeka modeline besler ve modelin çıktısını kullanıcının Python koduna aktarır. Görüntü alma örneğinde olduğu gibi, kullanıcının Python betiği yalnızca yapay zekadan gelen kullanılabilir verileri kontrol etmelidir.
Basitlik açısından, yapay zeka modelinin çıktısından gelen veriler, modelin giriş görüntüsünü de içerir. Bu nedenle, veri hattına tek bir çağrı ile kullanıcı, yapay zeka modelinin hem giriş hem de çıkış verilerini alabilir.
Yolo Son İşlemcisi - Neden Birine İhtiyacımız Var?
Yapay zeka modelleri genellikle kullanıma hazır çıktılar üretmez. Bu modellerin çoğunlukla yeniden şekillendirilmesi ve filtrelenmesi gerekir. Github depomuzda Yolo modelinin son işlenmesi için örnek bir kod bulunmaktadır.
Kodu Hazırlayın ve Yükleyin
Aşağıdaki kodda kısaca, getDataAi() çağrısı yaparak veri hattından yapay zeka modeli çıktısını alıyoruz ve nesne algılama ihtiyaçlarımıza göre son işleme tabi tutuyoruz.
Bu örneği, gerekli tüm modüllerle birlikte Github Depomuzda bulabilirsiniz. Lütfen örnek kodu github deposundan indirin ve web arayüzü üzerinden RAiV'e yükleyin.
# For accessing data pipeline
from qCU_Data import qCUData
# For Yolo Helper Functions
from YOLOv8ObjectDetector import YOLOv8ObjectDetector
def main():
# Create interface
theQCUData = qCUData()
# Initialize shared memory
if not theQCUData.init():
print("Failed to initialize shared memory")
return
# Initialize COCO classes
COCO_CLASSES = [
"person", "bicycle", "car", "motorcycle", "airplane", "bus", "train",
"truck", "boat", "traffic light", "fire hydrant", "stop sign",
"parking meter", "bench", "bird", "cat", "dog", "horse", "sheep",
"cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella",
"handbag", "tie", "suitcase", "frisbee", "skis", "snowboard",
"sports ball", "kite", "baseball bat", "baseball glove", "skateboard",
"surfboard", "tennis racket", "bottle", "wine glass", "cup", "fork",
"knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange",
"broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair",
"couch", "potted plant", "bed", "dining table", "toilet", "tv",
"laptop", "mouse", "remote", "keyboard", "cell phone", "microwave",
"oven", "toaster", "sink", "refrigerator", "book", "clock", "vase",
"scissors", "teddy bear", "hair drier", "toothbrush"
]
# Initialize Yolo detector post processor
objDetector = YOLOv8ObjectDetector(ai_classes=COCO_CLASSES, confidence_threshold=0.25, iou_threshold=0.45)
# Enter object detection loop
try:
while True:
# Get Ai data
ai_data = theQCUData.getDataAi()
if ai_data:
if 'error' in ai_data:
print(f"Error occurred: {ai_data['error']}")
else:
# Postprocess the ai_data
detected_objects = objDetector.detect_objects(ai_data)
# Get the ai preprocessing parameters
aiHeader = ai_data['header']
aiPrepro = aiHeader.imPreproPrms
detected_objs_image = []
for obj in detected_objects:
# Convert yolo coordinates to image coordinates
bbox_img_float = objDetector.yolo_to_coords_float(aiPrepro, obj['bbox'])
bbox_img_int = [int(coord) for coord in bbox_img_float]
detected_objs_image.append({
'class_id': obj['class_id'],
'class_name': obj['class_name'],
'confidence': obj['confidence'],
'bbox': bbox_img_int,
})
# Print the detected objects
print(detected_objs_image)
# Do not forget to delete the ai data key references and the ai data
del ai_data['data'], ai_data['input_frame_right'], ai_data['input_frame_left'], ai_data['header']
del ai_data
else:
# Wait to avoid high CPU utilization
time.sleep(0.1)
finally:
print("Cleanup completed")
if __name__ == "__main__":
main()
Canlı Sunum: Veri Hattını Besleyin
Şimdi veri hattını tetiklemek için lütfen "Snapshot" düğmesine basın. Görüntü web arayüzünde görüntülendikten sonra, Console Output veya PC uygulamasını kontrol edin.
Sırada Ne Var?
Derinlik haritası tahminine başlamak için:
Stereo'dan Derinliğe: OpenCV ile İlk Derinlik Haritanızı OluşturmaPython'ımızı inceleyin SDK:
RAiV Python SDKÖrnek Kodlar İçin Github Depomuzu Kontrol Edin:
Github Depomuz