📃 Tensorflow Kayıtları Oluşturma

👣 Temel Adımlar

  • Resim verileri toplanır veya çekilir.

  • Toplanan resimler labelimg yardımıyla etiketlenir ve .xml uzantılı dosyaları oluşturulur.

  • images dizinine resimler ve onlara ait xml dosyaları %80'i train %20'i eval olacak şekilde klasörlere ayrılarak yerleştirilir.

  • scripts/preprocessing dizindeki xml_path_regulator.py scripti aracılığıyla xml ve resimlerde yol sorunları düzeltilir, veriler yeniden adlandırılır.

  • scripts/preprocessing dizindeki xml_to_csv.py scripti aracılığıyla veriler .csv uzantılı tablosal bir dosyaya dönüştürülür.

  • Oluşturulan csv dosyasında resimlerin etiketlerine göre sayıları tablo olarak gösterilir. (Excel yardımıyla)

  • Verilerde denge durumunun (her veriden yaklaşık olarak aynı sayıda varsa) kontrolü yapılır.

  • Her çeşit veri için bir id belirtilecek şekilde label_map.pbtxt adlı etiket haritası oluşturulur

  • Oluşturulan csv, etiket haritası ve resim verileri scripts/preprocessing dizindeki generate_tfrecord.py scripti aracılığıyla veriler .record uzantılı kayıtlara dönüştürülür.

  • Seçilen modele özgü yapılandırma dosyası indirilir.

  • Yapılandırma dosyası olan *.config dosyasındaki PATH_TO_CONFIGURED olarak işaretlenen alanlar, num_classes, num_examples ve batch_size değerleri güncellenir.

    • num_examples eval dizindeki resim sayısıdır (toplam class sayısı değil)

📢 Tüm notlardaki dizin yapısı TensorflowObjectDetectionAPI reposunun yapısına uygun şekildedir.

🕵️‍♂️ Resimlerdeki Hataları Bulma

Resimlerde hata olduğu zaman eğitim aşamasında tensorflow modeli çalışma hatası vermektedir. Resimleri kontrol etmek için buradaki scripti alttaki komutlarla kullanabilirsiniz.

✴️ Windows
🐧 Linux
✴️ Windows
python scripts\preprocessing\check_images.py ^
-i workspace\example_detection\images\train​
python scripts\preprocessing\check_images.py ^
-i workspace\example_detection\images\eval
🐧 Linux
python scripts\preprocessing\check_images.py \
-i workspace/example_detection/images/train​
python scripts\preprocessing\check_images.py \
-i workspace/example_detection/images/eval

👨‍🔧 Verileri Yeniden Adlandırma ve XML Hatalarını Düzeltme

LabelImg ile etiketlediğiniz resimleri farklı bir dizine taşımanız durumunda XML dosyalarındaki yollar uyuşmayacaktır. XML dosya yollarını düzeltmek, etiketsiz resimleri görüntülemek için buradaki script dosyamı alttaki komutlar ile kullanabilirsiniz.

✴️ Windows
🐧 Linux
✴️ Windows
python scripts\preprocessing\xml_path_regulator.py ^
-i %TENSORFLOW%\workspace\example_detection\images\train ^
-p train​python scripts\preprocessing\xml_path_regulator.py ^
-i %TENSORFLOW%\workspace\example_detection\images\eval -p eval
🐧 Linux
python scripts/preprocessing/xml_path_regulator.py \
-i %TENSORFLOW%/workspace/example_detection/images/train \
-p train​python scripts/preprocessing/xml_path_regulator.py \
-i %TENSORFLOW%/workspace/example_detection/images/eval -p eval

🧐 Etiketlenmemiş Resimleri Bulma

Etiketlenmemiş resimleri buradaki script dosyası ile alttaki komutlar ile kullanabilirsiniz.

Eğer XML scriptini kullandıysanız bu kontrolü yapmanıza gerek yoktur, XML scripti bunu zaten yapmaktadır.

python scripts\preprocessing\find_unlabeled_imgs.py -i %TENSORFLOW%\workspace\example_detection\images\train​python scripts\preprocessing\find_unlabeled_imgs.py -i %TENSORFLOW%\workspace\example_detection\images\eval

💫 XML'i CSV'ye Çevirme

XML dosyalarını CSV dosyasında toparlamak için buradaki scripti alttaki komutlar ile kullanabilirsin.

Komutları Anaconda Prompt üzerinden tensorflow ortamını aktif ederek uygulamayı unutmayın.

# Create train data:python scripts\preprocessing\xml_to_csv.py -i %TENSORFLOW%\workspace\example_detection\images\train -o %TENSORFLOW%\workspace\example_detection\images\train_labels.csv​# Create eval data:python scripts\preprocessing\xml_to_csv.py -i %TENSORFLOW%\workspace\example_detection\images\eval -o %TENSORFLOW%\workspace\example_detection\images\test_labels.csv

👁‍🗨 CSV'lerden Resim Bilgilerini Analiz Etme

Her bir etiketten kaç tane olduğunu anlamak için csv dosyalarını açıp alltaki yöntemi uygulayın.

  • class hücresiinin bir altındaki hücreyi seçin

  • ctrl + shift + aşağı ok ile tüm sınıf verilerini seçin

  • Sağ alttaki butona tıklayın

  • Tables sekmesine gelin

  • Açılan sekmede Pivot Table butonuna tıklayın

  • Tablo'dan etiketlenen verileri kontrol edin

  • Fazladan etiketlenmiş verilerin ismini bulup, filename, width vs. verilerin yazıldığı alanda CTRL + F komutu ile aratıp, uygun dosya ismini ve xml dosyasını silin

💱 CSV'yi Record'a Çevirme

CSV dosyalarını TF kayıtlarına çevirmek için buradaki scripti alttaki komutlar ile kullanabilirsin.

Komutları Anaconda Prompt üzerinden tensorflow ortamını aktif ederek uygulamayı unutmayın.

python generate_tfrecord.py --label_map=%TENSORFLOW%\workspace\example_detection\data\label_map.pbtxt --csv_input=%TENSORFLOW%\workspace\example_detection\images\train_labels.csv --img_path=%TENSORFLOW%\workspace\example_detection\images\train --output_path=%TENSORFLOW%\workspace\example_detection\data\train.record​python generate_tfrecord.py --label_map=%TENSORFLOW%\workspace\example_detection\data\label_map.pbtxt --csv_input=%TENSORFLOW%\workspace\example_detection\images\test_labels.csv --img_path=%TENSORFLOW%\workspace\example_detection\images\eval --output_path=%TENSORFLOW%\workspace\example_detection\data\eval.record