Dela via


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, RandomSideeller RandomAreaMultiview10. 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.