Benzetimli Tavlama (Simulated Annealing) Algoritması

BENZETİMLİ TAVLAMA ALGORİTMASI

Herkese merhabalar, optimize kelimesi aslında günlük hayatta çok sık karşımıza çıkan bir kelimedir. Takdir edersiniz ki optimizasyon kelimesi aslında bir olayın, problemin veya bir durumun içerisindeki olasılıklardan mümkün olan en iyiyi seçmesi durumudur 📈.

Genel bir minimum noktası bulmak amacı ile problemin farklı zamanlarındaki sonuçlarını elde ederek bu sonuçlardan iyi olan değere doğru hareket edip birden fazla çözümü test ederek en iyi sonucu bulmaya yardımcı olan yöntem olan Simulated Annealing (Benzetimli Tavlama) yöntemi de bir optimizasyon problemi çözüm yöntemidir [1].

🔎Simulated Annealing Algoritması Hakkında

Benzetimli tavlama (Simulated Annealing) yöntemi, ayrık ve daha az ölçüdeki sürekli optimizasyon problemlerini ele almak için kullanılan popüler bir metasezgisel yerel arama yöntemidir.

Benzetimli tavlama algoritmasının temel özelliği, küresel bir optimum bulma umudu ile tepe tırmanma hareketlerine (amaç fonksiyon değerini kötüleştiren hareketlere) izin vererek yerel optimumdan kaçma aracı sağlamasıdır [2].

Algoritmaya tavlama ismi verilmesinin sebebi, demircilerin demiri döverken belirli bir dereceye kadar ısıl işlemden geçirmesi sonucu demirin istenilen kıvama gelmesini esas almasından kaynaklanmaktadır. Aynı mantık ile bir problem ele alınarak tavlama derecesi ile ısıtma sürecinden geçiriliyor ve ardından istenilen noktaya geldiğinde sonuca ulaştığı kabul ediliyor. (Local Objective Function)  

Simulated Annealing
                                                          Demirin ısıl işlemden geçirilerek tavlanması [3]

Amaç fonksiyonunda Δ kadar bir yükselmeye yol açan hareketin kabul edilme olasılığını veren fonksiyon kabul (accept) fonksiyonu olarak adlandırılır [4].Probability Formula

                                                                      Değerler arasında swap değişim yöntemi

Table1

İterasyon çıktılarındaki ilk çözüm ve elde edilen en iyi çözüm değerleri ise sırasıyla aşağıda gösterilmektedir. Optimum değerleri ulaşmayı hedefleyerek 10 iterasyon boyunca ilk çözüm ve son çözüm değerlerini elde edeceğiz.

First Five İteration

                                                                              Objective değerler tablosu

Visual                                                                         Objective değerlerin grafikselleştirilmesi

Örneğin 5.iterasyon çalıştırılırken değer değişimlerini gözlemlemek amacı ile hesaplama sırasında farklı zamanlarda alınan sonuçlar aşağıda gösterilmiştir. Böylelikle swap işlemi mantığını ve bu süreçteki enerji değişimleri (ΔE) gözle görülebilmektedir.

Table3

                                                         Swap işlemi devam ederken enerji değerlerinin gösterilmesi

Table4                                                     5 ve 102 nolu bağdaki hesaplamaya bağlı result değerleri

Table5

                                                           113 ve 127 bağındaki hesaplamaya bağlı olarak result değerleri

🔎 2-OPT ALGORİTMASININ SA ÜZERİNDE UYGULANMASI

2-opt algoritması, GSP problemlerinin çözümüne yönelik, muhtemelen en temel ve çok geniş kullanım alanına sahip bir algoritmadır [6]. Temel olarak tur içerisindeki iki kenarın silinmesi ve iki parçaya ayrılan turun maliyetleri düşürecek şekilde, farklı olarak bağlanması şeklinde tanımlanabilir (Gutin ve Punnen, 2002).

✔️Benzetimli tavlamanın swap yönteminde iki değer birbiri ile kontrol edilmekte ve olasılık değerine göre hafızaya alınmaktadır. Fakat tüm işlemler sırası ile yapılacağından çalışma zamanı açısından çok verimli olmayacaktır.

✔️2opt algoritması ile örneğin tour olarak adlandırılan indis değerlerinde (initial_p) 4. düğümden sonra 17. düğüme geçiş yapmakta olduğu görülmektedir. 2opt algoritması devreye 4 ve 5. düğümler arasındaki bağı kırıp d ile 17 düğümleri arasındaki bağı oluşturmakta girer. Böylelikle çalışma zamanı daha verimli sonuçlar üretir.      

                                                     Tour bağlantısındaki farklı değerlerin bağlanması

two_opt_python fonksiyonunda şehirlerdeki indis değerleri 2 artırımlı olarak kontrol edilerek değişimi vermektedir. Tour üzerindeki yolda herhangi bir değişim yaşandıysa bu değişim tour değişkenine atanmaktadır. dist( ) fonksiyonu sonucunda iki şehir arasındaki ( 4-17 gibi) Öklid uzaklığı hesaplatılarak tour içerisindeki koordinatlar döndürülmektedir. Bu sayede en iyi çözüm üzerinde iyileştirme sağlanmaktadır ⭐

REFERANSLAR

[1] Sadi Evren Şeker, Bilgisayar Kavramları, “Simulated Annealing (Benzetilmiş Tavlama)”, http://bilgisayarkavramlari.sadievrenseker.com/2009/11/23/simulated-annealing-benzetilmis-tavlama/ adresinden alınmıştır.

 [2] Darrall Henderson, Sheldon H Jacobson, Alan W. Johnson, The Theory and Practice of Simulated Annealing, April 2006.          

 [3] Orhan Baylan, “ISIL İŞLEM NEDİR? ÇELİĞE NİÇİN ISIL İŞLEM YAPILIR?”, https://www.metaluzmani.com/isil-islem-nedir-celige-nicin-isil-islem-yapilir/ adresinden alınmıştır.     

 [4] Tavlama Benzetimi Algoritması (Simulated Annealing), BMÜ-579 Benzetim ve Modelleme, Yrd. Doç. Dr. İlhan AYDIN.

[5] Hefei University, Thomas Weise, Metaheuristic Optimization, 7. Simulated Annealing.

[6] Timur KESKİNTÜRK, Barış KİREMİTCİ, Serap KİREMİTCİ, 2-OPT Algoritması ve Başlangıç Çözümünün Algoritma Sonuçları Üzerindeki Etkisi, 2016.

                                                                                              Olasılık formülü

Sıcaklık yüksek olduğunda, amaç fonksiyonunda artışa neden olabilecek hareketlerin kabul edilme olasılığı çok yüksek olacak, sıcaklık düştükçe bu olasılık da azalacaktır. Bu sebeple, aramaya yeteri kadar yüksek bir sıcaklık değeri ile başlamak gereklidir [4]. Ben çalıştığım projede kullanılacak başlangıç sıcaklık değerini T= 100000 olarak belirledim 🌡️.

Algoritmada, sıcaklık yavaş yavaş azaltılırken her sıcaklık değerinde belli sayıda hareket deneyerek arama işlemi sürdürülmektedir [4].

Algoritmanın Akış Şeması 🖋️Flowchart

                                                   Benzetimli Tavlama Algoritması Akış Diyagramı

Algoritmanın Çalışma Prensibi 🔨

Benzetimli algoritmanın çalışma mantığında en önemli işlem, sıcaklığın zamanla soğutulması gerektiğidir. Çünkü başlangıç sıcaklığı zamanla azalmazsa enerji sürekli yüksek kalacak ve yüksek orandaki entropi ile tüm ağacın aranması sağlanacaktır, bu istenmeyen bir durumdur.

Algoritmada soğuma işlemi gerçekleştirilene kadar her çözümde enerji seviyeleri karşılaştırılır. Enerji değişimi hesaplanmasında pos’ olarak olası bir yapılandırmadan mevcut yapılandırma farkından faydalanılır [5].

Solution1                                                                  Enerji değişimi hesaplanması [5]

Daha sonra kabul edilecek pozisyonun hesaplanması için Şekil 4’ de görüldüğü gibi bir hesaplama olasılığı sunulmuştur. Boltzmann sabiti olan k değeri göz ardı edilerek denklem sadeleştirilmiştir. Bu sayede yeni aday çözümün hesaplanmasına imkân sunulmuştur.

                                                               Yeni aday çözümün olasılık hesabı [5]

Bu durumlarda T sıcaklığı ise yinelenen belirli bir aralıkta sıcaklığını azaltmaya devam etmektedir. Bu projede kullanılan veri seti ‘gr137.tsp’ olarak seçilmiştir.

Bu veri seti TSP alt yapısı ile çalışmakta ve gezgin satıcı problemlerini baz almaktadır. Bu veri seti Amerika alt yapısındaki 666 tane şehir problemi için bilgi içermekte ve içerik boyutunda 137 tane X ve Y koordinatları verilmektedir.

Benzetimli tavlama yönteminde çalıştırılan düğümleri öncelikle swap yöntemi ile değiştirerek karşılaştıracağız ve en iyi sonucu elde etmeye çalışacağız 👩🏻‍🏫

Amaç fonksiyonu olarak gösterilen Objective Function ’da karşılaştırılacak düğümlerin mesafelerini aşağıdaki gibi hesaplayacağız. Burada hesaplanacak mesafeyi ise öklid mesafesi olarak alacağız 📏

Optimizasyon algoritmalarında çok sık kullanılan bir dil olan Python dilinde kodlamaya devam edeceğiz. Haydi birlikte amaç fonksiyonunu öklid mesafesi baz alarak yazalım 👍

Objective Function                                                              Amaç fonksiyonu mesafe hesaplanması

Swap Yöntemi ile Hesaplama 🧮

Şekil 8’ de görüldüğü üzere N ile gösterilen değer koordinatların boyutunu ifade etmektedir. N boyutunda rastgele değerler üreterek swap1 ve swap2 değişkenlerine atayacağız. 

Kontrol edilecek iki değer birbiri ile aynı ise yeni olasılık değeri oluşturmak üzere swap2 olasılığı yeniden değer oluşturacak demektir. Bu veri setinde p ile ifade edilen değer bir bakıma Id sütununa denk gelmektedir. 

Üzerinde değişiklik yapılmaması için copy( ) fonksiyonu ile değerler kopyalanmaktadır. Her aşamada enerji hesaplaması yapılmasının sebebi, Simulated Annealing algoritma mantığındaki sıcaklık ( temperature ) değerinin belirli bir değere kadar ısıtılması ve sonra cooling factor denilen soğuma faktörü ile belirli bir seviyeye kadar soğutulması gerektiğinden kaynaklanmaktadır.

Benzetimli tavlama örneğindeki ısınma sürecinde içerisindeki partiküllerin hareketliliğinden dolayı enerji yükselmesi olacaktır ve enerji hesabı her süreçte yapılarak yüksek enerjiye sahip olup olmadığı kontrol edilmek istenmektedir ⚡

Swap method

                                                                        Swap yöntemi ile hesaplama

Algoritmada kullanılan bu yöntemde sıra ile (order) işlem yapılmakta olduğundan rastgele değerler üzerinde hesaplama yöntemine gidemez böylelikle doğru sonuçlara diğer arama operatörlerinin kullanımı ile gidilmesi zaman açısından da çok önem arz etmektedir.Swap Changing

                                                                      Değerler arasında swap değişim yöntemi

Table1

İterasyon çıktılarındaki ilk çözüm ve elde edilen en iyi çözüm değerleri ise sırasıyla aşağıda gösterilmektedir. Optimum değerleri ulaşmayı hedefleyerek 10 iterasyon boyunca ilk çözüm ve son çözüm değerlerini elde edeceğiz.

First Five İteration

                                                                              Objective değerler tablosu

Visual                                                                         Objective değerlerin grafikselleştirilmesi

Örneğin 5.iterasyon çalıştırılırken değer değişimlerini gözlemlemek amacı ile hesaplama sırasında farklı zamanlarda alınan sonuçlar aşağıda gösterilmiştir. Böylelikle swap işlemi mantığını ve bu süreçteki enerji değişimleri (ΔE) gözle görülebilmektedir.

Table3

                                                         Swap işlemi devam ederken enerji değerlerinin gösterilmesi

Table4                                                     5 ve 102 nolu bağdaki hesaplamaya bağlı result değerleri

Table5

                                                           113 ve 127 bağındaki hesaplamaya bağlı olarak result değerleri

🔎 2-OPT ALGORİTMASININ SA ÜZERİNDE UYGULANMASI

2-opt algoritması, GSP problemlerinin çözümüne yönelik, muhtemelen en temel ve çok geniş kullanım alanına sahip bir algoritmadır [6]. Temel olarak tur içerisindeki iki kenarın silinmesi ve iki parçaya ayrılan turun maliyetleri düşürecek şekilde, farklı olarak bağlanması şeklinde tanımlanabilir (Gutin ve Punnen, 2002).

✔️Benzetimli tavlamanın swap yönteminde iki değer birbiri ile kontrol edilmekte ve olasılık değerine göre hafızaya alınmaktadır. Fakat tüm işlemler sırası ile yapılacağından çalışma zamanı açısından çok verimli olmayacaktır.

✔️2opt algoritması ile örneğin tour olarak adlandırılan indis değerlerinde (initial_p) 4. düğümden sonra 17. düğüme geçiş yapmakta olduğu görülmektedir. 2opt algoritması devreye 4 ve 5. düğümler arasındaki bağı kırıp d ile 17 düğümleri arasındaki bağı oluşturmakta girer. Böylelikle çalışma zamanı daha verimli sonuçlar üretir.      

                                                     Tour bağlantısındaki farklı değerlerin bağlanması

two_opt_python fonksiyonunda şehirlerdeki indis değerleri 2 artırımlı olarak kontrol edilerek değişimi vermektedir. Tour üzerindeki yolda herhangi bir değişim yaşandıysa bu değişim tour değişkenine atanmaktadır. dist( ) fonksiyonu sonucunda iki şehir arasındaki ( 4-17 gibi) Öklid uzaklığı hesaplatılarak tour içerisindeki koordinatlar döndürülmektedir. Bu sayede en iyi çözüm üzerinde iyileştirme sağlanmaktadır ⭐

REFERANSLAR

[1] Sadi Evren Şeker, Bilgisayar Kavramları, “Simulated Annealing (Benzetilmiş Tavlama)”, http://bilgisayarkavramlari.sadievrenseker.com/2009/11/23/simulated-annealing-benzetilmis-tavlama/ adresinden alınmıştır.

 [2] Darrall Henderson, Sheldon H Jacobson, Alan W. Johnson, The Theory and Practice of Simulated Annealing, April 2006.          

 [3] Orhan Baylan, “ISIL İŞLEM NEDİR? ÇELİĞE NİÇİN ISIL İŞLEM YAPILIR?”, https://www.metaluzmani.com/isil-islem-nedir-celige-nicin-isil-islem-yapilir/ adresinden alınmıştır.     

 [4] Tavlama Benzetimi Algoritması (Simulated Annealing), BMÜ-579 Benzetim ve Modelleme, Yrd. Doç. Dr. İlhan AYDIN.

[5] Hefei University, Thomas Weise, Metaheuristic Optimization, 7. Simulated Annealing.

[6] Timur KESKİNTÜRK, Barış KİREMİTCİ, Serap KİREMİTCİ, 2-OPT Algoritması ve Başlangıç Çözümünün Algoritma Sonuçları Üzerindeki Etkisi, 2016.

Data Analysis and Visualization with Python – 2

We continue to make visualizations on the Iris dataset I used in my previous article. There are 2 most frequently used libraries for data visualization. Of these libraries, matplotlib is known by many people, just as I know. In addition, our second library is seaborn. In this article, we will witness the visualization of data with the help of libraries.

🔐 You need to enter the link for the Colab link I use.

Data Visualization Libraries

1. Seaborn: Statistical Data Visualization Library

Seaborn is a Python data visualization library based on Matplotlib. It provides a high-level interface to draw attractive and informative statistical graphs. Visit the setup page to see how you can download the package and start using it.

Seaborn

We can say that the difference compared to Matplotlib is that it has more customization options.

Seaborn Samples

In the image I gave above, we see how we can visualize the data thanks to Seaborn. It is possible to display our data in many different graphics and forms.

2. Matplotlib: Visualization with Python

Matplotlib; it is a comprehensive library for creating static, animated, and interactive visualizations in Python.

Matplotlib Logo

Matplotlib was originally written by John D. Hunter, has an active development community ever since.

Plots

Likewise, in the visual I have given here, there are visualization forms that can be made with Matplotlib.

🧷 Click on the link to view the plot, or graphics, in the Matplotlib library.

  • Line Plots: It shows the relationship between two variables in lines.

Line plots

  • Scatter Plots: As the name suggests, this relationship between two variables is shown as distributed points.

Scatter Plots

✨ I wanted to use the seaborn library to measure the relationship between the variables in the Iris data set.

Uploading Seaborn

After including the Seaborn library in our project, we provide the graph by entering various parameters. Here we have compared the relationship between sepal_length and petal_width attributes over dataframe. The cmap variable is the variable that determines the color palette we use in our chart. It can be changed upon request. The variables indicates the size of the points in the scatter chart given here as points.

Data Visulatizaton

We have come to the end of another article. Stay healthy ✨

REFERENCES

  1. https://seaborn.pydata.org.
  2. https://matplotlib.org.
  3. Machine Learning Days | Merve Noyan | Data Visualization | Study Jams 2 |, https://www.youtube.com/watch?v=JL35pUrth4g&t=640s.
  4. Matplotlib, Wikipedia, The Free Encyclopedia, https://en.wikipedia.org/wiki/Matplotlib.
  5. https://jakevdp.github.io/PythonDataScienceHandbook/04.02-simple-scatter-plots.html.
  6. https://jakevdp.github.io/PythonDataScienceHandbook/04.01-simple-line-plots.html.
  7. https://matplotlib.org/3.1.1/tutorials/colors/colormaps.html.

 

 

 

 

 

 

 

Python ile Veri Analizi ve Görselleştirme – 2

Bir önceki yazımda kullandığım Iris veri seti üzerinde görselleştirme yapmaya devam ediyoruz. Veri görselleştirme için en sık kullanılan 2 adet kütüphane vardır. Bu kütüphanelerden matplotlib tıpkı benim bildiğim gibi birçok kişi tarafından bilinmektedir. Bunun yanı sıra 2. kütüphanemiz ise seaborn olmaktadır. Bu yazıda verilerin kütüphaneler yardımı ile görselleştirilmesine tanıklık edeceğiz.

🔐 Kullandığım Colab bağlantısı için linke girmeniz gerekmektedir.

Veri Görselleştirme Kütüphaneleri

1. Seaborn: Statistical Data Visualization Library ( İstatistiksel Veri Görselleştirme Kitaplığı )

Seaborn, Matplotlib tabanlı bir Python veri görselleştirme kitaplığıdır . Çekici ve bilgilendirici istatistiksel grafikler çizmek için üst düzey bir arayüz sağlar. Paketi nasıl indirebileceğinizi ve kullanmaya başlayabileceğinizi görmek için kurulum sayfasını ziyaret ediniz.

Seaborn

Matplotlib’ e göre farkı daha fazla özelleştirme seçeneğinin olması diyebiliriz.

Seaborn SamplesYukarıda yer verdiğim görselde Seaborn sayesinde verileri nasıl görselleştirebileceğimizi görmekteyiz. Birçok farklı grafik ve formlarda verilerimizi sergilememiz mümkün.

2. Matplotlib: Visualization with Python

Matplotlib; Python’da statik, animasyonlu ve etkileşimli görselleştirmeler oluşturmak için kapsamlı bir kütüphanedir.

Matplotlib Logo

Matplotlib orijinal olarak John D. Hunter tarafından yazılmıştır , o zamandan beri aktif bir geliştirme topluluğuna sahiptir. 

Seaborn Samples

Aynı şekilde burada verdiğim görselde ise Matplotlib ile yapılabilecek görselleştirme formları bulunmaktadır.

🧷 Matplotlib kitaplığındaki plot yani grafikleri incelemek için bağlantıya tıklayınız.

  • Line Plots ( Çizgi Grafikleri): İki değişken arasındaki ilişkiyi çizgiler halinde göstermektedir.

Line plots

  • Scatter Plots ( Dağılım Grafikleri ): İki değişken arasında var olan bu ilişkiyi isminden de anlaşılacağı üzere dağıtık noktalar halinde gösterilmektedir.

Scatter Plots

✨ Iris veri setinde yer alan değişkenlerin birbirleri ile olan ilişkisini ölçmek adına seaborn kütüphanesini kullanmak istedim.

Uploading Seaborn

Seaborn kütüphanesini projemize dahil ettikten sonra çeşitli parametreleri girerek grafiğin oluşmasını sağlamaktayız. Burada dataframe üzerinden sepal_length ve petal_width öznitelikleri arasındaki ilişkinin karşılaştırılmasını gerçekleştirdik. cmap değişkeni ise grafiğimizde kullandığımız renk paletinin belirlendiği değişkendir. İsteğe göre değiştirilebilmektedir. s değişkeni ise burada noktalar halinde verilen scatter grafiğindeki noktaların büyüklüğünü belirtmektedir.

Data Visulatizaton

Bir yazının daha sonuna gelmiş bulunmaktayız. Sağlıcakla kalın ✨

REFERANSLAR

  1. https://seaborn.pydata.org.
  2. https://matplotlib.org.
  3. Machine Learning Days | Merve Noyan | Data Visualization | Study Jams 2 |, https://www.youtube.com/watch?v=JL35pUrth4g&t=640s.
  4. Matplotlib, Wikipedia, The Free Encyclopedia, https://en.wikipedia.org/wiki/Matplotlib.
  5. https://jakevdp.github.io/PythonDataScienceHandbook/04.02-simple-scatter-plots.html.
  6. https://jakevdp.github.io/PythonDataScienceHandbook/04.01-simple-line-plots.html.
  7. https://matplotlib.org/3.1.1/tutorials/colors/colormaps.html.

Data Analysis and Visualization with Python

Hello, one more beautiful day! In this article, we will continue to code Python with you. So what are we doing today? We will talk about one of my favorite topics, data analysis. You can get your data set from data sites such as Kaggle or UCI. In addition to these, I did research on Iris Flower Data Set and chose it for you.

The Iris flower dataset is a multivariate dataset presented by the British statistician and biologist Ronald Fisher in his 1936 article on the use of multiple measures in taxonomic problems. It is sometimes referred to as the Anderson Iris dataset because Edgar Anderson collected data to measure the morphological variation of Iris flowers of three related species. The dataset consists of 50 samples from each of the three Iris species (Iris Setosa, Iris virginica and Iris versicolor).

Four properties were extracted from each sample:

    1. The length of the sepals in centimeters
    2. The width of the sepals in centimeters
    3. The length of the petals in centimeters
    4. The width of the petals in centimeters

This dataset becomes a typical test case for many statistical classification techniques in machine learning, such as support vector machines.

Iris dataset

The visual you see above is also included in the notebook I created in Colab. In this visual, we see examples from the data set. You can access it via the Colab link at the end of the article. It is already in the literature as one of the most frequently and fundamentally used data sets in the field of data science.

STEPS

✨ The necessary libraries must be introduced in Colab and then the path of the data set in the folder must be specified. Then you can print the df variable to see the data set content or use the df.head( ) command to access the first 5 lines.

Veri kümesini ve kitaplıkları içe aktarma

Veri Kümesini İncele

✨ If you wish, let’s run the df.head( ) command and see how we will get an output.

Baş Komuta

✨ We include the values of the features in the data set above. Variables like sepal_length and petal_width are numerical variables. In addition, the feature of the flower type referred to as species is referred to as a categorical variable. First of all, it is useful to know which type of variable this data falls into.

⚠️ If it is desired to estimate the categorical data, namely the type of flower from the numerical variables (features between sepal_length and petal_width), this is a classification problem.

Descriptive Statistics

✨ Descriptive statistics are printed with Pandas’ describe method. If you want to follow, you can access the original documents of Pandas. In this way, how much data each feature contains – it is possible to see the lost data – it is informed. Standard deviation, average, minimum and maximum values of the properties are seen.

Describe Method

For example, in these data, the sepal_length feature is specified as 150000 lines in total and the standard deviation of these values is approximately 0.83.

⏳ The 25% and 75% range are known as Quartiles. By controlling these values, data can be analyzed.

✨ To get information about the data set, df.info( ) command should be run.

According to this information, we see that there is no row with an empty value. In addition to these, we also know that the features that exist numerically have float type.

✨ The df.isna( ) command checks if there is missing data (Not a Number) in the data set. We expect the row with the missing data to be ‘True’. However, as we have seen above, we do not have any lost data.

NaN Any

✨ The df.isna( ).any( ) command returns True if the data set contains even 1 missing data while checking lost data.

Not a Number Value

🖇 NOTE: Click on the link for the Colab link I mentioned above.

In the second article of the series, I will refer to the small points in the data analysis and the visualization area. Stay healthy ✨

REFERENCES

  1. https://pandas.pydata.org/pandas-docs/stable/index.html.
  2. https://www.kaggle.com/arshid/iris-flower-dataset.
  3. Machine Learning Days | Merve Noyan | Data Visualization | Study Jams 2 |, https://www.youtube.com/watch?v=JL35pUrth4g.
  4. https://www.kaggle.com/peterchang77/exploratory-data-analysis.

 

Python ile Veri Analizi ve Görselleştirme

Güzel bir günden daha merhaba! Bu yazıda sizler ile birlikte Python kodlamaya devam edeceğiz. Peki bugün neler yapıyoruz? En sevdiğim konulardan biri olan veri analizine birlikte deyineceğiz. Veri setinizi Kaggle veya UCI gibi veri sitelerinden temin edebilirsiniz. Bunların yanı sıra Iris Çiçek Veri Seti hakkında araştırma yapıp sizler için seçtim.

Iris çiçeği veri seti, İngiliz istatistikçi ve biyolog Ronald Fisher tarafından 1936’daki taksonomik problemlerde çoklu ölçümlerin kullanımı adlı makalesinde sunulan çok değişkenli bir veri setidir. Bazen Anderson Iris veri seti olarak adlandırılır çünkü Edgar Anderson, üç ilgili türün Iris çiçeklerinin morfolojik varyasyonunu ölçmek için verileri toplamıştır. Veri seti, üç Iris türünün (Iris Setosa, Iris virginica ve Iris versicolor) her birinden olmak üzere 50 örnekten oluşur.

Her numuneden dört özellik çıkarılmıştır:

    1. çanak yaprakları santimetre cinsinden uzunluğu
    2. çanak yaprakları santimetre cinsinden genişliği
    3. taç yapraklarının santimetre cinsinden uzunluğu
    4. taç yapraklarının santimetre cinsinden genişliği

Bu veri kümesi, destek vektör makineleri gibi makine öğreniminde birçok istatistiksel sınıflandırma tekniği için tipik bir test senaryosu haline gelmektedir.

Iris veri kümesi

Yukarıda gördüğünüz görsel Colab’da oluşturduğum not defteri içerisinde de yer almaktadır. Bu görselde veri setinden örnekler görmekteyiz. Yazının sonunda yer alan Colab linki üzerinden erişim sağlayabilirsiniz. Zaten veri bilimi alanında en sık ve temel olarak kullanılan veri setlerinden bir tanesi olarak literatürde yer almaktadır.

ADIMLAR

✨ Colab’ da gerekli kütüphaneler tanıtılmalı ve ardından klasör içerisinde yer alan veri setinin yolunun belirtilmesi gerekmektedir. Ardından veri seti içeriğini görmek için df değişkenini yazdırabilir veya ilk 5 satırına erişmek için df.head( ) komutunu kullanabilirsiniz.

Veri kümesini ve kitaplıkları içe aktarma

Veri Kümesini İncele

✨ Dilerseniz df.head( ) komutunu da çalıştırıp nasıl bir çıktı alacağız birlikte görelim.

Baş Komuta

✨ Yukarıda veri setinde yer alan özelliklerin değerlerine yer vermekteyiz. sepal_length ve petal_width gibi değişkenler numerical (sayısal) değişkenlerdir. Bir de bunun yanı sıra species olarak geçen çiçek türü özelliği ise categorical (kategorik) değişken olarak geçmektedir. Öncelikli olarak bu verilerin hangi değişken türüne girdiğini bilmekte fayda var.

⚠️ Eğer burada yer alan sayısal değişkenlerden (sepal_length ve petal_width arası özellikler) kategorik verinin yani çiçek türünün tahmini yapılmak isteniyorsa bu bir sınıflandırma problemidir.

✨ Pandas’ ın describe metodu ile tanımlayıcı istatistikler yazdırılmaktadır. Takip etmek isterseniz Pandas’ ın orijinal dokümanlarından erişebilirsiniz. Bu şekilde her özellik ne kadar veri içeriyorsa -kayıp verileri de görmemiz mümkün- bunun bilgilendirmesi yapılmaktadır. Özelliklerin standart sapması, ortalaması, minimum ve maksimum değerleri görülmektedir.

Describe Method

Örneğin bu veriler içerisinde sepal_length özelliği toplam 150000 satır ve bu değerlerin standart sapması ise yaklaşık olarak 0.83 olarak belirtilmiştir.

⏳ 25% ve 75% aralığı ise Quartile (Çeyrekler Aralığı) olarak bilinmektedir. Bu değerler kontrol edilerek verinin analizi yapılabilmektedir.

✨ Veri seti hakkında bilgi almak için ise df.info( ) komutu çalıştırılmalıdır.

Bu bilgilere göre boş değer olan satır bulunmamakta olduğunu görüyoruz. Bunların yanı sıra sayısal olarak var olan özelliklerin float tipine sahip olduğunun da bilgisine sahip oluyoruz.

df.isna( ) komutu veri setinde kayıp veri (Not a Number) olup olmadığını kontrol etmektedir. Kayıp verinin olduğu satırın ‘True’ olmasını beklemekteyiz. Ancak yukarıda gördüğümüz gibi kayıp verimiz bulunmamaktadır.

NaN Any

df.isna( ).any( ) komutu ise veri setinde kayıp veriler kontrol edilirken 1 adet bile kayıp veri içeriyor ise True olarak dönmektedir.

Not a Number Value

🖇 NOT: Yukarıda sözünü ettiğim Colab bağlantısı için bağlantıya tıklayınız.

Serinin 2. yazısında ise veri analizinde kalan ufak noktalara ve görselleştirme alanına deyineceğim. Sağlıcakla kalın ✨

REFERANSLAR

  1. https://pandas.pydata.org/pandas-docs/stable/index.html.
  2. https://www.kaggle.com/arshid/iris-flower-dataset.
  3. Machine Learning Days | Merve Noyan | Data Visualization | Study Jams 2 |, https://www.youtube.com/watch?v=JL35pUrth4g.
  4. https://www.kaggle.com/peterchang77/exploratory-data-analysis.

 

 

Featured Image

Interactive IPython and Shell Commands

One of the annoyances you will encounter when interacting with the standard Python interpreter is the need to switch between multiple windows to access Python tools and system command line tools. IPython fills this gap and offers you a syntax for executing shell commands directly from the IPython terminal [1]. We will continue with the terminal commands with you. The command lines I will write now work strictly on a Unix-like system such as Linux or Mac OS X.

While doing research on IPython, I came across the following in an article:

Ipython is a programming tool with the Python kernel but with some advantages over Python. One of the features that make this tool superior is that it has a unique graphical interface and a nice development environment [2].

We will deal with this later. I’ll be offering a quick introduction here for beginners while working at Shell for now. Let’s continue the subject with our first example.

For example, here we can see the directories and files contained within a user’s system. First of all, our first command that allows us to print text in the terminal will be echo.

Shell Commands

✳️ Echo: With this line of code, just like the print function in Python, we print the data to the screen in the terminal. As we can see, it prints the data in quotation marks on the screen.

Echo command

✳️ Pwd (Print Working Directory):Writes the working directory that the name implies.

PWD Command

✳️ Ls: Lists the contents contained in the working directory.

LS Command

✳️ Cd: I assume that many of you know this command. It’s a command I use very often. With the cd command, you can navigate between directories. For example, in the following image, we move to the Documents folder.

Cd Command

✳️ Mkdir:Of course, it is possible to create an index when you are in the terminal in the directory we are in! Create a sample folder using the Mkdir command. In addition, I continued the operations by moving to the parent directory. Cd to switch to a parent directory cd .. just use the command.

Mkdir Command

Quick Introduction to IPython

IPython is a growing project with language-independent components. From IPython 4.0 onwards, the language-independent parts of the project are: laptop format, message protocol, qtconsole, laptop web application, etc. It moved to new projects under the name Jupyter. IPython is focused on interactive Python, Part of which provides a Python kernel for Jupyter. So we’ll try the codes we’ve been working on in shell on Jupyter. For this purpose, we first activate Jupyter Notebook.

Jupyter

After creating any Python 3 notebook in Jupyter, we can try the commands we want. For example, I tried to list my directory, the contents, and print a text on the screen.

Ipython Commands

Partial List Of Debug Commands

There are many more available commands for interactive debugging than we list here; the table below contains a description of some of the more common and useful ones:

Debugging List

It is possible to use the debug commands you want in IPython lines when you need help. I have given a few commands that we can use in the images below. In this way, we can use the necessary commands.

REFERENCES

  1. Jake VanderPlas, Python Data Science Handbook, Essential Tools For Working with Data.
  2. IPython, https://mustafaakca.com/ipython/.
  3. IPython Interactive Computing, Official Website, https://ipython.org.
  4. Introduction the Shell, https://datacarpentry.org/shell-genomics/01-introduction/index.html.
  5. Info World, https://www.infoworld.com/article/3193969/10-unix-commands-every-mac-and-linux-user-should-know.html.
Featured Image

Etkileşimli IPython ve Shell Komutları

Standart Python yorumlayıcıyla etkileşimli olarak çalışırken karşılaşacağınız sıkıntılardan biri, Python araçlarına ve sistem komut satırı araçlarına erişmek için birden çok pencere arasında geçiş yapma ihtiyacıdır. IPython bu boşluğu doldurur ve size doğrudan IPython terminalinden kabuk komutlarını yürütmek için bir sözdizimi sunar [1]. Sizlerle birlikte terminal komutları ile devam edeceğiz. Şimdi yazacağım komut satırları Linux veya Mac OS X gibi Unix benzeri bir sistemde kesin olarak çalışmaktadır.

IPython hakkında araştırma yaparken bir yazıda şunlara denk gelmiştim:

Ipython, Python çekirdeğine sahip fakat Pythondan bazı artıları bulunan bir programlama aracıdır. Bu aracı üstün kılan özelliklerden bir tanesi de kendisine has grafiksel bir arayüze ve hoş bir geliştirme ortamına sahip olmasıdır [2].

Bununla daha sonra ilgileneceğiz. Şimdilik Shell’ de çalışırken yeni başlayanlar için burada hızlı bir giriş sunuyor olacağım. Konuya birinci örneğimiz ile devam edelim.

Örnek olarak, burada bir kullanıcının sistemi içerisinde yer alan dizinleri ve dosyaları görebilmekteyiz. Öncelikle terminalde yazı yazdırmamızı sağlayan ilk komutumuz echo olacaktır.

Shell Komutları

✳️ Echo: Bu kod satırı ile tıpkı Python’ da yer alan print fonksiyonu gibi terminalde ekrana veriyi bastırmaktayız. Gördüğümüz üzere tırnak işaretleri içerisinde yer alan veriyi ekrana yazdırmaktadır.

Echo command

✳️ Pwd(Print Working Directory): Adından da anlaşılacağı üzere çalışma dizinini yazdırmaktadır.

PWD Command

✳️ Ls: Çalışma dizini içinde yer alan içerikleri listeler.

LS Command

✳️ Cd: Tahmin ediyorum ki birçoğunuz bu komutu biliyordur. Benim de çok sık kullandığım bir komut. Cd komutu ile dizinler arası gezinmeyi sağlayabilirsiniz. Örneğin, aşağıdaki görselde Documents klasörüne geçmekteyiz.

Cd Command

✳️ Mkdir: Bulunduğumuz dizin içerisinde terminaldeyken bir dizin oluşturmak elbette mümkün! Mkdir komutu ile örnek bir klasör oluşturalım. Bunun yanı sıra işlemleri bir üst dizine geçerek devam ettirdim. Bir üst dizine geçmek için cd .. komutu kullanmanız yeterlidir.

Mkdir Command

IPython’ a Hızlıca Giriş

IPython, dilden bağımsız bileşenlerle büyüyen bir projedir. IPython 4.0’dan itibaren, projenin dilden bağımsız bölümleri: dizüstü bilgisayar formatı, mesaj protokolü, qtconsole, dizüstü bilgisayar web uygulaması vb. Jupyter adı altında yeni projelere taşındı. IPython, bir kısmı Jupyter için bir Python çekirdeği sağlayan etkileşimli Python’a odaklanmıştır. Bu sebeple Jupyter üzerinde shellde çalıştığımız kodları deneyeceğiz. Bunun için öncelikle Jupyter Notebook’ u aktifleştiriyoruz.

Jupyter

Jupyterde herhangi bir Python 3 notebook oluşturduktan sonra istediğimiz komutları deneyebiliriz. Örneğin ben bulunduğum dizini, içerikleri listelemeyi ve ekrana bir yazı yazdırmayı denedim.

Ipython Commands

Hata Ayıklama Komutlarının Kısmi Listesi

Etkileşimli hata ayıklama için burada listelediğimizden çok daha fazla kullanılabilir komut vardır; Aşağıdaki tablo, daha yaygın ve kullanışlı olanlardan bazılarının açıklamasını içerir:

Debugging List

İstediğiniz debug komutlarını yardıma ihtiyacınız olduğunda Ipython satırlarında kullanabilmeniz mümkün. Aşağıdaki görsellerde kullanabileceğimiz birkaç komuta yer vermiş bulunmaktayım. Bu şekilde gerekli komutları kullanabiliyoruz.

REFERANSLAR

  1. Jake VanderPlas, Python Data Science Handbook, Essential Tools For Working with Data.
  2. IPython, https://mustafaakca.com/ipython/.
  3. IPython Interactive Computing, Official Website, https://ipython.org.
  4. Introduction the Shell, https://datacarpentry.org/shell-genomics/01-introduction/index.html.
  5. Info World, https://www.infoworld.com/article/3193969/10-unix-commands-every-mac-and-linux-user-should-know.html.

 

Featured Image for Keras

A Quick Start to Keras and TensorFlow

Keras is a deep learning library designed in the Python language. If you have worked on a deep learning project or are familiar with this area, you have definitely encountered Keras. There are many options in it that will allow you to create deep learning models and provide an environment for us to train our data.

Keras was originally developed to allow researchers to conduct faster trials.

Indeed, Keras is working as fast as possible for data training and pre-processing. If you want to get to know Keras better, you can access their documentation via this link.

Prominent Advantages of Keras

🔹Allows you to perform operations on both the CPU and GPU.

🔹It contains predefined modules for convoluted and iterative networks.

Keras is a deep learning API written in Python that runs on the machine learning platform Theano and TensorFlow.

🔹Keras supports all versions starting with Python 2.7.

Keras, Tensorflow, Theano and CNTK

Keras is the library that offers structures that can realize high-level deep learning models. In this article, we will define the backend engines that we use in our projects many times. Below are these engines running in the background, we include the use of TensorFlow.

Keras Upload

Activation Function

🔹 We can apply the libraries we want to use by selecting them as shown below. There are 3 backend applications that we use. These are TensorFlow, Theano, and Microsoft Cognitive Toolkit (CNTK) backend implementations.

Uploading Library

The platforms you see below are the platforms we encounter a lot in deep learning. As a footnote, I recommend GPU-based work when using TensorFlow. In terms of performance, you will find that with GPU usage, you will get faster and more performance results.

In summary, Keras works in harmony with these 3 libraries. In addition, it works by replacing the backend engine with these three libraries without making any changes to the code. Let’s take a closer look at TensorFlow, which we can use together with Keras.

TensorFlow

➡️ Let’s provide a version check if Python and Pip are installed for the project you are going to work with.

Version Control

➡️ I continue to work for my Mask RCNN project, where I am actively working. You can also create any project or create a segmentation project like me. If you want to continue in the same project, you can access the list of required libraries by clicking on the link.

Collecting Requirements

If you want, you can also upload these libraries one by one. But I require it in terms of being fast.I’m uploading it as a requirements.txt file.

➡️ Let’s go back to Keras and TensorFlow without surprising our goal. We can meet in another article for my Mask RCNN project. Now let’s make a quick introduction to TensorFlow. Let’s import both our project and print the version we use.

TensorFlow

➡️ As you can see as the output, I am using version 2.3.1 of TensorFlow. As I said, You can use it based on CPU or GPU.

Output Version

➡️ Tensorflow as follows when pre-processing the data. We can continue our operations by including the keras.preprocessing module. It seems passive because I am not actively running the method now, but when we write the method that we will use, its color will be activated automatically.

Tensorflow Preprocessing

➡️As an example, we can perform pre-processing with TensorfFlow as follows. We divide our data set into training and testing, and we know that with the validation_split variable, 20% is divided into test data.

In this way, we have made a fast start to Keras and TensorFlow with you. I hope to see you in my next post. Stay healthy ✨

REFERENCES

  1. https://keras.io/about/.
  2. Wikipedia, The free encyclopedia, https://en.wikipedia.org/wiki/Keras.
  3. https://keras.rstudio.com/articles/backend.html.
  4. Francois Chollet, Deep Learning with Python, Publishing Buzdagi.
  5. https://www.tensorflow.org.
  6. https://www.tensorflow.org/tutorials/keras/text_classification.

 

 

Featured Image for Keras

Keras ve TensorFlow’a Hızlı Bir Başlangıç

Keras, Python dilinde tasarlanmış bir derin öğrenme kütüphanesidir. Bir derin öğrenme projesinde çalıştıysanız veya bu alana aşinalığınız var ise mutlaka Keras ile karşılaşmışsınız demektir. İçerisinde derin öğrenme modellerinin oluşturulmasına imkan verecek ve verilerimizi eğitmemiz için ortam sağlayacak birçok seçenek mevcuttur.

Keras başlangıçta araştırmacıların daha hızlı denemeler yapabilmeleri için geliştirilmiştir.

Keras, gerçekten de veri eğitimi ve ön işlenmesi için olabildiğince hızlı çalışmaktadır. Keras’ı daha yakından tanımak isterseniz bu link üzerinden kendi dokümantasyonlarına erişim sağlayabilirsiniz.

Keras’ın Öne Çıkan Avantajları

🔹Hem CPU hem GPU üzerinde işlemlerinizi gerçekleştirebilmenizi sağlar.

🔹Evrişimli ve yinelemeli ağlar için  önceden tanımlı modüller barındırmaktadır.

 

Keras, makine öğrenimi platformu Theano ve TensorFlow üzerinde çalışan Python’da yazılmış bir derin öğrenme API’sidir.

🔹 Keras, Python 2.7′ den itibaren tüm versiyonları desteklemektedir.

Keras, Tensorflow, Theano ve CNTK

Keras, yüksek seviyeli derin öğrenme modellerini gerçekleştirebilecek yapıları sunan kütüphanedir. Birçok kez projelerimizde kullandığımız backend enginleri bu yazıda tanımlayacağız. Sanırım Türkçe olarak bu kavramı arka uç motor olarak tanımlıyorlar ancak ben kavramı türkçeleştirmeyeceğim. Arka planda çalışan bu motorlardan aşağıda Tensorflow’un kullanımına yer vermekteyiz.

Keras Upload

Activation Function

🔹 Kullanmak istediğimiz kütüphaneleri aşağıdaki görseldeki gibi seçerek uygulayabiliriz. Kullanmakta olduğumuz 3 adet backend uygulaması bulunmaktadır. Bunlar TensorFlow, Theano ve Microsoft Cognitive Toolkit (CNTK) backend uygulamalarıdır.

Uploading Library

Aşağıda gördüğünüz platformlar derin öğrenmede çokça karşılaştığımız platformlardır. Dipnot olarak TensorFlow kullanırken GPU tabanlı çalışmanızı öneririm. Performans açısından GPU kullanımı ile daha hızlı ve performanslı sonuçlar elde ettiğinizi göreceksiniz.

Özetle demek istediğim, Keras bu 3 kütüphane ile uyumlu olarak çalışmaktadır. Üstelik kodda herhangi bir değişiklik yapmadan bu üç kütüphane ile backend engine değiştirerek çalışmaktadır.

Gelin sizlerle birlikte Keras ile birlikte kullanabileceğimiz TensorFlow’ a daha yakından değinelim.

TensorFlow

➡️ Çalışacağınız proje için Python ve Pip kurulu olup olmadığını versiyon kontrolü ile sağlayalım.

Version Control

➡️ Aktif olarak çalıştığım Mask RCNN projem için çalışmalara devam ediyorum. Sizler de herhangi bir proje oluşturabilir veya benim gibi segmentasyon projesi oluşturabilirsiniz. Eğer aynı projede devam etmek istiyorsanız bağlantıya tıklayarak gerekli olan kütüphanelerin listesine erişebilirsiniz.

Collecting Requirements

Dilerseniz bu kütüphaneleri teker teker de yükleyebilirsiniz. Fakat ben hızlı olması açısından requirements.txt dosyası olarak yüklemekteyim.

➡️ Amacımızdan şaşmadan, Keras ve TensorFlow’a geri dönüş yapalım. Mask RCNN projem için başka bir yazıda daha buluşabiliriz. Şimdi TensorFlow’ a hızlıca bir giriş yapalım. Hem projemize import edelim hem de kullandığımız versiyonu yazdıralım.

TensorFlow

Çıktı olarak gördüğünüz üzere TensorFlow’ un 2.3.1 versiyonunu kullanmaktayım. Söylediğim gibi bunu CPU veya GPU tabanlı kullanabilirsiniz.

Output Version

➡️ Veride ön işleme yaparken ise aşağıdaki gibi tensorflow.keras tpreprocessing modülünü dahil ederek işlemlerimize devam edebiliyoruz. Şuan aktif olarak metot çalıştırmadığım için pasif görünüyor ancak kullanacağımız metotu yazdığımızda otomatik olarak rengi aktifleşecektir.Tensorflow Preprocessing

➡️ Örnek olarak TensorfFlow ile ön işlemeyi aşağıdaki gibi gerçekleştirebiliyoruz. Veri setimizi eğitim ve test olarak ayırıyoruz ve validation_split değişkeni ile %20’sinin test verisine ayrıldığını biliyoruz.

Bu şekilde sizlerle birlikte Keras’ a ve TensorFlow’a hızlı bir başlangıç yapmış bulunmaktayız. Bir sonraki yazımda görüşmek dileğiyle. Esen kalın ✨

REFERANSLAR

  1. https://keras.io/about/.
  2. Wikipedia, The free encyclopedia, https://en.wikipedia.org/wiki/Keras.
  3. https://keras.rstudio.com/articles/backend.html.
  4. François Chollet, Python ile Derin Öğrenme, Buzdağı Yayıncılık.
  5. https://www.tensorflow.org.
  6. https://www.tensorflow.org/tutorials/keras/text_classification.

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.

METHODS

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.

RESULTS

🖇 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.

REFERENCES

  1. https://www.researchgate.net/figure/Artificial-neural-network-architecture-ANN-i-h-1-h-2-h-n-o_fig1_321259051.
  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.

YÖNTEMLER

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.

SONUÇLAR

🖇 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.

REFERANSLAR

  1. https://www.researchgate.net/figure/Artificial-neural-network-architecture-ANN-i-h-1-h-2-h-n-o_fig1_321259051.
  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.

Preprocessing with Image Processing Techniques

In order for many of the projects that we aim for to be realized, it is necessary to undergo image processing steps. In this article, we will reveal the pre-processing stages with Gauss, average filter, threshold filters, and Canny Edge Sensor. As a Platform, you can work in Colab like me! In this way, you can perform your projects both very quickly and without taking up space.

Image processing techniques are systems for obtaining various information by analyzing existing images. Image processing techniques work through different mathematical expressions, from the simplest algorithms to the most complex algorithms, depending on their place of use.

In order to use image processing methods, real-world data captured using a previously obtained camera will be processed. Operations were determined as reading data through OpenCV, controlling pixel values in terms of color channels, eliminating noise contained in the image, and using existing filters.

It would be better for our working principle to prepare the data set that we will use for our projects in advance. Images will be extracted from the file using the imread( ) method from your dataset. Let’s get to work by loading the necessary libraries for this process.

📍NOTE: After performing the preprocessing step, I usually use the imshow() function to check the image. But let’s not forget that since our imshow function does not work in Colab, we must install the cv2_imshow module!

The image you see below contains code that allows you to obtain the image and examine the pixel values.

After installing our libraries, we must create a class and copy the path to the PATH variable for the data set that we will use. Because our image processing techniques will work on the images contained in this folder.

As you can see in the imread function, I put 0 next to the file, since the images I use are gray-level images. In this way, even if the hue is possible in the images, this image will turn gray. We can print our first image on the screen using the RGB imshow method.

When we put 0 next to our image, we will have reached the image that you see below. it is possible to print the image that you see on the screen with the cv2_imshow(image) command. After this step, we can move on to the image processing steps.

Image Processing Steps

If you want to see the pixel values of your RGB or gray scale image, you can print it to the screen using the print command. In this way, you will also check which channel you are working on. Since I use an RGB rose image in this image, the pixel values show the following numbers.

📌 RGB Color Channel: RGB is the most commonly used color space. In this color model, each color sees red, green, and blue as its main spectral components. The infrastructure of this model includes a Cartesian coordinate system.

The code required to convert our image to RGB and examine the pixel values is given as follows.

📌 HSV Color Channel: The name of the HSV space comes from the initials hue, saturation and intensity, the English equivalent of the words hue, saturation and brightness. The HSV color space defines color with the terms Hue, Saturation, and Value. Although RGB also uses a mixture of colors, HSV also uses color, saturation, and brightness values. Saturation determines the vitality of the color, while brightness refers to the brightness of the color.

📌 CIE-LAB Color Channel: CIE, 1931 color spaces are the first defined quantitative links between the distribution of wavelengths in the electromagnetic visible spectrum and physiologically perceived colors in human color vision. The mathematical relationships that define these color spaces are essential tools for Color Management, which is important when dealing with recording devices such as color inks, illuminated displays, and digital cameras.

LAB Color Channel

Elimination of Noise In The Image

Because images are real-world data from the camera, they often contain Gaussian noise due to current changes on a camera’s sensor. Noisy images can lead to worse performance in edge detection, which we use for Element detection. Therefore, it is important to reduce this noise.

🖇 There are many methods available in the literature to reduce noise. Today we will discuss 2 methods with you.

  1. Adaptive Threshold Gaussian
  2. Adaptive Threshold Mean
➡️ Adaptive Threshold Gaussian

I have included the Python code in which the Gaussian method is applied to make our images become gaussian noise removed images as follows. It is possible to reach the desired result by manipulating the parameters in the adaptiveThreshold method here.

When Gaussian and average threshold filters, which are frequently used in the literature, are applied on these images, it is seen that almost the same blur (softening) level is approached. These methods are adaptive gaussian filter and average filter application, respectively.

➡️ Adaptive Threshold Mean

Adaptive thresholding is the method by which the threshold value is calculated for smaller regions and therefore there will be different threshold values for different regions.

You will appreciate that there are very minor nuances between Gaussian and Mean filters. You can continue with the filter you want by changing the parameter values yourself.

➡️ Edge Detection

Edge detection is an important technique used to detect features. Canny edge detection algorithm, which is one of the edge detection techniques in the figure, has been run on the images.

Canny Code

Canny Image

REFERENCES

  1. Medium, Cerebro, Using Artificial Intelligence in Image Processing Techniques, April 2018.
  2. Wikipedia, The Free Encyclopedia, ‘Image Processing’, September 2020.
  3. C. Gonzalez, Rafael, E. Woods, Richard, Digital Image Processing, Palme Publishing, (Ankara, 2014).
  4. S. Singh and B. Singh. “Effects of noise on various edge detection techniques”. In: 2015 2nd International Conference on Computing for Sustainable Global Development (INDIACom). Mar. 2015, pp. 827–830.
  5. https://www.tutorialspoint.com/opencv/opencv_adaptive_threshold.htm.
  6. Ajay Kumar Boyat and Brijendra Kumar Joshi. “A Review Paper: Noise Models in Digital Image Processing”. In: CoRR abs/1505.03489 (2015). arXiv: 1505.03489. url: http:// arxiv.org/abs/1505.03489.
  7. T. Silva da Silva et al. “User-Centered Design and Agile Methods: A Systematic Review”. In: 2011 Agile Conference. Aug. 2011, pp. 77–86. doi: 10.1109/AGILE.2011.24.

 

Görüntü İşleme Teknikleri ile Ön İşleme

Hedeflediğimiz birçok projenin gerçekleşmesi için mutlaka görüntü işleme adımlarından geçirilmesi gerekmektedir. Bu yazıda Gauss, Ortalama Filtre, Eşikleme Filtreleri ve Canny Kenar Algılayıcısı ile ön işleme aşamalarını birlikte ortaya koyacağız. Platform olarak benim gibi Colab’ da çalışabilirsiniz! Böylelikle hem çok hızlı hem de yer kaplamadan projelerinizi gerçekleştirebilirsiniz. 

Görüntü işleme teknikleri mevcut resimlerin analizi ile çeşitli bilgiler edinmeye yarayan sistemlerdir. Görüntü işleme teknikleri kullanım yerlerine göre, en basit algoritmalardan en karmaşık algoritmalara kadar farklı matematiksel ifadeler üzerinden çalışır.

Görüntü işleme metotlarının kullanılması için önceden elde edilmiş kamera vasıtasıyla çekilen gerçek dünya verileri üzerinde işlem yapılacaktır. İşlemler sırası ile OpenCV aracılığıyla verinin okunması, piksel değerlerinin renk kanalları açısından kontrolü, görüntüde yer alan gürültünün giderilmesi ve mevcut filtrelerin kullanılması olarak belirlenmiştir.

Projelerimiz için kullanacağımız veri setini daha önceden hazır etmemiz çalışma prensibimiz açısından daha iyi olacaktır. Görüntüler veri setiniz içerisinden imread( ) metodu ile dosyadan çekilecektir. Bu işlemimiz için gerekli kütüphaneleri yüklemekle işe koyulalım.

📍NOT: Ön işleme adımını yaptıktan sonra görüntüyü kontrol etmek için genellikle imshow() fonksiyonunu kullanmaktayım. Ancak Colab’da imshow fonksiyonumuz çalışmadığı için cv2_imshow modülünü yüklememiz gerektiğini unutmayalım!

Aşağıda gördüğünüz görselde görüntünün elde edilmesi ve piksel değerlerinin incelenmesine olanak veren kod yer almaktadır.

Kütüphanelerin Yüklenmesi
Kütüphanelerimizi yükledikten sonra kullanacağımız veri seti için bir klasöe oluşturup path değişkenine yolu kopyalamalıyız. Çünkü görüntü işleme tekniklerimiz bu klasörde yer alan görüntüler üzerinde çalışacaktır.

Kullandığım görüntüler gri seviye görüntüler olduğu için imread fonksiyonunda gördüğünüz gibi dosyanın yanına 0 ibaresini koydum. Bu şekilde görüntülerde renk tonu mümkünse bile bu görüntü gri seviyeye dönüşecektir. İlk görüntümüzü RGB imshow metoduile ekrana bastırabiliriz.

Görüntümüzün yanına 0 koyduğumuzda ise aşağıda gördüğünüz görsele ulaşmış olacağız. cv2_imshow(image) komutu ile ekranda gördüğünüz görseli yazdırmamız mümkündür. Bu adımdan sonra görüntü işleme adımlarına geçebiliriz.

Görüntü İşleme Adımları

RGB veya gri skala görüntünüzün piksel değerlerini görmek istiyorsanız print komutu ile bu şekilde ekrana bastırmanız mümkündür. Böylelikle hangi kanalda çalıştığınızı da kontrol etmiş olacaksınız. Bu görüntüde RGB bir gül görüntüsü kullandığım için piksel değerleri aşağıdaki sayıları göstermektedir.

📌 RGB Renk Kanalı: RGB en yaygın kullanılan renk alanıdır. Bu renk modelinde her renk kırmızı, yeşil ve mavi ana spektral bileşenleri olarak görür. Bu modelin altyapısında Kartezyen Koordinat Sistemi barınmaktadır.

Görüntümüzün RGB’ ye dönüştürülmesi ve piksel değerlerinin incelenmesi için gerekli koda aşağıdaki şekilde yer verilmiştir.

📌 HSV Renk Kanalı: HSV uzayının ismi, renk tonu, doygunluk ve parlaklık kelimelerinin İngilizce karşılığı olan hue, saturation ve intensity kelimelerinin baş harflerinden gelmektedir. HSV renk uzayı Hue, Saturation ve Value terimleri ile rengi tanımlar. RGB de renklerin karışımı kullanılmasına karşın HSV de renk, doygunluk ve parlaklık değerleri kullanılır. Doygunluk rengin canlılığını belirlerken parlaklık rengin aydınlığını ifade eder.

Şekilde yer alan görüntülerde RGB görüntüden HSV’ ye dönüşüm sağlanmıştır. Bir diğer renk kanalı olan LAB kanalı da son olarak incelenerek görüntünün gri seviye formatına dönüşümü sağlanmıştır.

📌 CIE-LAB Renk Kanalı: CIE 1931 renk uzayları, elektromanyetik görünür spektrumdaki dalga boylarının dağılımı ile insan renk görüşünde fizyolojik olarak algılanan renkler arasındaki ilk tanımlanmış kantitatif bağlantılardır. Bu renk uzaylarını tanımlayan matematiksel ilişkiler, renk mürekkepleri, ışıklı ekranlar ve dijital kameralar gibi kayıt aygıtlarıyla uğraşırken önemli olan renk yönetimi için gerekli araçlardır.

 

Görüntüdeki Gürültünün Giderilmesi

Görüntüler kameradan elde edilen gerçek dünya verisi oldukları için bir kameranın sensörü üzerindeki akım değişimlerinden dolayı genellikle Gauss gürültüsü içerir. Gürültülü görüntüler, eleman tespiti için kullandığımız kenar tespitinde daha kötü performansa yol açabilir. Bu nedenle, bu gürültüyü azaltmak önemlidir.

🖇 Gürültü azaltmak için literatürde birçok yöntem mevcuttur. Bugün sizlerle 2 adet yöntemi tartışacağız.

  1. Adaptive Threshold Gaussian
  2. Adaptive Threshold Mean
➡️ Adaptive Threshold Gaussian

Görüntülerimizin gauss gürültüsü giderilmiş görüntüler haline gelmesi için Gaussian yöntemi uygulandığı Python koduna aşağıdaki şekilde yer vermekteyim. Burada yer alan adaptiveThreshold metodu içerisindeki parametreler ile oynanarak istenilen sonuca ulaşmak mümkündür.

Literatürde sıkça yer verilen Gauss ve ortalama eşik filtreleri bu görüntüler üzerinde uygulandığında hemen hemen aynı blurluk (yumuşama) seviyesine yaklaşıldığı görülmüştür. Bu yöntemler sırasıyla adaptif gauss filtresi ve ortalama filtre uygulamasıdır.

➡️ Adaptive Threshold Mean (Ortalama)

Uyarlanabilir (adaptive) eşikleme, eşik değerin daha küçük bölgeler için hesaplandığı yöntemdir ve bu nedenle, farklı bölgeler için farklı eşik değerleri olacaktır.

 

Gaussian ve Mean filtreleri arasında takdir edersiniz ki çok ufak nüanslar vardır. Parametre değerlerini kendiniz değiştirerek istediğiniz filtre ile devam edebilirsiniz.

➡️ Kenar Tespiti

Kenar tespiti, unsurları tespit etmede kullanılan önemli bir tekniktir. Şekilde yer verilen kenar algılama tekniklerinden olan Canny kenar algılama algoritması görüntüler üzerinde çalıştırılmıştır.

Canny Code

Canny Image

REFERANSLAR

  1. Medium, Cerebro, Görüntü İşleme Tekniklerinde Yapay Zekâ Kullanımı, Nisan 2018.
  2. Vikipedi, Özgür Ansiklopedi, ‘Görüntü işleme’, Eylül 2020.
  3. C. Gonzalez, Rafael, E. Woods, Richard, Sayısal Görüntü İşleme, Palme Yayıncılık, (Ankara, 2014).
  4. S. Singh and B. Singh. “Effects of noise on various edge detection techniques”. In: 2015 2nd International Conference on Computing for Sustainable Global Development (INDIACom). Mar. 2015, pp. 827–830.
  5. https://www.tutorialspoint.com/opencv/opencv_adaptive_threshold.htm.
  6. Ajay Kumar Boyat and Brijendra Kumar Joshi. “A Review Paper: Noise Models in Digital Image Processing”. In: CoRR abs/1505.03489 (2015). arXiv: 1505.03489. url: http:// arxiv.org/abs/1505.03489.
  7. T. Silva da Silva et al. “User-Centered Design and Agile Methods: A Systematic Review”. In: 2011 Agile Conference. Aug. 2011, pp. 77–86. doi: 10.1109/AGILE.2011.24.

 

Contour Extraction Using OpenCV

In image processing, the concept called stroke is a closed curve that connects all continuous points that a color or density has. Strokes represent the shapes of objects in an image. Stroke detection is a useful technique for Shape analysis and object detection and recognition. When we do edge detection, we find points where the color density changes significantly, and then we turn those pixels on. However, strokes are abstract collections of points and segments that correspond to the shapes of objects in the image. As a result, we can process strokes in our program, such as counting the number of contours, using them to categorize the shapes of objects, cropping objects from an image (image partitioning), and much more.

Computer Vision

🖇 Contour detection is not the only algorithm for image segmentation, but there are many other algorithms available, such as state-of-the-art semantic segmentation, hough transform, and K-Means segmentation. For better accuracy, all the pipelines we will monitor to successfully detect strokes in an image:

  • Convert image to binary image, it is common practice for the input image to be a binary image (it must be a result of threshold image or edge detection).
  • FindContours( ) by using the OpenCV function.
  • Draw these strokes and show the image on the screen.

Apply Contour on Photoshop

Adobe PS
Before moving on to the encoding of contour extraction, I will first give you an example of Photoshop to give you better acquisitions.
Katmandan kontur çıkarımı
As a first step, to access the window you see above, right-click on any layer in Photoshop’s Layers window and select blending options.
🔎 If the Layers window is not active, you must activate the layers by clicking the Window menu from the top menu. The hotkey for Windows is F7.
It is possible to select the Contour color and opacity you want to create in the image by selecting the Contour tab from the left section. Then, background extraction is made to distinguish the contour extraction that will occur in the image first.
People siluet
After removing the background in the image you see here, I made a selection in yellow tones so that the object is visible in the foreground. After the background is removed, the outer contour will be applied to the image and the detection will be more successful.
People contour

Contour Extraction with Python OpenCV

I use Google Colab and Python programming language as a platform. If there are those who regularly code Python, it is a platform that I can definitely recommend! Come on, let’s start coding step by step.
📌 Let’s import the libraries required for our project as follows.
Gerekli Kütüphanelerin Yüklenmesi
📌 As the second step, we get our image with the imread function.
Görüntünün Alınması
📌 As you know in the world of image processing, our images come in BGR format. The BGR image must first be converted to RGB format and then assigned to the grayscale color channel.
Converting Color Spaces
📌 As the fourth step, a binary threshold operation is performed by specifying a threshold value in the image. To access the mathematics that the binary threshold function runs in the background, you must examine the following formula 👇
Formula
Binary threshold
If you have noticed, the image on which threshold will be applied is selected as a gray level image, not RGB. Please pay attention at this stage. When you follow these steps in order, you will receive the following feedback.
Background
📌In this step, we will use the findContours function to find the contours in the image. The image where the contours will be determined will be the binary image that we have realized the threshold.
Find Contours
📌 We will use drawContours function to draw these contours visually.
Draw Contours
🖇 The parameter cv2.CHAIN_APPROX_SIMPLE in the method removes all unnecessary points and saves memory by compressing the contour.
📌 Now we can print our contour extracted image on the screen.
Imshow contours

In this way, we made our inference. Hope to head to the world of other projects in another article … Stay healthy ✨

REFERENCES

  1. Contour Tracing, http://www.imageprocessingplace.com/downloads_V3/root_downloads/tutorials/contour_tracing_Abeer_George_Ghuneim/intro.html.
  2. Edge Contour Extraction, https://www.cse.unr.edu/~bebis/CS791E/Notes/EdgeContourExtraction.pdf, Pitas, section 5.5, Sonka et al., sections 5.2.4-5.2.5.
  3. https://www.thepythoncode.com/article/contour-detection-opencv-python adresinden alınmıştır.
  4. https://www.subpng.com/png-m7emk6/ adresinden alınmıştır.
  5. OpenCV, https://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html.
  6. OpenCV, https://docs.opencv.org/master/d4/d73/tutorial_py_contours_begin.html.

OpenCV Kullanımı ile Kontur Çıkarımı

Görüntü işlemede kontur denilen kavram, bir rengin veya yoğunluğunun sahip olduğu tüm sürekli noktaları birleştiren kapalı bir eğridir. Konturlar bir görüntüde bulunan nesnelerin şekillerini temsil eder. Kontur algılama, şekil analizi ve nesne algılama ve tanıma için yararlı bir tekniktir. Kenar tespiti yaptığımızda, renk yoğunluğunun önemli ölçüde değiştiği noktaları buluruz ve sonra bu pikselleri açarız. Bununla birlikte, konturlar, görüntüdeki nesnelerin şekillerine karşılık gelen soyut nokta ve segment koleksiyonlarıdır. Sonuç olarak, programımızda kontür sayısını saymak, bunları nesnelerin şekillerini kategorize etmek için kullanmak, bir görüntüden nesneleri kırpmak (görüntü bölümleme) ve çok daha fazlası gibi konturları işleyebiliriz.

Computer Vision
🖇 Kontur tespiti, görüntü segmentasyonu için tek algoritma değildir ancak mevcut son teknoloji semantik segmentasyon, hough dönüşümü ve K-Means segmentasyonu gibi başka birçok algoritma vardır. Daha iyi bir doğruluk için, bir görüntüdeki konturları başarılı bir şekilde tespit etmek için izleyeceğimiz tüm ardışık düzenler:

  • Görüntüyü ikili görüntüye dönüştürün, giriş görüntüsünün ikili görüntü olması yaygın bir uygulamadır (eşikli görüntü veya kenar algılamanın bir sonucu olmalıdır).
  • FindContours( ) OpenCV işlevini kullanarak konturları bulma.
  • Bu konturları çizin ve resmi ekrana gösterin.

Photoshop Üzerinde Kontur Uygulama

Adobe PS
Kontur çıkarımının kodlamasına geçmeden önce sizlere daha iyi edinimler kazandırmak için öncelikle Photoshop üzerinde örnek vereceğim.
Katmandan kontur çıkarımı
İlk adım olarak yukarıda gördüğünüz pencereye erişmek için Photoshop üzerinde bulunan Katmanlar penceresindeki herhangi bir katmana sağ tıklayarak karıştırma seçeneklerini seçiniz.
🔎 Katmanlar penceresi aktif değil ise üst menüden Pencere menüsüne tıklayarak katmanları aktif etmelisiniz. Windows için  kısayol tulu F7′ dir.
Sol bölümden Kontur sekmesini seçerek görüntüde oluşturmak istediğiniz kontur rengini ve opaklığını seçmeniz mümkündür. Ardından önce görüntüde oluşacak kontur çıkarımının iyi ayrıtlandırılabilmesi için arka plan çıkarımı yapılmaktadır.
People siluet
Burada gördüğünüz görselde arka plan çıkarıldıktan sonra nesnenin ön planda belirgin olabilmesi için sarı tonlarında bir seçim gerçekleştirdim. Arka plan çıkarıldıktan sonra görüntüde dış kontur uygulanarak tespitin daha başarılı olması sağlanacaktır.
People contour

Python OpenCV ile Kontur Çıkarımı

Platform olarak Google Colab ve Python programlama dilini kullanmaktayım. Düzenli olarak Python kodlayanlar var ise mutlaka tavsiyede bulunabileceğim bir platform! Haydi gelin, adım adım kodlamaya başlayalım.
📌 Projemiz için gerekli olan kütüphaneleri aşağıdaki gibi import ile yükleyelim.
Gerekli Kütüphanelerin Yüklenmesi
📌 İkinci adım olarak görüntümüzü imread fonksiyonu ile elde ediyoruz.
Görüntünün Alınması
📌 Görüntü işleme dünyasında bildiğiniz üzere görsellerimiz BGR formatında gelmektedir. BGR görüntünün ilk olarak RGB formatına dönüştürülmesi ve ardından gri skala renk kanalına atanması gerekmektedir.
Converting Color Spaces
📌 Dördüncü adım olarak görüntüde bir eşik değeri belirtilerek binary threshold (ikili eşikleme) işlemi yapılmaktadır. Binary threshold fonksiyonunun arka planda çalıştırdığı matematiğe erişmek için aşağıdaki formülü incelemelisiniz 👇
Formula
Binary threshold
Dikkat ettiyseniz threshold uygulanacak görüntü RGB değil gri seviye görüntü seçilmiştir. Lütfen bu aşamada dikkat edelim. Bu adımları sırası ile takip ettiğinizde aşağıdaki dönütü alacaksınız.
Background
📌 Bu adımda ise görüntüde yer alan konturların bulunması için findContours fonksiyonunu kullanacağız. Konturların belirleneceği görüntü ise threshold gerçekleştirdiğimiz binary görüntü olacaktır.
Find Contours
📌 Oluşturulan bu konturların görselde çizilmesi için drawContours fonksiyonunu kullanacağız.
Draw Contours
🖇 Metotta yer alan cv2.CHAIN_APPROX_SIMPLE parametresi, tüm gereksiz noktaları kaldırır ve konturu sıkıştırarak hafızadan tasarruf sağlar.
📌 Artık kontur çıkarımı yapılmış görüntümüzü ekrana bastırabiliriz.
Imshow contours

Bu şekilde çıkarımımızı yapmış olduk. Bir başka yazımda başka projelerin dünyasına yönelmek dileğiyle… Sağlıcakla kalın ✨

REFERANSLAR

  1. Contour Tracing, http://www.imageprocessingplace.com/downloads_V3/root_downloads/tutorials/contour_tracing_Abeer_George_Ghuneim/intro.html.
  2. Edge Contour Extraction, https://www.cse.unr.edu/~bebis/CS791E/Notes/EdgeContourExtraction.pdf, Pitas, section 5.5, Sonka et al., sections 5.2.4-5.2.5.
  3. https://www.thepythoncode.com/article/contour-detection-opencv-python adresinden alınmıştır.
  4. https://www.subpng.com/png-m7emk6/ adresinden alınmıştır.
  5. OpenCV, https://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html.
  6. OpenCV, https://docs.opencv.org/master/d4/d73/tutorial_py_contours_begin.html.