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
cropType
spécifie quelle partie de l’image est rognée et peut être Center
, RandomSide
RandomArea
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 + beta
où alpha
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.2
partir de 0.8
. brightnessRadius
sé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 * mean
partir 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.