BrainScript-afbeeldingslezer
LET OP: deze lezerindeling wordt nog steeds ondersteund, maar wordt afgeschaft. Gebruik de nieuwe leesindeling: Understanding-and-Extending-Readers.
Afbeeldingslezer kan worden gebruikt om afbeeldingen te lezen en bepaalde afbeeldingsspecifieke transformaties toe te passen, zoals willekeurig bijsnijden, schalen, horizontale spiegeling en andere. Het neemt als invoer een eenvoudig tekstbestand waarin elke regel een door tabs gescheiden toewijzing bevat tussen afbeeldingsbestand (bijvoorbeeld JPEG, PNG, enzovoort) en label op basis van 0. Bijvoorbeeld:
/home/user/data/train/n01440764/n01440764_10026.JPEG<tab>0
/home/user/data/train/n01440764/n01440764_10027.JPEG<tab>0
ImageReader ondersteunt '...' syntaxis in het toewijzingsbestand. Als het bestandspad dat is opgeslagen in het kaartbestand begint met '...', dan '...'. wordt vervangen door de map van het toewijzingsbestand zelf.
Als bijvoorbeeld een bestand C:\work\CNTK\data\train.map bevat
...\images\img1.png 1
...\images\img2.png 2
...\images\img3.png 3
vervolgens leest de lezer bestanden alsof het volgende absolute pad is opgegeven:
C:\work\CNTK\data\images\img1.png 1
C:\work\CNTK\data\images\img2.png 2
C:\work\CNTK\data\images\img3.png 3
Omdat sommige afbeeldingsgegevenssets vrij groot kunnen zijn (bijvoorbeeld miljoenen afbeeldingen), is het soms nuttig om deze installatiekopieën in een container te plaatsen. Afbeeldingslezer ondersteunt momenteel één containertype: ZIP-bestanden. In dit geval is het raadzaam om de STORE-compressiemodus te gebruiken omdat het de snelste toegang biedt tot de inhoud van het .zip-bestand, ook afbeeldingen vereisen meestal toch geen compressie. Bijvoorbeeld (noteer het @-teken aan het einde van .zip bestandsnaam):
/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
Houd er rekening mee dat u containers en bestanden kunt combineren en vergelijken. Het wordt echter aanbevolen om het aantal containers te beperken voor de betere prestaties, d.w.w.v. alle installatiekopieën in één (of weinig) .zip bestanden te plaatsen.
Houd er ook rekening mee dat in Windows omgeving Unicode-tekens in bestandsnamen niet worden ondersteund (alle tekens moeten standaard ASCII zijn). Deze beperking is afkomstig van de OpenCV-bibliotheek waar de afbeeldingslezer van afhankelijk is.
In het volgende voorbeeld ziet u het gebruik van 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
]
]
Er zijn zeer weinig verplichte parameters, zoals width
height
en channels
verschillende optionele parameters waarmee afbeeldingstransformaties worden geconfigureerd.
Transformatie bijsnijden
cropType
hiermee geeft u op welk deel van de afbeelding wordt bijgesneden en momenteel kan worden Center
, RandomSide
RandomArea
of Multiview10
. RandomSide
en RandomArea
wordt meestal gebruikt tijdens de training terwijl Center
deze meestal tijdens het testen wordt gebruikt. Willekeurig bijsnijden is een populaire techniek voor gegevensvergroting die wordt gebruikt om de generalisatie van de DNN te verbeteren. MultiView10
wordt meestal gebruikt tijdens de test-/evaluatiefase en maakt 10 beeldevaluatie mogelijk: (4(hoeken) + 1(midden)) * 2(origineel + horizontaal spiegelen) = 10.
Transformatie horizontaal spiegelen
hflip
parameter geeft aan of de afbeelding willekeurig wordt gespiegeld in horizontale richting. Horizontale flipping is een andere populaire techniek voor het uitbreiden van gegevens en moet worden gebruikt als afbeeldingen bijvoorbeeld verticale symmetrie vertonen, zoals veel echte objecten.
Schaaltransformaties
sideRatio
hiermee geeft u de verhouding van de uiteindelijke afbeeldingsdimensie, bijvoorbeeld width
of height
, op de grootte van de willekeurige bijsnijding uit de afbeelding. De verhouding 224 / 256 = 0,875 betekent bijvoorbeeld dat het bijsnijden van grootte 224 wordt genomen van de afbeelding die opnieuw wordt geschaald naar 256 (implementatiedetails: ImageReader
neemt het gewas en schaalt vervolgens opnieuw in plaats van andersom te doen).
Als u schaal-jitter (een andere populaire techniek voor gegevensvergroting) wilt inschakelen, gebruikt u waarden met scheidingstekens met dubbele punten, zoals sideRatio=0.875:0.466
dit betekent dat 224 bijsnijden wordt genomen uit afbeeldingen die willekeurig worden geschaald om de grootte in het bereik van [256, 480] te hebben.
areaRatio
hiermee geeft u de verhouding van het uiteindelijke afbeeldingsgebied tot de oorspronkelijke afbeelding. Een verhouding van 0,5 betekent bijvoorbeeld dat het gebied van het bijsnijdvenster ongeveer de helft van de oorspronkelijke afbeelding is. Het bijgesneden venster wordt vervolgens geschaald naar 224x224. sideRatio
(opgegeven samen met cropType=RandomSide
) en areaRatio
(opgegeven samen met cropType=RandomArea
) sluiten elkaar wederzijds uit.
aspectRatio
maakt het mogelijk om willekeurige jitter voor hoogte-breedteverhouding toe te passen. Een waarde van 0,2 betekent bijvoorbeeld dat de hoogte-breedteverhouding van de afbeelding willekeurig kan worden gewijzigd (uniforme verdeling) tot 80% tot 120% van het origineel.
Kleur jitter-transformaties
brightnessRadius
en contrastRadius
sta toe om helderheid en contrast jitter toe te passen. Met deze transformaties wordt de volgende formule toegepast op elke pixel van een afbeelding: Yij = alpha * Xij + beta
waar alpha
is een contrastaanpassing en beta
- helderheid. Als contrastRadius
dit bijvoorbeeld het resultaat is 0.2
, wordt alfa willekeurig gekozen (uniforme verdeling) van 0.8
naar 1.2
. brightnessRadius
willekeurig waarden selecteert als een deel van het afbeeldingsgemiddelde, brightnessRadius
bijvoorbeeld dat waarden 0.2
willekeurig worden geselecteerd van waaruit -0.2 * mean
0.2 * mean
.
saturationRadius
staat toe om willekeurige jitter voor verzadiging toe te passen. Een waarde van 0.3
de middelenverzadiging van de afbeelding kan bijvoorbeeld worden gewijzigd van 70% in 130% van het origineel.
intensityFile
en intensityStdDev
sta toe om Jitter op basis van PCA toe te passen, zoals beschreven in dit document.
intensityFile
is een pad naar een bestand met eigenwaarden en eigenvectors in OpenCV XML-indeling. intensityStdDev
geeft een standaarddeviatie van willekeurige coëfficiënten van eigenwaarden op.
Gemiddelde aftrekkingstransformatie
meanFile
parameter is een pad naar een bestand in OpenCV XML-matrixindeling die het gemiddelde per pixel van de hele gegevensset bevat. Voor de invoerlaag van 224x224x3
grootte bevat het bestand bijvoorbeeld 150528 vermeldingen die worden afgetrokken tijdens de training (of het testen) van de invoerafbeelding. Hetzelfde of vergelijkbare effect kan worden bereikt met behulp van enkele andere technieken, Mean
bijvoorbeeld knooppunt, of zelfs door een bepaalde vaste waarde, zoals 128, af te trekken van de invoer.