Application of CNN

Hello everyone, in my last blog post, I wanted to discuss a simple application about my favorite topic, CNN. I chose the mnist data set, which is one of the easiest data sets for this topic.

The MNIST database (Modified National Institute of Standards and Technology database) is a large database of handwritten digits that is commonly used for training various image processing systems. The MNIST database contains 60,000 training images and 10,000 testing images. Half of the training set and half of the test set were taken from NIST’s training dataset, while the other half of the training set and the other half of the test set were taken from NIST’s testing dataset. The images contained within have a width of 28 pixels and a height of 28 pixels.

Figure : Sample images from MNIST test dataset


Data set is imported from tensorflow library. Session function has used to running codes. Global_variables_initializer has activated for codes to work. Data should be given piece by piece to train the model so batch_size has taken as 128. A function called “training step” has been created for the realization of the training. The for loop has defined as the loop that will perform the training in the function. MNIST pictures have taken with this code x_batch, y_batch = mnist. train. next_batch(batch_size) so we have feed pictures to our model in the form of batch. Feed_dict_train has defined to assign images and tags in the data set to our place holders. The code has written in one line to simultaneously optimize the model and see the variability of the loss value. The if loop has been used to observe the situation in our training. It is coded for training accuracy and training loss printing every 100 iterations. The test_accuracy function has been defined to see how our model predicts data that it has not encountered before.

2 convolutional layers have used to implement the MNIST data set. As a result of trials, when the number of convolutional layers, training step and filter sizes have increased, it has seen that the accuracy increased.First convolutional layer has 16 filters and they all have 5×5 size filters. Second convolutional layer has 32 filters and they all have 5×5 size filters. Layers have combined by making necessary arrangements with max pooling function. ReLU and SoftMax functions have used as activation function. Adam has been used as an optimization algorithm. A very small value of 0.0005 was taken as the learning rate. Batch size is set to 128 for make the training better. Training accuracy and training loss have printed on the output every 100 iterations to check the accuracy of the model. Test accuracy 0.9922 has obtained because of 10000 iterations when the codes have executed.

Figure : Estimation mistakes made by the model

In the figure above, some examples that our model incorrectly predicted are given. Our model can sometimes make wrong predictions, which may be because the text is faint or unclear. In the first example, we see that our model estimates the number 4 as 2.

Figure :  Graph of Loss function

The loss graph gives us a visualized version of the loss values we observed during the training. As shown in the figure, we have a decreasing loss graph over time. Our goal is bringing the loss value closer to zero. Through the loss graph, we can see the appropriateness of the learning rate. When we look at the figure, we can say that our learning rate value is good because there is no slowdown in the decrease in the graph.

In this blog, I made an application on Python using CNN with the Mnist data set. Thank you to everyone who has followed my blogs closely until today, goodbye until we see you again …




Article Review: Multi-Category Classification with CNN

Classification of Multi-Category Images Using Deep Learning: A Convolutional Neural Network Model

In this article, the article ‘Classifying multi-category images using Deep Learning: A Convolutional Neural Network Model’ presented in India in 2017 by Ardhendu Bandhu, Sanjiban Sekhar Roy is being reviewed. An image classification model using a convolutional neural network is presented with TensorFlow. TensorFlow is a popular open-source library for machine learning and deep neural networks. A multi-category image dataset was considered for classification. Traditional back propagation neural network; has an input layer, hidden layer, and an output. A convolutional neural network has a convolutional layer and a maximum pooling layer. We train this proposed classifier to calculate the decision boundary of the image dataset. Real-world data is mostly untagged and unstructured. This unstructured data can be an image, audio, and text data. Useful information cannot be easily derived from neural networks that are shallow, meaning they are those with fewer hidden layers. A deep neural network-based CNN classifier is proposed, which has many hidden layers and can obtain meaningful information from images.

Keywords: Image, Classification, Convolutional Neural Network, TensorFlow, Deep Neural Network.

First of all, let’s examine what classification is so that we can understand the steps laid out in the project. Image Classification refers to the function of classifying images from a multi-class set of images. To classify an image dataset into multiple classes or categories, there must be a good understanding between the dataset and classes.

In this article;

  1. Convolutional Neural Network (CNN) based on deep learning is proposed to classify images.
  2. The proposed model achieves high accuracy after repeating 10,000 times within the dataset containing 20,000 images of dogs and cats, which takes about 300 minutes to train and validate the dataset.

In this project, a convolutional neural network consisting of a convolutional layer, RELU function, a pooling layer, and a fully connected layer is used. A convolutional neural network is an automatic choice when it comes to image recognition using deep learning.

Convolutional Neural Network

For classification purposes, it has the architecture as the convolutional network [INPUT-CONV-RELU-POOL-FC].

INPUT- Raw pixel values as images.

CONV- Contents output in the first cluster of neurons.

RELU- It applies the activation function.

POOL- Performs downsampling.

FC- Calculates the class score.

In this publication, a multi-level deep learning system for picture characterization is planned and implemented. Especially the proposed structure;

1) The picture shows how to find nearby neurons that are discriminatory and non-instructive for grouping problem.

2) Given these areas, it is shown how to view the level classifier.


A data set containing 20,000 dog and cat images from the Kaggle dataset was used. The Kaggle database has a total of 25000 images available. Images are divided into training and test sets. 12,000 images are entered in the training set and 8,000 images in the test set. Split dataset of the training set and test set helps cross-validation of data and provides a check over errors; Cross-validation checks whether the proposed classifier classifies cat or dog images correctly.

The following experimental setup is done on Spyder, a scientific Python development environment.

  1. First of all, Scipy, Numpy, and Tensorflow should be used as necessary.
  2. A start time, training path, and test track must be constant. Image height and image width were provided as 64 pixels. The image dataset containing 20,000 images is then loaded. Due to a large number of dimensions, it is resized and iterated. This period takes approximately 5-10 minutes.
  3. This data is fed by TensorFlow. In TensorFlow, all data is passed between operations in a calculation chart. Properties and labels must be in the form of a matrix for the tensors to easily interpret this situation.
  4. Tensorflow Prediction: To call data within the model, we start the session with an additional argument where the name of all placeholders with the corresponding data is placed. Because the data in TensorFlow is passed as a variable, it must be initialized before a graph can be run in a session. To update the value of a variable, we define an update function that can then run.
  5. After the variables are initialized, we print the initial value of the state variable and run the update process. After that, the rotation of the activation function, the choice of the activation function has a great influence on the behavior of the network. The activation function for a specific node is an input or output of the specific node provided a set of inputs.
  6. Next, we define the hyperparameters we will need to train our login features. In more complex neural networks, we encounter more hyperparameters. Some of our hyperparameters can be like the learning rate.
    Another hyperparameter is the number of iterations we train our data. The next hyperparameter is the batch size, which chooses the size of the set of images to send for classification at one time.
  7. Finally, after all that, we start the TensorFlow session, which makes TensorFlow work, because without starting a session a TensorFlow won’t work. After that, our model will start the training process.


🖇 As deep architecture, we used a convolutional neural network and also implemented the TensorFlow deep learning library. The experimental results below were done on Spyder, a scientific Python development environment. 20,000 images were used and the batch is fixed at 100 for you.

🖇 It is essential to examine the accuracy of the models in terms of test data rather than training data. To run the convolutional neural network using TensorFlow, the Windows 10 machine was used, the hardware was specified to have an 8GB of RAM with the CPU version of TensorFlow.

📌 As the number of iterations increases, training accuracy increases, but so does our training time. Table 1 shows the number line with the accuracy we got.

Number of iterations vs AccuracyThe graph has become almost constant after several thousand iterations. Different batch size values can lead to different results. We set a batch size value of 100 for images.

✨ In this article, a high accuracy rate was obtained in classifying images with the proposed method. The CNN neural network was implemented using TensorFlow. It was observed that the classifier performed well in terms of accuracy. However, a CPU based system was used. So the experiment took extra training time, if a GPU-based system was used, training time would be shortened. The CNN model can be applied in solving the complex image classification problem related to medical imaging and other fields.


  2. Hinton, G. E., & Salakhutdinov, R. R. (2006). Reducing the dimensionality of data with neural networks. science, 313(5786), 504- 507.
  3. Yoshua Bengio, “Learning Deep Architectures for AI”, Dept. IRO, Universite de Montreal C.P. 6128, Montreal, Qc, H3C 3J7, Canada, Technical Report 1312.
  4. Yann LeCun, Yoshua Bengio & Geoffrey Hinton, “Deep learning “, NATURE |vol 521 | 28 May 2015
  5. Yicong Zhou and Yantao Wei, “Learning Hierarchical Spectral–Spatial Features for Hyperspectral Image Classification”, IEEE Transactions on cybernetics, Vol. 46, No.7, July 2016.

Makale İncelemesi:CNN ile Çok Kategorili Sınıflandırma

Derin Öğrenmeyi Kullanarak Çok Kategorili Görüntülerin Sınıflandırılması : Evrişimli Bir Sinir Ağı Modeli

Bu yazıda, Ardhendu Bandhu, Sanjiban Sekhar Roy tarafından Hindistan’da 2017 senesinde ortaya konulmuş Classifying multi-category images using Deep Learning: A Convolutional Neural Network Model’ adlı makalenin incelemesi yapılmaktadır. TensorFlow ile evrişimsel sinir ağı kullanan bir görüntü sınıflandırma modeli sunulmaktadır. TensorFlow, makine öğrenimi ve derin sinir ağları için popüler bir açık kaynak kütüphanesidir. Sınıflandırma için çok kategorili bir görüntü veri kümesi dikkate alınmıştır. Geleneksel geri yayılım sinir ağı; bir giriş katmanı, gizli katman ve bir çıktıya sahiptir. Evrişimsel sinir ağında, bir evrişimsel tabaka ve bir maksimum havuzlama katmanı (pooling layer) vardır. Bu önerilen sınıflandırıcıyı, görüntü veri kümesinin karar sınırını hesaplamak için eğitiyoruz. Gerçek dünyadaki veriler çoğunlukla etiketlenmemiş ve yapılandırılmamış biçimdedir. Bu yapılandırılmamış veriler görüntü, ses ve metin verileri olabilir. Yararlı bilgiler sığ olan sinir ağlarından kolayca türetilemez, yani bunlar daha az sayıda gizli tabakaya sahip olanlardır. Çok sayıda gizli katmana sahip olan ve görüntülerden anlamlı bilgiler elde edebilen derin sinir ağı tabanlı CNN sınıflandırıcıyı önerilmektedir.

Anahtar kelimeler: Görüntü, Sınıflandırma, Evrişimsel Sinir Ağı, TensorFlow, Derin Sinir Ağı.

Öncelikle projede ortaya konulmuş adımları anlayabilmemiz için sınıflandırmanın ne olduğunu inceleyelim. Görüntü Sınıflandırması, çok sınıflı bir görüntü kümesinden görüntüleri sınıflandırmanın işlevini ifade eder. Bir görüntü veri kümesini birden çok sınıfa veya kategoriye sınıflandırmak için, veri kümesi ile sınıflar arasında iyi bir anlayış olmalıdır.

Bu makalede;

1. Görüntüleri sınıflandırmak için derin öğrenme tabanlı Evrişimsel Sinir Ağı (CNN) önerilmektedir.

2. Önerilen model, veri kümesini eğitmek ve doğrulamak için yaklaşık 300 dakika süren köpek ve kedilerin 20.000 görüntüsünü içeren veri kümesi içinde 10.000 kez yinelendikten sonra yüksek doğruluk elde eder.

Bu projede, bir evrişimsel tabaka, RELU fonksiyonu, bir pooling (havuzlama) tabakası ve fully connected (tam bağlı) bir tabakadan oluşan bir evrişimsel sinir ağı kullanılmaktadır. Evrişimsel sinir ağı, derin öğrenmeyi kullanarak görüntü tanıma söz konusu olduğunda otomatik bir seçimdir.

Convolutional Neural Network

Sınıflandırma amacıyla, evrişimsel ağı [INPUT-CONV-RELU-POOL-FC] olarak mimariye sahiptir.

INPUT- Görüntü olarak ham piksel değerleri.

CONV- İçeriği nöronların ilk kümesindeki çıktı.

RELU- Aktivasyon fonksiyonunu uygular.

POOL- Aşağı örnekleme işlemi yapar.

FC- Sınıf puanını hesaplar.

Bu yayında, resim karakterizasyonu için çok kademeli bir derin öğrenme sistemi planlanır ve uygulanır. Özellikle önerilen yapı;

1) Resim gruplama sorunu için ayrımcı ve öğretici olmayan yakındaki nöronları nasıl bulunacağı gösterilmektedir.

2) Bu alanlar göz önüne alındığında seviye sınıflandırıcıyı nasıl görüntüleyebileceğini gösterilmektedir.


Kaggle veri tabanından 20.000 tane köpek ve kedi görüntüsü içeren bir veri kümesi kullanılmıştır. Kaggle veri tabanında, mevcut toplam 25000 görüntü vardır. Görüntüler eğitim ve test setine bölünmektedir. Eğitim setine 12.000 görüntü ve test setine 8.000 görüntü girilmektedir. Eğitim seti ve test setinin bölünmüş veri kümesi, verilerin çapraz doğrulanmasına yardımcı olur ve hatalar üzerinde bir kontrol sağlar; çapraz doğrulama, önerilen sınıflandırıcının kedi veya köpek görüntülerini doğru bir şekilde sınıflandırıp sınıflandırmadığını kontrol eder.

Aşağıdaki deneysel kurulum, bilimsel bir Python geliştirme ortamı olan Spyder üzerinde yapılır.

  1. İlk olarak Scipy, Numpy ve Tensorflow gibi gerekli kullanılmalıdır.
  2. Bir başlangıç zamanı, eğitim yolu ve bir test yolu sabit olarak olmalıdır. Görüntü yüksekliği ve görüntü genişliği 64 piksel olarak sağlandı. Sonra 20.000 görüntü içeren görüntü veri kümesi yüklenir. Boyutların büyük sayılar olmasınedeniyle yeniden boyutlandırılır ve yinelenir. Bu süre yaklaşık olarak 5-10 dakika sürmektedir.
  3. Bu veriler TensorFlow ile beslenir. TensorFlowda, tüm veriler bir hesaplama grafiğindeki işlemler arasında geçirilir.Tensorlerin bu durumu kolayca yorumlayabilmesi için özellikler ve etiketler bir matris formunda olmalıdır.
  4. Tensorflow Tahmini: Model içindeki verileri çağırmak için, oturumu, ilgili verilerle tüm yer tutucuların adının yerleştirildiği ek bir argüman ile başlatırız. TensorFlowdaki veriler değişken şeklinde geçirildiğinden, bir grafik bir oturumda çalıştırılmadan önce başlatılması gerekir.Bir değişkenin değerini güncellemek için, daha sonra çalıştırabilecek bir güncelleme işlevi tanımlarız.
  5. Değişkenler başlatıldıktan sonra, durum değişkeninin başlangıç değerini yazdırırız ve güncelleme işlemini çalıştırırız. Bundan sonra aktivasyon fonksiyonunun dönüşü, aktivasyon fonksiyonunun seçimi ağın davranışı üzerinde büyük bir etkiye sahiptir. Belirli bir düğüm için etkinleştirme işlevi, bir girdi veya bir girdi kümesi sağlanan belirli düğümün çıktısıdır.
  6. Ardından, giriş özelliklerimizi eğitmek için ihtiyaç duyacağımız hiper parametreleri tanımlarız. Daha karmaşık sinir ağlarında daha çok hiper parametreyle karşılaşmaktayız.Hiper parametrelerimizden bazıları öğrenme oranı gibi olabilir.
     Başka bir hiper parametre, verilerimizi kaç kez eğittiğimiz yineleme sayısıdır. Bir sonraki hiper parametre, bir seferde sınıflandırma için gönderilecek görüntü kümesinin boyutunu seçen batch size boyutudur.
  7. Son olarak, tüm bunlardan sonra, TensorFlow oturumunu başlatırız, bu da TensorFlow’un çalışmasını sağlar, çünkü bir oturumu başlatmadan bir TensorFlow işe yaramaz. Bundan sonra modelimiz eğitim sürecine başlayacaktır.


🖇 Derin mimari olarak evrişimsel bir sinir ağı kullandık ve bununla birlikte TensorFlow derin öğrenme kütüphanesini uyguladık. Aşağıdaki deneysel sonuçlar, bilimsel bir Python geliştirme ortamı olan Spyder üzerinde yapıldı. 20.000 görüntü kullanıldı ve batch size 100’e sabitlendi.

🖇 Modellerin doğruluğunun, eğitim verilerinden ziyade test verileri açısından incelenmesi esastır. TensorFlow kullanarakevrişimsel sinir ağını çalıştırmak için, Windows 10 makinesi kullanıldı, donanımın TensorFlow’un CPU sürümüne sahip olan bir 8 GB RAM ‘e sahip olduğu belirtilmiş.

📌 Yineleme sayısı arttıkça eğitim doğruluğu da artar, ancak eğitim süremiz de artar. Tablo 1, elde ettiğimiz doğrulukla sayı çizgisini gösterir.

Number of iterations vs Accuracy

Grafik, birkaç bin tekrarlamadan sonra neredeyse sabite ulaşmıştır. Farklı batch size değerleri farklı sonuçlara yol açabilir. Biz görüntüler için bir batch size değeri 100 olarak belirlenmiştir.

✨ Bu yazıda, önerilen yöntem ile görüntülerin sınıflandırılmasında yüksek doğruluk oranı elde etmiştir. CNN sinir ağı TensorFlow kullanılarak uygulandı. Sınıflandırıcının doğruluğu açısından iyi performans gösterdiği gözlendi. Bununlabirlikte, CPU tabanlı bir sistem kullanıldı. Bu yüzden deney ekstra eğitim süresi aldı, eğer GPU tabanlı bir sistem kullanılsaydı, eğitim süresi kısalırdı. CNN modeli, tıbbi görüntüleme ve diğer alanlarla ilgili karmaşık görüntü sınıflandırma probleminin çözümünde uygulanabilir.


  2. Hinton, G. E., & Salakhutdinov, R. R. (2006). Reducing the dimensionality of data with neural networks. science, 313(5786), 504- 507.
  3. Yoshua Bengio, “Learning Deep Architectures for AI”, Dept. IRO, Universite de Montreal C.P. 6128, Montreal, Qc, H3C 3J7, Canada, Technical Report 1312.
  4. Yann LeCun, Yoshua Bengio & Geoffrey Hinton, “Deep learning “, NATURE |vol 521 | 28 may 2015
  5. Yicong Zhou and Yantao Wei, “Learning Hierarchical Spectral–Spatial Features for Hyperspectral Image Classification”,IEEE Transactions on cybernetics, Vol. 46, No.7, July 2016.

SSD(Single Shot Multibox Detector) model from A to Z

In this article, we will learn the SSD MultiBox object detection technique from A to Z with all its descriptions. Because the SSD model works much faster than the RCNN or even Faster R-CNN architecture, it is sometimes used when it comes to object detection.
This model, introduced by Liu and his colleagues in 2016, detects an object using background information [2]. Single Shot Multibox Detector i.e. single shot multibox detection (SSD) with fast and easy modeling will be done. And what can be mentioned by one shot? As you can understand from the name, it offers us the ability to detect objects at once.

I’ve collated a lot of documents, videos to give you accurate information, and I’m starting to tell you the whole alphabet of the job. In RCNN networks, regions that are likely to be objects were primarily identified, and then these regions were classified with Fully Connected layers. Object detection is performed in 2 separate stages with the RCNN network, while SSD performs these operations in one step.
As a first step, let’s examine the SSD architecture closely. If the image sounds a little small, you can zoom in and see the contents and dimensions of the convolution layers.

An image is given as input to the architecture as usual. This image is then passed through convolutional neural networks. If you have noticed, the dimensions of convolutional neural networks are different. In this way, different feature maps are extracted in the model. This is a desirable situation. A certain amount of limiting rectangles is obtained using a 3×3 convolutional filter on property maps.
Because these created rectangles are on the activation map, they are extremely good at detecting objects of different sizes. In the first image I gave, an image of 300×300 was sent as input. If you notice, the image sizes have been reduced as you progress. In the most recent convolutional nerve model, the size was reduced to 1. Comparisons are made between the limits set during the training process and the estimates realized as a result of the test. A 50% method is used to find the best among these estimates. A result greater than 50% is selected. You can think of it as the situation that exists in logistical regression.
For example, the image dimensions are 10×10×512 in Conv8_2. It will have outputs (classes + 4) for each bounding box when the 3×3 convolutional operation is applied and using 4 bounding boxes. Thus, in Conv8_2, the output is 10×10×4×(C+4). Assume that there are 10 object classes for object detection and an additional background class. Thus output 10×10×4×(11+4)=6000 will be. Bounding boxes will reach the number 10×10×4 = 400. It ends the image it receives as input as a sizeable Tensor output. In a video I researched, I listened to a descriptive comment about this district election:

Instead of performing different operations for each region, we perform all forecasts on the CNN network at once.

4 bounding boxes are estimated in each cell in the area on the right side, while the image seen on the left in the image above is original [3]. In the grid structures seen here, there are bounding rectangles. In this way, an attempt is made to estimate the actual region in which the object is located.
In the documents I researched, I scratched with the example I gave above. I really wanted to share it with you, because it is an enormous resource for understanding SSD architecture. Look, if you’ve noticed, he’s assigned a percentage to objects that are likely to be in the visual. For example, he gave the car a 50% result. But he will win because the odds above 50% will be higher. So in this visual, the probability that it is a person and a bicycle is more likely than it is a car. I wish you understood the SSD structure. In my next article, I will show you how to code the SSD model.Hope you stay healthy ✨


  1. Face and Object Recognition with computer vision | R-CNN, SSD, GANs, Udemy.
  2. Dive to Deep Learning, 13.7. Single Shot Multibox Detection (SSD),
  6. Single-Shot Bidirectional Pyramid Networks for High-Quality Object Detection,

A'dan Z'ye SSD (Single Shot Multibox Detector) Modeli

Bu yazıda, SSD MultiBox nesne algılama tekniğini A’dan Z’ye tüm açıklamaları ile birlikte öğreneceğiz. SSD modeli, RCNN hatta Faster R-CNN mimarisine göre çok daha hızlı çalıştığı için kimi zaman nesne tespiti söz konusu olduğunda kullanılmaktadır.
Liu ve arkadaşları tarafından 2016 senesinde ortaya konulan bu model, arka plan bilgisini kullanarak nesneyi algılamaktadır [2]. Single Shot Multibox Detector yani Tek Atış Çoklu Kutu Algılama (SSD) ilehızlı ve kolay modelleme yapılacaktır. Peki ya tek atış derken neden bahsediliyor olabilir? Adından da anlayacağınız üzere tek seferde nesne algılama imkanını bize sunmaktadır.

Doğru bilgiler vermek adına birçok doküman, video kayıtlarını harmanladım ve sizlere işin tüm alfabesini anlatmaya başlıyorum. RCNN ağlarda öncelikli olarak nesne olması muhtemel bölgeler belirleniyordu ve daha sonra Fully Connected katmanlar ile bu bölgeler sınıflandırılıyordu. RCNN ağı ile nesne tespiti 2 ayrı aşamada gerçekleştirilirken SSD bu işlemleri tek adımda uygulamaktadır.
İlk adım olarak SSD mimarisini yakından inceleyelim. Görüntü biraz ufak geliyorsa yakınlaştırarak konvolüsyon katmanlarının içeriklerini ve boyutlarını görebilirsiniz.

Mimariye her zamanki gibi girdi olarak bir görüntü verilmektedir. Daha sonra bu görüntü konvolüsyonel sinir ağlarından geçirilmektedir. Dikkat ettiyseniz konvolüsyonel sinir ağlarının boyutları farklıdır. Bu şekilde modelde farklı özellik haritaları (feature maps) çıkarılmaktadır. Bu durum istenilen bir durumdur. Özellik haritalarında 3x3lük evrişimsel filtre kullanılarak belirli miktarda sınırlayıcı dikdörtgen elde edilmektedir.
Ek Açıklamalar
Oluşturulmuş bu dikdörtgenler aktivasyon haritasında olduğu için farklı boyutlardaki nesneleri algılamada son derece iyi seviyededir. İlk verdiğim görselde girdi olarak 300×300’lük bir görüntü gönderilmiştir. Dikkat edecek olursanız ilerledikçe görüntü boyutları düşürülmüştür. En son gerçekleşen konvolüsyonel sinir modelinde ise boyut 1 olana kadar düşürülmüştür. Eğitim sürecinde belirlenen sınırlar ile test sonucunda gerçekleşen tahminler arasında karşılaştırma yapılmaktadır. Bu tahminler arasında en iyiyi bulmak için %50 methodu kullanılmaktadır. %50′ den büyük olan sonuç seçilmektedir. Tıpkı lojistik regresyonda var olan durum gibi düşünebilirsiniz.
Örneğin, görüntü boyutları Conv8_2’de 10×10×512 boyutundadır. 3×3 konvolüsyonel işlemi uygulandığında ve 4 sınırlayıcı kutu kullanılarak her sınırlayıcı kutu için (classes + 4) çıkışlara sahip olacaktır. Böylece, Conv8_2’de çıkış 10×10×4×(c+4) ‘ dir. Nesne algılama için 10 nesne sınıfı ve ek olarak bir arka plan sınıfı olduğunu varsayalım. Böylelikle çıktı 10×10×4×(11+4)=6000 olacaktır. Sınırlayıcı kutular ise 10×10×4 = 400 sayısına ulaşacaktır. Girdi olarak aldığı görüntüyü büyükçe bir tensör çıktısı olarak sonlandırıyor. Araştırdığım bir videoda bu bölge seçimleri ile ilgili şöyle açıklayıcı bir yorum dinlemiştim:

Her bölge için farklı işlemler yapmak yerine bütün tahminleri tek seferde CNN ağında gerçekleştirmekteyiz.

Yukarıdaki görselde solda görülen görüntü orijinal iken sağ tarafta yer alan bölgedeki her hücrede 4 sınırlayıcı kutu tahmini yapılmaktadır [3]. Burada görülen grid yapıları içerisinde sınırlayıcı dikdörtgenler bulunmaktadır. Bu şekilde nesnenin yer aldığı gerçek bölgenin tahmini yapılmaya çalışılmaktadır.
Araştırdığım dokümanlarda yukarıda verdiğim örnek ile kaşılaştım. Gerçekten SSD mimarisini anlamak adına muazzam bir kaynak olduğu için sizler ile de paylaşmak istedim. Bakın dikkat ettiyseniz görselde olması muhtemel nesnelere bir yüzdelik atamış. Örneğin arabaya %50 sonucunu vermiş. Ancak %50′ nin üzerindeki ihtimaller daha yüksel ihtimal olacağı için kazanmış olacaktır. Yani bu görselde bir insan ve bir bisiklet olma ihtimali araba olmasından daha yüksek ihtimallidir. SSD yapısını anlamış olmanızı diliyorum. Bir sonraki yazımda ise SSD modelinin kodlanmasını göstereceğim. Esen kalmanız dileğiyle ✨


  1. Bilgisayar Görüşü ile Yüz ve Nesne Tanıma | R-CNN, SSD, GANs, Udemy.
  2. Dive to Deep Learning, 13.7. Single Shot Multibox Detection (SSD),
  6. Single-Shot Bidirectional Pyramid Networks for High-Quality Object Detection,

Image Segmentation

Mask R-CNN ile Görüntü Segmentasyonu

Görüntü Segmentasyonu

Son zamanlarda çok sık uğraştığım CNN mimarilerine yenilerini ekleyerek öğrenmeye devam etmekteyim. Daha önceki yazımda görüntü segmentasyonunun ne anlama geldiğini örnekler ile betimlemiştim. Eğer ilgilenirseniz profilimden ulaşabilirsiniz. Görüntü segmentasyonu alanında şöyle açıklayıcı bir yorum okumuştum:

Görüntü segmentasyonu, görüntüdeki her pikseli belirli bir kategoriye ait olarak sınıflandırma işlemidir.

Buradan yola çıkarak amacımızın sınıflandırmaya yönelik yardımcı maskelerin belirlenmesi olduğunu da gözlemleyebiliriz. Daha önceki yazımda sizlere segmentasyon işleminin neden ve nasıl yapıldığını aktarmıştım. Bu konuda daha çok bilgilenmek istiyorsanız eğer yazımı incelemenizi tavsiye ederim. Görüntü işleme ve derin öğrenme alanında yaptığım birçok çalışmada baz aldığım bir site önerisi vereceğim. Umarım benim kadar sizlere de yardımcı olabilir. Takıldığım her noktada

Sınıflandırma gerçekleştirilirken bir girdi (input) görüntüsünün içeriğini analiz etmek için bir dizi etiket tahmin edilmektedir. Ancak segmentasyonda bu tahmin işlemi gerçekleştirilirken aynı nesne olma ihtimali olan pikseller boyanmaktadır. Segmentasyonun anlaşıldığını umut ederek biraz daha teknik yaklaşıyorum ve konunun Mask RCNN kısmına geçiyorum.

Mask R-CNN

Mask-RCNN, mantıksal açıdan Faster-RCNN’ e benzerlik göstermektedir. Peki bu Faster-RCNN tam olarak ne yapmaktadır? Görüntüde bulunan objeleri maskeleyerek bizlere nesne tanıma imkanı sağlamaktadır. Bakın bu maskeleme işlemi çok mühimdir. Mask-RCNN de maskeleme işlemi yapılmaktadır. Ancak şöyle bir durum mevcut, Mask-RCNN yapısı gereği eklenen bölüm için binary değer kullanmaktadır. Yani demek istediğim tanınacak obje için maske kullanılacak ise 1, kullanılmayacak ise 0 değeri çıkarmaktadır.

Semantic segmentation (Anlamsal bölümleme)’ ın amacı, nesne örneklerini ayırt etmeden bir nesnenin her pikselini bilinen kategoriler halinde sınıflandırmaktır. Instance Segmentation ise, tespit edilen her nesnenin sınıflandırıldığı, yerelleştirildiği ve bölümlere ayrıldığı bu iki klasik bilgisayarlı görü görevini (algılama ve anlamsal bölümleme) birleştirir [2]. Burada önereceğim sistemde görüntüler için nesnelerin segmentasyonunda Mask R-CNN kullanmaktadır. Bunun yanı sıra terimleri dikkat ettiyseniz İngilizce kullanıyorum çünkü terimler kalıplaştığı için Türkçe söylendiğinde kulağıma tuhaf geliyor. Siz nasıl isterseniz öyle devam edebilirsiniz.

Faster R-CNN’nin bir uzantısı olarak Mask R-CNN, instance segmentation görevini gerçekleştirmek için evrişimli ağların bir dalını içerir. ResNet101’den özellikleri çıkardıktan sonra, bu özellikler bir feature pyramid network (FPN) oluşturur; burada nihai olarak bağlantılar (anchors) tanımlanır ve ilgili bölgeler (RoI’ler) çıkarılır [3].

Mask R-CNN Çalışma Yapısı

ROI Align modülünden çıkan iki adet evrişim CONV katmanı bulunmaktadır. Bu katmanlar, görüntüdeki maskemizin gerçekte oluşturulduğu yerdir [1]. CONV katmanından daha önce bahsetmiştim. Görüntüde yer alan pikseller teker teker taranıp evrişim işlemi uygulanmaktadır. Şimdi sizlere çok daha önemli bir detay paylaşacağım. Bildiğimiz gibi, Faster R-CNN / Mask R-CNN mimarileri, bir görüntünün potansiyel olarak bir nesne içeren bölgelerini oluşturmak için Bölge Teklif Ağı’ndan (RPN-Region Proposal Network) yararlanır. Bu bölgelerin her biri,“objectness score” yani “nesnelik puanına” ( belirli bir bölgenin potansiyel olarak bir nesne içerme olasılığı) göre sıralanır ve ardından en güvenli ilk N adet nesne bölgesi tutulur [1]. Böylelikle tespit edilecek nesneye daha dikkatli yaklaşmış olmaktayız. Görüntülerde seçilen 300 adet ROI (Region of Interest) bölgesinin her biri, ağın üç paralel şubesinden geçecektir:

  • Etiket tahmini (Label prediction): Nesnenin hangi sınıfa (türe) ait olduğunu belirleyen etiketler tahmin edilir.
  • Sınırlayıcı kutu tahmini (Bounding box prediction): Belirlenen nesne etiketleri sınırlayıcı kutular ile çizilir.
  • Maske tahmini (Mask prediction): Daha sonra alınan etiketler baz alınarak kutuların sınırlarından itibaren nesne boyanarak maskelenir.

Mask R-CNN Kod Dizimi

En sık kullandığım Mask R-CNN Github bağlantısını sizler için linkliyorum. Bu kod üzerinden çalışarak nesneler için segmentasyon işlemini birlikte başarabiliriz. Feature Pyramid Network (FPN) ve ResNet101 ağına dayalı oluşturulmuştur.

Oluşturulmuş bu repository içerisinde adım adım tespit anlatılmaktadır. Adım adım ilerlediğinizde önce anchorların filtrelendiğini daha sonra sınırlayıcı kutuların ve maskelerin oluştuğunu göreceksiniz. Daha önceden eğitilmiş COCO veri seti üzerinde nesne tespiti gerçekleştiriliyor. Eğer sizin kendinize ait bir veri setiniz mevcut ise bu verilerde kullanmanızı tavsiye ederim. Bununla birlikte Tensorflow Object Detection API ile nesnelerinizi tespit edecek modeli oluştumanız da mümkün. Bunun ile ilgili bilgilendirici nitelikte bir yazı daha oluşturmuştum, dilerseniz okuyabilirsiniz.

COCO Nedir?



Yukarıdaki görselde de görüldüğü üzere İngilizce Bağlam İçinde Ortak Nesneler anlamına gelen Common Objects in Context kelimesinin belirli harflerinden oluşmaktadır.

Ne İşe Yarar? [6]

  • Nesne segmentasyonu
  • Bağlam içinde tanıma
  • Superpiksel malzeme segmentasyonu
  • 330.000 görüntü (> 200.000 etiketli)
  • 1,5 milyon nesne örneği
  • 80 nesne kategorisi
  • 91 malzeme kategorisi
  • Resim başına 5 başlık
  • Kilit noktalara (keypoints) sahip 250.000 kişi görüntüsü

Görselde eğitilmiş Coco veri setini ve modülleri kullanabileceğimiz kodlara yer verilmektedir. Referans olarak verdiğim Mask RCNN Github bağlantısı üzerinden bu kodlara erişim sağlayabilirsiniz.

Uploading Libraries

Model Direction 

Gördüğünüz üzere Mask RCNN modülünü dahil ederek modeli yüklemeyi başardık. ResNet101 mimarisinin kullanıldığını belirgin konfigürasyonlardan da anlayabiliriz.

Backbone ResNet101

Ardından COCO veri setinde yer alan sınıfları bu şekilde inceleyebiliriz.

Class Names

Sonuç olarak nesne tespitinde son adıma gelmiş bulunmaktayız. Görüntüde yer alan objeleri yüzde değerleri vererek tanımayı başarmıştır. Umarım anlattıklarım sizler için bir nebze faydalı olabilmiştir. Herkese iyi kodlamalar ve güzel günler dilerim 😇



  2. Gil Jader, Jefferson Fontinele, Marco Ruiz, Kalyf Abdalla, Matheus Pithon, Luciano Oliveira, Intelligent Vision Research Lab, Deep instance segmentation of teeth in panoramic X-ray images, 2018 31st SIBGRAPI Conference on Graphics.
  3. S. Ren, K. He, R. Girshick, and J. Sun, “Faster r-cnn: Towards real-time object detection with region proposal networks,” in Advances in neural information processing systems, 2015, pp. 91–99.