تحويل نموذج Apple Neuralhash للكشف عن CSAM إلى ONNX.
Apple Neuralhash هي طريقة تجزئة إدراكية للصور على أساس الشبكات العصبية. يمكن أن يتسامح مع تغيير حجم الصورة والضغط. خطوات التجزئة هي ما يلي:
360x360 .[-1, 1] .96x128 مع المتجه الناتج من 128 عوامة.في هذا المشروع ، نقوم بتحويل نموذج Apple Neuralhash إلى تنسيق OnNx. يتم أيضًا تضمين البرنامج النصي التجريبي لاختبار النموذج.
ستعمل كل من MacOS و Linux. في الأقسام التالية ، يتم استخدام Debian في مثال Linux.
brew install lzfse .يجب أن يعمل بيثون 3.6 وما فوق. تثبيت التبعيات التالية:
pip install onnx coremltoolsستحتاج إلى 4 ملفات من MacOS أو IOS حديثًا:
الخيار 1: من جهاز MacOS أو جهاز iOS 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/ /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 . عادةً ما يتم تجميعها من طرازات ML Core التي تم model.espresso.shape model.espresso.net إنه نفس الشيء بالنسبة لنموذج 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 ماك | 2b5c6faa6bb7bdcc4c4731a1 |
| محاكي iOS | 2b5c6faa6bb6bdcc4c4731a1 |
| وقت التشغيل ONNX | 2b5c6faa6bb6bdcc4c4735a1 |