BrainScript-bildläsare
VARNING! Vi stöder fortfarande det här läsarformatet, men det håller på att bli inaktuellt. Använd det nya läsarformatet: Understanding-and-Extending-Readers.
Bildläsare kan användas för att läsa bilder och tillämpa vissa bildspecifika transformeringar som slumpmässig beskärning, skalning, vågrät flippning och andra. Som indata används en enkel textfil där varje rad innehåller en tabbavgränsad mappning mellan bildfilen (t.ex. JPEG, PNG osv.) och en 0-baserad etikett. Exempel:
/home/user/data/train/n01440764/n01440764_10026.JPEG<tab>0
/home/user/data/train/n01440764/n01440764_10027.JPEG<tab>0
ImageReader stöder "..." syntax i mappningsfilen. Om filsökvägen som lagras i mappningsfilen börjar med "..." kommer "..." ersätts med katalogen för själva mappningsfilen.
Om till exempel filen C:\work\CNTK\data\train.map innehåller
...\images\img1.png 1
...\images\img2.png 2
...\images\img3.png 3
sedan läser läsaren filer som om följande absoluta sökväg angavs:
C:\work\CNTK\data\images\img1.png 1
C:\work\CNTK\data\images\img2.png 2
C:\work\CNTK\data\images\img3.png 3
Eftersom vissa bilddatauppsättningar kan vara ganska stora (t.ex. miljontals bilder) är det ibland fördelaktigt att placera dessa avbildningar i en container. Bildläsaren stöder för närvarande en containertyp: ZIP-filer. I det här fallet rekommenderar vi att du använder STORE-komprimeringsläget eftersom det ger snabbast åtkomst till innehållet i .zip-filen, och bilder kräver vanligtvis inte komprimering ändå. Till exempel (notera @-tecknet i slutet av .zip filnamn):
/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
Observera att du kan blanda och matcha containrar och filer, men vi rekommenderar att du begränsar antalet containrar för bättre prestanda, d.v.s. placera alla bilder i en enda (eller några) .zip filer.
Observera också att Unicode-tecken i filnamn i Windows miljö inte stöds (alla tecken ska vara STANDARD ASCII). Den här begränsningen kommer från OpenCV-biblioteket som bildläsaren är beroende av.
I följande exempel visas användningen av 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
]
]
Det finns mycket få obligatoriska parametrar som width
, height
och channels
flera valfria parametrar som konfigurerar bildtransformeringar.
Beskärningstransformering
cropType
anger vilken del av bilden som beskärs och för närvarande kan vara Center
, RandomSide
eller RandomArea
Multiview10
. RandomSide
och RandomArea
används vanligtvis under träning medan Center
används vanligtvis under testning. Slumpmässig beskärning är en populär dataförstoringsteknik som används för att förbättra generaliseringen av DNN. MultiView10
används vanligtvis under testnings-/utvärderingsfasen och aktiverar 10-visningsbildutvärdering: (4(hörn) + 1(mitten)) * 2(original + vågrät flip) = 10.
Vågrät vänd transformering
hflip
parametern anger om bilden ska vändas slumpmässigt i vågrät riktning. Horisontell flippning är en annan populär dataförstoringsteknik och bör användas om bilder uppvisar vertikal symmetri, till exempel som många verkliga objekt.
Skala transformeringar
sideRatio
anger förhållandet mellan den slutliga bilddimensionen, t.ex. width
eller height
, och storleken på den slumpmässiga gröda som tas från bilden. Till exempel innebär förhållandet 224 / 256 = 0,875 att gröda av storlek 224 kommer att tas från bilden skalas om till 256 (implementeringsinformation: ImageReader
tar grödan och skalar sedan om istället för att göra tvärtom).
Om du vill aktivera skal jitter (en annan populär teknik för dataförstoring) använder du kolonavgränsade värden, till exempel sideRatio=0.875:0.466
vilket innebär att 224 grödor tas från bilder som skalas slumpmässigt för att ha storlek i intervallet [256, 480].
areaRatio
anger förhållandet mellan det slutliga bildområdet och den ursprungliga bilden. Till exempel innebär förhållandet 0,5 att beskärningsfönstrets yta är ungefär hälften av den ursprungliga bilden. Det beskurna fönstret skalas sedan till 224 x 224. sideRatio
(anges tillsammans med cropType=RandomSide
) och areaRatio
(anges tillsammans med cropType=RandomArea
) utesluter varandra.
aspectRatio
gör att en kan använda proportioner slumpmässigt jitter. Till exempel innebär värdet 0,2 att bildförhållandet kan ändras slumpmässigt (enhetlig fördelning) till 80 % till 120 % av originalet.
Transformeringar av färgjitter
brightnessRadius
och contrastRadius
tillåter att ljusstyrka och kontrast jitter. Dessa transformeringar tillämpar följande formel på varje bildpunkt i en bild: Yij = alpha * Xij + beta
där alpha
är en kontrastjustering och beta
- ljusstyrka. Om till exempel contrastRadius
är 0.2
så väljs alfa slumpmässigt (enhetlig fördelning) från 0.8
till 1.2
. brightnessRadius
slumpmässigt väljer värden som en andel av bildsmedelvärdet, brightnessRadius
till exempel lika 0.2
med slumpmässigt väljer värden från -0.2 * mean
till 0.2 * mean
.
saturationRadius
gör att du kan använda slumpmässigt jitter för mättnad. Till exempel kan värdet 0.3
för bildens mättnad ändras från 70 % till 130 % av originalet.
intensityFile
och intensityStdDev
tillåta att PCA-baserade intensitet jitter enligt beskrivningen i detta dokument.
intensityFile
är en sökväg till en fil som innehåller eigenvalues och eigenvectors i OpenCV XML-format. intensityStdDev
anger en standardavvikelse för slumpmässiga koefficienter för eigenvärden.
Transformering av medelvärde för subtraktion
meanFile
parametern är en sökväg till en fil i OpenCV XML-matrisformat som innehåller medelvärdet per bildpunkt för hela datamängden. För indatalagret av storlek 224x224x3
innehåller filen till exempel 150528 poster som subtraheras under träningen (eller testningen) från indatabilden. Samma eller liknande effekt kan uppnås genom att använda några andra tekniker, till exempel Mean
nod eller till och med bara subtrahera ett fast värde, till exempel 128, från indata.