이미지 크기가 다른 경우 학습 / 예측을 위해 이미지 데이터를 포맷하는 방법은 무엇입니까?


87

이미지를 분류하는 모델을 훈련 시키려고합니다. 내가 가진 문제는 크기가 다르다는 것입니다. 내 이미지 / 또는 모델 아키텍처를 어떻게 포맷해야합니까?


2
지금까지 시도한 것과 작동하지 않는 것으로 보이는 것을 보여주세요.
Keith John Hutchison

16
그리고 bam 거기에 Inception v4의 코드가 있습니다. 나는 기성 댓글에 동의하지 않습니다. 조금 더 입력하는 것이 좋을 것입니다.-우리가 말하고있는 어떤 종류의 네트와 같이-그러나 반대표는 전혀 정당화되지 않습니다. 즉 이다 가 진짜 문제.
sunside

4
문제는 ImageNet이 훈련에 유용하도록 이미지 데이터의 형식을 지정하는 방법입니다.
mskw

답변:


148

당신은 당신이 말하는 아키텍처를 말하지 않았습니다. 이미지를 분류하고 싶다고 하셨기 때문에 AlexNet, GoogLeNet 등과 같이 부분적으로 컨볼 루션이고 부분적으로 완전히 연결된 네트워크라고 가정합니다. 일반적으로 질문에 대한 답변은 작업중인 네트워크 유형에 따라 다릅니다.

예를 들어 네트워크에 컨볼 루션 단위 만 포함 된 경우 (즉, 완전히 연결된 레이어가 포함되지 않은 경우) 입력 이미지의 크기에 불변 할 있습니다. 이러한 네트워크 는 입력 이미지를 처리하고 차례로 다른 이미지를 반환 할 수 있습니다 ( "전체적으로 컨볼 루션"). 물론 어떤 식 으로든 손실을 결정해야하므로 출력이 예상 한 것과 일치하는지 확인해야합니다.

하지만 완전히 연결된 장치를 사용하는 경우 문제가 있습니다. 여기에는 네트워크에서 작업해야하는 학습 된 가중치 수가 고정되어 있으므로 다양한 입력에 다양한 가중치가 필요하며 이는 불가능합니다.

이것이 문제인 경우 수행 할 수있는 작업은 다음과 같습니다.

  • 이미지를 찌그러 뜨리는 것에 신경 쓰지 마십시오. 네트워크는 어쨌든 콘텐츠를 이해하는 법을 배울 수 있습니다. 규모와 관점이 콘텐츠에 어떤 의미가 있습니까?
  • 이미지를 특정 크기로 가운데 자릅니다. 데이터 손실이 우려되는 경우 여러 번 자르고이를 사용하여 입력 데이터를 늘리면 원본 이미지가 N올바른 크기의 다른 이미지 로 분할됩니다 .
  • 단색으로 이미지를 정사각형 크기로 채운 다음 크기를 조정합니다.
  • 그것의 조합을하십시오.

패딩 옵션은 네트워크가 이러한 패딩 테두리를 포함하는 이미지로 편향 될 수 있기 때문에 (읽을 가능성이 높을 것입니다) 네트워크의 예측에 추가 오류 소스를 도입 할 수 있습니다. 아이디어가 필요한 경우 TensorFlow 문서 의 이미지 섹션을 살펴보면 resize_image_with_crop_or_pad더 큰 작업을 제거하는 것과 같은 부분이 있습니다.

스 쿼싱에 대해 신경 쓰지 마세요. 여기 유명한 Inception 네트워크의 전처리 파이프 라인이 있습니다.

# This resizing operation may distort the images because the aspect
# ratio is not respected. We select a resize method in a round robin
# fashion based on the thread number.
# Note that ResizeMethod contains 4 enumerated resizing methods.

# We select only 1 case for fast_mode bilinear.
num_resize_cases = 1 if fast_mode else 4
distorted_image = apply_with_random_selector(
    distorted_image,
    lambda x, method: tf.image.resize_images(x, [height, width], method=method),
    num_cases=num_resize_cases)

그들은 그것을 완전히 알고 있고 어쨌든 그것을합니다.

얼마나 멀리 가고 싶거나 필요한지에 따라 실제로 시각적 인식을위한 Deep Convolution Networks의 Spatial Pyramid Pooling 이라는 논문이 있습니다. 아주 특별한 방식으로 처리하여 임의의 크기의 손잡이 입력이.


11
이 주제는 객체 감지 및 인스턴스 분할을 처리 할 때 훨씬 더 복잡해 보입니다. 왜냐하면 하이퍼 파라미터이기도 한 앵커 상자 크기는 이미지 크기의 변동이 큰 데이터 세트가있는 경우 조정해야하기 때문입니다.
CMCDragonkai

종횡비는 원과 타원을 구분하는 네트워크에서 매우 중요한 역할을합니다.
HelloGoodbye 2018

1
또 다른 일반적인 관찰은 배치가 반드시 동일한 차원을 가질 필요는 없다는 것입니다. 첫 번째 배치는 4 : 3 이미지, 두 번째 배치는 16 : 9 등을 처리 할 수 ​​있습니다.
sunside

1
@Tobitor, 항상 네트워크의 입력을 가능한 한 실제 (테스트 또는 추론 시간) 데이터에 가깝게 만드십시오. 모든 이미지가 높이보다 훨씬 넓어지면 이와 같이 이미지를 처리하도록 네트워크를 모델링해야합니다. 즉, "사용"데이터가 어떻게 생겼는지 말할 수 없다면 훈련 중에 약간의 희생을해야합니다. 이 경우 1000x200에서 256x256으로 이미지 크기를 조정하는 것은 일반적으로 괜찮습니다 (번호판을 60도 각도로보고 있다고 상상해보세요. 이제 거의 정사각형입니다).
일광욕

2
@Tobitor 이미지가 정사각형이어야한다는 요구 사항은 전혀 없습니다. 추론하는 동안 실제 이미지 크기를 모르면 가장 나쁜 절충안 일뿐입니다. : ^) 크기는 작을수록 좋지만 이미지는 필요한 세부 정보를 캡처 할 수있을만큼 충분히 커야합니다. 일반적으로 말하면 인간 전문가로서 그 안에 무엇이 있는지 결정할 수 없다는 점을 명심하십시오. 이미지, 네트워크도 할 수 없습니다.
일광욕

11

공간 피라미드 풀링 레이어를 만들어보십시오. 그런 다음 FC 레이어가 항상 일정한 차원의 벡터를 입력으로 얻도록 마지막 회선 레이어 뒤에 놓습니다. 훈련하는 동안 한 시대에 특정 이미지 크기를 사용하여 전체 데이터 세트에서 이미지를 훈련합니다. 그런 다음 다음 시대를 위해 다른 이미지 크기로 전환하고 훈련을 계속합니다.


정규 풀링과 비교하여 "공간 피라미드 풀링"이 무엇인지 조금 자세히 설명해 주시겠습니까?
Matthieu 19

blog.acolyer.org/2017/03/21/convolution-neural-nets-part-2 에서 시각적 인식을위한 심층 컨볼 루션 네트워크의 공간 피라미드 풀링을 읽어 보세요. @Matthieu
아시프 모하메드에게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.