Ahora la pregunta es cómo manejar tamaños de imagen tan grandes donde no hay privilegios de disminución de resolución
Supongo que por disminución de resolución te refieres a reducir la entrada antes de pasarla a CNN. La capa convolucional permite disminuir la muestra de la imagen dentro de una red, al elegir un gran paso, lo que ahorrará recursos para las siguientes capas. De hecho, eso es lo que tiene que hacer, de lo contrario su modelo no encajará en la GPU.
1) ¿Hay alguna técnica para manejar imágenes tan grandes que se deben entrenar?
Comúnmente, las investigaciones escalan las imágenes a un tamaño razonable. Pero si esa no es una opción para usted, deberá restringir su CNN. Además de reducir el muestreo en las primeras capas, le recomendaría que elimine la capa FC (que normalmente toma la mayoría de los parámetros) a favor de la capa convolucional . También tendrá que transmitir sus datos en cada época, ya que no caben en su GPU.
Tenga en cuenta que nada de esto evitará una gran carga computacional en las primeras capas, exactamente porque la entrada es muy grande: la convolución es una operación costosa y las primeras capas realizarán muchas de ellas en cada paso hacia adelante y hacia atrás. En resumen, el entrenamiento será lento.
2) ¿Qué tamaño de lote es razonable de usar?
Aquí hay otro problema. Una sola imagen toma 2400x2400x3x4
(3 canales y 4 bytes por píxel) que es ~ 70Mb, por lo que difícilmente puede permitirse ni siquiera un tamaño de lote 10. Más realista sería 5. Tenga en cuenta que la mayoría de la memoria se tomará por parámetros CNN. Creo que en este caso tiene sentido reducir el tamaño mediante el uso de valores de 16 bits en lugar de 32 bits, de esta manera podrá duplicar los lotes.
3) ¿Puedo tomar alguna precaución o aumentar o disminuir los recursos de hardware?
Su cuello de botella es la memoria de la GPU. Si puede pagar otra GPU, consígala y divida la red entre ellas. Todo lo demás es insignificante en comparación con la memoria de la GPU.
Por lo general, para las imágenes, el conjunto de características son los valores de densidad de píxeles y, en este caso, dará lugar a un conjunto de características bastante grande; tampoco se recomienda el muestreo descendente de las imágenes, ya que puede perder (en realidad perderá) datos importantes.
[1] Pero existen algunas técnicas que pueden ayudarlo a reducir el tamaño del conjunto de características, enfoques como PCA (Análisis de componentes principales) lo ayuda a seleccionar un subconjunto de características importantes.
Para obtener información detallada, consulte el enlace http://spark.apache.org/docs/latest/ml-features.html#pca .
[2] Aparte de eso para reducir el gasto computacional durante el entrenamiento de su red neuronal, puede usar el Descenso de gradiente estocástico, en lugar del uso convencional del enfoque de Descenso de gradiente, que reduciría el tamaño del conjunto de datos requerido para el entrenamiento en cada iteración. Por lo tanto, el tamaño de su conjunto de datos que se utilizará en una iteración se reduciría, lo que reduciría el tiempo requerido para capacitar a la red.
El tamaño de lote exacto que se utilizará depende de su distribución para el conjunto de datos de entrenamiento y el conjunto de datos de prueba, un uso más general es 70-30. Donde también puede utilizar el enfoque estocástico mencionado anteriormente para reducir el tiempo requerido.
Detalle de Descenso de gradiente estocástico http://scikit-learn.org/stable/modules/sgd.html
[3] El hardware parece apto para la actualización sería necesario, pero si es necesario, busque soluciones en la nube como AWS, donde puede obtener una suscripción gratuita a la cuenta hasta un límite de uso.
fuente
Tales datos grandes no se pueden cargar en su memoria. Vamos a dividir lo que puedes hacer en dos:
fuente