
Bahasa Inggris | 简体中文
Untuk mengedit model ONNX, salah satu cara umum adalah memvisualisasikan grafik model, dan mengeditnya menggunakan Onnx Python API. Ini berfungsi dengan baik. Namun, kita harus kode untuk diedit, kemudian memvisualisasikan untuk memeriksa. Kedua proses tersebut dapat berulang kali, yang memakan waktu.
Bagaimana jika kita memiliki alat, yang memungkinkan kita untuk mengedit dan melihat pratinjau efek pengeditan secara visualisasi ?
Kemudian onnx-modifier datang. Dengan itu, kita dapat fokus pada pengeditan grafik model di pannel visualisasi. Semua informasi pengeditan akan dirangkum dan diproses oleh Python Onnx API secara otomatis pada akhirnya. Maka waktu kita bisa dihemat!
onnx-modifier dibangun berdasarkan Netron Penampil Jaringan Populer dan Flask Kerangka Aplikasi Web yang ringan.
Saat ini, operasi pengeditan berikut didukung:
✅ Hapus node
✅ Tambahkan node baru
✅ Ubah nama input dan output simpul
✅ Ubah nama input dan output model
✅ Tambahkan output model baru
✅ Tambahkan input model baru
✅ Edit Bentuk Input Model
✅ Edit atribut node
✅ Edit model inisialisasi
Berikut adalah daftar pembaruan dan daftar TODO. Berikut adalah ikhtisar desain, yang mungkin bermanfaat bagi seseorang yang ingin berkontribusi pada proyek ini.
Semoga membantu!
Kami memiliki tiga metode untuk meluncurkan onnx-modifier sekarang.
Klon repo dan pasang paket python yang diperlukan oleh
git clone https://github.com/ZhangGe6/onnx-modifier.git
cd onnx-modifier
pip install -r requirements.txtLalu jalankan
python app.py Klik URL dalam info output yang dihasilkan oleh Flask (default ke http://127.0.0.1:5000/ ), maka onnx-modifier akan diluncurkan di browser web.
Saya merekam bagaimana saya membuat file yang dapat dieksekusi di
app_desktop.py. File yang dapat dieksekusi untuk platform lain dibiarkan untuk pekerjaan di masa depan.
Kami membuat wadah Docker seperti ini:
git clone [email protected]:ZhangGe6/onnx-modifier.git
cd onnx-modifier
docker build --file Dockerfile . -t onnx-modifier Setelah membangun wadah, kami menjalankan Onnx-Modifier dengan memetakan port Docker dan folder lokal modified_onnx
mkdir -p modified_onnx
docker run -d -t
--name onnx-modifier
-u $( id -u ${USER} ) : $( id -g ${USER} )
-v $( pwd ) /modified_onnx:/modified_onnx
-p 5000:5000
onnx-modifier Kemudian kami memiliki akses ke Onnx-Modifer dari URL http://127.0.0.1:5000. Model ONNX yang dimodifikasi diharapkan ditemukan di dalam folder lokal modified_onnx .
Klik Open Model... Untuk mengunggah model ONNX yang akan diedit. Model akan diuraikan dan ditampilkan di halaman.
Elemen-elemen level-level ditempatkan di bagian kiri halaman. Saat ini, ada tiga tombol: Reset , Download , dan Add node . Mereka bisa melakukan:
Reset : Setel ulang seluruh grafik model ke keadaan awalnya;Download : Simpan model yang dimodifikasi ke dalam disk. Perhatikan dua kotak centang di sebelah kananshape inference untuk melakukan inferensi bentuk saat menghemat model.shape inference dibangun di atas onnx-tool, yang merupakan alat pihak ketiga yang kuat.clean up untuk menghapus node dan tensor yang tidak digunakan (seperti ONNX Graphsurgeon).Add node : Tambahkan node baru ke dalam model.Elemen node-level-operasi semuanya ada di bilah samping, yang dapat dipanggil dengan mengklik simpul tertentu.
Mari kita lihat lebih dekat.
Ada dua mode untuk menghapus simpul: Delete With Children dan Delete Single Node . Delete Single Node hanya menghapus node yang diklik, sementara Delete With Children juga menghapus semua node yang di -root pada node yang diklik, yang nyaman dan alami jika kita ingin menghapus jalur panjang node.
Implementasi
Delete With Childrendidasarkan pada algoritma backtracking.
Untuk pratinjau, node yang dihapus berada dalam mode abu -abu pada awalnya. Jika sebuah node dihapus karena kesalahan, tombol Recover Node dapat membantu kami memulihkannya kembali ke grafik. Klik tombol Enter untuk mengambil operasi penghapusan agar berlaku, maka grafik yang diperbarui akan ditampilkan pada halaman secara otomatis.
Gambar berikut menunjukkan proses penghapusan yang khas:

Terkadang kami ingin menambahkan node baru ke dalam model yang ada. onnx-modifier mendukung fitur ini secara eksperimental sekarang.
CATATAN Ada tombol Add node , diikuti dengan elemen pemilih di kiri atas halaman indeks. Untuk melakukan ini, apa yang perlu kita lakukan semudah 3 langkah:
Pilih tipe simpul di pemilih, dan klik Add node . Kemudian simpul kosong dari tipe yang dipilih akan muncul pada grafik.
Pemilih berisi semua jenis operator yang didukung dalam domain
ai.onnx(171),ai.onnx.preview.training(4),ai.onnx.ml(18) dancom.microsoft(1).
Klik simpul baru dan edit di siderebar yang dipanggil. Yang perlu kita isi adalah atribut simpul ( undefined secara default) dan input/outputnya (yang memutuskan di mana simpul akan dimasukkan ke dalam grafik).
Kami sudah selesai.

Berikut ini adalah beberapa catatan untuk fitur ini:
Dengan mengklik ? Di NODE PROPERTIES -> type Element, atau + di setiap elemen Attribute , kita bisa mendapatkan beberapa referensi untuk membantu kita mengisi informasi node.
Disarankan untuk mengisi semua Attribute , tanpa membiarkannya undefined . Nilai default mungkin tidak didukung dengan baik dalam versi saat ini.
Untuk Attribute dengan list tipe, item dibagi dengan ' , ' (koma). Perhatikan bahwa [] tidak diperlukan.
Untuk Inputs/Outputs dengan list tipe, dipaksa untuk menjadi paling banyak 8 elemen dalam versi saat ini. Jika nomor input/output aktual kurang dari 8, kita dapat meninggalkan item yang tidak digunakan dengan nama dimulai dengan list_custom , dan mereka akan dihilangkan secara otomatis.
Dengan mengubah nama input/output node, kita dapat mengubah jalur model depan. Ini juga dapat membantu jika kami ingin mengganti nama output model.
Menggunakan onnx-modifier , kita dapat mencapainya dengan cukup memasukkan nama baru untuk input/output simpul dalam placeholder input yang sesuai. Topologi grafik diperbarui secara otomatis dan instan, sesuai dengan nama baru.
Misalnya, sekarang kami ingin menghapus operator preprocess ( Sub->Mul->Sub->Transpose ) yang ditunjukkan pada gambar berikut. Kita bisa
Conv 1, ganti nama inputnya (x) sebagai sajian_default_input: 0 (output node data_0 ).Conv 1 secara langsung. Selain itu, operator preprocess telah dibagi dari rutinitas utama. Hapus mereka.Download , maka kita bisa mendapatkan model ONNX yang dimodifikasi).Catatan: Untuk menautkan simpul
$ A $ (data_0dalam contoh di atas) ke node$ B $ (Convpertama dalam contoh di atas), disarankan untuk mengedit input node$ B $ ke output simpulA, daripada mengedit output node$ A $ ke input simpulB. Karena input$ B $ Dapat juga output node lain (Transposedalam contoh di atas) dan hasil yang tidak terduga akan terjadi.
Proses ini ditunjukkan pada gambar berikut:

Klik Node Input/Output Model, ketikkan nama baru di bilah sisi, lalu kita selesai.

Terkadang kami ingin mengatur output dari node tertentu sebagai output model. Misalnya, kami ingin mengekstraksi output lapisan menengah untuk analisis berbutir halus. Di onnx-modifier , kita dapat mencapainya dengan hanya mengklik tombol Add Output di bilah sisi node yang sesuai. Kemudian kita bisa mendapatkan node output model baru mengikuti node yang sesuai. Namanya sama dengan output dari node yang sesuai.
Dalam contoh berikut, kami menambahkan 2 output model baru, yang masing -masing merupakan output dari simpul Conv 1 dan Node Conv ke -2.

Terkadang kita perlu menambahkan input ke model (seperti sub-model yang diekstraksi dari model asli). Di onnx-modifier , kita dapat mencapainya dengan:

CATATAN: Bentuk input diduga dalam format "DType [DIM0, DIM1, ...]", seperti "float32 [1,3, 224.224]". Sebaliknya acara peringatan dan tombol "konfirmasi" dinonaktifkan. Selain itu, kadang-kadang bentuk input dapat diisi sebelumnya dengan menganalisis model (kita dapat mempercayainya). Jika tidak, kita harus mengaturnya secara manual.
Ubah atribut asli ke nilai baru, lalu kita selesai.
Dengan mengklik
+di sisi kanan placeholder, kita bisa mendapatkan beberapa referensi yang bermanfaat.

onnx-modifier mendukung bentuk pengeditan input sekarang. Klik input model target, lalu klik tombol Change input shape (static) . Dalam dialog yang muncul, atur bentuk baru untuk input dan klik "Konfirmasi". Bentuk tensor downsrteam akan diperbarui dalam model yang dimodifikasi yang diunduh (bukan pada pannel secara instan, karena proses inferensi bentuk diterapkan setelah "unduh" diklik).
onnx-modifier juga mendukung perubahan input menjadi dinamis. Saat ini hanya dimensi batch yang didukung. Cukup klik tombol Set dynamic batch size , lalu kami mendapatkan model yang mendukung inferensi ukuran batch dinamis.
Kadang -kadang kami ingin mengedit nilai -nilai yang disimpan dalam inisialisasi model, seperti berat/bias lapisan konvolusi atau parameter bentuk dari simpul Reshape . onnx-modifier mendukung fitur ini sekarang! Masukkan nilai baru untuk inisialisasi di sidebar yang dipanggil dan klik unduh, lalu kita selesai.

Catatan: Untuk node yang baru ditambahkan, kita juga harus memasukkan tipe data inisialisasi. (Jika kita tidak yakin apa datasinya, klik
NODE PROPERTIES->type->?Kita mungkin mendapatkan beberapa petunjuk.)
Versi terbaru (setelah 2023.12.10) mendukung Nilai Pembacaan Inisialisasi dari File Numpy! Cukup klik tombol "Buka *.npy" dan pilih file numpy, nilainya akan diuraikan dan ditampilkan di placeholder di atas. Nilai dapat diedit lebih lanjut.

Untuk pengujian cepat, beberapa model sampel khas disediakan sebagai berikut. Kebanyakan dari mereka berasal dari Onnx Model Zoo
onnx-modifier sedang dalam pengembangan aktif? Selamat datang untuk digunakan, buat masalah dan tarik permintaan! ?