CSAM検出のApple NeuralHashモデルを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最近のmacosまたはiOSビルドから4つのファイルが必要になります。
オプション1:MacOSまたはJailbreon IOSデバイスから(推奨)
MacOS(11.4+)またはJailbroken iOS(14.7+)の最近のバージョンがインストールされている場合は、 /System/Library/Frameworks/Vision.framework/Resources/ library/frameworks/vision.framework/resources/(Macos)または/System/Library/Frameworks/Vision.framework/ )からこれらのファイルをつかむだけです。
.ipswをダウンロードしてください。 cd /path/to/ipsw/file
mkdir unpacked_ipsw
cd unpacked_ipsw
unzip ../ * .ipswls -lh必要なのは、 018-63036-003.dmgなど、最大の.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のshapes、両方とも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ランタイム | 2b5c6faa6bb6bdcc4c4735a1 |