CNN에서 큰 이미지를 처리하는 방법은 무엇입니까?


15

CNN에서 사용하려면 2400 x 2400 크기의 10K 이미지가 필요하다고 가정 해 봅시다. 이제 문제는 다운 샘플링 권한이없는 큰 이미지 크기를 처리하는 방법입니다.

시스템 요구 사항은 다음과 같습니다.

우분투 16.04 64 비트 RAM 16GB GPU 8GB HDD 500GB

1) 훈련해야 할 큰 이미지를 처리하는 기술이 있습니까?
2) 사용하기에 적당한 배치 크기는 무엇입니까?
3) 내가 할 수있는 하드웨어 리소스에 대한 예방 조치 나 증가 및 감소가 있습니까?

답변:


14

이제 문제는 다운 샘플링 권한이없는 큰 이미지 크기를 처리하는 방법입니다.

다운 샘플링을하면 입력 을 CNN으로 전달 하기 전에 축소하는 것을 의미한다고 가정합니다 . 컨볼 루션 레이어를 사용하면 큰 보폭을 선택하여 네트워크 내에서 이미지를 다운 샘플링하여 다음 레이어의 리소스를 절약 할 수 있습니다. 사실, 그것이해야 할 일입니다. 그렇지 않으면 모델이 GPU에 맞지 않을 것입니다.

1) 훈련해야 할 큰 이미지를 처리하는 기술이 있습니까?

일반적으로 연구는 이미지를 적절한 크기로 조정합니다. 그러나 이것이 귀하에게 적합한 옵션이 아닌 경우 CNN을 제한해야합니다. 초기 레이어의 다운 샘플링 외에도 컨 벌루 셔널 레이어를 위해 FC 레이어 (일반적으로 대부분의 매개 변수 를 사용함 ) 제거하는 것이 좋습니다 . 또한 GPU에 맞지 않기 때문에 각 시대에 데이터를 스트리밍해야합니다.

이 중 어느 것도 입력이 너무 커서 초기 계층에서 계산 부하가 큰 것을 막을 수는 없습니다. 회선은 비용이 많이 드는 작업이며 첫 번째 계층은 각 정방향 및 역방향 패스에서 많은 계층을 수행 합니다 . 요컨대 훈련이 느려질 것이다.

2) 사용하기에 적당한 배치 크기는 무엇입니까?

또 다른 문제가 있습니다. 단일 이미지 2400x2400x3x4(~ 채널당 3 채널 및 4 바이트)는 ~ 70Mb이므로 배치 크기 10도 거의 감당할 수 없습니다.보다 현실적인 것은 5입니다. 대부분의 메모리는 CNN 매개 변수에 의해 사용됩니다. 이 경우 32 비트 대신 16 비트 값을 사용하여 크기를 줄이는 것이 합리적이라고 생각합니다. 이렇게하면 배치를 두 배로 늘릴 수 있습니다.

3) 내가 할 수있는 하드웨어 리소스에 대한 예방 조치 나 증가 및 감소가 있습니까?

병목 현상은 GPU 메모리입니다. 다른 GPU를 감당할 수 있다면 GPU를 가져 와서 네트워크를 분할하십시오. 다른 모든 것은 GPU 메모리와 비교하여 중요하지 않습니다.


1
감사합니다. 나는 이미 당신이이 답변에서 제공 한 몇 가지 제안을 따랐습니다. 좋은 대답입니다.
WaterRocket8236

5

일반적으로 이미지의 경우 기능 세트는 픽셀 밀도 값이며이 경우 상당히 큰 기능 세트가됩니다. 또한 중요한 데이터가 손실 될 수 있으므로 이미지를 다운 샘플링하는 것도 권장하지 않습니다.

[1] 그러나 기능 세트 크기를 줄이는 데 도움이되는 몇 가지 기술이 있습니다. PCA (Principle Component Analysis)와 같은 접근 방식은 중요한 기능 하위 세트를 선택하는 데 도움이됩니다.

자세한 내용은 http://spark.apache.org/docs/latest/ml-features.html#pca 링크를 참조하십시오 .

[2] 신경망을 훈련하는 동안 계산 비용을 줄이기 위해 그 외에는 기존의 그라디언트 디센트 방식을 사용하는 대신 스토캐스틱 그라디언트 디센트를 사용하여 각 반복에서 훈련하는 데 필요한 데이터 세트의 크기를 줄일 수 있습니다. 따라서 한 번의 반복에 사용되는 데이터 세트 크기가 줄어들 기 때문에 네트워크 교육에 필요한 시간이 줄어 듭니다.

사용되는 정확한 배치 크기는 교육 데이터 세트 및 테스트 데이터 세트에 대한 배포판에 따라 다르며,보다 일반적인 용도는 70-30입니다. 위에서 언급 한 확률 적 접근 방식을 사용하여 필요한 시간을 줄일 수도 있습니다.

확률 적 경사 하강에 대한 세부 사항 http://scikit-learn.org/stable/modules/sgd.html

[3] 하드웨어는 업그레이드가 필요한 것으로 보이며, 필요한 경우 사용 한도까지 무료 계정 가입을 얻을 수있는 AWS와 같은 클라우드 솔루션을 살펴보십시오.


답변 감사합니다. 더 많은 정보를 얻으면 답변을 업데이트하십시오.
WaterRocket8236

Stochastic Gradient Descent의 해당 링크에 감사하고 AI에 오신 것을 환영합니다!
DukeZhou

2

이러한 큰 데이터는 메모리에로드 할 수 없습니다. 할 수있는 일을 두 가지로 나눌 수 있습니다.

  1. 모든 이미지를 더 작은 크기로 조정하십시오. 112x112 픽셀로 크기를 조정할 수 있습니다. 귀하의 경우, 정사각형 이미지가 있기 때문에자를 필요가 없습니다. 목표로 이러한 이미지를 모두 RAM에로드 할 수는 없습니다.

  2. 가장 좋은 방법은 데이터를 일괄 적으로 공급하는 생성기 기능을 사용하는 것입니다. Keras 에서 사용되는 fit_generator 사용을 참조하십시오 . 모델 매개 변수가 너무 커서 GPU 메모리에 맞지 않으면 배치 정규화 사용 또는 잔차 모델을 사용하여 매개 변수 수를 줄이십시오.


3
112x112 픽셀 크기를 선택하는 이유는 무엇입니까? 2의 효력은없고 2400의 제수도 아닙니다.
Andi R

@AndiR. 여기 있습니다. 입력 치수에 관해서는 어느 크기를 자유롭게 선택할 수 있습니다. 네트워크에 차원 비 호환성이있는 경우 제로 패딩을 사용하여 쉽게 해결할 수 있기 때문입니다. 따라서 입력 크기에 대한 고정 된 방법이 없습니다. 주의해야 할 것은 너무 많은 다운 샘플링이 입력 품질에 영향을 미치지 않도록하는 것입니다. 112x112 치수를 사용하는이 용지를 살펴보십시오. ( cv-foundation.org/openaccess/content_iccv_2015/papers/… )
rockyne
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.