Proyek Penerjemahan Prometheus - Sebuah solusi pencarian api bertenaga AIRekan-rekan saya dan saya sedang mengerjakan proyek Prometheus (Prometheus), solusi deteksi kebakaran awal yang menggabungkan AI, visi komputer, drone otomatis, dan layanan perkiraan cuaca. Kompleks ini dirancang untuk mendeteksi kebakaran hutan sebelum berubah menjadi bencana nyata. Kami ingin membicarakan proyek ini secara lebih rinci, cara kerjanya, dan apa saja alat teoretis yang menjadi intinya. Materi akan diserahkan sebagai independen dari teknologi spesifik mungkin, jadi jika Anda tertarik pada fitur implementasi spesifik (CNTK, R-CNN lebih cepat, wadah Docker, Python, .NET framework, dll.), Kemudian pergi ke
repositori GitHub kami. Dan di sini kami hanya menyebutkan teknologi yang digunakan.
Pengantar kecil:
Motivasi
Pada 2017, diperkirakan bahwa kebakaran hutan menelan biaya ekonomi AS sekitar $ 200 miliar, ini sedikit lebih sedikit kerusakan dari angin topan. Tetapi perbedaannya adalah bahwa jika Anda memadamkan api sebelum mereka tumbuh, maka kerugiannya bisa sangat berkurang. Namun, tugas mendeteksi kebakaran adalah rutinitas, sulit dan membutuhkan partisipasi orang: sebagian besar mereka duduk di menara pengamatan dengan teropong, mencoba memperhatikan api pada waktunya, atau terbang di sekitar wilayah itu dengan helikopter atau melalui drone yang dipandu. Proyek Prometheus dirancang untuk mengotomatiskan seluruh rutin ini menggunakan drone otomatis yang akan mendeteksi kebakaran pada tahap awal, jika tidak fitur angin, kekeringan, atau medan akan membantu api menyebar ke hektar area dalam hitungan menit. Selain itu, sebagian besar dari kebakaran ini terjadi di daerah-daerah terpencil di mana ada beberapa orang dan tidak ada yang melacak terjadinya fokus.
Jika Anda mengirim drone untuk berpatroli di daerah-daerah terpencil ini, mereka akan membantu mendeteksi kebakaran pada waktunya dan meminimalkan kerusakan.
Proyek
Prometheus dapat dibagi menjadi tiga bagian:
- Modul deteksi kebakaran menggunakan algoritma pembelajaran mendalam untuk mengidentifikasi fokus kecil menggunakan kamera RGB drone (diimplementasikan sebagai layanan cloud REST).
- Modul perencanaan penerbangan memungkinkan pengguna untuk memilih dan merencanakan zona patroli (diimplementasikan sebagai aplikasi Windows dan terintegrasi dengan layanan pemetaan cuaca).
- Sistem peringatan memungkinkan pengguna untuk dengan cepat memberi tahu tim tentang kebakaran yang terdeteksi (menggunakan Fungsi Azure dan Twilio).
Deteksi kebakaran
Kami menggunakan drone otomatis untuk mencari api di daerah terpencil. Kamera RGB yang dipasang di papan digunakan untuk memotret seluruh area, dan foto-foto tersebut kemudian dimasukkan oleh model pembelajaran mesin yang mencari api dan memberi tahu pengguna. Terima kasih semuanya, semuanya gratis. Meskipun, hei ...
Pelajaran Satu: Ukuran Penting
Menentukan kebakaran menggunakan visi komputer dalam proporsi yang kami butuhkan adalah tugas yang sulit, dan oleh karena itu kami menggunakan pendekatan yang berbeda. Anda mungkin berpikir bahwa menggunakan kamera RGB tidak praktis karena kamera inframerah lebih disukai dalam hal ini. Tetapi setelah berbicara dengan petugas pemadam kebakaran, kami menemukan bahwa itu tidak begitu sederhana: tempat-tempat dengan suhu udara tinggi akan terlihat seperti kebakaran pada kamera inframerah, dan beberapa bagian permukaan akan terlihat seperti sumber panas hanya karena kekhasan pantulan cahaya. Selain itu, kamera semacam ini secara signifikan lebih mahal. Sebagian besar petugas pemadam kebakaran menggunakannya di malam hari untuk melihat apakah mereka berhasil memadamkan api.
Secara umum, jika Anda ingin menggunakan pembelajaran mesin untuk mengklasifikasikan gambar ke dalam kategori tertentu - api / bukan api - maka Anda mungkin akan menggunakan teknik klasifikasi. Sesederhana itu. Tapi mungkin saja karakteristik yang diperlukan untuk klasifikasi terlalu kecil dibandingkan dengan gambar penuh. Misalnya, sumber pengapian kecil yang khas terlihat seperti ini:

Dalam kasus seperti itu, termasuk milik kita, kinerja terbaik dalam menentukan objek dapat dicapai jika Anda tidak memperhatikan lokasi spesifik mereka atau menghitung angka pada gambar. Tetapi lebih sering daripada tidak, sistem perangkat untuk menentukan objek jauh lebih rumit. Ada berbagai cara untuk mengatasi masalah ini, dan kami menggunakan jaringan saraf convolutional regional (R-CNN), atau lebih tepatnya, implementasi R-CNN yang lebih cepat.
Yang juga sering digunakan adalah
YoLo dan
Detectron (baru saja pindah ke open-source).
Prosesnya terdiri dari langkah-langkah berikut:
- Lokalisasi: Anda perlu membuat bagian (sampel) area dalam gambar yang mungkin berisi objek yang diinginkan. Area-area ini disebut Daerah Kepentingan (ROI). Mereka adalah set besar bingkai yang menutupi seluruh gambar. Kami menghasilkan ROI menggunakan teknik yang dijelaskan dalam Segmentasi sebagai Pencarian Selektif untuk Pengenalan Objek oleh Koen EA van de Sande dan lainnya. Teknik ini diterapkan di perpustakaan Python dlib.
- Klasifikasi objek: selanjutnya, properti visual diekstraksi dari setiap frame, evaluasi mereka dilakukan dan sistem mengasumsikan apakah ada objek di sana dan apa mereka (lebih lanjut tentang ini di bawah).
- Penindasan non-maksimum: Terjadi bahwa frame yang mewakili objek yang sama tumpang tindih sebagian atau seluruhnya di atas satu sama lain. Untuk menghindari duplikasi seperti itu, frame berpotongan digabungkan menjadi satu. Tugas ini mungkin memerlukan banyak daya komputasi, tetapi beberapa optimasi diimplementasikan di Intel Math Library.
Pelajaran dua: data Anda mungkin perlu bantuan
Pembelajaran mesin membutuhkan data. Tetapi dalam pembelajaran yang mendalam (yaitu, dalam ruang input multidimensi) Anda akan membutuhkan banyak data untuk mengekstrak sifat visual yang menarik. Seperti yang Anda pahami, sulit untuk menemukan set data besar objek yang menarik bagi kami (kebakaran). Untuk mengatasi masalah ini, kami menggunakan teknik "transfer pembelajaran" dengan model klasifikasi gambar tujuan umum pra-terlatih untuk mengekstraksi properti visual, karena mereka dapat digeneralisasikan dengan baik. Sederhananya, Anda mengambil model yang sudah dilatih untuk mendefinisikan sesuatu, dan "mengkonfigurasi" menggunakan dataset Anda. Yaitu, model ini akan mengekstrak properti, dan Anda akan mencoba menggunakan representasi yang dipelajari untuk tugas A (biasanya tugas tingkat tinggi) dalam menyelesaikan masalah B (biasanya yang tingkat rendah). Keberhasilan menyelesaikan Masalah B menunjukkan seberapa banyak model untuk tugas A dapat belajar tentang tugas B. Dalam kasus kami, tugas A adalah tugas mengklasifikasikan objek ImageNet, dan tugas B mengidentifikasi kebakaran.
Teknik ini dapat diterapkan dengan menghapus lapisan terakhir dari jaringan saraf pra-terlatih dan menggantinya dengan classifier Anda sendiri. Kemudian kami membekukan semua lapisan lainnya dan melatih jaringan saraf dengan cara biasa.
Jaringan saraf yang dihasilkan tidak tersedia di GitHub karena ukurannya - sekitar 250 MB. Jika Anda membutuhkannya, kirim pesan kepada
kami .
Ada banyak model yang sudah dilatih untuk ImageNet (AlexNet, VGG, Inception, RestNet, dll.). Di masing-masing dari mereka, penulis menggunakan kompromi yang berbeda dalam kecepatan, ketepatan dan struktur. Kami memilih AlexNet, karena membutuhkan lebih sedikit sumber daya komputasi, dan hasil dalam tugas kami sedikit berbeda dari jaringan lain.
Pelajaran tiga: video (terutama frame individu) adalah teman terbaik Anda
Namun terlepas dari transfer pelatihan, kami masih membutuhkan cukup banyak data untuk menyelesaikan masalah klasifikasi. Dan kemudian kami memanfaatkan video. Anda dapat mengekstraksi banyak frame dari setiap video dan dengan cepat mendapatkan dataset besar yang bagus. Video memiliki properti lain yang bermanfaat: jika suatu objek atau kamera bergerak, maka Anda mendapatkan gambar objek dengan pencahayaan berbeda, pada sudut yang berbeda dan pada posisi yang berbeda, sehingga dataset sangat berkualitas tinggi.
Kami juga tidak mengunggah set gambar kami ke repositori, karena ukuran, ketukan.
Kami mengumpulkan video dari drone dari berbagai sumber dan memberi label secara manual. Ada beberapa alat untuk memberi label gambar dalam format yang berbeda, tergantung pada kerangka pembelajaran yang digunakan. Saya merekomendasikan LabelImg untuk Linux / Windows dan RectLabel untuk Mac. Kami menggunakan CNTK, jadi kami memilih alat Microsoft VoTT yang dapat mengekspor ke format CNTK dan TensorFlow.
Pelajaran Empat: membeli kartu video (atau menyewa cloud)
Melatih model besar seperti kita membutuhkan daya komputasi yang besar, dan GPU akan sangat membantu. Kami butuh sekitar 15 menit untuk belajar menggunakan NVIDIA GeForce GTX 1050. Tetapi meskipun menggunakan kartu video, pengaturan parameter model adalah kesulitan besar. Microsoft memiliki alat yang bagus yang disebut Azure Experimentation Service, yang memungkinkan Anda menjalankan beberapa pelatihan dengan parameter berbeda di cloud secara paralel dan menganalisis akurasi yang diperoleh. Lihat juga AWS SageMaker.
Repositori kami berisi
skrip Sweep_parameters.py , yang secara otomatis akan menghapus ruang parametrik dan memulai tugas pelatihan.
Selesai!
Jadi, kami melatih R-CNN kami dan membuangnya dengan transfer pelatihan, pembelajaran mendalam, kartu video, dll. Bagaimana sekarang berbagi pekerjaan kami dengan orang lain? Pertama, kami meluncurkan layanan REST untuk berinteraksi dengan model. API memungkinkan Anda mengirim gambar untuk evaluasi dan mengembalikan area gambar, keberadaan api yang telah ditentukan oleh model dengan pasti. Anda juga dapat memberi tahu API apakah gambar tersebut benar-benar menyala atau tidak. Titik akhir lainnya digunakan untuk umpan balik dan peningkatan.
Layanan REST API dikemas dalam wadah Docker dan diterbitkan di cloud, yang memungkinkan Anda untuk skala murah solusi. Di repositori, Anda dapat menemukan file dengan gambar Docker.
Perencanaan penerbangan
Peringatan merah
Bagaimana Prometheus tahu ke mana harus mengirim drone? Kami berintegrasi dengan layanan cuaca nasional untuk mengidentifikasi "peringatan merah". Ini adalah area di mana suhu udara, arah dan kekuatan angin, kelembaban dan tekanan atmosfer meningkatkan kemungkinan kebakaran. Karena layanan cuaca berorientasi ke negara mereka, mereka hampir tidak dapat digunakan untuk pencarian asing. Hari ini kami bekerja dengan layanan Amerika dan Argentina.

Informasi cuaca
Sangat penting untuk memiliki data cuaca yang akurat di bidang yang diminati. Petugas pemadam kebakaran bertanya kepada kami tentang fungsi ini. Kami memperoleh data cuaca dengan polling stasiun cuaca melalui server peta dari Layanan Cuaca Nasional, dan menaburkan informasi yang diterima di peta. Kami menekankan bahwa ini bukan ramalan cuaca, tetapi pengukuran nyata:
Stasiun cuaca di AS .
Tidak mengerti cara kerja kartu ini? Anda tidak sendirian dalam hal ini. Kami butuh beberapa minggu untuk mencari tahu cara menggunakannya. Ada sedikit informasi di internet. Jika Anda ingin bereksperimen dengan data dari stasiun cuaca, Anda harus mendapatkan kunci API dari penyedia, karena kami tidak memiliki hak untuk membagikannya.
Sistem peringatan
Ketika sistem mendeteksi kebakaran, ia meminta operator untuk mengkonfirmasi fakta deteksi. Tampilannya seperti ini:
Jendela konfirmasi kebakaran .
Seperti yang Anda lihat, sistem bekerja cukup akurat bahkan dalam kasus-kasus sulit seperti ini. Bingkai merah kecil menguraikan batas-batas api dengan probabilitas 67%. Faktanya, Prometheus mencoba mendeteksi kebakaran besar dan tidak stabil saat menghitung area dalam skenario seperti ini. Semuanya teratur, seperti yang dimaksudkan. Kami sama sekali tidak tertarik dengan situasi seperti itu.
Sistem peringatan mengirimkan pemberitahuan SMS dengan koordinat GPS api ke nomor telepon yang sudah didaftarkan. Distribusi dilakukan menggunakan Twilio, platform cloud yang API-nya memungkinkan, antara lain, untuk mengirim dan menerima pesan teks secara terprogram.
Ingin melihatnya?
→
Kode sumber ada di siniUcapan Terima Kasih
Prometheus dikembangkan bekerja sama dengan Departemen Pemadam Kebakaran Tempe, Arizona, Departemen Pemadam Kebakaran Argentina, dan Institut Teknologi Pertanian Nasional Argentina di Argentina.