인공지능/논문 리뷰 or 진행

StegaStamp: Invisible Hyperlinks in Physical Photographs

이게될까 2025. 10. 24. 16:50
728x90
728x90

https://openaccess.thecvf.com/content_CVPR_2020/papers/Tancik_StegaStamp_Invisible_Hyperlinks_in_Physical_Photographs_CVPR_2020_paper.pdf

https://arxiv.org/abs/1904.05343

 

StegaStamp: Invisible Hyperlinks in Physical Photographs

Printed and digitally displayed photos have the ability to hide imperceptible digital data that can be accessed through internet-connected imaging systems. Another way to think about this is physical photographs that have unique QR codes invisibly embedded

arxiv.org

 

https://github.com/tancik/StegaStamp?tab=readme-ov-file

 

GitHub - tancik/StegaStamp: Invisible Hyperlinks in Physical Photographs

Invisible Hyperlinks in Physical Photographs. Contribute to tancik/StegaStamp development by creating an account on GitHub.

github.com

코드 공개 되어 있습니다 ㅎㅎ

 

https://www.matthewtancik.com/stegastamp

 

StegaStamp

Storing Invisible Hyperlinks in Physical Photographs. Robust encoding and decoding of arbitrary hyperlink bitstrings into photos in a manner that approaches perceptual invisibility

www.matthewtancik.com

여기 프로젝트 페이지에 자세히 설명되어 있습니다.

이미지에 눈으로는 감지 할 수 없고, 시스템을 통해 접근할 수 있는 디지털 데이터를 숨길 수 있다.  

임의의 하이퍼링크 비트열을 사진에 인코딩 및 디코딩하여 데이터를 숨긴다. 

Input 이미지와 메세지를 숨겨서 StegaStamp를 만들고, 이를 통해 메세지를 복원한다.

 

실제 inference는 아래와 같이 이루어진다.

훈련

훈련은 아래와 같이 이루어진다

corrupted Image에서 각종 노이즈를 통해 디코더가 노이즈에 강인하도록 학습이 진행된다. 

 

좌측부터 원본, 메세지가 숨겨진 이미지, 우측이 그 차이이다.

자세히 보면 경계에 조금씩 이상하게 픽셀이 깨진 것을 볼 수 있는데 이 부분에서 키를 찾는 것 같다. 

 

각 100비트에서 얼마나 디코딩되었는지 %로 알려준다. 

100비트 중 일부는 메세지고, 일부는 오류 정정 비트로 성공적인 디코딩을 도와준다. 

 

추가적으로 영상 확인이 가능하다. 

https://www.youtube.com/watch?v=jpbRhOH3D9Y

 

 

문제 상황 QR처럼 눈에 띄는 마커 없이, 사진(인쇄/디스플레이)거의 비가시적 하이퍼링크 비트열을 심어 실제 재촬영(physical transmission) 후에도 안정적으로 복구하는 방법이 필요함.
사용 흐름: 링크→비트열→인코딩→표시/인쇄→촬영→탐지/보정→디코딩→하이퍼링크 접속.
방법론 엔드투엔드로 학습되는 Encoder–Perturbation–Decoder + Detector.
훈련 시 엔코더와 디코더 사이에 미분가능 왜곡 파이프라인(원근 워프, 모션/디포커스 블러, 색 변환, 가우시안 노이즈, JPEG 근사)을 삽입해 물리 채널을 근사(EoT 유사).
아키텍처 Encoder: U-Net 스타일. 입력 400×400×4(RGB+메시지), 출력은 RGB residual을 원본에 더해 StegaStamp 생성.
메시지(기본 100비트)는 FC→50×50×3→업샘플로 주입.
Decoder: STN로 소각 원근 변화 보정→CNN+FC→시그모이드, 비트 단위 CE로 학습.
Detector: BiSeNet 분할→볼록껍질 사각형 적합→호모그래피로 400×400 정사영 후 디코딩.
훈련용 왜곡 원근 워프: 모서리 ±10%(±40px) 무작위 변형→호모그래피.
블러: 선형 3–7px, 가우시안 σ∈[1,3].
색 변환: 채널 오프셋[−0.1,0.1], 디새츄레이션, 밝기/대비 m∈[0.5,1.5], b∈[−0.3,0.3].
노이즈: σ∈[0,0.2] 가우시안.
JPEG: 품질 50–100, 양자화 근사 q(x).
손실과 학습 스케줄 총손실: L = λR·L2(residual) + λP·LPIPS + λC·Critic(Wasserstein) + λM·CE(메시지).
학습 팁:
(1) 초반 λR,P,C=0으로 디코더 정확도 먼저 확보 후 선형 증가,
(2) 왜곡 강도도 0에서 시작해 점진 증가(특히 원근은 가장 느리게),
(3) 가장자리 패턴 유도 억제를 위해 엣지 L2 가중(코사인 드롭오프).
학습 데이터 Encoder/Decoder: MIRFLICKR 400×400 + 랜덤 100비트 메시지.
Detector: DIV2K 고해상도 배경에 합성한 StegaStamp로 미세조정.
실험 통제 실험: ImageNet에서 100장 선택, 각 이미지에 메시지 6개(총 105장), 6개 출력매체(3 프린터+3 스크린) × 3 카메라 = 18 조합.
암실·고정 조명, 인쇄물 리그 고정/삼각대 촬영, 크롭/정사영 후 디코딩.
In-the-wild 비디오도 별도 시연.
결과 평균 비트 정확도 98.7%(1,890장 전체), 18 조합 중 2/3에서 중앙값 100%, 5백분위 ≥95%.
BCH 오류정정으로 56비트 링크 안정 복구(정확도 95%+일 때 원 메시지 완전 복원).
품질/용량·타법 비교에서 bits/MP와 유사도(PSNR/SSIM/LPIPS) 우수.
어블레이션 공간+픽셀 왜곡을 둘 다 훈련에 포함해야 실제 강건성 확보.
(i) 무왜곡 학습 모델은 warp/blur/JPEG에서 붕괴,
(ii) 픽셀만 학습하면 리샘플링(워프/블러)에 취약,
(iii) 공간만 학습해도 JPEG에 어느 정도 내성↑(저역통과 유사), 둘 다가 최상.
기여 (1) 물리 채널 강건 딥 스테가노그래피 E2E 프레임워크,
(2) 미분가능 물리 왜곡 파이프라인 정립,
(3) 실세계 18조합×1,890장 대규모 평가와 어블레이션으로 일반화 입증,
(4) 56비트 하이퍼링크 실사용 가능성 제시.
한계/주의점 탐지기 미검출 프레임이 일부 존재(링크 복구는 1회만 되면 충분하나, 탐지 안정성은 향후 개선 대상).
학습 중 이미지 가장자리에 유도 패턴이 생기려는 경향→엣지 L2 가중으로 완화.
메시지 길이 증가 시 시각 잔차↑(100비트가 실용적 절충).
실전 재현 체크리스트 입력: 400×400 이미지, 100비트 메시지.
모델: U-Net Encoder(residual), STN-Decoder(CE), BiSeNet Detector.
왜곡: 원근/블러/색/노이즈/JPEG(품질 50–100).
손실: L2+LPIPS+Critic(W)+CE,
스케줄: λR,P,C=0→상승·왜곡 강도 0→상승.
오류정정: BCH(56유효비트).

 

 

더보기

좋은 자료 업로드 고마워요! 아래는 Tancik·Mildenhall·Ng의 StegaStamp(“StegaStamp: Invisible Hyperlinks in Physical Photographs”)를 논문 원문에 근거해 한국어로 체계적으로 정리한 내용이에요. (핵심 수치·방법·절차는 본문 인용으로 달았습니다.)

한 줄 핵심

사진(인쇄물/디스플레이)에 사람 눈에는 거의 보이지 않는 하이퍼링크 비트열을 심고, 실제 카메라 촬영/재촬영로 인한 왜곡까지 견디도록 엔코더·디코더를 엔드투엔드 학습딥 스테가노그래피 기법. 실세계 18개 프린터/스크린×카메라 조합 1,890장 테스트에서 평균 비트 정확도 98.7%, BCH로 오류정정 후 56비트 링크 복구에 성공합니다.


문제 설정

  • 목표: 육안에는 거의 보이지 않게 사진에 하이퍼링크 비트열을 삽입하고, 인쇄·재촬영 등 **물리적 전송(physical transmission)**을 거친 후에도 강건하게 복원. QR처럼 눈에 띄는 마커 없이 비가시적 링크를 제공.
  • 사용 흐름(6단계): (1) 링크→고유 비트열 부여 → (2) 엔코더가 이미지에 삽입 → (3) 인쇄/디스플레이 → (4) 사용자 촬영 → (5) 탐지기가 영역 검출·정정 → (6) 디코더가 비트 복구·하이퍼링크 접속.

방법론(파이프라인, 구성 요소)

1) 엔코더(Encoder)

  • U-Net 스타일. 입력: 400×400 RGB + 메시지 채널(총 4채널). 출력: RGB residual을 더해 스테가스탬프 이미지 생성.
  • 메시지(기본 100비트)는 FC로 50×50×3으로 투영 후 400×400×3으로 업샘플하여 합류(수렴 도움).

2) 디코더(Decoder)

  • Spatial Transformer로 소각의 원근 변화에 강건. CNN+FC를 거쳐 시그모이드로 비트 확률을 출력, 교차엔트로피로 학습.

3) 탐지기(Detector)

  • 전체 장면에서 스테가스탬프 후보를 BiSeNet으로 분할, 볼록껍질 사각형 적합 후 호모그래피로 400×400 정사영하여 디코더에 전달. 학습 데이터는 DIV2K 배경에 랜덤 변환된 스테가스탬프 합성.

4) “물리적 전송” 강건화를 위한 미분가능 왜곡 시뮬레이션(훈련 중 엔코더↔디코더 사이에 삽입)

  • 공간 왜곡(Spatial): 원근 워프(모서리 ±10% 랜덤), 모션/디포커스 블러(선형 3~7px, 가우시안 σ=1~3).
  • 픽셀 단위(Pixelwise): 색 변환(채널 오프셋, 채도 감쇠, 명암/대비), 가우시안 노이즈(σ∈[0,0.2]), JPEG 근사 양자화(품질 50~100).

5) 손실 함수와 학습 팁

  • 메시지 손실: LM(비트 단위 CE).
  • 이미지 손실: L2 residual 규제, LPIPS(지각 품질), Critic-Wasserstein(인코딩 존재성 판별 기반 지각 손실).
  • 총손실: L = λR LR + λP LP + λC LC + λM LM.
  • 스케줄링 팁: (i) 초기에 λR,P,C=0으로 디코더 정확도 먼저 확보 후 선형 증가, (ii) 왜곡 강도도 0에서 시작(특히 원근은 천천히), (iii) 테두리에 패턴 유도 시 엣지 L2 가중 증대(코사인 드롭오프).

실험과 결과

1) 실세계 “인쇄/디스플레이↔카메라” 18조합

  • 6종 출력매체(소비자/엔터프라이즈/상업용 프린터, 모니터, 노트북, OLED 폰) × 3종 카메라(웹캠, 폰, DSLR).
  • 105장 ImageNet 이미지 × 18조합 = 1,890장 촬영·디코딩.
  • 평균 비트 정확도 98.7%, 다수 조합에서 중앙값 100%·5백분위 ≥95%.

2) In-the-wild 시연 & 오류정정

  • BCH 오류정정으로 56비트 메시지를 안정 복구(정확도 95% 이상이면 원메시지 56비트 완전 복원).

3) 소거/가림(occlusion) 및 어블레이션

  • 공간/픽셀 왜곡을 모두 학습해야 실세계 복구율이 크게 향상.
  • Spatial 미학습 모델은 워프/블러에 취약, Spatial만 학습하면 색 변환에 취약둘 다 필요.

4) 메시지 길이–품질 트레이드오프

  • 100비트가 지각 품질과 복구율의 실용적 절충점, 오류정정 후 56비트 링크가 안정. 150/200비트는 잔차가 눈에 띄게 증가.

표로 보는 핵심 요약

구분 내용
문제 사진에 **비가시적 링크(비트열)**을 심고, 인쇄/재촬영 왜곡 후에도 강건 복구. QR의 가시성 문제 대체.
입력/출력 입력: 이미지, 링크(비트열). 출력: Residual 더해 만든 StegaStamp 이미지.
모델 U-Net 엔코더, STN+CNN 디코더, BiSeNet 탐지기(DIV2K 합성 데이터로 학습, 사각형 추정→호모그래피 보정).
훈련 왜곡 원근 워프(±10%), 모션/디포커스, 색 변환, 가우시안 노이즈(σ∈[0,0.2]), JPEG 근사(품질 50~100)미분가능 파이프라인.
손실 메시지 CE, L2(residual), LPIPS, Wasserstein Critic; 총합 L = λR LR + λP LP + λC LC + λM LM.
학습 팁 (i) 초반 λR,P,C=0→디코더 정확도 확보 후 증가, (ii) 왜곡 강도 0→점진 증가(원근은 특히 천천히), (iii) 엣지 L2 강화(코사인).
데이터 엔코더/디코더 학습: MIRFLICKR 400×400 + 랜덤 메시지. 탐지기 학습: DIV2K 합성.
평가 6매체×3카메라=18 조합, 105장×18=1,890장 촬영/복구. 평균 98.7% 비트 정확도.
결과 BCH로 56비트 링크 복구, in-the-wild에서 안정 동작. 공간+픽셀 왜곡 동시 학습이 필수.
기여 (1) 물리 전송 강건 딥 스테가노그래피 엔드투엔드 프레임워크, (2) 미분가능 왜곡 파이프라인, (3) 실세계 대규모 평가·어블레이션.
한계 저주파 넓은 영역에서 잔차가 보일 수 있음, 탐지기가 병목(커스텀 탐지/엔드투엔드 통합 필요), 현재는 단일 정사각 스탬프 가정.

단계별(실전) 동작 정리

  1. 링크→비트열 매핑(URL-shortening 유사) → 2) 엔코더가 residual 생성해 원본에 더함 → 3) 인쇄/표시 → 4) 카메라 촬영 → 5) 탐지기가 후보 영역 분할·사각형 적합·정사영 → 6) 디코더가 비트 복구 → BCH 오류정정 후 링크 실행.

왜 잘 작동하나? (핵심 아이디어)

  • 물리적 왜곡을 미분가능하게 근사Expectation over Transformations 방식으로 엔코더·디코더를 공동 학습했기 때문. **공간(워프/블러)**와 **픽셀(JPEG/색/노이즈)**을 둘 다 포함해야 실세계 강건성이 확보됨(어블레이션 검증).

연구자 관점 코멘트(적용 팁)

  • 메시지 길이는 100비트(+BCH 56비트 유효)가 합리적 절충. 더 늘리면 시각 잔차 증가. 태스크가 “보이지 않음”을 요구하므로 LPIPS/critic 비중을 적절히.
  • 탐지기 병목이 명시되므로, 인코더-디코더-탐지기 공동최적화포스터/대형 이미지에서 멀티코드 임베딩은 후속 유망 과제.
  • 구현 세부 구조(테이블 5·6)는 U-Net 업샘플 스킵 연결과 STN 전단계 워프 예측 블록으로 구성—직접 재현 시 유용.

필요하면, 원문 수식(손실/채널 용량), 네트워크 블록 다이어그램, 실험 설정을 LaTeX 표/그림 캡션 형태로 재구성해 드릴게요.

 

 

728x90