Freigeben über


BrainScript Image Reader

ACHTUNG: Wir unterstützen dieses Leserformat weiterhin, aber es ist veraltet. Bitte verwenden Sie das neue Reader-Format: Understanding-and-Extending-Reader.

Bildsprachausgabe kann verwendet werden, um Bilder zu lesen und einige bildspezifische Transformationen wie zufälliges Zuschneiden, Skalieren, horizontales Kippen und andere anzuwenden. Es benötigt als Eingabe eine einfache Textdatei, in der jede Zeile eine tabstopptrennte Zuordnung zwischen Bilddatei (z. B. JPEG, PNG usw.) und 0-basierten Bezeichnungen enthält. Beispiel:

/home/user/data/train/n01440764/n01440764_10026.JPEG<tab>0
/home/user/data/train/n01440764/n01440764_10027.JPEG<tab>0

ImageReader unterstützt "..." Syntax in der Zuordnungsdatei. Wenn der dateipfad, der in der Kartendatei gespeichert ist, mit "...", dann "..." wird durch das Verzeichnis der Zuordnungsdatei selbst ersetzt.

Wenn beispielsweise eine Datei C:\work\CNTK\data\train.map enthält

...\images\img1.png 1
...\images\img2.png 2
...\images\img3.png 3

dann liest der Leser Dateien so aus, als ob der folgende absolute Pfad angegeben wurde:

C:\work\CNTK\data\images\img1.png 1
C:\work\CNTK\data\images\img2.png 2
C:\work\CNTK\data\images\img3.png 3

Da einige Bilddatensätze ziemlich groß sein können (z. B. Millionen von Bildern), ist es manchmal vorteilhaft, diese Bilder in einen Container zu setzen. Bildsprachausgabe unterstützt derzeit einen Containertyp: ZIP-Dateien. In diesem Fall wird empfohlen, den STORE-Komprimierungsmodus zu verwenden, da er den schnellsten Zugriff auf den Inhalt der .zip-Datei bietet, auch wenn Bilder normalerweise keine Komprimierung erfordern. Beispiel: (Beachten Sie das @-Zeichen am Ende der .zip Dateinamen):

/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

Beachten Sie, dass Sie Container und Dateien mischen und abgleichen können, es wird jedoch empfohlen, die Anzahl der Container für die bessere Leistung zu beschränken, d. h. alle Bilder in eine einzelne (oder wenige) .zip Dateien zu setzen.

Bitte beachten Sie auch, dass in Windows Umgebung Unicode-Zeichen in Dateinamen nicht unterstützt werden (alle Zeichen sollten standard ASCII sein). Diese Einschränkung stammt aus der OpenCV-Bibliothek, auf die bildleserisch basiert.

Im folgenden Beispiel wird die Verwendung von 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
        ]
    ]    

Es gibt sehr wenige obligatorische Parameter, zwidthheight. B. und channels mehrere optionale Parameter, die Bildtransformationen konfigurieren.

Zuschneiden der Transformation

cropType Gibt an, welcher Teil des Bilds zugeschnitten wird und derzeit kann Center, RandomSideoder RandomAreaMultiview10. RandomSide und RandomArea wird in der Regel während der Schulung Center während der Tests verwendet. Zufälliges Zuschneiden ist eine beliebte Datenerweiterungstechnik, die zur Verbesserung der Generalisierung des DNN verwendet wird. MultiView10 wird in der Regel während der Test-/Auswertungsphase verwendet und ermöglicht die 10-Ansicht-Bildauswertung: (4(Ecken) + 1(Mitte)) * 2(original + horizontaler Flip) = 10.

Horizontale Fliptransformation

hflip Parameter gibt an, ob das Bild zufällig in horizontaler Richtung gekippt wird. Horizontales Kippen ist eine weitere beliebte Datenerweiterungstechnik und sollte verwendet werden, wenn Bilder vertikale Symmetrie aufweisen, z. B. wie viele reale Objekte.

Skalierungstransformationen

sideRatio Gibt das Verhältnis der endgültigen Bilddimension an, z. B. width oder height, zur Größe des zufälligen Zuschneidens aus dem Bild. Das Verhältnis 224 / 256 = 0,875 bedeutet z. B. das Zuschneiden von Größe 224 wird aus dem Bild neu skaliert auf 256 (Implementierungsdetail: ImageReader verwendet das Zuschneiden und dann die Skalierungen, anstatt die andere Weise zu erledigen). Um Skalierungs-Jitter (eine andere beliebte Datenerweiterungstechnik) zu aktivieren, verwenden Sie doppelpunkttrennte Werte wie sideRatio=0.875:0.466 dies bedeutet, dass 224 zuschneidende Bilder zufällig skaliert werden, um größe im [256, 480] Bereich zu haben.

areaRatio Gibt das Verhältnis des endgültigen Bildbereichs zum ursprünglichen Bild an. Beispielsweise bedeutet ein Verhältnis von 0,5, dass der Zuschneidefensterbereich etwa die Hälfte des ursprünglichen Bilds ist. Das zugeschnittene Fenster wird dann auf 224x224 skaliert. sideRatio (zusammen mit cropType=RandomSide) und areaRatio (zusammen mit cropType=RandomArea) sind gegenseitig ausschließen.

aspectRatio ermöglicht eine Anwendung des Zufälligen Jitters für das Seitenverhältnis. Ein Wert von 0,2 bedeutet beispielsweise, dass das Seitenverhältnis des Bilds zufällig geändert werden kann (einheitliche Verteilung), um 80 % bis 120 % des Originals zu betragen.

Farb-Jittertransformationen

brightnessRadius und contrastRadius ermöglichen es, Helligkeit und Kontrast jitter anzuwenden. Diese Transformationen wenden die folgende Formel auf jedes Pixel eines Bilds an: Yij = alpha * Xij + beta dabei alpha handelt es sich um eine Kontrastanpassung und beta - Helligkeit. Wenn contrastRadius0.2 z. B. alpha zufällig ausgewählt wird (einheitliche Verteilung) von 0.8 zu 1.2. brightnessRadiusWählt zufällig Werte als Verhältnis des Bildmittelwerts 0.2 aus, z. B. brightnessRadius gleich zufällig wertet von -0.2 * mean zu 0.2 * mean.

saturationRadius ermöglicht die Anwendung zufälliger Sättigungs-Jitter. Ein Wert der 0.3 Mittelsättigung des Bilds kann beispielsweise von 70 % auf 130 % des Originals geändert werden.

intensityFile und intensityStdDev erlauben, PCA-basierte Intensitäts jitter anzuwenden, wie in diesem Papier beschrieben. intensityFile ist ein Pfad zu einer Datei, die Eigenwerte und Eigenvectors im OpenCV XML-Format enthält. intensityStdDev Gibt eine Standardabweichung von Zufallskoeffizienten von Eigenwerten an.

Mittlere Subtraktionstransformation

meanFile parameter is a path to a file in OpenCV XML matrix format which contains per-pixel mean of the whole dataset. Für die Eingabeebene der Größe 224x224x3 enthält die Datei beispielsweise 150528 Einträge, die während der Schulung (oder Tests) vom Eingabebild subtrahiert werden. Derselbe oder ähnliche Effekt kann mithilfe weniger anderer Techniken erreicht werden, Mean z. B. Knoten oder sogar nur einen festen Wert wie 128 von der Eingabe subtrahieren.