Konvertieren Sie das Apple -NeuralHash -Modell für die CSAM -Erkennung in ONNX.
Apple NeuralHash ist eine Wahrnehmungs -Hashing -Methode für Bilder, die auf neuronalen Netzwerken basieren. Es kann die Bildgröße und Komprimierung tolerieren. Die Schritte des Hashings sind wie folgt:
360x360 .[-1, 1] Bereich.96x128 -Matrix mit dem resultierenden Vektor von 128 Schwimmer.In diesem Projekt konvertieren wir das NeuralHash -Modell von Apple in das ONNX -Format. Ein Demo -Skript zum Testen des Modells ist ebenfalls enthalten.
Sowohl MacOS als auch Linux funktionieren. In den folgenden Abschnitten wird Debian für Linux -Beispiel verwendet.
brew install lzfse .Python 3.6 und höher sollte funktionieren. Installieren Sie die folgenden Abhängigkeiten:
pip install onnx coremltoolsSie benötigen 4 Dateien aus einem aktuellen MacOS- oder iOS -Build:
Option 1: Von macOS oder Jailbroken iOS -Gerät (empfohlen)
Wenn Sie eine aktuelle Version von MacOS (11.4+) oder Jailbroken iOS (14.7+) installiert haben, schnappen Sie sich diese Dateien einfach von /System/Library/Frameworks/Vision.framework/Resources/ (auf macOS) oder /System/Library/Frameworks/Vision.framework/ (auf IOS).
.ipsw cd /path/to/ipsw/file
mkdir unpacked_ipsw
cd unpacked_ipsw
unzip ../ * .ipswls -lh Was Sie brauchen, ist die größte .dmg Datei, zum Beispiel 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 Erforderliche Dateien finden Sie unter /System/Library/Frameworks/Vision.framework/ im montierten Pfad.
Setzen Sie sie unter das gleiche Verzeichnis:
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 . Normalerweise kompilierte Kern -ML -Modelle speichern Struktur in model.espresso.net und formes in model.espresso.shape , beide in JSON. Es ist das gleiche für das NeuralHash -Modell, aber mit LZFSE komprimiert.
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 Das resultierende Modell ist NeuralHash/model.onnx .
Netron ist ein perfektes Werkzeug für diesen Zweck.
pip install onnxruntime pillownnhash.py auf einem Bild aus: python3 nnhash.py /path/to/model.onnx /path/to/neuralhash_128x96_seed1.dat image.jpgBeispielausgabe:
ab14febaa837b6c1484c35e6
HINWEIS: Der hier generierte neuronale Hash ist möglicherweise ein paar Teile von einem auf einem iOS -Gerät ausgestattet. Dies wird erwartet, da verschiedene iOS -Geräte sowieso etwas andere Hashes erzeugen. Der Grund dafür ist, dass neuronale Netze auf Floating-Punkt-Berechnungen basieren. Die Genauigkeit hängt stark von der Hardware ab. Für kleinere Netzwerke macht es keinen Unterschied. NeuralHash hat jedoch mehr als 200 Schichten, was zu signifikanten kumulativen Fehlern führt.
| Gerät | Hash |
|---|---|
| iPad Pro 10,5 Zoll | 2b186faa6b36ffcc4c4635e1 |
| M1 Mac | 2b5c6faa6bb7bdcc4c4731a1 |
| iOS Simulator | 2b5c6faa6bb6bdcc4c4731a1 |
| Onnx -Laufzeit | 2b5c6faa6bb6bdcc4c4735a1 |