
ACM MM2024 (Multimodal Unlearnable Examples: Protecting Data against Multimodal Contrastive Learning)의 코드
초록: 멀티모달 대조 학습(MCL)은 인터넷에서 수집된 수백만 개의 이미지-캡션 쌍을 학습하여 zero-shot 분류에서 놀라운 발전을 보여주었습니다. 그러나 이러한 의존성은 해커가 개인정보 및 민감 정보를 포함할 수 있는 이미지-텍스트 데이터를 무단으로 모델 훈련에 활용할 수 있기 때문에 개인정보 보호 위험을 초래합니다. 최근 연구들은 보호를 위한 지름길(shortcut)을 만들기 위해 훈련 이미지에 인지할 수 없는 섭동을 추가하여 학습 불가능한 예제(unlearnable examples)를 생성하는 것을 제안합니다. 그러나 이들은 단일 모달 분류를 위해 설계되었으며, MCL에서는 거의 탐구되지 않았습니다. 우리는 먼저 기존 방법들의 성능을 이미지-캡션 쌍에 대해 평가함으로써 이러한 맥락을 탐구하며, 기존 방법들은 멀티모달 데이터에 효과적으로 일반화되지 못하고 레이블 부족과 MCL에서 쌍의 분산으로 인해 지름길 구축에 제한적인 영향을 미칩니다. 본 논문에서는 멀티모달 학습 불가능한 예제를 생성하기 위한 새로운 최적화 프로세스인 MEM(Multi-step Error Minimization)을 제안합니다. MEM은 오류 최소화(EM) 프레임워크를 확장하여 이미지 노이즈와 추가 텍스트 트리거를 모두 최적화함으로써 최적화 공간을 확장하고 모델이 노이즈 특징과 텍스트 트리거 사이의 지름길을 학습하도록 효과적으로 오도합니다. 구체적으로, 우리는 노이즈 최소화 문제를 해결하기 위해 projected gradient descent를 사용하고, HotFlip을 사용하여 그래디언트를 근사하고 단어를 대체하여 최적의 텍스트 트리거를 찾습니다. 광범위한 실험을 통해 MEM의 효과성이 입증되었으며, 보호 후 검색 결과는 무작위 추측의 거의 절반 수준이고, 다양한 모델 간 높은 전이성을 보여줍니다.
우리 코드는 CleanCLIP 소스 코드에 의존합니다.
아래 링크의 지침에 따라 anaconda를 설정하십시오: Anaconda 설정
다음 명령은 리포지토리 내에 의존성이 포함된 conda 환경을 생성합니다.
conda env create --prefix ./env -f environment.yml
source activate ./env
요구 사항은 conda 환경을 생성하지 않고도 직접 설치할 수 있습니다.
pip install -r requirements.txt
우리는 이 데이터셋을 훈련 세트, 검증 세트, 테스트 세트로 이미 분할했습니다. 분할 결과는 ~/Data/Dataset/train.csv 등에서 확인할 수 있습니다.
Flickr 8k 데이터셋은 8092개의 이미지와 각 이미지에 대해 최대 5개의 캡션을 포함합니다. 데이터셋은 여기에서 다운로드할 수 있습니다.
Flickr30k 데이터셋은 Flickr에서 수집한 31,000개의 이미지와 인간 주석자가 제공한 5개의 참조 문장을 포함합니다. 데이터셋은 여기에서 다운로드할 수 있습니다.
데이터셋은 여기에서 다운로드할 수 있습니다.
python -m src.main --name clean_flick8k --train_data /data/clip/Flicker-8k/train.csv --eval_test_data_dir /data/clip/Flicker-8k/test.csv --image_key images --caption_key caption --device_id 0
텍스트 트리거 길이를 3으로 설정
python -m src.poison --name poison_token_3_shuffle --train_data /data/clip/Flicker-8k/train.csv --image_key images --caption_key caption --device_id 0 --token_num 3 --lr 1e-4
텍스트 트리거 길이를 5로 설정
python -m src.poison --name poison_token_5_shuffle --train_data /data/clip/Flicker-8k/train.csv --image_key images --caption_key caption --device_id 1 --token_num 5 --lr 1e-4
python -m src.poison_main --name eval_token_3_shuffle --train_data /data/clip/Flicker-8k/train.csv --eval_test_data_dir /data/clip/Flicker-8k/test.csv --image_key images --caption_key caption --device_id 0 --save_pert poison_token_3_shuffle --token_num 3 --lr 5e-4
python -m src.poison_main --name eval_token_5_shuffle --train_data /data/clip/Flicker-8k/train.csv --eval_test_data_dir /data/clip/Flicker-8k/test.csv --image_key images --caption_key caption --device_id 1 --save_pert poison_token_5_shuffle --token_num 5 --lr 5e-4
이 리포지토리의 코드 일부는 다음 리포지토리에서 각색된 것입니다: CleanCLIP, openai 및 universal-triggers.