แปลงโมเดล Apple NeuralHash สำหรับการตรวจจับ CSAM เป็น ONNX
Apple Neuralhash เป็นวิธีการแฮชแบบรับรู้สำหรับภาพที่ใช้เครือข่ายประสาท มันสามารถทนต่อการปรับขนาดภาพและการบีบอัด ขั้นตอนของการแฮชมีดังต่อไปนี้:
360x360[-1, 1]96x128 ด้วยเวกเตอร์ที่ได้รับ 128 ลอยในโครงการนี้เราแปลงโมเดล NeuralHash ของ Apple เป็นรูปแบบ ONNX สคริปต์ตัวอย่างสำหรับการทดสอบแบบจำลองนั้นรวมอยู่ด้วย
ทั้ง MacOS และ Linux จะใช้งานได้ ในส่วนต่อไปนี้ Debian ใช้สำหรับตัวอย่าง Linux
brew install lzfsePython 3.6 ขึ้นไปควรใช้งานได้ ติดตั้งการอ้างอิงต่อไปนี้:
pip install onnx coremltoolsคุณจะต้องใช้ 4 ไฟล์จากการสร้าง macOS หรือ iOS ล่าสุด:
ตัวเลือกที่ 1: จากอุปกรณ์ macOS หรือ Jailbroken iOS (แนะนำ)
/System/Library/Frameworks/Vision.framework/ คุณมี MacOS เวอร์ชันล่าสุด (11.4+) หรือ Jailbroken iOS (14.7+) เพียงแค่คว้าไฟล์เหล่านี้จาก /System/Library/Frameworks/Vision.framework/Resources/
.ipsw ของ iOS build ล่าสุด (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 Simulator | 2b5c6faa6bb6bdcc4c4731a1 |
| รันไทม์ onnx | 2b5c6faa6bb6bdcc4c4735a1 |