TPS (Thin Plate Spline)가있는 공간 변압기 네트워크 (STN)의 Pytorch 구현.
STN은 [1]의 DeepMind가 제안한 강력한 신경망 아키텍처입니다. STN은 입력 이미지가 일반 분류 네트워크에 공급되기 전에 자동으로 입력 이미지를 자동으로 수정하여 실제 공간 불변을 달성합니다. STN의 가장 놀라운 부분은 엔드 투 엔드 차이이며 추가 감독없이 기존 네트워크 아키텍처 (Alexnet, Resnet 등)에 직접 연결할 수 있다는 것입니다.
원래 STN 논문 [1] 세 가지 특정 변환 형태에 대한 실험 : 아핀 변환, 투영 변환 및 얇은 플레이트 스플라인 변환 (TPS) . 그 중에서도 TPS는 가장 강력한 번역이라고 생각합니다. 이미지가 임의의 방식으로 뒤틀릴 수 있기 때문입니다. 아래와 같이, 나는 아바타를 뒤틀릴 수 있습니다
~ 안으로
TPS-STN은 OCR 응용 프로그램 [2]에 사용되었습니다. 이 논문에서 TPS-STN은 왜곡 된 텍스트 이미지를 자동으로 교정해야합니다.
imageio 사용하여 GIF 시각화를 만듭니다. pip install imageio 로 설치하기 만하면됩니다.
python mnist_train.py --model unbounded_stn --angle 90 --grid_size 4
python mnist_visualize.py --model unbounded_stn --angle 90 --grid_size 4
python mnist_make_gif.py --model unbounded_stn --angle 90 --grid_size 4
그런 다음 png 및 gif resutls는 ./image/unbounded_stn_angle60_grid4/ 및 ./gif/unbounded_stn_angle60_grid4/ 에 저장됩니다.
모델 아키텍처, MNIST 랜덤 회전 각도 및 TPS 그리드 크기의 다른 조합을 시도 할 수 있습니다. 아래 세부 사항.
제어 가능한 세 가지 인수가 있습니다 : --model , --angle , --grid_size .
--model : str, 필수
no_stn 사용하면 STN 모듈이 폐기되고 단일 CNN 분류기 만 남아 있습니다.bounded_stn 사용하면 [2]에서 수행 된대로 현지화 네트워크의 출력은 F.tanh 에 의해 [-1, 1]로 압박됩니다.unbounded_stn 사용하면 Locolizaition 네트워크의 출력이 압박되지 않습니다. --angle : int, default = 60
[-angle, angle] 내의 임의 각도로 회전됩니다. --grid_size : int, default = 4
(grid_size x grid_size) 제어 포인트 얇은 플레이트 스플라인 변환을 정의합니다. angle = 90 의 결과는 일반적으로 나쁩니다.
grid_size <= 3 : bounded_stn 의 결과가 나쁘다.
그러나 grid_size >= 4 이라면 OK :
unbounded_stn 의 결과는 괜찮습니다.
물론 각 조합에는 항상 나쁜 경우가 있습니다. Baidu NetDisk (파일 크기 2G)에서 모든 GIF를 다운로드 할 수 있습니다.
[1] 공간 변압기 네트워크
[2] 자동 적사를 통한 강력한 장면 텍스트 인식
[3] — —— 薄板样条插值 (얇은 판 스플라인)