tamaño sociales redes para pagina medidas imagenes imagen fotos cambiar machine-learning neural-network computer-vision deep-learning caffe

machine-learning - sociales - tamaño de fotos para pagina web



¿Es posible usar tamaños de imagen arbitrarios en caffe? (1)

Sé que caffe tiene la llamada capa de pirámide espacial, que permite a las redes usar tamaños de imagen arbitrarios. El problema que tengo es que la red parece rechazar el uso de tamaños de imagen arbitrarios dentro de un solo lote. ¿Extraño algo o es este el verdadero problema ?.

Mi train_val.prototxt:

name: "digits" layer { name: "input" type: "Data" top: "data" top: "label" include { phase: TRAIN } transform_param { scale: 0.00390625 } data_param { source: "/Users/rvaldez/Documents/Datasets/Digits/SeperatedProviderV3_1020_batchnormalizedV2AndSPP/1/caffe/train_lmdb" batch_size: 64 backend: LMDB } } layer { name: "input" type: "Data" top: "data" top: "label" include { phase: TEST } transform_param { scale: 0.00390625 } data_param { source: "/Users/rvaldez/Documents/Datasets/Digits/SeperatedProviderV3_1020_batchnormalizedV2AndSPP/1/caffe/test_lmdb" batch_size: 10 backend: LMDB } } layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" param { lr_mult: 1 } param { lr_mult: 2 } convolution_param { num_output: 20 kernel_size: 5 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } } } layer { name: "pool1" type: "Pooling" bottom: "conv1" top: "pool1" pooling_param { pool: MAX kernel_size: 2 stride: 2 } } layer { name: "bn1" type: "BatchNorm" bottom: "pool1" top: "bn1" batch_norm_param { use_global_stats: false } param { lr_mult: 0 } param { lr_mult: 0 } param { lr_mult: 0 } include { phase: TRAIN } } layer { name: "bn1" type: "BatchNorm" bottom: "pool1" top: "bn1" batch_norm_param { use_global_stats: true } param { lr_mult: 0 } param { lr_mult: 0 } param { lr_mult: 0 } include { phase: TEST } } layer { name: "conv2" type: "Convolution" bottom: "bn1" top: "conv2" param { lr_mult: 1 } param { lr_mult: 2 } convolution_param { num_output: 50 kernel_size: 5 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } } } layer { name: "spatial_pyramid_pooling" type: "SPP" bottom: "conv2" top: "pool2" spp_param { pyramid_height: 2 } } layer { name: "bn2" type: "BatchNorm" bottom: "pool2" top: "bn2" batch_norm_param { use_global_stats: false } param { lr_mult: 0 } param { lr_mult: 0 } param { lr_mult: 0 } include { phase: TRAIN } } layer { name: "bn2" type: "BatchNorm" bottom: "pool2" top: "bn2" batch_norm_param { use_global_stats: true } param { lr_mult: 0 } param { lr_mult: 0 } param { lr_mult: 0 } include { phase: TEST } } layer { name: "ip1" type: "InnerProduct" bottom: "bn2" top: "ip1" param { lr_mult: 1 } param { lr_mult: 2 } inner_product_param { num_output: 500 weight_filler { type: "xavier" } bias_filler { type: "constant" } } } layer { name: "relu1" type: "ReLU" bottom: "ip1" top: "ip1" } layer { name: "ip2" type: "InnerProduct" bottom: "ip1" top: "ip2" param { lr_mult: 1 } param { lr_mult: 2 } inner_product_param { num_output: 10 weight_filler { type: "xavier" } bias_filler { type: "constant" } } } layer { name: "accuracy" type: "Accuracy" bottom: "ip2" bottom: "label" top: "accuracy" include { phase: TEST } } layer { name: "loss" type: "SoftmaxWithLoss" bottom: "ip2" bottom: "label" top: "loss" }

Enlace a otra pregunta sobre un problema posterior.


Usted está mezclando varios conceptos aquí.

¿Puede una red aceptar formas de entrada arbitrarias?
Bueno, no todas las redes pueden funcionar con cualquier forma de entrada. En muchos casos, una red está restringida a la forma de entrada para la que se entrenó.
En la mayoría de los casos, cuando se utilizan capas totalmente conectadas ( "InnerProduct" ), estas capas esperan una dimensión de entrada exacta , lo que cambia la forma de entrada "rompe" estas capas y restringe la red a una forma de entrada predefinida específica .
Por otro lado, las "redes completamente convolucionales" son más flexibles con respecto a la forma de entrada y generalmente pueden procesar cualquier forma de entrada.

¿Se puede cambiar la forma de entrada durante el entrenamiento por lotes?
Incluso si su arquitectura de red permite una forma de entrada arbitraria, no puede usar la forma que desee durante el entrenamiento por lotes porque la forma de entrada de todas las muestras en un solo lote debe ser la misma: ¿cómo se puede concatenar una imagen de 27x27 con otra de forma 17x17?

Parece que el error que está obteniendo proviene de la capa "Data" que está luchando con la concatenación de muestras de diferentes formas en un único lote.

Puede resolver este problema configurando batch_size: 1 procesando una muestra a la vez y estableciendo iter_size: 32 en su solver.prototxt para promediar los gradientes de más de 32 muestras obteniendo el efecto SGD de batch_size: 32 .