Bagaimana memahami Tensorflow dan tidak mati, dan bahkan mengajarkan sesuatu tentang mobil

Halo Pengawal. Posting hari ini adalah tentang bagaimana tidak tersesat di belantara berbagai pilihan untuk menggunakan TensorFlow untuk pembelajaran mesin dan mencapai tujuan Anda. Artikel ini dirancang agar pembaca mengetahui dasar-dasar prinsip pembelajaran mesin, tetapi belum mencoba melakukannya dengan tangannya sendiri. Hasilnya, kami mendapatkan demo yang berfungsi di Android, yang mengenali sesuatu dengan akurasi yang cukup tinggi. Tetapi hal pertama yang pertama.



Setelah melihat bahan-bahan terbaru, diputuskan untuk melibatkan Tensorflow , yang sekarang mendapatkan momentum tinggi, dan artikel-artikel dalam bahasa Inggris dan Rusia tampaknya cukup untuk tidak menggali segala sesuatu dan dapat mengetahui apa itu.


Menghabiskan dua minggu, mempelajari artikel dan banyak sampel mantan di kantor. situs, saya menyadari bahwa saya tidak mengerti apa-apa. Terlalu banyak informasi dan opsi tentang bagaimana Tensorflow dapat digunakan. Kepalaku sudah bengkak karena betapa mereka menawarkan solusi yang berbeda dan apa yang harus dilakukan dengan mereka, sebagaimana diterapkan pada tugas saya.



Kemudian saya memutuskan untuk mencoba semuanya mulai dari opsi yang paling sederhana dan paling siap pakai (di mana saya diharuskan mendaftarkan dependensi dalam gradle dan menambahkan beberapa baris kode) ke yang lebih kompleks (di mana saya harus membuat dan melatih model grafik sendiri dan belajar cara menggunakannya di ponsel) aplikasi).


Pada akhirnya, saya harus menggunakan versi yang rumit, yang akan dibahas lebih detail di bawah ini. Sementara itu, saya telah menyusun untuk Anda daftar opsi sederhana yang sama-sama efektif, hanya masing-masing sesuai dengan tujuannya.


1. ML KIT



Solusi termudah untuk digunakan - beberapa baris kode yang dapat Anda gunakan:


  • Pengenalan teks (teks, karakter latin)
  • Deteksi wajah (wajah, emosi)
  • Pemindaian barcode (barcode, kode qr)
  • Pelabelan gambar (sejumlah jenis objek dalam gambar)
  • Pengakuan landmark (atraksi)

Ini sedikit lebih rumit. Dengan solusi ini, Anda juga dapat menggunakan model TensorFlow Lite Anda sendiri, tetapi mengonversi ke format ini menyebabkan kesulitan, jadi item ini belum pernah dicoba.


Saat pencipta keturunan ini menulis, sebagian besar tugas dapat diselesaikan menggunakan perkembangan ini. Tetapi jika ini tidak berlaku untuk tugas Anda, Anda harus menggunakan model khusus.


2. Visi Kustom



Alat yang sangat nyaman untuk membuat dan melatih model khusus Anda menggunakan gambar.
Dari Pros - ada versi gratis yang memungkinkan Anda menyimpan satu proyek.
Of the Cons - versi gratis membatasi jumlah gambar "masuk" menjadi 3.000. Untuk mencoba dan membuat jaringan akurasi yang biasa-biasa saja - itu sudah cukup. Untuk tugas yang lebih tepat, Anda perlu lebih banyak.
Semua yang diperlukan pengguna adalah menambahkan gambar dengan tanda (misalnya - image1 adalah "racoon", image2 adalah "sun"), melatih dan mengekspor grafik untuk digunakan di masa mendatang.



Peduli Microsoft bahkan menawarkan sampelnya sendiri, yang dengannya Anda dapat mencoba grafik yang Anda terima.
Bagi mereka yang sudah "dalam subjek" - grafik yang dihasilkan sudah dalam keadaan Beku, mis. Anda tidak perlu melakukan / mengonversi apa pun dengan itu.
Solusi ini bagus ketika Anda memiliki sampel besar dan (perhatian) BANYAK kelas yang berbeda dalam pelatihan. Karena jika tidak, akan ada banyak definisi yang salah dalam praktiknya. Sebagai contoh, Anda dilatih tentang rakun dan matahari, dan jika ada seseorang di pintu masuk, maka ia dapat dengan probabilitas yang sama ditentukan oleh sistem seperti yang satu atau yang lain. Meskipun pada kenyataannya - tidak satu atau yang lain.


3. Membuat model secara manual



Saat Anda perlu memperbaiki sendiri model untuk pengenalan gambar, manipulasi yang lebih kompleks dengan pemilihan gambar input ikut berperan.
Sebagai contoh, kami tidak ingin memiliki batasan pada volume sampel input (seperti pada paragraf sebelumnya), atau kami ingin melatih model lebih tepat dengan mengatur sendiri jumlah zaman dan parameter pelatihan lainnya.
Dalam pendekatan ini, ada beberapa contoh dari Tensorflow yang menggambarkan prosedur dan hasil akhirnya.
Berikut ini beberapa contoh:




Ini memberikan contoh tentang cara membuat pengelompokan jenis warna berdasarkan pada basis data ImageNet yang terbuka - siapkan gambar dan kemudian latih modelnya. Juga sedikit disebutkan tentang bagaimana Anda dapat bekerja dengan alat yang agak menarik - TensorBoard. Dari fungsinya yang paling sederhana - ini menunjukkan dengan jelas struktur model yang sudah Anda selesaikan, serta proses pembelajaran dalam banyak cara.


  • Kodlab Tensorflow untuk Penyair 2 - terus bekerja dengan penggolong warna. Ini menunjukkan bagaimana jika Anda memiliki file grafik dan labelnya (yang diperoleh di codelab sebelumnya), Anda dapat menjalankan aplikasi di android. Salah satu poin dari codelab adalah konversi dari format grafik "biasa" ".pb" ke format lite Tensorflow (yang melibatkan beberapa optimasi file untuk mengurangi ukuran file grafik terakhir, karena perangkat seluler memerlukan ini).


  • Pengakuan tulisan tangan MNIST .




Lobak berisi model asli (yang telah disiapkan untuk tugas ini), instruksi tentang cara melatihnya, mengubahnya, dan cara menjalankan proyek untuk Android pada akhirnya untuk memeriksa bagaimana semuanya bekerja


Berdasarkan contoh-contoh ini, Anda dapat mengetahui cara bekerja dengan model khusus di Tensorflow dan mencoba membuat sendiri atau mengambil salah satu model pra-terlatih yang dirakit di github:
Model dari Tensorflow


Berbicara tentang model "pra-terlatih". Nuansa menarik saat menggunakan itu:


  • Struktur mereka sudah siap untuk tugas tertentu.
  • Mereka sudah terlatih dalam ukuran sampel besar.
    Oleh karena itu, jika sampel Anda tidak cukup diisi, Anda dapat mengambil model pra-terlatih yang dekat dengan ruang lingkup tugas Anda. Dengan menggunakan model ini, menambahkan aturan pelatihan Anda sendiri, Anda akan mendapatkan hasil yang lebih baik daripada mencoba melatih model dari awal.

4. Object Detection API + pembuatan model manual


Namun, semua paragraf sebelumnya tidak memberikan hasil yang diinginkan. Sejak awal sulit memahami apa yang perlu dilakukan dan dengan pendekatan apa. Kemudian artikel keren di Object Detection API ditemukan, yang menceritakan bagaimana menemukan beberapa kategori pada satu gambar, serta beberapa contoh dari kategori yang sama. Dalam proses pengerjaan sampel ini, artikel sumber dan tutorial video tentang mengenali objek khusus ternyata lebih nyaman (tautan akan ada di akhir).


Tetapi pekerjaan itu tidak dapat diselesaikan tanpa artikel tentang pengakuan Pikachu - karena nuansa yang sangat penting ditunjukkan di sana, yang karena alasan tertentu tidak disebutkan di mana pun dalam satu panduan atau contoh. Dan tanpa itu, semua pekerjaan yang dilakukan akan sia-sia.


Jadi, sekarang akhirnya tentang apa yang masih harus dilakukan dan apa yang terjadi di jalan keluar.


  1. Pertama, tepung dari instalasi Tensorflow. Siapa yang tidak dapat menginstalnya, atau menggunakan skrip standar untuk membuat, melatih model - hanya bersabar dan google. Hampir setiap masalah telah ditulis dalam masalah di githib atau di stackoverflow.

Menurut instruksi untuk pengenalan objek, kita perlu menyiapkan sampel input sebelum melatih model. Artikel-artikel ini menjelaskan secara rinci bagaimana melakukan ini menggunakan alat yang nyaman - labelImg Satu-satunya kesulitan di sini adalah melakukan pekerjaan yang sangat panjang dan teliti dalam menyoroti batas-batas objek yang kita butuhkan. Dalam hal ini, perangko pada gambar dokumen.


Langkah selanjutnya, menggunakan skrip yang sudah jadi, kami mengekspor data dari langkah 2 pertama ke file csv, kemudian ke TFRecords - format data input Tensorflow. Tidak ada kesulitan yang muncul di sini.
Pilihan model pra-pelatihan, atas dasar mana kami akan melakukan pra-pelatihan grafik, serta pelatihan itu sendiri. Di sinilah jumlah kesalahan terbesar yang tidak diketahui dapat terjadi, penyebab paket yang dihapus (atau bengkok diinstal) yang diperlukan untuk bekerja. Tetapi Anda akan berhasil, jangan putus asa, hasilnya sepadan.


Ekspor file yang diterima setelah pelatihan ke format 'pb'. Cukup pilih file terakhir 'ckpt' dan ekspor.
Menjalankan contoh pekerjaan di Android.
Mengunduh sampel pengenal objek resmi dari Tensorflow github - TF Detect . Masukkan model dan file Anda dengan label di sana. Tapi Tidak akan ada yang berhasil.



Di sinilah lelucon terbesar dalam semua pekerjaan baru saja terjadi, cukup aneh - yah, sampel Tensorflow tidak mau bekerja dengan cara apa pun. Semuanya telah jatuh. Hanya Pikachu yang perkasa dengan artikelnya yang berhasil membantu mewujudkan semuanya.
Baris pertama dalam file labels.txt harus berupa tulisan "???", karena secara default di Object Detection API, jumlah id objek tidak dimulai dengan 0 seperti biasa, tetapi dengan 1. Karena fakta bahwa kelas nol dicadangkan, pertanyaan ajaib harus ditunjukkan. Yaitu file tag Anda akan terlihat seperti ini:


??? stamp 

Dan kemudian - jalankan sampel dan lihat pengakuan objek dan tingkat kepercayaan yang diterima.



Dengan demikian, hasilnya adalah aplikasi sederhana yang, ketika Anda mengarahkan kamera, mengenali batas cap pada dokumen dan menunjukkannya bersama dengan akurasi pengenalan.
Dan jika kita mengecualikan waktu yang dihabiskan untuk mencari pendekatan yang tepat dan mencoba meluncurkannya, maka, secara keseluruhan, pekerjaannya ternyata cukup cepat dan benar-benar tidak rumit. Anda hanya perlu tahu nuansa sebelum mulai bekerja.


Sudah sebagai bagian tambahan (di sini Anda sudah bisa menutup artikel jika Anda bosan dengan informasinya), saya ingin menulis beberapa hacks kehidupan yang membantu dalam menangani semua ini.


  • cukup sering skrip tensorflow tidak berfungsi karena dijalankan dari direktori yang salah. Selain itu, itu berbeda pada PC yang berbeda: seseorang perlu menjalankan dari tensroflowmodels/models/research direktori tensroflowmodels/models/research untuk bekerja, dan seseorang tensroflowmodels/models/research/object-detection level yang lebih dalam dari tensroflowmodels/models/research/object-detection


  • ingat bahwa untuk setiap terminal terbuka Anda perlu mengekspor jalur lagi menggunakan perintah


     export PYTHONPATH=/  /tensroflowmodels/models/research/slim:$PYTHONPATH 

  • jika Anda tidak menggunakan grafik Anda sendiri dan ingin mencari tahu informasi tentangnya (misalnya, " input_node_name ", yang diperlukan nanti), jalankan dua perintah dari folder root:


     bazel build tensorflow/tools/graph_transforms:summarize_graph bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --in_graph="/  /frozen_inference_graph.pb" 

    di mana " / /frozen_inference_graph.pb " adalah jalur ke grafik yang ingin Anda ketahui


  • Untuk melihat informasi tentang grafik, Anda dapat menggunakan Tensorboard.


     python import_pb_to_tensorboard.py --model_dir=output/frozen_inference_graph.pb --log_dir=training 

    di mana Anda perlu menentukan jalur ke grafik ( model_dir ) dan jalur ke file yang diterima selama pelatihan ( log_dir ). Kemudian cukup buka localhost di browser dan lihat minat Anda.



Dan bagian terakhir - bekerja dengan skrip python dalam instruksi Object Detection API - lembar contekan kecil di bawah ini dengan perintah dan tips telah disiapkan untuk Anda.


Lembar curang

Ekspor dari labelimg ke csv (dari direktori object_detection)


 python xml_to_csv.py 

Lebih lanjut, semua langkah yang tercantum di bawah ini harus dilakukan dari folder Tensorflow yang sama (" tensroflowmodels/models/research/object-detection " atau satu tingkat lebih tinggi - tergantung pada bagaimana Anda pergi) - itu saja gambar pemilihan input, TFRecords, dan file lain harus disalin di dalam direktori ini sebelum mulai bekerja.


Ekspor dari csv ke tfrecord


 python generate_tfrecord.py --csv_input=data/train_labels.csv --output_path=data/train.record python generate_tfrecord.py --csv_input=data/test_labels.csv --output_path=data/test.record 

* Jangan lupa untuk mengubah baris 'train' dan 'test' di jalur dalam file itu sendiri (generate_tfrecord.py), serta
nama kelas yang dikenali dalam fungsi class_text_to_int (yang harus diduplikasi dalam file pbtxt yang akan Anda buat sebelum melatih grafik).


Pelatihan


 python legacy/train.py β€”logtostderr --train_dir=training/ --pipeline_config_path=training/ssd_mobilenet_v1_coco.config 

** Sebelum pelatihan, jangan lupa memeriksa file " training/object-detection.pbtxt " - harus ada semua kelas yang dikenali dan file " training/ssd_mobilenet_v1_coco.config " - di sana Anda perlu mengubah parameter " num_classes " ke jumlah kelas Anda.


Ekspor model ke pb


 python export_inference_graph.py \ --input_type=image_tensor \ --pipeline_config_path=training/pipeline.config \ --trained_checkpoint_prefix=training/model.ckpt-110 \ --output_directory=output 

Terima kasih atas minat Anda pada topik ini!


Referensi


  1. Artikel asli tentang pengenalan objek
  2. Siklus video ke artikel tentang pengakuan objek dalam bahasa Inggris
  3. Himpunan skrip yang digunakan dalam artikel asli

Source: https://habr.com/ru/post/id427449/


All Articles