Partager via


Lecteur d’images BrainScript

ATTENTION : nous prenons toujours en charge ce format de lecteur, mais il est déconseillé. Utilisez le nouveau format de lecteur : Understanding-and-Extending-Reader.

Le lecteur d’images peut être utilisé pour lire des images et appliquer des transformations spécifiques à l’image telles que le rognage aléatoire, la mise à l’échelle, le découpage horizontal et d’autres. Il prend comme entrée un fichier texte simple où chaque ligne contient un mappage séparé par des onglets entre un fichier image (par exemple JPEG, PNG, etc.) et une étiquette basée sur 0. Par exemple :

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

ImageReader prend en charge « ... » syntaxe dans le fichier de mappage. Si le chemin d’accès du fichier stocké dans le fichier map commence par « ... », puis « ... » est remplacé par le répertoire du fichier de mappage lui-même.

Par exemple, si un fichier C:\work\CNTK\data\train.map contient

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

le lecteur lit ensuite les fichiers comme si le chemin absolu suivant a été spécifié :

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

Comme certains jeux de données d’image peuvent être assez volumineux (par exemple, des millions d’images), il est parfois utile de placer ces images dans un conteneur. Le lecteur d’images prend actuellement en charge un type de conteneur : fichiers ZIP. Dans ce cas, il est recommandé d’utiliser le mode de compression STORE, car il fournit un accès le plus rapide au contenu du fichier .zip, également, les images ne nécessitent généralement pas de compression de toute façon. Par exemple (notez le signe @ à la fin de .zip nom de fichier) :

/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

Notez que vous pouvez combiner et faire correspondre des conteneurs et des fichiers. Toutefois, il est recommandé de limiter le nombre de conteneurs pour de meilleures performances, c’est-à-dire placer toutes les images dans un seul (ou quelques) fichiers .zip.

Notez également que dans Windows’environnement, les caractères Unicode dans les noms de fichiers ne sont pas pris en charge (tous les caractères doivent être ascii standard). Cette limitation provient de la bibliothèque OpenCV sur laquelle repose le lecteur d’images.

L’exemple suivant illustre l’utilisation 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
        ]
    ]    

Il existe très peu de paramètres obligatoires, tels que width, height et channels plusieurs paramètres facultatifs qui configurent les transformations d’image.

Transformation de rognage

cropTypespécifie quelle partie de l’image est rognée et peut être Center, RandomSideRandomArea ou Multiview10. RandomSide et RandomArea est généralement utilisé pendant l’entraînement alors qu’il Center est généralement utilisé pendant les tests. Le rognage aléatoire est une technique d’augmentation de données populaire utilisée pour améliorer la généralisation du DNN. MultiView10 est généralement utilisé pendant la phase de test/évaluation et active l’évaluation d’image de 10 vues : (4(coins) + 1(centre)) * 2(original + flip horizontal) = 10.

Transformation de retournement horizontale

hflip spécifie si l’image sera retournée de manière aléatoire dans une direction horizontale. Le découpage horizontal est une autre technique d’augmentation des données populaire et doit être utilisé si les images présentent une symétrie verticale, par exemple, comme de nombreux objets réels.

Transformations de mise à l’échelle

sideRatio spécifie le rapport de la dimension finale de l’image, par exemple width , heightà la taille du rognage aléatoire extrait de l’image. Par exemple, le ratio 224 / 256 = 0,875 signifie que la taille 224 est prise à partir de l’image rescaled à 256 (détails de l’implémentation : ImageReader prend le rognage, puis rescale au lieu de procéder de l’autre manière). Pour activer la gigue de mise à l’échelle (une autre technique d’augmentation de données populaire), utilisez des valeurs délimitées par deux-points, comme sideRatio=0.875:0.466 224 rognages, à partir d’images mises à l’échelle de manière aléatoire pour avoir une taille dans la plage [256, 480].

areaRatio spécifie le rapport entre la zone d’image finale et l’image d’origine. Par exemple, un ratio de 0,5 signifie que la zone de fenêtre de rognage est environ la moitié de l’image d’origine. La fenêtre rognée sera ensuite mise à l’échelle vers 224 x 224. sideRatio (spécifié avec cropType=RandomSide) et areaRatio (spécifié avec cropType=RandomArea) sont mutuellement exclusifs.

aspectRatio permet d’appliquer une gigue aléatoire aux proportions. Par exemple, une valeur de 0,2 signifie que les proportions de l’image peuvent être modifiées de manière aléatoire (distribution uniforme) de 80 % à 120 % de l’original.

Transformations de gigue de couleur

brightnessRadius et contrastRadius permettre d’appliquer la luminosité et la gigue de contraste. Ces transformations appliquent la formule suivante à chaque pixel d’une image : Yij = alpha * Xij + betaalpha est un réglage du contraste et beta - luminosité. Par exemple, si contrastRadius c’est 0.2 le cas, alpha sera choisi de manière aléatoire (distribution uniforme) à 1.2partir de 0.8 . brightnessRadiussélectionne aléatoirement les valeurs en tant que proportion de la moyenne de l’image, par exemple, brightnessRadius sélectionne 0.2 de manière aléatoire les valeurs à 0.2 * meanpartir de -0.2 * mean .

saturationRadius permet d’appliquer une gigue aléatoire de saturation. Par exemple, une valeur de saturation des 0.3 moyennes de l’image peut être modifiée de 70 % à 130 % de l’image d’origine.

intensityFile et intensityStdDev permettre d’appliquer la gigue d’intensité basée sur l’ACP, comme décrit dans ce document. intensityFile est un chemin d’accès à un fichier qui contient des valeurs propres et des vecteurs propres au format Xml OpenCV. intensityStdDev spécifie un écart type des coefficients aléatoires des valeurs propres.

Transformation de soustraction moyenne

meanFile le paramètre est un chemin d’accès à un fichier au format de matrice Xml OpenCV qui contient la moyenne par pixel de l’ensemble du jeu de données. Par exemple, pour la couche d’entrée de taille 224x224x3 , le fichier contient 150528 entrées qui seront soustraites pendant l’entraînement (ou test) de l’image d’entrée. L’effet identique ou similaire peut être obtenu à l’aide de quelques autres techniques, par exemple, Mean de nœud ou même de soustraction d’une valeur fixe, comme 128, de l’entrée.