Main Content

deepDreamImage

딥 드림(Deep Dream)을 사용하여 신경망 특징 시각화

설명

I = deepDreamImage(net,layer,channelIdx)는 신경망 net에서 layer로 주어진 숫자형 인덱스 또는 이름을 갖는 계층의 채널 channels를 강하게 활성화하는 영상으로 구성된 배열을 반환합니다. 이러한 영상은 신경망이 학습한 특징이 무엇인지 보여줍니다.

I = deepDreamImage(___,Name,Value)는 하나 이상의 이름-값 인수로 지정된 추가 옵션을 사용하여 영상을 반환합니다.

예제

예제

모두 축소

사전 훈련된 신경망을 불러옵니다.

net = imagePretrainedNetwork("squeezenet");

컨벌루션 계층 fire3-squeeze1x1이 학습한 16개의 특징을 deepDreamImage를 사용하여 시각화합니다. 영상이 스케일링되지 않도록 PyramidLevels를 1로 설정합니다.

layer = "fire3-squeeze1x1";
channels = 1:16;

I = deepDreamImage(net,layer,channels, ...
    PyramidLevels=1, ...
    Verbose=0);

tiledlayout("flow")
for i = 1:numel(channels)
    nexttile
    imshow(I(:,:,:,i))
end

Figure contains 16 axes objects. Axes object 1 contains an object of type image. Axes object 2 contains an object of type image. Axes object 3 contains an object of type image. Axes object 4 contains an object of type image. Axes object 5 contains an object of type image. Axes object 6 contains an object of type image. Axes object 7 contains an object of type image. Axes object 8 contains an object of type image. Axes object 9 contains an object of type image. Axes object 10 contains an object of type image. Axes object 11 contains an object of type image. Axes object 12 contains an object of type image. Axes object 13 contains an object of type image. Axes object 14 contains an object of type image. Axes object 15 contains an object of type image. Axes object 16 contains an object of type image.

입력 인수

모두 축소

훈련된 신경망으로, dlnetwork 객체로 지정됩니다.

deepDreamImage 함수는 영상 입력 계층을 갖는 신경망만 지원합니다.

시각화할 계층으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. 활성화를 시각화할 계층의 인덱스 또는 이름으로 layer를 지정하십시오. 분류 계층 특징을 시각화하려면 마지막 완전 연결 계층을 선택하십시오.

시각화를 위해 ReLU 계층이나 드롭아웃 계층을 선택하면 이러한 계층이 신경망 기울기에 갖는 효과로 인해 유용한 영상이 생성되지 않을 수 있습니다.

채널 인덱스로, 스칼라 또는 채널 인덱스로 구성된 벡터로 지정됩니다. channelIdx가 벡터인 경우, 각 채널의 계층 활성화 값은 독립적으로 최적화됩니다. channelIdx의 선택 가능한 옵션은 선택한 계층에 따라 달라집니다.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: deepDreamImage(net,layer,channels,NumIterations=100,ExecutionEnvironment="gpu")는 피라미드 단계마다 반복 100회를 사용하여 영상을 생성하고, GPU를 사용합니다.

딥 드림 알고리즘을 초기화할 영상으로, 2차원 배열로 지정됩니다. 신경망 계층 활성화 값을 최대화하기 위해 영상이 어떻게 수정되는지 보려면 이 구문을 사용하십시오. 초기 영상의 최소 높이와 너비는 선택한 계층을 포함하여 이 계층까지 이르는 모든 계층에 좌우됩니다.

  • 신경망의 끝부분에 있는 계층의 경우, 초기 영상은 영상 입력 계층과 높이와 너비가 최소한 같아야 합니다.

  • 신경망의 시작 부분에 있는 계층의 경우, 초기 영상은 영상 입력 계층보다 높이와 너비가 작아도 됩니다. 그러나 선택한 계층에서 스칼라 출력값을 생성할 수 있을 만큼은 커야 합니다.

  • 초기 영상의 채널 개수는 신경망의 영상 입력 계층의 채널 개수와 일치해야 합니다.

초기 영상을 지정하지 않은 경우, 표준 정규분포에서 가져온 픽셀로 구성된 임의의 영상이 사용됩니다. 자세한 내용은 PyramidLevels 항목을 참조하십시오.

출력 영상을 생성하는 데 사용된 다중 해상도 영상 피라미드 단계의 개수로, 양의 정수로 지정됩니다. 연산량을 늘리는 대신 더 큰 출력 영상을 생성하려면 피라미드 단계의 개수를 늘리십시오. 초기 영상과 크기가 같은 영상을 생성하려면 단계의 개수를 1로 설정하십시오.

예: PyramidLevels=3

각 피라미드 단계 간의 스케일로, 1보다 큰 스칼라 값으로 지정됩니다. 출력 영상에 미세한 세부 사항을 반용하려면 피라미드 스케일을 줄이십시오. 피라미드 스케일을 조정하면 신경망 시작 부분에 있는 계층에서 정보가 많은 영상을 생성하는 데 도움이 됩니다.

예: PyramidScale=1.4

피라미드 단계당 반복 횟수로, 양의 정수로 지정됩니다. 연산량을 늘리는 대신 더 상세한 영상을 생성하려면 반복 횟수를 늘리십시오.

예: NumIterations=10

출력 영상에 적용할 스케일링 유형으로, 다음 값 중 하나로 지정됩니다.

설명
"linear"출력 픽셀 값을 [0,1] 구간으로 스케일링합니다. 각 계층 채널 I(:,:,:,channel)에 대응되는 출력 영상은 독립적으로 스케일링됩니다.
"clipped"영상을 [0 255] 범위로 자른 다음 [0,1] 구간으로 스케일링합니다. 이 옵션은 종종 더 선명한 영상을 만들 수 있습니다.
"none"출력 스케일링을 비활성화합니다.

픽셀 값을 스케일링하면 신경망이 출력 영상을 오분류하게 될 수 있습니다. 출력 영상을 분류하려면 OutputScaling 값을 "none"으로 설정하십시오.

예: OutputScaling="linear"

명령 창에 진행 상황 정보를 표시할지에 대한 표시자로, Verbose와 함께 1(true) 또는 0(false)이 쉼표로 구분되어 지정됩니다. 표시되는 정보에는 피라미드 단계, 반복, 활성화 강도가 있습니다.

예: Verbose=0

데이터형: logical

하드웨어 리소스로, 다음 값 중 하나로 지정됩니다.

  • "auto" — 사용 가능한 하나의 GPU가 있으면 이를 사용합니다. 그렇지 않은 경우 CPU를 사용합니다.

  • "gpu" — GPU를 사용합니다. GPU를 사용하려면 Parallel Computing Toolbox™ 라이선스와 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은 GPU 연산 요구 사항 (Parallel Computing Toolbox) 항목을 참조하십시오. Parallel Computing Toolbox 또는 적당한 GPU를 사용할 수 없는 경우, 오류가 반환됩니다.

  • "cpu" — CPU를 사용합니다.

출력 인수

모두 축소

출력 영상으로, 회색조 영상 또는 RGB 영상의 시퀀스를 포함하는 4차원 배열로 반환됩니다. 함수는 channels(k)의 출력값을 최대화하는 영상이 I(:,:,:,k)가 되도록 I의 네 번째 차원을 따라 영상을 결합합니다. 출력 영상은 imshow (Image Processing Toolbox) 함수를 사용하여 표시할 수 있습니다.

알고리즘

이 함수는 다중 해상도 영상 피라미드와 라플라스 피라미드 기울기 정규화를 사용하여 고해상도 영상을 생성하는 딥 드림 시각화를 구현합니다. 라플라스 피라미드 기울기 정규화에 대한 자세한 내용은 블로그 게시물인 DeepDreaming with TensorFlow 항목을 참조하십시오.

기본적으로 trainnet 함수를 사용하여 신경망을 훈련시킬 때 단정밀도 부동소수점 연산방식을 사용하여 계산을 수행합니다. trainnet 함수는 단정밀도의 학습 가능 파라미터와 상태 파라미터를 갖는 신경망을 반환합니다.

단정밀도의 학습 가능 파라미터와 상태 파라미터를 갖는 dlnetwork 객체를 예측 함수나 검증 함수에 사용하면, 단정밀도 부동소수점 연산방식을 사용하여 계산을 수행합니다.

배정밀도의 학습 가능 파라미터와 상태 파라미터를 갖는 dlnetwork 객체를 예측 함수나 검증 함수에 사용하면 다음과 같이 수행됩니다.

  • 입력 데이터가 단정밀도이면, 단정밀도 부동소수점 연산방식을 사용하여 계산을 수행합니다.

  • 입력 데이터가 배정밀도이면, 배정밀도 부동소수점 연산방식을 사용하여 계산을 수행합니다.

참고 문헌

[1] DeepDreaming with TensorFlow. https://github.com/tensorflow/docs/blob/master/site/en/tutorials/generative/deepdream.ipynb

버전 내역

R2017a에 개발됨

모두 확장