BrainScript 이미지 판독기
주의: 이 판독기 형식은 계속 지원되지만 더 이상 사용되지 않습니다. 새 판독기 형식인 Understanding-and-Extending-Readers를 사용하세요.
이미지 판독기를 사용하여 이미지를 읽고 임의 자르기, 크기 조정, 가로 대칭 이동 등과 같은 일부 이미지별 변환을 적용할 수 있습니다. 각 줄에 이미지 파일(예: JPEG, PNG 등) 및 0 기반 레이블 간의 탭으로 구분된 매핑이 포함된 간단한 텍스트 파일을 입력으로 사용합니다. 예를 들면 다음과 같습니다.
/home/user/data/train/n01440764/n01440764_10026.JPEG<tab>0
/home/user/data/train/n01440764/n01440764_10027.JPEG<tab>0
ImageReader에서 "..." 지원 매핑 파일의 구문입니다. 맵 파일에 저장된 파일 경로가 "..."로 시작하는 경우 "..." 는 매핑 파일 자체의 디렉터리로 대체됩니다.
예를 들어 C:\work\CNTK\data\train.map 파일에 포함된 경우
...\images\img1.png 1
...\images\img2.png 2
...\images\img3.png 3
그러면 판독기는 다음 절대 경로가 지정된 것처럼 파일을 읽습니다.
C:\work\CNTK\data\images\img1.png 1
C:\work\CNTK\data\images\img2.png 2
C:\work\CNTK\data\images\img3.png 3
일부 이미지 데이터 세트는 매우 클 수 있으므로(예: 수백만 개의 이미지) 이러한 이미지를 컨테이너에 배치하는 것이 도움이 되는 경우도 있습니다. 이미지 판독기는 현재 ZIP 파일이라는 하나의 컨테이너 형식을 지원합니다. 이 경우 .zip 파일의 콘텐츠에 가장 빠르게 액세스할 수 있으므로 STORE 압축 모드를 사용하는 것이 좋습니다. 또한 이미지는 일반적으로 압축이 필요하지 않습니다. 예를 들어 (.zip 파일 이름의 끝에 @ 기호를 적어 두시기:
/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
그러나 컨테이너와 파일을 혼합 및 일치시킬 수 있지만 더 나은 성능을 위해 컨테이너 수를 제한하는 것이 좋습니다. 즉, 모든 이미지를 단일(또는 몇 개) .zip 파일에 배치하는 것이 좋습니다.
또한 Windows 환경에서는 파일 이름의 유니코드 문자가 지원되지 않습니다(모든 문자는 표준 ASCII여야 함). 이 제한은 이미지 판독기에서 사용하는 OpenCV 라이브러리에서 제공됩니다.
다음 예제에서는 다음을 사용하는 방법을 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
]
]
이러한 필수 매개 변수 width
height
와 channels
이미지 변환을 구성하는 몇 가지 선택적 매개 변수가 있습니다.
자르기 변환
cropType
는 이미지의 어느 부분이 잘렸으며 현재 어떤 부분이 될 Center
수 있는지를 RandomSide
RandomArea
지정합니다Multiview10
. RandomSide
RandomArea
는 일반적으로 테스트 중에 사용되는 동안 Center
학습 중에 사용됩니다. 임의 자르기는 DNN의 일반화를 개선하는 데 사용되는 인기 있는 데이터 확대 기술입니다. MultiView10
는 일반적으로 테스트/평가 단계에서 사용되며 10 보기 이미지 평가를 사용하도록 설정합니다. (4(모서리) + 1(가운데)) * 2(원래 + 가로 대칭 이동) = 10.
가로 대칭 이동 변환
hflip
매개 변수는 이미지가 가로 방향으로 임의로 대칭 이동되는지 여부를 지정합니다. 가로 대칭 이동은 또 다른 인기 있는 데이터 확대 기술이며, 예를 들어 많은 실제 개체와 같이 이미지가 수직 대칭을 나타내는 경우 사용해야 합니다.
변환 크기 조정
sideRatio
는 최종 이미지 차원의 비율(예: width
이미지 height
에서 가져온 임의 자르기 크기)을 지정합니다. 예를 들어 224/256 = 0.875의 비율은 크기 224의 자르기를 256으로 다시 크기 조정된 이미지에서 가져온다는 것을 의미합니다(구현 세부 정보: ImageReader
자르기를 가져온 다음 다른 방식으로 조정하는 대신 크기 조정).
크기 조정 지터(또 다른 인기 있는 데이터 확대 기술)를 사용하도록 설정하려면 콜론으로 구분된 값을 sideRatio=0.875:0.466
사용합니다. 즉, 임의로 크기가 조정된 이미지에서 224개의 자르기를 가져와 [256, 480] 범위의 크기를 갖습니다.
areaRatio
는 원래 이미지에 대한 최종 이미지 영역의 비율을 지정합니다. 예를 들어 0.5의 비율은 자르기 창 영역이 원래 이미지의 절반 정도임을 의미합니다. 그러면 잘린 창이 224x224로 조정됩니다. sideRatio
(와 함께 cropType=RandomSide
지정됨) 및 areaRatio
(함께 cropType=RandomArea
지정됨)는 함께 사용할 수 없습니다.
aspectRatio
가로 세로 비율 임의 지터를 적용할 수 있습니다. 예를 들어 값이 0.2이면 이미지의 가로 세로 비율을 원래의 80%에서 120%로 임의로 변경할 수 있습니다(균일한 분포).
색 지터 변환
brightnessRadius
밝기 및 contrastRadius
대비 지터를 적용할 수 있습니다. 이러한 변환은 이미지 Yij = alpha * Xij + beta
의 모든 픽셀에 다음 수식을 적용합니다. 여기서 alpha
는 대비 조정 및 beta
밝기입니다. 예를 들어 이 경우 contrastRadius
알파는 임의로 선택됩니다(균일한 분포)0.8
1.2
.0.2
brightnessRadius
임의로 이미지 평균의 비율로 값을 선택합니다. 예를 들어 brightnessRadius
0.2
임의로 값을 -0.2 * mean
0.2 * mean
선택합니다.
saturationRadius
는 채도 임의 지터를 적용할 수 있습니다. 예를 들어 이미지의 채도를 원래 값의 0.3
70%에서 130%로 변경할 수 있습니다.
intensityFile
이 intensityStdDev
문서에서 설명한 대로 PCA 기반 강도 지터를 적용할 수 있습니다.
intensityFile
는 OpenCV XML 형식의 고유값 및 고유 벡터를 포함하는 파일의 경로입니다. intensityStdDev
는 고유값의 임의 계수의 표준 편차를 지정합니다.
평균 빼기 변환
meanFile
매개 변수는 전체 데이터 세트의 픽셀당 평균을 포함하는 OpenCV XML 행렬 형식의 파일 경로입니다. 예를 들어 크기의 224x224x3
입력 계층의 경우 파일은 입력 이미지에서 학습(또는 테스트) 중에 뺄 150528 항목을 포함합니다. 노드와 같은 몇 가지 다른 기술을 Mean
사용하거나 입력에서 128과 같은 일부 고정 값을 빼면 동일하거나 유사한 효과를 달성할 수 있습니다.