Compartir a través de


Lector de imágenes de BrainScript

PRECAUCIÓN: todavía se admite este formato de lector, pero está en desuso. Use el nuevo formato de lector: Understanding-and-Extend-Readers.

El lector de imágenes se puede usar para leer imágenes y aplicar algunas transformaciones específicas de la imagen, como recorte aleatorio, escalado, volteo horizontal y otros. Toma como entrada un archivo de texto simple donde cada línea contiene una asignación separada por tabulaciones entre el archivo de imagen (por ejemplo, JPEG, PNG, etc.) y una etiqueta basada en 0. Por ejemplo:

/home/user/data/train/n01440764/n01440764_10026.JPEG<tab>0
/home/user/data/train/n01440764/n01440764_10027.JPEG<tab>0

ImageReader admite "..." sintaxis en el archivo de asignación. Si la ruta de acceso del archivo almacenada en el archivo de asignación comienza por "...", "..." se sustituye por el directorio del propio archivo de asignación.

Por ejemplo, si un archivo C:\work\CNTK\data\train.map contiene

...\images\img1.png 1
...\images\img2.png 2
...\images\img3.png 3

después, el lector leerá los archivos como si se especificara la ruta de acceso absoluta siguiente:

C:\work\CNTK\data\images\img1.png 1
C:\work\CNTK\data\images\img2.png 2
C:\work\CNTK\data\images\img3.png 3

Dado que algunos conjuntos de datos de imagen pueden ser bastante grandes (por ejemplo, millones de imágenes), a veces resulta beneficioso colocar estas imágenes en un contenedor. El lector de imágenes admite actualmente un tipo de contenedor: archivos ZIP. En este caso, se recomienda usar el modo de compresión STORE, ya que proporciona acceso más rápido al contenido del archivo .zip, además, las imágenes normalmente no requieren compresión de todos modos. Por ejemplo (tenga en cuenta el signo @ al final de .zip nombre de archivo):

/home/user/data/train.zip@/n01440764/n01440764_10026.JPEG<tab>0
/home/user/data/train.zip@/n01440764/n01440764_10027.JPEG<tab>0
/home/user/data/train_01.zip@/n01534433/n01534433_7285.JPEG<tab>0
/home/user/data/train/n01534433/n01534433_7285.JPEG<tab>0

Tenga en cuenta que puede combinar contenedores y archivos, pero se recomienda limitar el número de contenedores para mejorar el rendimiento, es decir, colocar todas las imágenes en un solo archivo (o pocos) .zip.

Tenga en cuenta también que en Windows los caracteres Unicode del entorno en los nombres de archivo no se admiten (todos los caracteres deben ser ASCII estándar). Esta limitación procede de la biblioteca OpenCV en la que se basa el lector de imágenes.

En el ejemplo siguiente se muestra el uso de ImageReader:

    reader=[
        readerType=ImageReader
        file=$ConfigDir$/train_map.txt
        randomize=Auto
        features=[
            # Below are the required parameters.
            width=224
            height=224
            channels=3
            # Below are the optional parameters.
            # Possible values: Center, RandomSide, RandomArea, MultiView10. Default: Center
            cropType=RandomSide
            # Horizontal random flip, will be enabled by default if cropType=Random
            #hflip=0
            # Crop scale side ratio. Examples: sideRatio=0.9, sideRatio=0.7:0.9.
            sideRatio=0.875
            # Crop scale ratio jitter type.
            # Possible values: None, UniRatio. Default: None
            jitterType=UniRatio
            # Interpolation to use when scaling image to width x height size.
            # Possible values: nearest, linear, cubic, lanczos. Default: linear.
            interpolations=Linear
            # Aspect ratio jitter radius. Default is 1.0 (crop square).
            aspectRatio=0.75:1.0
            # Brightness, contrast and color jittering. Default is 0.0 (no effect).
            brightnessRadius=0.2
            contrastRadius=0.2
            saturationRadius=0.4
            # Intensity jittering: enabled if file is specified and intensityStdDev > 0. 
            # The file stores 1x3 vector (eigenvalues) and 3x3 matrix (eigenvectors) in OpenCV XML format.
            intensityFile="$ConfigDir$/ImageNet1K_intensity.xml"
            # StdDev for intensity jittering. Default is 0.0. 
            intensityStdDev=0.1
            # Mean subtraction: enabled if file is specified.
            # The file stores mean values for each pixel in OpenCV matrix XML format.
            meanFile=$ConfigDir$/ImageNet1K_mean.xml
        ]
        labels=[
            labelDim=1000
        ]
    ]    

Hay muy pocos parámetros obligatorios, como width, height y channels varios parámetros opcionales que configuran transformaciones de imagen.

Transformación de recorte

cropTypeespecifica qué parte de la imagen se recorta y actualmente puede ser Center, RandomSideRandomArea o Multiview10. RandomSide y RandomArea se suele usar durante el entrenamiento, mientras Center que normalmente se usa durante las pruebas. El recorte aleatorio es una técnica de aumento de datos popular que se usa para mejorar la generalización de la DNN. MultiView10 normalmente se usa durante la fase de prueba/evaluación y habilita la evaluación de imágenes de 10 vistas: (4(esquinas) + 1(centro)) * 2(original + volteo horizontal) = 10.

Transformación de volteo horizontal

hflip parameter especifica si la imagen se voltea aleatoriamente en dirección horizontal. El volteo horizontal es otra técnica popular de aumento de datos y se debe usar si las imágenes muestran simetría vertical, por ejemplo, como muchos objetos reales.

Transformaciones de escalado

sideRatio especifica la proporción de la dimensión final de la imagen, por ejemplo width , o height, con el tamaño del recorte aleatorio tomado de la imagen. Por ejemplo, la proporción 224 / 256 = 0,875 significa que el recorte del tamaño 224 se tomará de la imagen escalada a 256 (detalle de implementación: ImageReader toma el recorte y, a continuación, se escala en lugar de hacerlo de otra manera). Para habilitar la vibración de escala (otra técnica de aumento de datos popular), use valores delimitados por dos puntos, como sideRatio=0.875:0.466 lo que significa que se tomarán 224 recortes de imágenes de forma aleatoria para tener tamaño en el intervalo [256, 480].

areaRatio especifica la proporción del área de imagen final con la imagen original. Por ejemplo, una proporción de 0,5 significa que el área de ventana de recorte es aproximadamente la mitad de la imagen original. A continuación, la ventana recortada se escalará a 224 x 224. sideRatio (especificado junto con cropType=RandomSide) y areaRatio (especificado junto con cropType=RandomArea) son mutuamente excluyentes.

aspectRatio permite que uno aplique la vibración aleatoria de la relación de aspecto. Por ejemplo, un valor de 0,2 significa que la relación de aspecto de la imagen se puede cambiar aleatoriamente (distribución uniforme) para que sea del 80 % al 120 % del original.

Transformaciones de vibración de color

brightnessRadius y contrastRadius permiten aplicar brillo y vibración de contraste. Estas transformaciones aplican la fórmula siguiente a cada píxel de una imagen: Yij = alpha * Xij + beta donde alpha es un ajuste de contraste y beta - brillo. Por ejemplo, si contrastRadius es 0.2 alfa, se elegirá aleatoriamente (distribución uniforme) de 0.8 a 1.2. brightnessRadius selecciona aleatoriamente los valores como una proporción de la media de la imagen, por ejemplo, brightnessRadius igual que 0.2 selecciona aleatoriamente los valores de -0.2 * mean a 0.2 * mean.

saturationRadius permite aplicar vibración aleatoria de saturación. Por ejemplo, un valor de 0.3 significa saturación de la imagen se puede cambiar del 70 % al 130 % del original.

intensityFile y permiten aplicar vibración de intensidad basada en PCA, tal y intensityStdDev como se describe en este documento. intensityFile es una ruta de acceso a un archivo que contiene valores propios y vectores propios en formato OpenCV XML. intensityStdDev especifica una desviación estándar de coeficientes aleatorios de valores propios.

Transformación de resta media

meanFile parameter es una ruta de acceso a un archivo en formato de matriz OpenCV XML que contiene la media por píxel de todo el conjunto de datos. Por ejemplo, para la capa de entrada de tamaño 224x224x3 , el archivo contendrá 150528 entradas que se restarán durante el entrenamiento (o las pruebas) de la imagen de entrada. El mismo efecto o similar se puede lograr mediante algunas otras técnicas, por ejemplo, Mean nodo o incluso restando algún valor fijo, como 128, de la entrada.