Convierta el modelo NEURALHASH de Apple para la detección de CSAM a ONNX.
Apple Neuralhash es un método de hashing perceptual para imágenes basadas en redes neuronales. Puede tolerar el cambio de tamaño y la compresión de la imagen. Los pasos de hashing son los siguientes:
360x360 .[-1, 1] .96x128 con el vector resultante de 128 flotadores.En este proyecto, convertimos el modelo Neuralhash Neuralhash de Apple en formato ONNX. También se incluye un script de demostración para probar el modelo.
Tanto MacOS como Linux funcionarán. En las siguientes secciones, Debian se usa para el ejemplo de Linux.
brew install lzfse .Python 3.6 y superior debería funcionar. Instale las siguientes dependencias:
pip install onnx coremltoolsNecesitará 4 archivos de una compilación reciente de MacOS o iOS:
Opción 1: Desde MacOS o dispositivo iOS Jailbreak (recomendado)
Si tiene una versión reciente de MacOS (11.4+) o IOS Jailbreak (14.7+) instalado, simplemente tome estos archivos de /System/Library/Frameworks/Vision.framework/Resources/ (en macOS) o /System/Library/Frameworks/Vision.framework/ (en iOS).
.ipsw de una compilación reciente de iOS (14.7+) de ipsw.me. cd /path/to/ipsw/file
mkdir unpacked_ipsw
cd unpacked_ipsw
unzip ../ * .ipswls -lh Lo que necesita es el archivo .dmg más grande, por ejemplo, 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 Los archivos requeridos están en /System/Library/Frameworks/Vision.framework/ en la ruta montada.
Póngalos en el mismo directorio:
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 . Normalmente compilado, los modelos ML de Core Ml Storthing en model.espresso.net y formas en model.espresso.shape , ambos en JSON. Es lo mismo para el modelo Neuralhash pero comprimido con 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 El modelo resultante es NeuralHash/model.onnx .
Netron es una herramienta perfecta para este propósito.
pip install onnxruntime pillownnhash.py en una imagen: python3 nnhash.py /path/to/model.onnx /path/to/neuralhash_128x96_seed1.dat image.jpgSalida de ejemplo:
ab14febaa837b6c1484c35e6
Nota: El hash neural generado aquí podría estar a unos pocos bits de uno generado en un dispositivo iOS. Esto se espera ya que los diferentes dispositivos iOS generan hash ligeramente diferentes de todos modos. La razón es que las redes neuronales se basan en cálculos de punto flotante. La precisión depende en gran medida del hardware. Para redes más pequeñas no hará ninguna diferencia. Pero Neuralhash tiene más de 200 capas, lo que resulta en errores acumulativos significativos.
| Dispositivo | Picadillo |
|---|---|
| iPad Pro 10.5 pulgadas | 2b186faa6b36ffcc4c4635e1 |
| M1 Mac | 2b5c6faa6bb7bdcc4c4731a1 |
| simulador de iOS | 2b5c6faa6bb6bdcc4c4731a1 |
| Tiempo de ejecución de ONNX | 2b5c6faa6bb6bdcc4c4735a1 |