Pembelajaran Mendalam - tidak hanya segel pada ponsel atau cara kami mendiagnosis troli lokomotif


Hanya beberapa hari yang lalu, Aurorai memindahkan sistem deteksi cacat dan pemantauan troli untuk lokomotif Ermak ke operasi percobaan. Tugasnya adalah non-sepele dan sangat menarik, langkah pertama adalah menilai kondisi bantalan rem dan lebar brace. Kami berhasil menyelesaikan masalah dengan akurasi 1 mm pada kecepatan lokomotif hingga 30 km / jam! Saya ingin mencatat bahwa karena spesifikasinya, dimungkinkan untuk menggunakan "TTA (test-time augmentation)" - contoh nyata peretasan kompetisi gaya-kaggle yang tidak sesuai dengan segmentasi prod dan semantik berdasarkan pada encoder se_resnext50 , yang memberikan hasil yang luar biasa akurat dalam prediksi topeng .

Deskripsi tugas

Penting untuk membuat kompleks perangkat keras-lunak untuk mendeteksi cacat bantalan rem dan output data ke mandor shift.

Prasyarat untuk tugas itu

Ternyata, sejumlah besar bantalan, sekitar 80%, perubahan PTOL (titik inspeksi teknis lokomotif), dan ini terjadi setiap 72 jam untuk setiap lokomotif. Sebagian besar cek di PTOL adalah inspeksi visual oleh master bagian eksternal dari kereta lokomotif.



Rencanakan untuk memecahkan masalah:

  1. Pemilihan peralatan
  2. Pengumpulan data
  3. Pelatihan model
  4. Pengembangan Server dengan REST API
  5. Pengembangan klien tablet Android
  6. Desain dan perakitan rak untuk penempatan kamera dan cahaya
  7. Operasi percobaan

Pemilihan peralatan

Mungkin salah satu yang paling sulit, jika bukan yang paling sulit, tugas adalah memilih kamera, lensa dan cahaya dalam anggaran dan waktu terbatas: MVP harus dilakukan dalam satu setengah bulan. Dalam beberapa hari, Google menjadikan saya ahli perangkat keras untuk visi mesin. Pilihan dibuat pada kamera Basler dan lampu latar berdenyut 6k lumens, disinkronkan dengan kamera. Dalam mendukung Basler (70 frame / detik, resolusi hingga 1920x1024), API python-nya berbicara, yang sangat memudahkan integrasi semua komponen sistem, satu-satunya negatif adalah harga kamera ~ 100 tr.

Pilihan lensa untuk kamera menjadi rumit karena kurangnya pemahaman akan panjang fokus dan sudut pandang yang diperlukan, saya harus mengambil risiko, tetapi saya mengeluarkan kalkulator lensa dan sedikit keberuntungan.

Lampu latar: waktu yang diperlukan agar LED menyala, jenisnya, dan parameter lensa dibuat secara eksperimental. Saya mencoba 3 modifikasi lensa berbeda untuk LED, dengan sudut 30, 45, 60, akhirnya memilih lensa matte dengan sudut 45.





Merakit dan menguji sinyal kontrol pulsa untuk kamera



Untuk perangkat keras server, saya mengambil Intel Core i7-7740X Kaby Lake, 46gb RAM, 1 TB SSD, dan 3x1080Ti - ini cukup untuk memprediksi dua lokomotif 3-bagian dalam waktu tidak lebih dari 2 menit.

Pertanian kolektif pendinginan sandwich dari kartu video berhembus 10 derajat.



Pengumpulan data

Membuat dataset adalah lagu yang terpisah, tidak ada yang bisa dipercayakan dengan acara ini, dan karena itu saya dikirim ke kota yang tidak dikenal di kejauhan tanah air kami yang luas. Saya memotret sekitar 400 pembalut di ponsel saya (!!!) . Ke depan, saya akan mengatakan bahwa karyawan depot yang gagah berani, yang tampaknya ketakutan oleh auditor dari Moskow, mengganti semua bantalan pada lokomotif menjadi yang benar-benar baru dan melukisnya dengan lapisan cat baru, lucu dan menakutkan untuk melihatnya. Saya menantikan yang terburuk, meskipun masih ada sekitar 400 foto blok yang sama sekali berbeda yang saya buat di depot Moskow.

Hanya tetap percaya pada keajaiban, tumpukan augmentasi, muncul dengan heuristik untuk menghapus segmen yang salah, yang ada banyak, karena saya tidak berpikir tentang anti-contoh.

Menunggu:



Realitas:





Di sini harus dikatakan bahwa tidak ada satu pun contoh balok yang sangat aus.

Pelatihan model

Model dengan encoder se_resnext50 dan decoder dengan blok scse dari repositori ini menunjukkan yang terbaik, tetapi scse (implementasi untuk pytorch) harus dihapus karena alasan mempercepat proses prediksi, karena harus diprediksi dalam satu menit. Untuk pelatihan model, kerangka Pytorch 1.0.1 digunakan , dengan sejumlah besar penambahan dari albumentations dan augmentasi Horizontal Flip yang ditulis sendiri untuk mengubah kelas saat ditampilkan.

def train_transform(p=1): return Compose([ OneOf([ CLAHE(clip_limit=2), IAASharpen(), IAAEmboss(), RandomBrightnessContrast(brightness_limit=0.8, contrast_limit=0.8), HueSaturationValue(hue_shift_limit=50, sat_shift_limit=50, val_shift_limit=50), RGBShift(r_shift_limit=50, g_shift_limit=50, b_shift_limit=50), JpegCompression(quality_lower=30), RandomGamma(), GaussNoise() ], p=0.3), OneOf([ Blur(), MotionBlur(), MedianBlur(), ], p=0.3), ShiftScaleRotate(shift_limit=0.2, scale_limit=0.4, rotate_limit=5, p=0.5), Normalize(p=1) ], p=p) 

Sebagai fungsi kerugian, saya memilih kerugian Lovรกsz-Softmax , berperilaku hampir sama dengan SM + jaccard, tetapi lebih baik daripada BCE , yang cocok terlalu banyak pada markup. Pilihan algoritme untuk menentukan nomor seri sepasang roda dan balok juga merupakan tantangan, ada pilihan dengan pembelajaran metrik , tetapi saya perlu segera menunjukkan hasilnya, dan gagasan itu datang untuk menandai blok di kelas 1 dan 2, di mana 1 adalah orientasi ke kanan, dan 2 adalah ke kiri. Jaringan mulai memprediksi tidak hanya topeng, tetapi juga orientasi. Dengan menggunakan heuristik sederhana, adalah mungkin untuk menentukan nomor seri balok dan roda secara andal, kemudian rata-rata prediksi, pada kenyataannya, menggunakan TTA dengan sedikit pergeseran objek selama gerakan dan sudut pencahayaan yang berbeda memberikan hasil yang baik dalam akurasi topeng bahkan pada resolusi 320x320.

Secara terpisah, tugasnya adalah menentukan cacat balok berbentuk baji, ada banyak ide dari Huff Transformation , untuk menandai sudut / batas blok dengan titik / garis kelas yang berbeda. Pada akhirnya, opsi menang atas bagaimana pekerja melakukannya: Anda harus mundur 5 cm dari tepi sempit dan mengukur lebar, jika itu dalam kisaran normal, lalu lewati blok.

Pipa pelatihan diambil dari sini oleh Segmentasi Instrumen Robot MICCAI 2017 . Proses pelatihan terdiri dari tiga tahap: pelatihan dengan encoder beku, pelatihan seluruh jaringan dan pelatihan dengan CosineAnnealingLR . Dua tahap pertama menggunakan ReduceLROnPlateau .

Memprogram server dan klien REST di Android

Untuk server REST, saya memilih termos - lebih mudah untuk tidak memulai peluncuran dalam 2 menit. Saya memutuskan untuk membuat database untuk penyimpanan dengan tangan saya sendiri dalam bentuk struktur folder sederhana dan file status saat ini. Aplikasi untuk tablet di Android Studio, manfaat dari versi terbaru hanyalah surga bagi pengembang.

Desain dan perakitan rak untuk penempatan kamera dan cahaya

Saya ingat masa lalu ketika saya membuat stasiun pengisian untuk kendaraan listrik, dan pengalaman ini sangat berguna - kami memutuskan untuk membuatnya dari rak aluminium struktural yang dicetak pada printer 3D.





Mulai tes!


Hasilnya melebihi semua harapan. Untuk spesialis penglihatan komputer, tugas itu mungkin tampak cukup mudah dan sederhana. Namun, saya punya beberapa keraguan karena dua hal: pertama, set pelatihan kecil dan tidak mengandung kasus batas seperti blok yang sangat tipis; kedua, pengujian berlangsung dalam kondisi pemotretan dan pencahayaan yang sangat berbeda.





Jaccard pada validasi mencapai 0,96, secara visual bantalan tersegmentasi dengan sangat jelas, menambah rata-rata beberapa foto dan mendapatkan akurasi yang sangat baik dalam memperkirakan lebar bantalan. Selama tes, ternyata Anda dapat bekerja dengan gerobak lokomotif lain, tetapi mengambil kamera lebih cepat:





Sebagai kesimpulan, saya ingin mengatakan bahwa teknologi telah menunjukkan dirinya dengan sangat baik dan, menurut pendapat saya, memiliki potensi besar dalam hal menghilangkan faktor manusia, mengurangi downtime lokomotif dan membuat perkiraan.

Ucapan Terima Kasih

Terima kasih kepada komunitas ods.ai , tanpa bantuan Anda, saya tidak akan dapat melakukan semua ini dalam waktu yang singkat! Terima kasih banyak kepada n01z3 , DL, yang berharap agar saya menerima DL, atas nasihatnya yang tak ternilai dan profesionalisme yang luar biasa! Terima kasih banyak kepada dalang ideologis Vasily Manko (CEO, perusahaan Aurorai), desainer terbaik Tatyana Brusova.

Sampai jumpa di episode selanjutnya dari kisah ini!

Aurorai, llc

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


All Articles