Konversi model neuralhash apel untuk deteksi CSAM ke ONNX.
Apple NeuralHash adalah metode hashing perseptual untuk gambar berdasarkan jaringan saraf. Ini dapat mentolerir ukuran dan kompresi gambar. Langkah -langkah hashing adalah sebagai berikut:
360x360 .[-1, 1] .96x128 dengan vektor yang dihasilkan dari 128 floats.Dalam proyek ini, kami mengonversi model NeuralHash Apple menjadi format ONNX. Skrip demo untuk menguji model juga disertakan.
Baik MacOS dan Linux akan bekerja. Pada bagian berikut, Debian digunakan untuk contoh Linux.
brew install lzfse .Python 3.6 dan di atas harus bekerja. Instal dependensi berikut:
pip install onnx coremltoolsAnda akan membutuhkan 4 file dari MacOS atau iOS Build terbaru:
Opsi 1: Dari macOS atau perangkat iOS jailbreak (disarankan)
Jika Anda memiliki versi terbaru dari MacOS (11.4+) atau Jailbroken iOS (14.7+) yang diinstal, cukup ambil file -file ini dari /System/Library/Frameworks/Vision.framework/Resources/ (pada macOS) atau /System/Library/Frameworks/Vision.framework/ (on ios).
.ipsw dari IOS Build terbaru (14.7+) dari IPSW.Me. cd /path/to/ipsw/file
mkdir unpacked_ipsw
cd unpacked_ipsw
unzip ../ * .ipswls -lh Yang Anda butuhkan adalah file .dmg terbesar, misalnya 018-63036-003.dmg .
# Build and install apfs-fuse
sudo apt install fuse libfuse3-dev bzip2 libbz2-dev cmake g++ git libattr1-dev zlib1g-dev
git clone https://github.com/sgan81/apfs-fuse.git
cd apfs-fuse
git submodule init
git submodule update
mkdir build
cd build
cmake ..
make
sudo make install
sudo ln -s /bin/fusermount /bin/fusermount3
# Mount image
mkdir rootfs
apfs-fuse 018-63036-003.dmg rootfs File yang diperlukan di bawah /System/Library/Frameworks/Vision.framework/ di jalur yang dipasang.
Letakkan di bawah direktori yang sama:
mkdir NeuralHash
cd NeuralHash
cp /System/Library/Frameworks/Vision.framework/Resources/NeuralHashv3b-current.espresso. * .
cp /System/Library/Frameworks/Vision.framework/Resources/neuralhash_128x96_seed1.dat . Model inti ML yang biasanya disusun menyimpan struktur di model.espresso.net dan bentuk di model.espresso.shape , keduanya dalam JSON. Itu sama untuk model neuralhash tetapi dikompresi dengan lZFSE.
dd if=NeuralHashv3b-current.espresso.net bs=4 skip=7 | lzfse -decode -o model.espresso.net
dd if=NeuralHashv3b-current.espresso.shape bs=4 skip=7 | lzfse -decode -o model.espresso.shape
cp NeuralHashv3b-current.espresso.weights model.espresso.weights cd ..
git clone https://github.com/AsuharietYgvar/TNN.git
cd TNN
python3 tools/onnx2tnn/onnx-coreml/coreml2onnx.py ../NeuralHash Model yang dihasilkan adalah NeuralHash/model.onnx .
Netron adalah alat yang sempurna untuk tujuan ini.
pip install onnxruntime pillownnhash.py pada gambar: python3 nnhash.py /path/to/model.onnx /path/to/neuralhash_128x96_seed1.dat image.jpgOutput contoh:
ab14febaa837b6c1484c35e6
Catatan: Hash saraf yang dihasilkan di sini mungkin beberapa bit dari satu yang dihasilkan pada perangkat iOS. Ini diharapkan karena perangkat iOS yang berbeda menghasilkan hash yang sedikit berbeda. Alasannya adalah bahwa jaringan saraf didasarkan pada perhitungan titik mengambang. Keakuratannya sangat tergantung pada perangkat keras. Untuk jaringan yang lebih kecil itu tidak akan membuat perbedaan. Tetapi NeuralHash memiliki 200+ lapisan, menghasilkan kesalahan kumulatif yang signifikan.
| Perangkat | Hash |
|---|---|
| iPad Pro 10,5 inci | 2b186faa6b36ffcc4c4635e1 |
| M1 Mac | 2b5c6faa6bb7bdcc4c4731a1 |
| simulator iOS | 2b5c6faa6bb6bdcc4c4731a1 |
| Onnx Runtime | 2b5c6faa6bb6bdcc4c4735a1 |