Delen via


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 widthheight en channels verschillende optionele parameters waarmee afbeeldingstransformaties worden geconfigureerd.

Transformatie bijsnijden

cropTypehiermee geeft u op welk deel van de afbeelding wordt bijgesneden en momenteel kan worden Center, RandomSideRandomArea 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 * mean0.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.