Perkenalan

Jaringan saraf konvolusi telah sukses besar dalam tugas pengenalan visual. Artikel ini secara khusus berfokus pada segmentasi semantik. Logika di balik penggunaan CNN adalah bahwa gambar memiliki kesan lokalitas, yaitu piksel-piksel yang berdekatan satu sama lain lebih terkait. CNN dapat menangkap hal ini melalui operasi konvolusi dan wilayah lokal yang dipertimbangkan (secara formal dikenal sebagai bidang reseptif) bergantung pada ukuran kernel. Ada juga ketergantungan jangka panjang pada gambar yang dapat membantu tugas pengenalan visual. Untuk itu konsepnya adalah menumpuk lapisan konvolusi yang secara teoritis akan meningkatkan bidang reseptif. Jadi sekarang ketergantungan jangka panjang dan jangka pendek diperhitungkan, letakkan jaringan pada pelatihan dan Anda mendapatkan hasilnya dengan mudah, bukan!

Namun saya yakin Anda sangat menyadari bahwa tidak sering ada hal yang sesuai secara teori dan praktik. Baru-baru ini sebuah makalah (oleh Luo, Wenjie, dkk.) diterbitkan yang menunjukkan bahwa bidang reseptif tidak tumbuh secara linier dengan jumlah lapisan konvolusi, apalagi jumlahnya sangat terbatas. Selain itu, bidang reseptif bergantung pada berbagai faktor lain seperti skema inisialisasi. Jadi apa solusinya?

Grafik datang untuk menyelamatkan

Bagaimana jika kita dapat mengelompokkan gambar ke dalam wilayah dan menggunakan wilayah tersebut untuk mengekstrak fitur dan memproses gambar lebih lanjut. Selain itu juga akan terjadi ketergantungan antar daerah yang akan membantu terciptanya ketergantungan jangka panjang. Semua ini dapat dicapai dengan menggunakan representasi grafis dari gambar.

Secara garis besar semua simpul pada suatu graf akan mewakili daerah-daerah berbeda pada gambar. Tepinya akan mewakili hubungan atau persamaan antar wilayah.

Lingkaran mewakili wilayah yang memiliki vektor fitur yang sesuai yang mewakili wilayah tersebut. Tepiannya merupakan persamaan antar wilayah.

Segmentasi Semantik

Segmentasi semantik adalah tugas untuk menetapkan kelas pada setiap piksel. Teknik dasarnya adalah akan ada encoder yang diikuti oleh decoder yang outputnya akan berupa penugasan pada tingkat piksel.

Bagaimana cara kerja segmentasi? Mari kita ambil contoh yang sangat mendasar, misalkan ada sebuah gambar yang hanya terdiri dari warna merah, biru, hijau seperti pada gambar

Gambar 1 dan asumsikan warna-warna ini mewakili beberapa objek. Sekarang misalkan siapa yang ingin mengelompokkan gambar menjadi tiga objek yang diwakili oleh warna. Vektor fitur apa yang Anda perlukan untuk melakukan ini? Benar untuk ini, hanya warna saja yang cukup. Jika kita katakan dalam vektor fitur maka setiap vektor fitur memiliki kedalaman 3; untuk merah [0,0,1], untuk biru [1,0,0], untuk hijau [0, 1, 0]. Seperti yang Anda lihat, fitur-fitur ini cukup untuk mengelompokkan gambar menjadi 3 wilayah. Sekarang perhatikan gambar kehidupan nyata seperti yang diberikan pada Gambar 2. Bisakah kamu menyelesaikan tugas tersebut hanya dengan menggunakan warna? Tidak benar. Kita memerlukan representasi fitur dari setiap objek yang ada dalam gambar yang memisahkannya dari objek lain dan mendekatkan objek serupa, di sinilah encoder berperan dalam gambar. Ini mengubah representasi gambar berwarna menjadi representasi ruang laten di mana fitur-fitur dari objek yang sama lebih dekat dan fitur-fitur objek yang berbeda berjauhan satu sama lain. Jelasnya, pembuat enkode perlu dilatih. Setelah kita memiliki fitur di ruang laten yang memisahkan objek berbeda, kita perlu menyebarkan informasi ke tingkat piksel dan di sinilah decoder berperan.

Mari kita pahami bagaimana grafik dapat berguna dalam segmentasi semantik. Grafik mulai berperan setelah vektor fitur diekstraksi menggunakan encoder. Perhatikan gambar pada Gambar2. Gambar diurutkan gambar sebenarnya, ground truth, segmentasi menggunakan FCN, segmentasi menggunakan GCU masing-masing dari atas ke bawah. Pada gambar ini, kemungkinan kelas bantal dan tempat tidur menjadi sangat dekat ketika FCN digunakan. Oleh karena itu Anda dapat melihat pada Gambar 2 bantal dan tempat tidur digabungkan.

Sekarang anggaplah representasi grafis mengikuti encoder. Representasi vektor fitur dari gambar yang dihasilkan dari encoder dipaksa untuk dibagi menjadi sebanyak 8 daerah (yaitu grafik 8 simpul) ] kalau saya bilang dari segi loss kerugiannya lebih tinggi jika sebuah simpul kosong yaitu tidak ada pixel yang ada. ditugaskan padanya. Pada pelatihan tahap awal dalam hal ini juga bantal dan tempat tidur akan ditempatkan pada kelas yang sama. Namun saat kita melatih jaringan lebih jauh, setiap vektor fitur ditugaskan ke sebuah simpul, yaitu tidak ada simpul yang kosong. Kemungkinan wilayah dimana citra akan tersegmentasi dalam representasi grafik adalah wilayah yang terdapat pada kebenaran dasar. Oleh karena itu, bantal dan tempat tidur akan dibagi menjadi dua wilayah berbeda pada akhir pelatihan. Fitur-fitur yang ditetapkan pada suatu simpul diproses lebih lanjut dengan mengalikan dengan beberapa bobot dan vektor fitur yang dihasilkan beserta vektor fitur dari encoder selanjutnya digunakan untuk segmentasi. Dengan demikian representasi grafis semakin meningkatkan representasi fitur gambar.

Satu hal nyata yang dapat terjadi adalah segmentasi gambar yang berlebihan saat membaginya menjadi beberapa wilayah. Namun wilayah yang terlalu tersegmentasi akan bergabung kembali setelah operasi lebih lanjut seperti konvolusi.

Sekarang pertanyaannya adalah bagaimana mengubah representasi gambar berbasis grid menjadi representasi grafis dan mempelajari parameter representasi grafis dan jawabannya adalah unit konvolusi grafik (GCU).

Unit Konvolusi Grafik (GCU)

Sama seperti konvolusi yang beroperasi pada struktur mirip grid, GCU beroperasi pada struktur mirip grafik. Ada 3 langkah besar di GCU

  1. Proyeksi Grafik:Pada langkah ini, representasi gambar yang berbentuk grid diubah menjadi representasi grafis. Grafik diparameterisasi dengan parameter berikut:
  • V: Jumlah titik pada grafik yang menunjukkan jumlah wilayah di mana gambar akan disegmentasi.
  • W: Vektor fitur yang mewakili wilayah. Bentuknya adalah (d, V), dengan d adalah dimensi vektor ciri
  • Varians: Ini adalah varians sepanjang setiap dimensi di seluruh piksel yang ditetapkan ke titik tertentu. Bentuknya adalah (d, V), dengan d adalah dimensi vektor fitur.

Vadalah tetap dan W serta varians dipelajari selama pelatihan. Misalkan terdapat peta fitur 2D dari suatu citra dengan tinggi H dan lebar W dan setiap elemen mempunyai dimensi d. Probabilitas setiap vektor fitur yang dimiliki setiap titik dihitung, yang menghasilkan matriks probabilitas Q. Persamaan di bawah ini digunakan untuk menghitung probabilitas:

dimana xᵢⱼ adalah vektor fitur dari baris iᵗʰ dan kolom jᵗʰ dari peta fitur 2-D, wₖ adalah fitur yang merepresentasikan wilayah kᵗʰ (simpul) dan σₖ adalah varians sepanjang seluruh dimensi simpul k. Sekarang, pengkodean fitur dari semua simpul dihitung dengan mengambil rata-rata tertimbang dari sisa. Semakin banyak sisa, semakin sedikit kontribusinya dalam menghitung fitur yang dikodekan. Persamaan yang diberikan di bawah ini digunakan:

di mana zₖ adalah fitur yang dikodekan. Matriks ketetanggaan dihitung dengan ZᵀZ yang memberikan kemiripan kosinus antara simpul yang berbeda. Total 3 hal dihitung dalam langkah ini

  • Matriks probabilitas Q, bentuk ( HW, d)
  • Fitur yang dikodekan Z, bentuk ( d, V)
  • Matriks ketetanggaan A, bentuk ( V, V) - Representasi kesamaan antar wilayah sehingga menangkap ketergantungan jangka panjang dalam sebuah gambar.

2.Konvolusi Grafik:Langkah ini analog dengan langkah maju konvolusi, yaitu konvolusi dilakukan pada grafik yang dihasilkan. Persamaan yang diberikan di bawah ini digunakan:

dimana W g adalah matriks bobot bentuk (d, dₒᵤₜ). Seperti yang Anda lihat, ada matriks Ketetanggaan, A, dalam persamaan tersebut, ketergantungan jangka panjang dipertimbangkan saat menghitung fitur baru yang dikodekan. Jadi fitur-fitur baru yang dikodekan bergantung pada semua wilayah (A) dan fitur-fitur yang dikodekan saat ini (Z). Untuk membaca tentang konvolusi grafik, lihat "artikel" dan "ini". Informasi yang sangat mudah dipahami dan cukup diberikan dalam artikel ini.

3.Proyeksi Ulang Grafik:Terakhir, grafik diubah kembali menjadi struktur seperti kisi untuk memvisualisasikan atau melakukan operasi lebih lanjut. Persamaannya diberikan di bawah ini

Arsitektur dan Implementasi

Arsitektur yang digunakan adalah ResNet 50/101 yang telah dilatih sebelumnya, dilatasi ditambahkan ke dua lapisan terakhir sehingga keluarannya diturunkan sampelnya sebesar 8. Diikuti oleh GCU. Dalam implementasi aslinya, keluaran dari 4 GCU digabungkan ke keluaran ResNet seperti yang ditunjukkan pada diagram di bawah.

d adalah 1024 dan dₒᵤₜ adalah 256 dalam kasus ini. Kedalaman keluaran setelah penggabungan akan menjadi 1024( dari ResNet50) + 256x4 = 2048. Keluaran gabungan diambil sampelnya menggunakan interpolasi bilinear. Selanjutnya, lapisan konvolusi digunakan untuk menetapkan piksel ke kelas yang berbeda. Fungsi kerugian yang digunakan untuk meminimalkan kesalahan adalah fungsi kerugian Kemungkinan log negatif.

Implementasi Pytorch oleh saya tersedia di sini. Saya telah memberikan detail implementasi di bawah ini. Dataset yang digunakan adalah ADE20K.

  • ResNet50 dilatasi digunakan, dilatih sebelumnya pada ADE20K tersedia di sini. Kedalaman keluaran ResNet50 adalah 2048.
  • GCU mengikuti ResNet50. Di makalah ini, 4 unit GCU digabungkan tetapi saya hanya menggunakan 1 GCU dengan 16 simpul karena keterbatasan daya komputasi. Saya telah menulis kode umum sehingga Anda dapat dengan mudah mengubah kode untuk 4 GCU. Untuk mengetahui lebih detail tentang implementasi GCU lihat postingan saya selanjutnya.
  • d adalah 2048 dan dₒᵤₜ adalah 256 dalam kasus ini. Kedalaman keluaran setelah penggabungan akan menjadi 2048( dari ResNet50) + 256= 2304
  • Diikuti dengan operasi upsampling bilinear dan kemudian 1 lapisan konvolusi.
  • Gambar diubah ukurannya ke ukuran 512×512 sebelum diumpankan ke jaringan.
  • Karena keterbatasan komputasi, saya telah menggunakan ukuran batch 1 dan dilatih selama 120 epoch yang masing-masing memiliki 1000 iterasi.
  • SGD digunakan dengan momentum 0,9. Kecepatan pembelajaran dimulai dengan 0,01 dan menurun seiring dengan berlangsungnya pelatihan
  • Saat ini model tersebut menggunakan 2 GPU. Satu GPU didedikasikan untuk ResNet dan lainnya untuk semua komputasi lain seperti GCU, upsampling, dan konvolusi.

Plot kerugian pelatihan ditunjukkan pada Gambar3. Setelah pelatihan dengan hyperparameter yang diberikan, akurasi pelatihan adalah sekitar 78%.

Posting ini didasarkan pada kertas oleh Yin Li dan Abhinav Gupta.

Jika ada keraguan atau saran, silakan hubungi saya😃. Juga, temukan saya di" Twitter" dan" Linkedin". Adios!!