답변:
여러 가지 방법이 있습니다. 이 중 대부분은 이미 StackOverflow, Quora 및 기타 콘텐츠 웹 사이트를 통해 여러 게시물에서 다루었습니다.
요약하면, 나열된 대부분의 기술은 두 가지 솔루션 클래스로 그룹화 할 수 있습니다.
변환에서 다음과 같은 기술을 찾을 수 있습니다
또한 네트워크를 구성하는 계층 동작 덕분에 입력의 크기에 영향을받지 않는 고유 한 속성을 가진 네트워크를 조사 할 수 있습니다. 이것의 예는
커널 및 단계 크기가 설명되면 각 계층의 회선은 해당 입력에 따라 적절한 차원 출력을 생성 할 수 있기 때문에 입력 크기에 제한이없는 완전 컨벌루션 네트워크 (FCN) .
SPP (Spatial Pyramid Pooling) , FCN은 고밀도 레이어가 완전히 연결되어 있지 않기 때문에 이미지 크기와 무관하지만 입력 변환을 고려하지 않고 고밀도 레이어를 사용 하려면 레이어를 설명 하는 흥미로운 종이 가 있습니다. 딥 러닝 네트워크.
추신 : 나는 몇 가지 기술을 인용하여 놓친 것 같습니다. 이것을 철저한 목록이라고 주장하지 않습니다.
컨볼 루션 레이어와 풀링 레이어 자체는 입력 차원과 무관합니다. 그러나 컨볼 루션 레이어의 출력은 크기가 다른 이미지의 공간 크기가 다르므로 나중에 완전히 연결된 레이어가 있으면 문제가 발생할 수 있습니다 (완전히 연결된 레이어에는 고정 된 크기의 입력이 필요하기 때문). 이에 대한 몇 가지 솔루션이 있습니다.
1. 글로벌 풀링 : 컨볼 루션 레이어의 끝에서 완전히 연결된 레이어를 피하고 대신 풀링 (글로벌 평균 풀링)을 사용하여 피쳐 맵을 (N, H, W, C) 모양에서 글로벌 풀 전에 줄입니다. )를 (N, 1,1, C) (글로벌 풀 이후)
로 형상화합니다 . 여기서 : N = 미니 배치 샘플 수
H = 지형도의 공간 높이
W = 지형도의 공간 너비
C = 지형도 (채널)의 수
As 출력 차원 (N * C)은 이제 피쳐 맵의 공간 크기 (H, W)와 무관합니다. 분류의 경우 클래스에 대한 로짓을 얻기 위해 맨 위에 완전히 연결된 레이어를 계속 사용할 수 있습니다.
2. 가변 크기 풀링 :가변 크기 풀링 영역을 사용하여 다른 입력 크기에 대해 동일한 기능 맵 크기를 얻으십시오.
3. 입력 이미지 자르기 / 크기 조정 / 패드 : 입력 이미지를 모두 같은 모양으로 크기 조정 / 자르기 / 패드를 시도 할 수 있습니다.
나는 오늘이 문제를 해결해야했기 때문에 내가 찾은 것을 공유한다고 생각했습니다. 나는 웹상에서 "이것은 이론적으로 작동 할 수있다"는 대답과 성가심이 많지만 실제적인 "여기서 구체적으로 이것을 구현하는 방법"은 적다는 것을 알았다.
Tensorflow Keras를 사용하여 이것을 구현하려면 다음을 수행해야했습니다. 다른 사람이이 중 일부를 수정, 완화 또는 제거 할 수 있음을 알 수 있습니다.
Model.predict를 호출하면 성능에 대해 불평했지만 솔루션의 비 효율성을 고려할 때 놀라운 것은 아니지만 작동합니다!
예, 입력 이미지의 크기에 의존하지 않는 적절한 백본 네트워크를 선택하면 정확한 값이됩니다. 대부분의 네트워크는이 기준을 충족합니다.
Flatten
계층이있는 구식 CNN (AlexNet & VGG-1X)에서 온 대부분의 사람들 은 현대 CNN이 원칙적으로 어떤 크기의 이미지를 촬영할 수 있는지 이해하지 못합니다.