Mencapai Peringkat 33 (dari 186) di NASA Harvest Field Boundary… – Menuju AI

Mencapai Peringkat 33 (dari 186) di NASA Harvest Field Boundary… – Menuju AI

Author(s): Ronny Polle

Awalnya diterbitkan di Menuju AI.

Deskripsi lengkap dengan ablasi dan kode.

sumber : Zindi.Africa

Garis besar

1. Pernyataan Masalah

2. Pendekatan

3. Pengambilan Kunci

Pernyataan masalah

Tantangan Deteksi Batas Harvest Field NASA adalah tantangan pembelajaran mesin yang diselenggarakan oleh Zindi.Afrika bekerja sama dengan NASA Harvest yang terletak di University of Maryland, dan Radiant Earth Foundation.

Menurut pernyataan masalah dari Zindi, peternakan kecil menghasilkan sekitar 35% makanan dunia, dan sebagian besar ditemukan di negara berpenghasilan rendah dan menengah. Pemetaan pertanian ini memungkinkan pembuat kebijakan mengalokasikan sumber daya dan memantau dampak peristiwa ekstrem terhadap produksi pangan dan ketahanan pangan. Sayangnya, peta tingkat lapangan ini kebanyakan tetap tidak tersedia dan di negara berpenghasilan rendah dan menengah, di mana risiko kerawanan pangan paling tinggi. Menggabungkan pembelajaran mesin dengan data Pengamatan Bumi dari satelit seperti konstelasi PlanetScope dapat membantu meningkatkan pemetaan lahan pertanian pemantauan pertanian, dan manajemen risiko bencana untuk pertanian kecil ini.

Dalam tantangan ini, tujuannya adalah merancang algoritme pembelajaran mesin untuk mengklasifikasikan batas lahan tanaman menggunakan observasi multispektral. Dengan kata lain, model Anda diharapkan untuk secara akurat menyegmentasikan topeng batas yang menggambarkan area di mana ada bidang tanaman versus tidak ada bidang tanaman.

Mendekati

Sejauh ini, ini adalah salah satu masalah pembelajaran mesin tersulit yang pernah saya temui. Hal ini dapat dijelaskan dengan fakta bahwa ini adalah pertemuan resmi pertama saya dengan data satelit. Dan terlepas dari itu, saya berangkat untuk mempelajari semua yang dapat saya temukan yang berkaitan dengan tugas ini.

Data

Di sini, kita berhadapan dengan masalah klasik Satellite Image Time Series (SITS). Time series disediakan selama enam bulan. Namun, seseorang bebas memilih subset bulan untuk pemodelan.

Data tersebut terdiri dari kumpulan citra satelit dan label yang disusun menjadi 256 kali 256 chip dengan total hingga 70 ubin. Sebanyak 1532 batas bidang individu telah ditemukan dan dijelaskan dalam 70 petak ini. Dengan informasi ini, hipotesis awal saya adalah bahwa masing-masing dari 70 ubin akan berisi setidaknya satu batas bidang.

Ukuran kereta terakhir setelah dipisah adalah 57 keping versus ukuran uji 13 keping. Label disediakan hanya untuk bidang yang dapat sepenuhnya dibatasi di dalam chip.

Berikut adalah tampilan struktur file dari setiap chip:

Citra satelit yang mengandung 4 band [B01, B02, B03, B03] dipetakan ke 6 stempel waktu unik [2021_03, 2021_04, 2021_08, 2021_10, 2021_11, 2021_12]
Pemetaan label raster ke bidang di set kereta.

Prapemrosesan Gambar

Di bagian ini, kita akan menyelami image preprocessing dan scaling pipeline.

Intuisi di balik pilihan pra-pemrosesan gambar saya ditujukan terutama untuk menciptakan batas-batas yang digambarkan dengan lemah pada gambar untuk memungkinkan model mendapatkan persepsi visual yang lebih baik dari bidang dan juga untuk menawarkan prosedur pembelajaran yang diawasi dengan lebih baik. Tujuan akhir diarahkan untuk membuat topeng label dapat dideteksi secara wajar dalam gambar yang sesuai.

Pipeline pra-pemrosesan terakhir saya sangat terinspirasi oleh solusi pemenang tempat pertama untuk kompetisi Deteksi Tanaman dari Citra Satelit yang diselenggarakan oleh lokakarya CV4A di ICLR 2020. Saya mendorong Anda untuk memeriksanya di sini.

Idenya dapat diletakkan dalam langkah-langkah di bawah ini:

1. Ambil bidang

2. Terapkan fungsi akar kuadrat pada bidang untuk mengatasi outlier

3. Hitung rata-rata dan standar deviasi hasil pada langkah 2

4. Standarkan hasil pada langkah 3 per saluran. Jadi, untuk setiap saluran, kurangi rata-rata dan bagi hasilnya dengan standar deviasi

#memuat 4 pita gambar
ubin = acak.pilihan(kereta_ubin)
cetak (ubin)

bd1 = rio.open(f”{train_source_items}/{dataset_id}_source_train_{tile}/B01.tif”)
bd1_array = bd1.baca(1)
bd2 = rio.open(f”{train_source_items}/{dataset_id}_source_train_{tile}/B02.tif”)
bd2_array = bd2.baca(1)
bd3 = rio.open(f”{train_source_items}/{dataset_id}_source_train_{tile}/B03.tif”)
bd3_array = bd3.baca(1)
bd4 = rio.open(f”{train_source_items}/{dataset_id}_source_train_{tile}/B04.tif”)
bd4_array = bd4.baca(1)

bidang = np.dstack((bd4_array, bd3_array, bd2_array, bd1_array))

bidang = np.sqrt(bidang)

# standardisasi
untuk c dalam rentang(field.shape[2]):
rata-rata = bidang[:, :, c].berarti()
std = bidang[:, :, c].std()
bidang[:, :, c] = (bidang[:, :, c] – rata-rata) / std

Dan hanya itu yang diperlukan!

Model

Modelnya adalah arsitektur berbasis Unet yang menggunakan Efficientnet-B7 yang telah dilatih sebelumnya sebagai encoder.

Anehnya, itu menawarkan konsistensi yang baik atas metrik kerugian, F1 dan Recall di kedua set pelatihan dan validasi.

Data dipecah berdasarkan metode pemisahan stratifikasi berbasis segmentasi khusus.

Pelatihan dilakukan menggunakan pengoptimal AdamW dengan kecepatan pembelajaran 1e-4 dan penurunan berat 1e-5, hanya untuk 50 zaman!

Sebenarnya, saya awalnya berencana untuk berlatih selama 1000 zaman; dan itu hanya percobaan menit terakhir saya sebelum kompetisi berakhir. Juga, komputasi saya tidak mengizinkan ukuran batch yang lebih besar. Dan ide augmentasi data tambahan tidak dapat diterapkan karena notebook saya berulang kali mogok hanya dengan augmentasi mixup khusus.

Takeaway kunci

Ringkasan percobaan saya (gagal + berhasil)

Rumusan Masalah — Saya mencoba melihat masalah dari sudut yang berbeda. Dan kemudian saya akhirnya menemukan bahwa segmentasi biner menawarkan hasil yang lebih baik secara konsisten.

Segmentasi multi-kelas Segmentasi multi-label Regresi Segmentasi biner Klasifikasi urutan

Ablasi Pra-pemrosesan Gambar

normalisasi logaritmik/akar kuadrat dari band normalisasi min-maks pra-/pasca-penumpukan band kombinasi pra-/pasca-penumpukan dari normalisasi logaritmik dan min-maks kombinasi akar kuadrat dan normalisasi min-maks mandiri min-maks, logaritmik dan normalisasi akar kuadrat pra-/pasca-penumpukan

Akhirnya, saya menemukan bahwa menerapkan normalisasi akar kuadrat mandiri (tanpa penskalaan min-maks) setelah menumpuk 4 pita menjadi bidang 4 dimensi lebih baik.

Model Ablasi

Tulang punggung model pra-pelatihan yang berbeda — Varian jaring yang efisien (B1-B7), Resnet34, Resnet50, Seresnet34, Eefficientnet B5 + bobot siswa yang bising, VGG16 dan VGG19-bn. Multi-task Resnet34 dengan pooling berbasis Perhatian Penyiapan encoder-decoder kustom berbasis urutan : Encoder gambar terlatih (Efficientnet-b5) + Dekoder memori jangka pendek (LSTM) panjang. Model Residu Unet dilatih dalam mode multitask

Kehilangan Fungsi Ablasi

Binary Crossentropy Categorical Crossentropy Dice loss ( +/- per-image ) Tanimoto loss dan Tanimoto dual loss Weighted Categorical Crossentropy loss Combo loss — dadu + binary crossentropy (Saya mencoba konfigurasi pembobotan yang berbeda sebelum mendarat di 0,9*dadu + 0,1*bce) Combo loss — kerugian dadu multikelas + fokus lintas entropi (bobot 1 : 1) kerugian Lovasz

pengoptimal

Adam, AdamW**, SGD, RMSprop

** — menawarkan hasil terbaik bersama dengan penjadwal penurunan gradien stokastik dengan restart hangat

Penjadwal

Cosine annealing +/- warm restart Penjadwal keturunan gradien stokastik dengan restart hangat **.

** — meskipun ini lebih baik dengan parameter yang diinisialisasi, tidak ada penyetelan lebih lanjut yang dilakukan.

Metrik

Pencarian ambang batas F1 +/-** Ingat** Metrik dadu Metrik akurasi

** — Metrik F1 + Recall adalah metrik utama yang dievaluasi. Dengan F1, setelah pencarian ambang batas, [0.1, 0.2] ditemukan hanya meningkatkan skor CV lokal dan bukan skor publik.

Lipat perpecahan

Pemisahan tes-pelatihan bertingkat sederhana Pemisah bertingkat khusus yang dirancang untuk tugas segmentasi Pemisah K-Fold Pemisah Shuffle Multilabel Stratified (diberikan ‘y’ pada topeng rata (yaitu 256 * 256 atau 65536 piksel) ) Pemisah GrupKFold

Apa yang tidak berhasil?

Secara umum, sejauh mana saya menjelajahi semua konfigurasi eksperimental di atas sangat ditentukan oleh komputasi dan akses internet saya (Akan sangat menyenangkan jika saya dapat bereksperimen lebih banyak tetapi offline, pada mesin yang jauh lebih kuat!). Memutuskan untuk menjadikan tugas sebagai masalah klasifikasi multi-kelas dan urutan adalah hal yang sangat tidak sepele. Saya mengamati sedikit konsistensi antara validasi silang lokal (dan lintas lipatan) dan skor publik, bahkan setelah beralih pemisah data. Terutama, dengan pembagi Multilabel, hasilnya cukup menarik tetapi tercermin buruk saat diserahkan. Tanimoto dan varian gandanya tidak menawarkan hasil yang memuaskan baik dalam skenario multi-class single-output maupun multitask. Ensemble snapshot memperburuk kinerja.

Banyak pengalaman belajar, dengan banyak wilayah yang belum dipetakan yang bisa dijelajahi.

Tautan ke kode lengkap tersedia di daftar referensi di bawah ini.

Terima kasih telah membaca! Umpan balik sangat diterima.

Referensi

[1] Tantangan Deteksi Batas Panen Lapangan NASA

[2] 2021 NASA Harvest Rwanda Baseline Model

[3] Turunan Gradien Stochastic dengan Restart Hangat (SGDR)

[4] Pemisahan Berstratifikasi untuk Segmentasi Semantik

[5] Model Klasifikasi Tanaman Berbasis Spatio-Temporal Deep Learning untuk Citra Satelit

[6] Tautan ke Kode Lengkap

Diterbitkan melalui Menuju AI

Author: Scott Anderson