CSAM 탐지를위한 Apple Neuralhash 모델을 ONNX로 변환하십시오.
Apple Neuralhash는 신경망을 기반으로 한 이미지에 대한 지각 해싱 방법입니다. 이미지 크기 조정 및 압축을 견딜 수 있습니다. 해싱 단계는 다음과 같습니다.
360x360 으로 조정하십시오.[-1, 1] 범위로 정규화합니다.96x128 행렬의 도트 생성물을 계산하십시오.이 프로젝트에서는 Apple의 Neuralhash 모델을 ONNX 형식으로 변환합니다. 모델 테스트를위한 데모 스크립트도 포함되어 있습니다.
MacOS와 Linux가 모두 작동합니다. 다음 섹션에서 Debian은 Linux 예제에 사용됩니다.
brew install lzfse 하여 설치하십시오.파이썬 3.6 이상이 작동해야합니다. 다음 종속성을 설치하십시오.
pip install onnx coremltools최근 MACOS 또는 iOS 빌드에서 4 개의 파일이 필요합니다.
옵션 1 : MacOS 또는 JailBroken iOS 장치 (권장)
최근 버전의 MACOS (11.4+) 또는 JailBroken iOS (14.7+)가 설치된 경우, /System/Library/Frameworks/Vision.framework/Resources/ (MacOS) 또는 /System/Library/Frameworks/Vision.framework/ (iOS)에서 이러한 파일을 가져옵니다.
.ipsw 다운로드하십시오. 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 런타임 | 2b5c6faa6bb6bdcc4c4735a1 |