Mask R-CNN ile Nesne Algılama: TensorFlow 1.14 ve Keras Kullanımı
Görüntü işleme ve bilgisayar görüşü alanları, son yıllarda derin öğrenme tekniklerinin gelişimiyle birlikte devrimsel nitelikte ilerlemeler kaydetmiştir. Bu ilerlemelerin en çarpıcı örneklerinden biri de nesne algılama ve segmentasyonudur. Nesne algılama, bir görüntüdeki nesnelerin konumlarını (sınır kutuları ile) ve sınıflarını belirlemeyi amaçlarken, segmentasyon bu nesnelerin piksel düzeyinde kesin sınırlarını çıkarmayı hedefler. Bu makalede, her iki görevi tek bir modelde birleştiren ve yüksek doğruluk oranları sunan güçlü bir derin öğrenme mimarisi olan Mask R-CNN’i, TensorFlow 1.14 ve Keras çerçevesinde detaylı bir şekilde inceleyeceğiz.
Giriş
Bilgisayar görüşü, makinelerin görsel dünyayı insanlar gibi “görmesini” ve anlamlandırmasını sağlamayı amaçlayan bir yapay zeka dalıdır. Bu alandaki en temel ve kritik görevlerden biri, görüntülerdeki veya videolardaki belirli nesnelerin varlığını, konumunu ve türünü tespit etmektir. Bu sürece “nesne algılama” (object detection) denir. Geleneksel nesne algılama yöntemleri genellikle el yapımı özellik çıkarımına ve makine öğrenimi sınıflandırıcılarına dayanırken, derin öğrenmenin yükselişiyle birlikte bu alanda büyük bir paradigma değişimi yaşanmıştır.
Nesne Algılama Nedir?
Nesne algılama, bir görüntüdeki birden fazla nesneyi tanımlayan ve her bir nesne için bir sınır kutusu (bounding box) ve bir sınıf etiketi atayan bir bilgisayar görüşü görevidir. Örneğin, bir fotoğraftaki tüm arabaları, yayaları ve trafik işaretlerini tespit etmek, nesne algılamanın bir uygulamasıdır. Bu, otonom araçlar, güvenlik sistemleri ve tıbbi görüntüleme gibi birçok alanda kritik bir yetenektir.
Mask R-CNN’in Önemi ve Yeri
Mask R-CNN (Mask Region-based Convolutional Neural Network), nesne algılama alanında çığır açan Faster R-CNN mimarisinin bir uzantısıdır. Faster R-CNN, nesnelerin sınır kutularını ve sınıflarını yüksek doğrulukla tahmin edebilirken, Mask R-CNN bu yeteneğe ek olarak her tespit edilen nesne için piksel düzeyinde bir segmentasyon maskesi oluşturma kabiliyeti sunar. Bu, Mask R-CNN’i “instance segmentation” (örnek segmentasyonu) adı verilen bir görevi yerine getirebilen ilk ve en etkili modellerden biri yapmıştır. Örnek segmentasyonu, aynı sınıftaki farklı nesneleri (örneğin, bir görüntüdeki her bir farklı insanı) ayrı ayrı segmentlere ayırabilme yeteneğidir. Mask R-CNN, bu çoklu görevi (sınıflandırma, sınır kutusu regresyonu ve maske tahmini) tek bir entegre mimaride başarıyla birleştirerek, bilgisayar görüşü uygulamalarında yeni ufuklar açmıştır.
Makalenin Amacı
Bu makalenin temel amacı, Mask R-CNN mimarisini derinlemesine açıklamak, temel bileşenlerini ve çalışma prensibini detaylandırmak ve özellikle TensorFlow 1.14 ile Keras kullanarak bu modelin nasıl uygulanabileceğine dair pratik bilgiler sunmaktır. Okuyucuların Mask R-CNN’in teorik altyapısını anlamalarının yanı sıra, kendi projelerinde bu güçlü aracı kullanabilmeleri için gerekli adımları ve ipuçlarını sağlamak hedeflenmektedir. TensorFlow 1.14’ün seçilmesi, bu modelin popülerleştiği ve birçok mevcut projenin temelini oluşturduğu dönemi yansıtması açısından önemlidir, ancak temel prensipler daha yeni versiyonlara da uyarlanabilir.
Nesne Algılamanın Temelleri
Derin öğrenme öncesi dönemlerde nesne algılama, genellikle el yapımı özellik çıkarıcılar (örneğin SIFT, HOG) ve geleneksel makine öğrenimi sınıflandırıcıları (örneğin SVM) kullanılarak gerçekleştirilirdi. Ancak bu yöntemler, farklı aydınlatma koşulları, ölçekler ve nesne pozisyonları karşısında sınırlı performans sergiliyordu.
Derin Öğrenme Tabanlı Yaklaşımlara Geçiş
Evrişimsel Sinir Ağları (Convolutional Neural Networks – CNN’ler) ile birlikte nesne algılama alanında büyük bir atılım yaşandı. CNN’ler, görüntüdeki hiyerarşik özellikleri otomatik olarak öğrenme yetenekleri sayesinde, geleneksel yöntemlerin sınırlamalarını aşmayı başardı. Derin öğrenme tabanlı nesne algılama modelleri genel olarak iki ana kategoriye ayrılır: tek aşamalı (one-stage) ve iki aşamalı (two-stage) dedektörler.
Tek Aşamalı ve İki Aşamalı Dedektörler
- İki Aşamalı Dedektörler: Bu modeller, algılama sürecini iki ana adıma böler. İlk adımda, görüntüdeki potansiyel nesne konumlarını (bölge önerileri) belirlemek için bir mekanizma kullanılır. İkinci adımda ise bu önerilen bölgeler üzerinde sınıflandırma ve sınır kutusu regresyonu yapılır. R-CNN ailesi (R-CNN, Fast R-CNN, Faster R-CNN) bu kategoriye girer. Yüksek doğruluk oranları sunma eğilimindedirler ancak genellikle tek aşamalı modellere göre daha yavaştırlar.
- Tek Aşamalı Dedektörler: Bu modeller, bölge önerisi adımını atlayarak doğrudan görüntüdeki nesnelerin sınıfını ve konumunu tahmin eder. YOLO (You Only Look Once) ve SSD (Single Shot MultiBox Detector) gibi modeller bu kategoriye örnektir. Genellikle iki aşamalı modellere göre daha hızlıdırlar ancak bazen doğruluktan ödün verebilirler.
R-CNN Ailesi
Mask R-CNN’in temelini anlamak için, R-CNN ailesinin gelişimini kısaca gözden geçirmek faydalıdır:
- R-CNN (Region-based Convolutional Neural Network): İlk derin öğrenme tabanlı nesne algılama modellerinden biridir. Görüntüden yaklaşık 2000 adet bölge önerisi (selective search ile) çıkarır, her bir bölgeyi bir CNN’den geçirir ve ardından SVM ile sınıflandırır. Sınır kutularını iyileştirmek için de bir regresör kullanır. Ancak her bölgenin ayrı ayrı CNN’den geçirilmesi nedeniyle çok yavaştır.
- Fast R-CNN: R-CNN’in hız sorununu çözmek için geliştirilmiştir. Tüm görüntüyü tek bir CNN’den geçirir ve özellik haritasını oluşturur. Ardından, bölge önerilerini bu özellik haritası üzerinde “ROI Pooling” (Region of Interest Pooling) katmanı ile sabit boyutlu özellik vektörlerine dönüştürür. Bu özellik vektörleri daha sonra bir sınıflandırıcı ve regresöre beslenir. Önemli bir hız artışı sağlar.
- Faster R-CNN: Fast R-CNN’in bölge önerisi adımını da derin öğrenme ağına entegre ederek daha da hızlandırır. “Bölge Öneri Ağı” (Region Proposal Network – RPN) adı verilen küçük bir CNN, özellik haritası üzerinde doğrudan bölge önerileri üretir. Bu sayede tüm algılama süreci uçtan uca öğrenilebilir hale gelir. Mask R-CNN’in temelini oluşturan modeldir.
Mask R-CNN Mimarisi Detaylı İnceleme
Mask R-CNN, Faster R-CNN’in üzerine inşa edilmiş bir mimaridir. Faster R-CNN’in sınıflandırma ve sınır kutusu regresyonu görevlerine ek olarak, her bir nesne için piksel düzeyinde bir segmentasyon maskesi tahmin etme yeteneğini ekler. Bunu, çok görevli bir kayıp fonksiyonu ve yenilikçi bir ROI Align katmanı kullanarak başarır.
Temel Bileşenler
Mask R-CNN mimarisi, aşağıdaki ana bileşenlerden oluşur:
Omurga Ağı (Backbone Network)
Mask R-CNN, giriş görüntüsünden zengin özellikler çıkarmak için güçlü bir evrişimsel omurga ağı kullanır. Genellikle ResNet (Residual Network) mimarisi kullanılır ve bu ağlar genellikle ImageNet gibi büyük veri kümelerinde önceden eğitilmiş ağırlıklarla başlatılır. ResNet’in derinliği (örneğin ResNet-50, ResNet-101) modelin performansını ve hesaplama maliyetini etkiler.
- ResNet’in Rolü: ResNet, “atlama bağlantıları” (skip connections) veya “kalıntı bağlantıları” (residual connections) sayesinde çok derin ağların eğitilmesini mümkün kılmıştır. Bu bağlantılar, gradyanların geriye doğru yayılımını kolaylaştırır ve derin ağlarda ortaya çıkan gradyan yok olma (vanishing gradient) sorununu hafifletir. Mask R-CNN’de ResNet, görüntülerden anlamsal olarak zengin ve hiyerarşik özellik haritaları çıkarmak için temel bir özellik çıkarıcı görevi görür.
- FPN (Feature Pyramid Network): Mask R-CNN’in performansını önemli ölçüde artıran bir diğer kritik bileşen FPN’dir. Geleneksel olarak, CNN’ler daha derin katmanlarda yüksek seviyeli anlamsal özellikler üretirken, daha sığ katmanlarda düşük seviyeli mekansal özellikler (detaylar) bulunur. Nesnelerin farklı boyutlarda (küçük veya büyük) algılanması için hem yüksek seviyeli anlamsal bilgilere hem de düşük seviyeli mekansal detaylara ihtiyaç vardır. FPN, omurga ağının farklı ölçeklerdeki özellik haritalarını birleştirerek bir özellik piramidi oluşturur. Bu piramit, her bir seviyesinde güçlü anlamsal özelliklere sahipken, aynı zamanda ince mekansal detayları da korur. Bu sayede RPN ve çoklu görev kafası, farklı ölçeklerdeki nesneleri daha etkili bir şekilde algılayabilir. FPN, yukarıdan aşağıya ve aşağıdan yukarıya yollar kullanarak farklı katmanların özelliklerini birleştirir.
Bölge Öneri Ağı (Region Proposal Network – RPN)
Omurga ağı tarafından çıkarılan özellik haritaları, Faster R-CNN’den miras kalan RPN’e beslenir. RPN’in görevi, bir görüntüdeki nesne içerebilecek potansiyel bölgeleri (sınır kutuları olarak) önermektir. Bu, nesne algılama sürecinin ilk aşamasıdır.
- Anchor Kutuları: RPN, her bir konum için önceden tanımlanmış “anchor kutuları” adı verilen farklı boyut ve en boy oranlarına sahip referans kutuları kullanır. Bu anchor kutuları, ağın farklı şekil ve boyutlardaki nesneleri algılamasına yardımcı olur.
-
RPN’in Görevi: RPN, her bir anchor kutusu için iki temel tahminde bulunur:
- Kutunun bir nesne içerip içermediğine dair ikili bir sınıflandırma (nesne/arka plan).
- Kutunun gerçek nesne sınırına daha iyi uyması için gerekli ofsetleri (konum ve boyut ayarlamaları).
RPN, bu tahminleri kullanarak yüzlerce veya binlerce potansiyel nesne önerisi üretir. Bu öneriler daha sonra NMS (Non-Maximum Suppression) ile filtrelenerek en iyi öneriler seçilir.
ROI Align Katmanı
Faster R-CNN’deki ROI Pooling katmanı, bölge önerilerini (farklı boyutlarda olabilirler) sabit boyutlu bir özellik haritasına dönüştürmek için kullanılıyordu. Ancak ROI Pooling, ondalık olmayan piksel koordinatlarını en yakın tam sayıya yuvarladığı için küçük mekansal kayıplara neden oluyordu. Bu kayıplar, özellikle piksel düzeyinde hassasiyet gerektiren maske segmentasyonu görevinde kritik öneme sahiptir.
- ROI Pooling’in Eksiklikleri: Yuvarlama işlemi, özellikle küçük nesneler için, özellik haritasının giriş görüntüsündeki orijinal konumundan hafifçe kaymasına neden olabilir. Bu kayma, sınıflandırma ve sınır kutusu regresyonu için kabul edilebilir olsa da, piksel düzeyinde hassas maske tahmini için ciddi bir sorun teşkil eder.
- ROI Align’ın Avantajları: Mask R-CNN, bu sorunu çözmek için “ROI Align” katmanını tanıttı. ROI Align, yuvarlama yapmaz. Bunun yerine, bilineer interpolasyon kullanarak ondalık koordinatlardaki piksel değerlerini hesaplar. Bu sayede, bölge önerilerinden çıkarılan özellikler, orijinal görüntüdeki nesneyle çok daha doğru bir şekilde hizalanır. Bu hassasiyet, yüksek kaliteli segmentasyon maskelerinin üretilmesi için hayati öneme sahiptir.
Çoklu Görev Kafası (Multi-task Head)
ROI Align katmanından çıkan sabit boyutlu özellik haritaları, Mask R-CNN’in “çoklu görev kafası”na beslenir. Bu kafa, üç paralel çıktı dalına sahiptir ve her biri farklı bir görevi yerine getirir:
- Sınıflandırma (Classification): Her bir bölge önerisinin hangi nesne sınıfına (örneğin, “insan”, “araba”, “kedi”) ait olduğunu tahmin eder. Genellikle bir Fully Connected (FC) katmanı ve bir softmax aktivasyonu kullanılır.
- Sınır Kutusu Regresyonu (Bounding Box Regression): RPN tarafından önerilen sınır kutularını daha doğru hale getirmek için ofsetler (konum ve boyut ayarlamaları) tahmin eder. Bu, nesnenin gerçek sınırlarına daha yakın bir kutu elde edilmesini sağlar. Yine bir FC katmanı kullanılır.
-
Maske Tahmini (Mask Prediction): Mask R-CNN’i diğer Faster R-CNN türevlerinden ayıran en önemli kısımdır. Her bir geçerli nesne önerisi için, piksel düzeyinde ikili bir segmentasyon maskesi (nesneye ait piksel mi, değil mi?) tahmin eder.
- FCN (Fully Convolutional Network) Kullanımı: Maske tahmini dalı, küçük bir Tam Evrişimsel Ağ (Fully Convolutional Network – FCN) kullanır. Bu FCN, ROI Align’dan gelen sabit boyutlu özellik haritasını alır ve her bir sınıf için (K sınıf varsa K adet) düşük çözünürlüklü (örneğin 28×28 piksel) ikili maske üretir. Her bir piksel için sigmoid aktivasyonu uygulanır ve bu, pikselin nesneye ait olma olasılığını verir. Bu yaklaşım, piksel düzeyinde hassasiyeti korurken, modelin verimli bir şekilde eğitilmesini sağlar. Eğitim sırasında, yalnızca tespit edilen sınıfın maske dalındaki çıktısı için kayıp hesaplanır, bu da görevin karmaşıklığını azaltır.
Mask R-CNN’in Çalışma Prensibi
Mask R-CNN’in çalışma prensibini adım adım özetleyelim:
- Giriş Görüntüsü: Bir görüntü Mask R-CNN modeline beslenir.
- Özellik Çıkarımı (Backbone ve FPN): Görüntü, ResNet ve FPN’den oluşan omurga ağı tarafından işlenir. Bu ağ, farklı ölçeklerde ve zengin semantik bilgi içeren özellik haritaları piramidi üretir.
- Bölge Önerileri (RPN): FPN’den gelen özellik haritaları, RPN’e beslenir. RPN, anchor kutuları kullanarak görüntüdeki potansiyel nesne bölgelerini (sınır kutusu önerileri) belirler. Bu öneriler daha sonra NMS ile filtrelenir.
- ROI Align: Filtrelenmiş bölge önerileri, FPN’den gelen özellik haritalarıyla birlikte ROI Align katmanına girer. ROI Align, her bir önerilen bölgeyi bilineer interpolasyon kullanarak sabit boyutlu bir özellik haritasına dönüştürür. Bu, mekansal hizalamayı korur ve maske tahmini için kritik hassasiyeti sağlar.
-
Çoklu Görev Kafası: ROI Align’dan çıkan sabit boyutlu özellikler, üç paralel dala ayrılan çoklu görev kafasına beslenir:
- Bir dal, bölgenin nesne sınıfını tahmin eder.
- Diğer bir dal, sınır kutusunu daha doğru hale getirmek için regresyon yapar.
- Üçüncü dal, her bir sınıf için piksel düzeyinde ikili bir maske tahmin eder.
- Sonuçlar: Model, her bir algılanan nesne için bir sınıf etiketi, daha hassas bir sınır kutusu ve nesnenin piksel düzeyinde bir segmentasyon maskesi çıktısı verir.
Eğitim ve Çıkarım Aşamaları
Eğitim (Training): Mask R-CNN, uçtan uca eğitilir. Kayıp fonksiyonu (loss function), üç görevin (sınıflandırma kaybı, sınır kutusu regresyon kaybı ve maske kaybı) toplamından oluşur. Bu üç kayıp, modelin her bir görevi aynı anda optimize etmesini sağlar. Maske kaybı, yalnızca gerçek sınıfın maske tahmini üzerinde hesaplanır. Genellikle önceden eğitilmiş ağırlıklarla (örneğin ImageNet üzerinde) başlanır ve hedef veri kümesi üzerinde ince ayar (fine-tuning) yapılır.
Çıkarım (Inference): Eğitimli bir Mask R-CNN modeli, yeni bir görüntüye uygulandığında yukarıdaki adımları takip eder ve her bir algılanan nesne için sınıf, sınır kutusu ve segmentasyon maskesini tahmin eder. Çıkarım sırasında, NMS ve güven eşikleri gibi post-processing adımları, nihai sonuçların kalitesini artırmak için kullanılır.
TensorFlow 1.14 ve Keras ile Mask R-CNN Uygulaması
Mask R-CNN’in Keras ve TensorFlow 1.14 ile uygulanması, genellikle Matterport tarafından sağlanan açık kaynaklı Keras Mask R-CNN implementasyonu kullanılarak yapılır. Bu implementasyon, COCO veri kümesi üzerinde önceden eğitilmiş ağırlıkları da içerir ve transfer öğrenimi için mükemmel bir başlangıç noktasıdır.
Gerekli Kütüphaneler ve Ortam Kurulumu
Uygulamaya başlamadan önce aşağıdaki kütüphanelerin yüklü olduğundan emin olunmalıdır:
- TensorFlow 1.14: Mask R-CNN’in Matterport implementasyonu genellikle TensorFlow 1.x sürümleriyle uyumludur.
pip install tensorflow==1.14.0 - Keras: TensorFlow’un üst düzey API’si olarak Keras, modelin daha kolay oluşturulmasını ve eğitilmesini sağlar. Genellikle TensorFlow ile birlikte gelir.
- OpenCV (cv2): Görüntü işleme görevleri için (görüntü okuma, yeniden boyutlandırma, görselleştirme).
pip install opencv-python - NumPy: Sayısal işlemler için.
pip install numpy - Matplotlib: Sonuçları görselleştirmek için.
pip install matplotlib - h5py: Model ağırlıklarını kaydetmek ve yüklemek için.
pip install h5py - Matterport Mask R-CNN: GitHub deposundan klonlanması veya pip ile yüklenmesi gerekir. Genellikle
git clone https://github.com/matterport/Mask_RCNN.gitkomutuyla indirilir ve ardındanpip install -r requirements.txtile bağımlılıklar kurulur.
GPU Desteği: Mask R-CNN gibi derin ve hesaplama açısından yoğun modellerin eğitimi için GPU (NVIDIA CUDA uyumlu) kullanımı neredeyse zorunludur. TensorFlow’un GPU versiyonunun doğru şekilde kurulduğundan ve CUDA Toolkit ile cuDNN’in uyumlu sürümlerinin sistemde mevcut olduğundan emin olunmalıdır.
Veri Kümesi Hazırlığı
Kendi özel veri kümenizi kullanacaksanız, veri hazırlığı kritik bir adımdır:
- Veri Kümesi Seçimi: COCO (Common Objects in Context) veya Pascal VOC gibi standart veri kümeleri Mask R-CNN’i test etmek ve anlamak için harika kaynaklardır. Kendi projeniz için özel bir veri kümesi oluşturmanız gerekebilir.
-
Anotasyon Formatları: Mask R-CNN, genellikle COCO veri kümesi formatını bekler. Bu format, her nesne için sınıf etiketini, sınır kutusunu ve piksel düzeyinde segmentasyon maskesini (genellikle RLE – Run-Length Encoding formatında) içerir. Eğer kendi veri kümenizi kullanıyorsanız, anotasyonlarınızı bu formata dönüştürmeniz veya Matterport implementasyonundaki
utils.pyvemodel.pydosyalarındaki veri yükleme fonksiyonlarını kendi formatınıza uyarlamanız gerekebilir. VGG Image Annotator (VIA) veya LabelMe gibi araçlar, maske anotasyonu yapmak için kullanılabilir. - Veri Artırma (Data Augmentation): Eğitim verisi miktarını artırmak ve modelin genelleme yeteneğini geliştirmek için veri artırma teknikleri (rastgele döndürme, çevirme, parlaklık ayarı, ölçekleme vb.) uygulanmalıdır. Matterport implementasyonu, bu tür artırmaları kolayca entegre etmeye olanak tanır.
Modelin Yüklenmesi ve Önceden Eğitilmiş Ağırlıklar
Matterport’un Keras Mask R-CNN uygulaması, modelin yapılandırmasını ve mimarisini içeren model.py dosyasını sağlar. Genellikle, COCO veri kümesi üzerinde önceden eğitilmiş ağırlıklarla başlamak en iyi yaklaşımdır (transfer öğrenimi).
import os
import sys
import random
import math
import numpy as np
import skimage.io
import matplotlib.pyplot as plt
Matterport Mask R-CNN kütüphanesini içe aktar
ROOT_DIR = os.path.abspath("../")
sys.path.append(ROOT_DIR)
from mrcnn import utils
import mrcnn.model as modellib
from mrcnn import visualize
Kendi yapılandırma dosyanızı veya standart COCO yapılandırmasını kullanın
from samples.coco import coco
Modelin kaydedileceği dizin
MODEL_DIR = os.path.join(ROOT_DIR, "logs")
COCO veri kümesi üzerinde önceden eğitilmiş ağırlıkların yolu
COCO_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_coco.h5")
Eğer ağırlıklar yoksa indir
if not os.path.exists(COCO_MODEL_PATH):
utils.download_trained_weights(COCO_MODEL_PATH)
Yapılandırma sınıfı
class InferenceConfig(coco.CocoConfig):
# Modelin çıkarım modunda çalışması için toplu iş boyutunu (batch size) 1 olarak ayarla
GPU_COUNT = 1
IMAGES_PER_GPU = 1
config = InferenceConfig()
config.display()
Modeli başlat
model = modellib.MaskRCNN(mode="inference", model_dir=MODEL_DIR, config=config)
Önceden eğitilmiş COCO ağırlıklarını yükle
model.load_weights(COCO_MODEL_PATH, by_name=True)
Sınıf isimleri (COCO veri kümesi için)
class_names = ['BG', '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']
Eğitim Süreci
Kendi veri kümeniz üzerinde Mask R-CNN’i eğitmek için, öncelikle Config sınıfından türetilen kendi yapılandırma sınıfınızı oluşturmanız gerekir. Bu sınıf, veri kümesindeki sınıf sayısını, görüntü boyutlarını, öğrenme oranını ve diğer hiperparametreleri tanımlar.
class CustomConfig(coco.CocoConfig):
# Kendi veri kümenizin adını verin
NAME = "object"
# Sınıf sayısını güncelleyin (arka plan + kendi sınıflarınız)
NUM_CLASSES = 1 + 2 # BG + 2 kendi sınıfınız (örn. "elma", "muz")
# Eğitim için GPU sayısı ve her GPU'daki görüntü sayısı
GPU_COUNT = 1
IMAGES_PER_GPU = 2 # Daha büyük bir değer bellek hatasına neden olabilir
# Diğer hiperparametreleri ayarlayın
STEPS_PER_EPOCH = 100
DETECTION_MIN_CONFIDENCE = 0.9
config = CustomConfig()
config.display()
Eğitim modunda modeli başlat
model = modellib.MaskRCNN(mode="training", model_dir=MODEL_DIR, config=config)
Önceden eğitilmiş ağırlıkları yükle (COCO veya kendi ağırlıklarınız)
Eğer kendi ağırlıklarınız yoksa, COCO ağırlıklarından başlanır
model.load_weights(COCO_MODEL_PATH, by_name=True, exclude=["mrcnn_class_logits", "mrcnn_bbox_fc",
"mrcnn_bbox", "mrcnn_mask"])
Kendi veri kümesi sınıfınızı yükleyin (CustomDataset)
dataset_train = CustomDataset()
dataset_train.load_custom_data(dataset_dir, "train")
dataset_train.prepare()
dataset_val = CustomDataset()
dataset_val.load_custom_data(dataset_dir, "val")
dataset_val.prepare()
Eğitim aşamaları
1. Aşama: Yalnızca kafa katmanlarını eğit (transfer öğrenimi)
print("Kafa katmanlarını eğitiyor...")
model.train(dataset_train, dataset_val,
learning_rate=config.LEARNING_RATE,
epochs=10,
layers='heads')
2. Aşama: Tüm katmanları ince ayar yap
print("Tüm katmanlara ince ayar yapıyor...")
model.train(dataset_train, dataset_val,
learning_rate=config.LEARNING_RATE / 10,
epochs=20,
layers="all")
-
Hiperparametreler:
LEARNING_RATE,STEPS_PER_EPOCH,EPOCHS,DETECTION_MIN_CONFIDENCEgibi hiperparametreler modelin performansını ve eğitim süresini doğrudan etkiler. Bu değerler, veri kümenize ve mevcut donanımınıza göre ayarlanmalıdır. - Loss Fonksiyonları: Mask R-CNN, üç ayrı görevin kayıplarını birleştirir: RPN sınıflandırma kaybı, RPN sınır kutusu regresyon kaybı, nihai sınıflandırma kaybı, nihai sınır kutusu regresyon kaybı ve maske kaybı. Toplam kayıp, bu bileşenlerin ağırlıklı toplamıdır.
- Optimizasyon: Genellikle SGD (Stochastic Gradient Descent) optimizörü kullanılır. Öğrenme oranı, modelin yakınsama hızını ve kalitesini belirler.
Çıkarım (Inference)
Eğitimden sonra, model yeni görüntüler üzerinde nesneleri algılamak ve segmentlere ayırmak için kullanılabilir.
Test için bir görüntü yükle
IMAGE_DIR = os.path.join(ROOT_DIR, "images")
file_names = next(os.walk(IMAGE_DIR))[2]
image = skimage.io.imread(os.path.join(IMAGE_DIR, random.choice(file_names)))
Örneğin, bir dosya yolundan resim yükle
image_path = "path/to/your/image.jpg"
image = skimage.io.imread(image_path)
Modeli çıkarım modunda çalıştır
results = model.detect([image], verbose=1)
Sonuçları al
r = results[0]
Sonuçları görselleştir
visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'],
class_names, r['scores'])
-
Tek bir Görüntü Üzerinde: Yukarıdaki kod örneği, tek bir görüntü üzerinde çıkarım yapmayı göstermektedir.
model.detect()fonksiyonu, algılanan nesnelerin sınır kutularını (rois), maskelerini (masks), sınıf ID’lerini (class_ids) ve güven skorlarını (scores) içeren bir sözlük döndürür. - Video Akışında: Video akışında algılama yapmak için, her bir video karesini ayrı bir görüntü olarak işleyip yukarıdaki çıkarım adımlarını tekrarlamak gerekir. OpenCV, video karelerini okumak ve sonuçları görselleştirmek için kullanılabilir.
Sonuçların Değerlendirilmesi
Nesne algılama ve segmentasyon modellerinin performansını değerlendirmek için çeşitli metrikler kullanılır:
- mAP (mean Average Precision): Nesne algılama modelleri için en yaygın metriklerden biridir. Farklı güven eşiklerinde hassasiyet-geri çağırma (precision-recall) eğrilerinin altındaki alanın ortalamasını alır. COCO veri kümesi, mAP@0.5, mAP@0.75 ve mAP@[.5:.05:.95] gibi farklı IoU (Intersection over Union) eşiklerinde mAP değerlerini kullanır.
- Maske Kalitesi Metrikleri: Segmentasyon maskelerinin kalitesini değerlendirmek için IoU (Jaccard Index) veya Dice Katsayısı gibi metrikler kullanılır. Bu metrikler, tahmin edilen maske ile gerçek maske arasındaki örtüşme oranını ölçer.
Mask R-CNN’in Avantajları ve Dezavantajları
Avantajlar
- Yüksek Doğruluk: Hem nesne algılama hem de örnek segmentasyon görevlerinde state-of-the-art veya ona yakın doğruluk oranları sunar.
- Çok Görevli Yapı: Tek bir mimaride sınıflandırma, sınır kutusu regresyonu ve maske segmentasyonunu aynı anda gerçekleştirir, bu da entegre bir çözüm sunar.
- Piksel Düzeyinde Hassasiyet: ROI Align katmanı sayesinde, maske tahminlerinde yüksek mekansal hassasiyet sağlar.
- Esneklik: Farklı omurga ağları (ResNet, ResNeXt vb.) ve FPN ile kolayca adapte edilebilir.
- Transfer Öğrenimi İçin Uygun: Büyük veri kümelerinde (COCO) önceden eğitilmiş ağırlıklar sayesinde, daha küçük özel veri kümelerinde bile başarılı bir şekilde ince ayar yapılabilir.
Dezavantajlar
- Hesaplama Maliyeti: Derin bir ağ ve çoklu görevli yapısı nedeniyle, eğitim ve çıkarım sırasında yüksek hesaplama gücü (özellikle GPU) gerektirir.
- Hız: Tek aşamalı dedektörlere (YOLO, SSD) göre genellikle daha yavaştır, bu da gerçek zamanlı uygulamalarda bir kısıtlama olabilir.
- Karmaşıklık: Mimarisi, diğer bazı modellere göre daha karmaşıktır, bu da anlaşılmasını ve hata ayıklamasını zorlaştırabilir.
- Bellek Tüketimi: Özellikle yüksek çözünürlüklü görüntülerle çalışırken yüksek GPU belleği tüketir.
Kullanım Alanları
Mask R-CNN’in benzersiz yetenekleri, onu çok çeşitli pratik uygulamalar için ideal bir seçim haline getirmiştir:
- Otonom Sürüş: Yollar, yayalar, diğer araçlar, trafik işaretleri ve şeritlerin piksel düzeyinde doğru bir şekilde algılanması ve segmentlere ayrılması, otonom araçların güvenli bir şekilde çalışması için hayati öneme sahiptir. Mask R-CNN, bu tür karmaşık sahne anlayışında önemli bir rol oynar.
- Tıbbi Görüntüleme: X-ışınları, MRI ve CT taramaları gibi tıbbi görüntülerde tümörler, lezyonlar, organlar veya hücre yapıları gibi anormalliklerin ve ilgi alanlarının otomatik olarak tespit edilmesi ve segmentlere ayrılması, tanı ve tedavi planlamasına yardımcı olur.
- Robotik: Robotların çevrelerindeki nesneleri tanıması, manipüle etmesi ve onlarla etkileşim kurması için nesne algılama ve segmentasyon kritik öneme sahiptir. Mask R-CNN, robotların belirli nesneleri kavraması veya belirli alanlardan kaçınması için gerekli hassas bilgiyi sağlayabilir.
- Güvenlik ve Gözetim: Kalabalık analizi, şüpheli davranış tespiti veya belirli nesnelerin (silah, çanta vb.) otomatik olarak algılanması gibi uygulamalarda Mask R-CNN kullanılabilir.
- Perakende: Mağazalarda raf stok takibi, müşteri davranış analizi veya ürün yerleşimi optimizasyonu gibi görevlerde nesnelerin (ürünlerin) tespiti ve sayımı için kullanılabilir.
- Uydu ve Hava Görüntüleri: Binaların, yolların, ağaçların veya tarım alanlarının haritalandırılması ve alanlarının hesaplanması gibi coğrafi bilgi sistemleri (GIS) uygulamalarında kullanılabilir.
Gelecek Trendler ve Alternatifler
Mask R-CNN, örnek segmentasyon alanında bir dönüm noktası olmasına rağmen, araştırmalar daha hızlı, daha hafif ve daha doğru modeller geliştirmeye devam etmektedir.
- Daha Hızlı ve Hafif Modeller: Gerçek zamanlı uygulamalar için daha hızlı çıkarım süreleri sunan Lite-Mask R-CNN, YOLACT (You Only Look At CoefficienTs) veya SOLOv2 (Segmenting Objects by LOcations v2) gibi modeller geliştirilmektedir. Bu modeller genellikle daha az parametreye sahip olup, mobil ve gömülü sistemlerde çalışabilir.
- Diğer Segmentasyon Modelleri: Sadece anlamsal segmentasyon (semantic segmentation) veya panoptik segmentasyon (panoptic segmentation) gibi farklı segmentasyon görevleri için özel olarak tasarlanmış modeller de bulunmaktadır. Panoptik segmentasyon, hem anlamsal hem de örnek segmentasyonu birleştirerek her piksele bir sınıf etiketi ve bir örnek kimliği atar.
- 3D Nesne Algılama ve Segmentasyon: 2D görüntülerden ziyade 3D nokta bulutları veya derinlik haritaları üzerinde çalışan modeller, otonom araçlar ve robotik gibi alanlarda çevrenin daha eksiksiz bir anlayışını sağlamak için geliştirilmektedir.
- Transformers Tabanlı Modeller: Nesne algılama ve segmentasyon görevlerinde Transformer mimarisinin kullanımı (örneğin DETR, Mask2Former), gelecekteki araştırmaların önemli bir yönünü oluşturmaktadır. Bu modeller, evrişimsel ağların bazı sınırlamalarını aşmayı hedeflemektedir.
Sonuç
Mask R-CNN, derin öğrenme tabanlı nesne algılama ve örnek segmentasyon alanında güçlü ve çok yönlü bir mimaridir. Faster R-CNN’in sağlam temelleri üzerine inşa edilen bu model, sınıflandırma, sınır kutusu regresyonu ve piksel düzeyinde maske tahmini görevlerini tek bir ağda birleştirerek bilgisayar görüşü yeteneklerini önemli ölçüde ileriye taşımıştır. Özellikle TensorFlow 1.14 ve Keras gibi yaygın kullanılan çerçevelerle entegrasyonu, geliştiricilerin bu güçlü modeli kendi uygulamalarına kolayca dahil etmelerini sağlamıştır.
Yüksek doğruluk ve detaylı segmentasyon yeteneği sayesinde Mask R-CNN, otonom sürüşten tıbbi görüntülemeye, robotiğe kadar geniş bir yelpazede kritik uygulamalarda kendine yer bulmuştur. Her ne kadar hesaplama açısından yoğun olsa da, transfer öğrenimi ve önceden eğitilmiş modellerin kullanımı, bu teknolojiyi daha erişilebilir hale getirmektedir. Gelecekte daha hızlı ve verimli modellerin geliştirilmesiyle birlikte, Mask R-CNN’in temel prensipleri, bilgisayar görüşünün birçok alanında ilham kaynağı olmaya devam edecektir. Bu makale, okuyuculara Mask R-CNN’in hem teorik altyapısını hem de pratik uygulama adımlarını anlamaları için kapsamlı bir rehber sunmayı amaçlamıştır.
