Преобразовать модель Apple Neuralhash для обнаружения CSAM в ONNX.
Apple Neuralhash - это метод хеширования восприятия для изображений, основанных на нейронных сетях. Он может переносить изменения изображения и сжатие. Шаги хеширования как следующее:
360x360 .[-1, 1] .96x128 с полученным вектором 128 поплавок.В этом проекте мы конвертируем модель Apple Neuralhash в формат ONNX. Демонстрационный скрипт для тестирования модели также включен.
Как MacOS, так и Linux будут работать. В следующих разделах Debian используется для примера Linux.
brew install lzfse .Python 3.6 и выше должны работать. Установите следующие зависимости:
pip install onnx coremltoolsВам понадобится 4 файла из недавней сборки MacOS или iOS:
Вариант 1: От устройства iOS MacOS или Jailbroken (рекомендуется)
Если у вас установлена недавняя версия MacOS (11.4+) или Jailbroken IOS (14.7+), просто возьмите эти файлы из /System/Library/Frameworks/Vision.framework/Resources/ (на macos) или /System/Library/Frameworks/Vision.framework/ (на ios).
.ipsw недавней сборки iOS (14,7+) от ipsw.me. cd /path/to/ipsw/file
mkdir unpacked_ipsw
cd unpacked_ipsw
unzip ../ * .ipswls -lh Вам нужен самый большой файл .dmg , например, 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 Требуемые файлы находятся в разделе /System/Library/Frameworks/Vision.framework/ в монтированном пути.
Поместите их в тот же каталог:
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 . Обычно скомпилированные модели Core ML хранят структуру в model.espresso.net и формы в model.espresso.shape , оба в JSON. Это то же самое для модели Neuralhash, но сжимается 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 Полученная модель - NeuralHash/model.onnx .
Netron - идеальный инструмент для этой цели.
pip install onnxruntime pillownnhash.py на изображении: python3 nnhash.py /path/to/model.onnx /path/to/neuralhash_128x96_seed1.dat image.jpgПример вывода:
ab14febaa837b6c1484c35e6
Примечание: сгенерированный здесь нейронный хэш может быть на несколько бит от одного, сгенерированного на устройстве iOS. Это ожидается, так как разные устройства iOS в любом случае генерируют немного разные хэши. Причина в том, что нейронные сети основаны на расчетах с плавающей запятой. Точность сильно зависит от аппаратного обеспечения. Для небольших сетей это не будет иметь никакого значения. Но Neuralhash имеет более 200 слоев, что приводит к значительным совокупным ошибкам.
| Устройство | Хэш |
|---|---|
| iPad Pro 10,5 дюйма | 2b186faa6b36ffcc4c4635e1 |
| M1 Mac | 2b5c6faa6bb7bdcc4c4731a1 |
| симулятор iOS | 2b5c6faa6bb6bdcc4c4731a1 |
| Onnx Runtime | 2b5c6faa6bb6bdcc4c4735a1 |