Convertissez le modèle Apple Neuralhash pour la détection CSAM en ONNX.
Apple Neuralhash est une méthode de hachage perceptuelle pour les images basée sur les réseaux de neurones. Il peut tolérer le redimensionnement de l'image et la compression. Les étapes du hachage sont les suivantes:
360x360 .[-1, 1] .96x128 avec le vecteur résultant de 128 flotteurs.Dans ce projet, nous convertissons le modèle Neuralhash d'Apple au format ONNX. Un script de démonstration pour tester le modèle est également inclus.
MacOS et Linux fonctionneront. Dans les sections suivantes, Debian est utilisé pour l'exemple Linux.
brew install lzfse .Python 3.6 et au-dessus devrait fonctionner. Installez les dépendances suivantes:
pip install onnx coremltoolsVous aurez besoin de 4 fichiers d'une version macOS ou iOS récente:
Option 1: à partir de macOS ou de dispositif iOS jailbreaké (recommandé)
Si vous avez une version récente de MacOS (11.4+) ou de l'iOS jailbreaké (14.7+), prenez simplement ces fichiers à partir de /System/Library/Frameworks/Vision.framework/Resources/ (sur macOS) ou /System/Library/Frameworks/Vision.framework/ (on ios).
.ipsw d'une version iOS récente (14.7+) sur ipsw.me. cd /path/to/ipsw/file
mkdir unpacked_ipsw
cd unpacked_ipsw
unzip ../ * .ipswls -lh Ce dont vous avez besoin est le plus grand fichier .dmg , par exemple 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 Les fichiers requis sont sous /System/Library/Frameworks/Vision.framework/ dans le chemin monté.
Mettez-les sous le même répertoire:
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 . Normalement compilé, les modèles ML de noyau de stockage de stockage dans model.espresso.net et les formes dans model.espresso.shape , tous deux en JSON. C'est la même chose pour le modèle Neuralhash mais compressé avec 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 Le modèle résultant est NeuralHash/model.onnx .
Le netron est un outil parfait à cet effet.
pip install onnxruntime pillownnhash.py sur une image: python3 nnhash.py /path/to/model.onnx /path/to/neuralhash_128x96_seed1.dat image.jpgExemple de sortie:
ab14febaa837b6c1484c35e6
Remarque: le hachage neural généré ici peut être à quelques bits de celui généré sur un appareil iOS. Cela est prévu car différents appareils iOS génèrent de toute façon des hachages légèrement différents. La raison en est que les réseaux de neurones sont basés sur des calculs de points flottants. La précision dépend fortement du matériel. Pour les réseaux plus petits, cela ne fera aucune différence. Mais Neuralhash a plus de 200 couches, entraînant des erreurs cumulatives importantes.
| Appareil | Hacher |
|---|---|
| iPad Pro 10,5 pouces | 2b186faa6b36ffcc4c4635e1 |
| M1 Mac | 2b5c6faa6bb7bdcc4c4731a1 |
| simulateur iOS | 2b5c6faa6bb6bdcc4c4731a1 |
| ONNX Runtime | 2b5c6faa6bb6bdcc4c4735a1 |