Metode segmentasi titik dalam Point Clouds

Pendahuluan


Beberapa waktu yang lalu, saya perlu menyelesaikan masalah segmentasi titik dalam Point Cloud (awan titik adalah data yang diperoleh dari lidar).


Contoh data dan tugas yang harus diselesaikan:
sampel data


Pencarian untuk ikhtisar umum dari metode yang ada tidak berhasil, jadi saya harus mengumpulkan informasi sendiri. Anda dapat melihat hasilnya: di sini dikumpulkan artikel yang paling penting dan menarik (menurut saya) selama beberapa tahun terakhir. Semua model yang dipertimbangkan menyelesaikan masalah segmentasi awan titik (yang termasuk dalam kelas mana setiap titik).


Artikel ini akan berguna bagi mereka yang akrab dengan jaringan saraf dan ingin memahami bagaimana menerapkannya pada data yang tidak terstruktur (misalnya, grafik).


Kumpulan data yang ada


Sekarang di domain publik ada dataset berikut tentang topik ini:



Fitur kerja dengan Point Clouds


Jaringan saraf telah datang ke daerah ini baru-baru ini. Dan arsitektur standar seperti jaringan yang sepenuhnya terhubung dan konvolusional tidak berlaku untuk menyelesaikan masalah ini. Mengapa


Karena urutan poin tidak penting di sini. Objek adalah sekumpulan titik dan tidak masalah urutan urutannya. Jika setiap piksel memiliki tempat pada gambar, maka kita dapat dengan aman mencampurkan titik-titik dan objek tidak berubah. Hasil dari jaringan saraf standar, sebaliknya, tergantung pada lokasi data. Jika Anda mencampur piksel ke dalam gambar, Anda mendapatkan objek baru.


Sekarang mari kita lihat bagaimana jaringan saraf diadaptasi untuk memecahkan masalah ini.


Artikel Paling Penting


Tidak banyak arsitektur dasar di daerah ini. Jika Anda bermaksud untuk bekerja dengan grafik atau data yang tidak terstruktur, Anda perlu memiliki gagasan tentang model-model berikut:


  • Pointnet
  • PointNet ++
  • DGCNN

Mari kita pertimbangkan secara lebih detail.


  • PointNet: Pembelajaran mendalam tentang Point Sets untuk Klasifikasi dan Segmentasi 3D
    Pelopor dalam bekerja dengan data yang tidak terstruktur.
    • bagaimana mereka memutuskan: Artikel ini menjelaskan dua model: untuk segmentasi poin dan klasifikasi suatu objek. Bagian umum terdiri dari blok-blok berikut:
      • jaringan untuk menentukan transformasi (terjemahan sistem koordinat), yang kemudian berlaku untuk semua poin
      • transformasi diterapkan ke setiap titik secara individual (persepsi reguler)
      • maxpooling, yang menggabungkan informasi dari berbagai titik dan membuat vektor fitur global untuk seluruh objek.
      • maka perbedaan antara model dimulai:
        1. model klasifikasi: vektor fitur global pergi ke input dari lapisan yang terhubung sepenuhnya untuk menentukan kelas cloud titik keseluruhan
        2. model untuk segmentasi: vektor fitur global dan fitur yang dihitung untuk setiap titik pergi ke input dari lapisan yang terhubung penuh yang mendefinisikan kelas untuk setiap titik.
    • kode

Arsitektur PointNet


  • PointNet ++: Pembelajaran Fitur Hirarki Dalam pada Point Sets di Metric Space
    Orang-orang yang sama dari Stanford yang menggambarkan PointNet.
    • bagaimana mereka memutuskan: pointNet diterapkan secara rekursif ke sub-cloud yang lebih kecil, mirip dengan jaringan konvolusi. Artinya, kubus membagi ruang, PointNet diterapkan untuk masing-masing, kemudian kubus baru terdiri dari kubus ini. Ini memungkinkan Anda untuk menyoroti tanda-tanda lokal bahwa versi sebelumnya dari jaringan itu hilang.
    • kode

Arsitektur PointNet ++


  • Grafik Dinamis CNN untuk Belajar pada Point Awan


    • bagaimana mereka memutuskan: berdasarkan titik yang tersedia, grafik dibuat: simpul adalah titik, tepi hanya ada antara titik saat ini dan titik k terdekat dengan titik tersebut. Selanjutnya, Edge conv didefinisikan - konvolusi khusus pada edge yang berasal dari titik saat ini. Artikel ini menawarkan beberapa opsi untuk konvolusi ini. Sebagai hasilnya, kami menggunakan yang berikut: untuk setiap titik x [i] di sepanjang semua titik bertetangga J -nya, tanda M dianggap sebagai fitur [i, m] = max_j (Relu (θ [m] ∗ (x [i] −x [j]) + Ά [m] ∗ x [i]))) . Nilai yang diterima diingat sebagai embedding titik baru. Di sini, koordinat lokal (x [j] −x [i]) dan global (x [j]) digunakan sebagai input untuk konvolusi.
      Setelah konvolusi didefinisikan pada grafik, sebuah jaringan konvolusi dibangun. Anda juga dapat melihat jumlah transformasi dan aplikasinya untuk setiap titik, mirip dengan PointNet.
      Pada artikel ini Anda akan menemukan tinjauan yang sangat baik dari metode solusi lain.


    • kode




Arsitektur DGCNN


Artikel berdasarkan PointNet dan PointNet ++:


Sebagian besar artikel berbeda dalam hal jumlah kesalahan atau kedalaman dan kompleksitas blok kompleks.


  • PointWise: Jaringan Pembelajaran Fitur Point-wise Tanpa Pengawasan
    Fitur pekerjaan - pelatihan tanpa guru


    • bagaimana mereka memutuskan: untuk setiap titik, vektor embeddings dilatih, dimana mereka kemudian disegmentasi.
      Postulat utama artikel ini adalah bahwa benda-benda yang serupa harus memiliki embeddings yang serupa (misalnya, dua kaki kursi yang berbeda), meskipun letaknya jauh. PointNet digunakan sebagai model dasar. Inovasi utama adalah fungsi kesalahan. Ini terdiri dari dua bagian: kesalahan rekonstruksi dan kesalahan kelancaran.
      Kesalahan rekonstruksi menggunakan informasi konteks titik. Tugasnya adalah membuat embedding poin dengan konteks geometris yang sama serupa. Untuk menghitungnya, berdasarkan vektor embedding untuk titik yang dipilih, titik baru di dekatnya dihasilkan. Artinya, deskripsi fitur titik harus berisi informasi tentang bentuk objek di sekitar titik. Selanjutnya, pertimbangkan berapa banyak titik yang dihasilkan jatuh dari bentuk nyata objek.
      Kesalahan kelancaran diperlukan agar embed serupa pada titik yang berdekatan dan tidak seperti pada titik yang jauh. Hal yang paling indah di sini adalah pengukuran kedekatan, tidak hanya sebagai norma antara dua titik dalam ruang Euclidean, tetapi menghitung jarak melalui titik-titik objek. Untuk setiap titik, satu titik dipilih dari k terdekat dan dari k lebih lanjut.
      Penyematan saat ini harus lebih dekat ke minimum terdekat dengan margin tertentu daripada sebelumnya.

  • SGPN: Jaringan Proposal Grup Kesamaan untuk Segmentasi 3D Point Cloud Instance


    • bagaimana mereka memutuskan: seperti dalam PointWise, hal yang paling menarik dalam menghitung kesalahan ada di sini. PointNet ++ adalah dasar, pertama-tama kita mempertimbangkan vektor fitur dan objek milik masing-masing titik secara individu, dengan analogi dengan PointNet ++.
      Selanjutnya, berdasarkan karakteristik, kami mempertimbangkan 3 matriks (kesamaan, kepercayaan dan segmentasi).
      Kesalahan pembelajaran akan menjadi jumlah dari tiga kesalahan yang dihitung oleh matriks yang sesuai: L = L1 + L2 + L3
      Biarkan N menjadi jumlah poin
      Matriks kesamaan - persegi, ukuran N * N. Elemen di persimpangan baris ke-i dan kolom ke-j menunjukkan apakah titik-titik ini milik objek yang sama atau tidak. Poin yang dimiliki oleh objek yang sama harus memiliki vektor fitur yang serupa. Elemen matriks dapat mengambil salah satu dari tiga nilai: titik i dan j milik satu objek, poin milik satu kelas objek, tetapi untuk objek yang berbeda (baik ini dan itu kursi, tetapi kursi berbeda), atau ini umumnya poin dari objek dari kelas yang berbeda. Matriks ini dihitung berdasarkan nilai sebenarnya.
      Kesalahan Kesamaan
      Matriks kepercayaan adalah vektor dengan panjang N. Untuk setiap titik, persimpangan atas persatuan (IoU) antara himpunan titik-titik yang dimiliki oleh objek sesuai dengan pekerjaan algoritma kami dan himpunan titik-titik yang benar-benar milik objek dengan titik saat ini dipertimbangkan. Kesalahannya hanyalah norma L2 antara kebenaran dan matriks yang dihitung. Artinya, jaringan sedang mencoba untuk memprediksi seberapa percaya dirinya dalam prediksi kelas untuk poin pada suatu objek.
      Matriks segmentasi memiliki ukuran - N * jumlah kelas. Kesalahan di sini dianggap sebagai cross-entropy dalam masalah klasifikasi multi-kelas.
    • kode


Arsitektur SGPN


  • Ketahui Apa Yang Dilakukan Tetangga Anda: Segmentasi 3D Semantik Point Clouds
    • bagaimana mereka memutuskan: Pada awalnya, mereka mempertimbangkan tanda-tanda untuk waktu yang lama, lebih rumit daripada di PointNet, dengan banyak koneksi residual, dan jumlah, tetapi secara umum - hal yang sama. Sedikit perbedaan - mereka menghitung tanda untuk setiap titik dalam koordinat global dan lokal.
      Perbedaan utama di sini adalah kesalahan menghitung lagi. Ini bukan crossentropy standar, tetapi jumlah dari dua kesalahan:
      1. kehilangan jarak berpasangan - titik dari satu objek harus lebih dekat dari ΄_near dan titik dari objek yang berbeda harus lebih panjang dari ΄_far .
        kehilangan jarak berpasangan
      2. loss centroid - poin dari satu objek harus dekat satu sama lain

Artikel berbasis DGCNN:


DGCNN diterbitkan baru-baru ini (2018), jadi ada beberapa artikel berdasarkan arsitektur ini. Saya ingin menarik perhatian Anda pada satu hal:



Arsitektur DGCNN yang terhubung


Kesimpulan


Di sini Anda dapat menemukan informasi singkat tentang metode modern untuk menyelesaikan masalah klasifikasi dan segmentasi di Point Clouds. Ada dua model utama (PointNet ++, DGCNN), modifikasi yang sekarang digunakan untuk menyelesaikan masalah ini. Paling sering, untuk modifikasi, fungsi kesalahan diubah dan arsitektur ini rumit dengan menambahkan lapisan dan tautan.

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


All Articles