24년 11월을 기준으로 작성되었습니다
https://github.com/AbstractTeen/AntiForgery
GitHub - AbstractTeen/AntiForgery
Contribute to AbstractTeen/AntiForgery development by creating an account on GitHub.
github.com
1. 간단한 논문 정리
연구 배경 및 문제점
- DeepFake는 개인의 프라이버시와 정치적 안보에 실질적인 위협이 되고 있음
- 기존의 수동적 DeepFake 탐지 방식은 사후 대응에 불과하며, 허위정보 확산을 사전에 막지 못함
- 현재의 능동적 방어 기술들은 적대적 노이즈를 추가하는 방식이나, 이미지 재구성 등으로 쉽게 우회가 가능함
핵심 아이디어
- Lab 색공간에서 지각적으로 자연스러운 교란을 생성하여 DeepFake 생성을 방해
- 기존 RGB 색공간 기반의 희소한 노이즈와 달리, 연속적이고 자연스러운 방식으로 교란을 생성
주요 특징
1. 시각적 자연스러움 유지
2. 입력 변환(재구성 등)에 대한 강건성
3. 다양한 DeepFake 유형에 대한 일반화 가능성
실험 결과
- 세 가지 유형의 DeepFake(속성 편집, 신원 교체, 얼굴 재연출)에 대해 효과적
- 기존 방식들과 비교했을 때 경쟁력 있는 성능 달성
- 특히 이미지 재구성 공격에 대한 강건성 입증
프로젝트 의의
1. 지각적 적대적 공격에 대한 새로운 연구 방향 제시
2. DeepFake 방어를 위한 실용적이고 강건한 해결책 제공
3. 소스 코드 공개를 통한 후속 연구 촉진
특히 DeepFake 방어 분야에서 수동적 탐지에서 능동적 방어로의 패러다임 전환을 시도했다는 점에서 큰 의의가 있다고 볼 수 있다.
2. utils.py 분석
주요 기능
이 파일은 AntiForgery 프로젝트의 유틸리티 함수들을 포함하고 있으며,
주로 이미지 처리와 적대적 공격을 위한 도구들을 제공한다.
핵심 유틸리티 함수
- 모델 가중치 로딩
- 이미지 정규화/역정규화
- 레이블 처리
- 이미지 품질 평가
- LAB 색공간 기반 적대적 공격
핵심 함수들
1. 데이터 전처리 함수
- `load_model_weights()`: 사전 학습된 모델 가중치를 로드하며, 'preprocessing' 키를 제외한 가중치만 선택적으로 로드한다.
- `denorm()`: [-1, 1] 범위의 값을 [0, 1] 범위로 변환
- `label2onehot()`: 레이블 인덱스를 원-핫 인코딩 벡터로 변환
2. 레이블 처리 함수
- `create_labels()`: CelebA나 RaFD 데이터셋에 대한 타겟 도메인 레이블 생성
-> CelebA의 경우 헤어 컬러 속성을 특별히 처리
3. 이미지 변환/비교 함수 (최소 이미지 크기(7x7) 보장을 위한 리사이징 로직 포함)
- `compare()`: 두 이미지 간의 SSIM과 PSNR 계산
5. 적대적 공격 함수
- `lab_attack()`: LAB 색공간에서 적대적 공격을 수행하는 핵심 함수
lab_attack 함수 상세 분석
def lab_attack(X_nat, c_trg, model, epsilon=0.05, iter=100):
주요 매개변수
- X_nat : 원본 이미지
- c_trg : 타겟 조건
- model : 대상 모델
- epsilon : 교란의 최대 크기
- iter : 반복 횟수
동작 과정
- 초기화
- a와 b 채널에 대한 섭동(perturbation) 초기화
- Adam 옵티마이저 설정
- 반복적 공격 과정
- RGB → LAB 변환
- 섭동 적용 및 클리핑
- LAB → RGB 역변환
- StarGAN을 통한 이미지 생성
- 손실 계산 및 역전파
- 안정성 확보
- NaN 값 검사
- 그래디언트 리셋
- 예외 처리
이 함수는 논문에서 제안한 "perceptual-aware perturbations" 생성의 핵심 구현부라고 볼 수 있다.
3. color_space.py 분석
주요 기능
이 파일은 RGB와 Lab 색공간 간의 변환을 위한 핵심 함수들을 구현하고 있다.
색공간 변환은 RGB → XYZ → Lab 또는 그 반대 순서로 이루어진다.
색공간 변환 함수들
1) RGB ↔ XYZ 변환
def rgb2xyz(rgb):
- 감마 보정을 적용하여 비선형 RGB 값을 선형화
- RGB 채널별 가중치를 적용하여 XYZ 좌표계로 변환
- 출력값을 [0,1] 범위로 클리핑
def xyz2rgb(xyz):
- XYZ 좌표계에서 RGB 좌표계로의 역변환 행렬 적용
- 결과값을 [0,1] 범위로 클리핑하여 유효한 RGB 값 보장
2) XYZ ↔ Lab 변환
def xyz2lab(xyz):
- D65 표준 광원 기준 화이트포인트(0.95047, 1.0, 1.08883) 적용
- 비선형 압축을 통해 지각적 균일성 확보
- L*(명도), a*(녹-적), b*(청-황) 채널로 변환
def lab2xyz(lab):
- Lab에서 XYZ로 역변환
- 음수 값 방를 위한 클리핑 포함
- D65 표준 광원으로 화이트포인트 보정 적용
3) RGB ↔ Lab 직접 변환
def rgb2lab(rgb):
- RGB를 Lab으로 변환하는 편의 함수
- L 채널을 [-50,50] 범위로, ab 채널을 [-110,110] 범위로 정규화
def lab2rgb(lab_rs):
- 정규화된 Lab 값을 RGB로 역변환하는 편의 함수
- L 채널을 [0,100], ab 채널을 [-110,110] 범위로 복원
구현 특징
1. PyTorch 텐서 연산 사용으로 GPU 가속 지원
2. 배치 처리 지원 (B x C x H x W 형태의 텐서 처리)
3. 수치적 안정성을 위한 마스킹과 클리핑 처리
4. D65 표준 광원 기준의 정확한 색공간 변환 구현
이 구현은 AntiForgery 프로젝트에서 Lab 색공간에서의 적대적 공격을 수행하기 위한 핵심 기반을 제공한다.
4. data_loader.py 분석
주요 구성
이 파일은 CelebA 데이터셋을 로딩하고 처리하기 위한 데이터 로더를 구현하고 있다.
CelebA 클래스
class CelebA(data.Dataset):
이 클래스는 PyTorch의 Dataset 클래스를 상속받아 CelebA 데이터셋을 처리한다.
주요 메서드들
1. 초기화 메서드
def __init__(self, image_dir, attr_path, selected_attrs, transform, mode):
- image_dir: 이미지 디렉토리 경로
- attr_path: 속성 파일 경로
- selected_attrs: 선택된 속성들의 리스트
- transform: 이미지 변환을 위한 함수들
- mode: 'train' 또는 'test' 모드 지정
2. 전처리 메서드
def preprocess(self):
- 속성 파일을 읽어서 속성 이름과 인덱스 매핑 생성
- 데이터셋을 train/test로 분할 (처음 2000개는 테스트용)
- 랜덤 시드 1234로 고정하여 재현성 보장
3. 데이터 접근 메서드
def __getitem__(self, index):
- 인덱스에 해당하는 이미지와 레이블 반환
- 이미지는 PIL Image로 로드 후 transform 적용
- 레이블은 FloatTensor로 변환
데이터 로더 함수
def get_loader(image_dir, attr_path, selected_attrs, crop_size=178, image_size=256,
batch_size=1, dataset='CelebA', mode='test', num_workers=0):
이미지 변환 파이프라인
1. 학습 모드일 경우 랜덤 수평 뒤집기
2. 중앙 크롭 (crop_size)
3. 이미지 크기 조정 (image_size)
4. 텐서 변환
5. 정규화 (mean=0.5, std=0.5)
데이터 로더 설정
- 배치 크기 지정
- 학습 모드일 경우 셔플 활성화
- 멀티프로세싱을 위한 worker 수 지정
이 구현은 DeepFake 방지를 위한 이미지 데이터셋을 효율적으로 로드하고 전처리하는 기능을 제공한다.
5. model.py 분석
주요 구성요소
이 파일은 GAN(Generative Adversarial Network) 구조를 구현하며, 다음과 같은 주요 클래스들로 구성되어 있다.
1. ResidualBlock 클래스
class ResidualBlock(nn.Module):
- 잔차 연결(residual connection)을 포함한 기본 블록
- Instance Normalization과 ReLU 활성화 함수 사용
- 3x3 컨볼루션 레이어 2개로 구성
2. Generator 클래스
class Generator(nn.Module):
- U-Net 형태의 생성자 네트워크
- 구조:
- 입력 레이어 (7x7 컨볼루션)
- 다운샘플링 레이어 (2회)
- 병목 레이어 (ResidualBlock 반복)
- 업샘플링 레이어 (2회)
- 출력 레이어 (Tanh 활성화)
- 조건부 생성을 위한 도메인 정보 연결 기능
3. Discriminator 클래스
class Discriminator(nn.Module):
- PatchGAN 구조의 판별자 네트워크
- 특징:
- 점진적으로 증가하는 채널 수
- LeakyReLU 활성화 함수
- 소스 판별(out_src)과 클래스 분류(out_cls) 동시 수행
4. AvgBlurGenerator 클래스
class AvgBlurGenerator(nn.Module):
- Generator를 확장한 클래스
- 전처리 레이어를 추가하여 블러 효과 적용
- 기본 Generator와 동일한 구조를 공유
주요 특징
1. 정규화 기법
- Instance Normalization 사용 (배치가 아닌 개별 이미지 정규화)
- affine=True로 설정하여 학습 가능한 파라미터 포함
2. 조건부 생성
- 도메인 정보(c)를 입력 이미지와 결합하여 조건부 생성 구현
- 공간적 복제를 통한 도메인 정보 확장
3. 특징 맵 추출
- Generator의 중간 레이어 특징 맵 추출 기능
- 디버깅 및 분석을 위한 기능으로 추정
4. 블러 처리
def avg_smoothing_filter(channels, kernel_size):
- 평균 스무딩 필터 구현
- 적대적 공격에 대한 방어 메커니즘으로 추정
이 구현은 DeepFake 방지를 위한 적대적 학습에 초점을 맞추고 있으며,
특히 생성자 네트워크에서 중간 특징 맵의 추출과 블러 처리 기능이 중요한 역할을 하는 것으로 보인다.
5. main.py 분석
주요 기능
이 파일은 AntiForgery 프로젝트의 메인 실행 파일로, StarGAN을 이용한 DeepFake 방지 실험을 실행하는 코드
구조 분석
1. 설정 및 초기화
def main():
parser = argparse.ArgumentParser()
- 모델 설정 (G/D 구조, 이미지 크기 등)
- 데이터 설정 (배치 크기, 속성 등)
- 경로 설정 (이미지, 모델, 결과 디렉토리)
주요 설정 파라미터
1. 모델 구성
- c_dim: 도메인 레이블 차원 (기본값: 5)
- image_size: 이미지 해상도 (256x256)
- g_conv_dim/d_conv_dim: 생성자/판별자의 첫 레이어 필터 수
- g_repeat_num/d_repeat_num: 생성자/판별자의 반복 블록 수
2. 데이터 설정
- batch_size: 미니배치 크기 (기본값: 1)
- attack_iters: 적대적 공격 반복 횟수 (100)
- selected_attrs: CelebA 데이터셋의 선택된 속성들
2. 모델 설정
G = Generator(config.g_conv_dim, config.c_dim, config.g_repeat_num)
D = Discriminator(config.image_size, config.d_conv_dim, config.c_dim, config.d_repeat_num)
- Generator와 Discriminator 모델 생성
- 사전 학습된 가중치 로드
3. 실험 루프
for i, (x_real, c_org) in enumerate(celeba_loader):
각 이미지에 대해서,
1. Lab 색공간에서 적대적 공격 수행
2. 원본과 변조된 이미지에 대한 StarGAN 변환 수행
3. 메트릭 계산 (L2 오차, SSIM, PSNR, 왜곡된 이미지 비율)
4. 결과 이미지 저장
4. 결과 저장 및 평가
x_concat = torch.cat(x_fake_list, dim=3)
save_image(denorm(x_concat.data.cpu()), result_path, nrow=1, padding=0)
- 결과 이미지 저장
- 평가 메트릭 출력:
- L2 오차
- SSIM (구조적 유사도)
- PSNR (최대 신호 대 잡음비)
- 왜곡된 이미지 비율
주요 특징
1. 실험 설정
- 배치 크기 1로 설정하여 이미지별 처리
- 첫 50개 이미지에 대해서만 실험 수행
- GPU 가속 사용
2. 평가 방식
- 원본 DeepFake와 방어된 결과 비교
- 다양한 품질 메트릭 사용
- 왜곡 임계값 0.05 사용
3. 결과 시각화
- 원본, 변조된 입력, 각각의 DeepFake 결과를 하나의 이미지로 연결
- 순차적 저장으로 비교 용이
이 구현은 논문에서 제안한 방법의 효과를 검증하기 위한 테스트 프레임워크를 제공한다.