deconvolutional 레이어는 무엇입니까?


188

필자는 최근 Jonathan Long, Evan Shelhamer, Trevor Darrell의 Semantic Segmentation위한 Full Convolutional Networks를 읽었습니다 . 나는 "deconvolutional layer"가 무엇을하고 어떻게 작동하는지 이해하지 못한다.

관련 부분은

3.3. 업 샘플링은 역행 된 회선입니다

거친 출력을 고밀도 픽셀에 연결하는 또 다른 방법은 보간입니다. 예를 들어, 간단한 이중 선형 보간은 입력 및 출력 셀의 상대 위치에만 의존하는 선형 맵으로 가장 가까운 4 개의 입력에서 각 출력 를 계산합니다 . 어떤 의미에서 계수 f를 사용한 업 샘플링 은 분수 입력 보폭이 1 / f 인 컨볼 루션입니다. 너무 오래로 , f는 필수입니다, 업 샘플링하는 자연적인 방법 그러므로의 출력 보폭과 역 컨볼 루션 (라고도 디컨 볼 루션)입니다 F . 이러한 연산은 단순히 컨볼 루션의 앞뒤 패스를 역전시키기 때문에 구현하기가 쉽지 않습니다.yij
fff
따라서, 업 샘플링은 픽셀 단위 손실로부터 역 전파에 의해 엔드-투-엔드 학습을 위해 네트워크 내에서 수행된다.
이러한 계층에서의 디컨 볼 루션 필터는 고정 될 필요는 없지만 (예를 들어, 이중 선형 업 샘플링으로) 학습 될 수 있다는 점에 유의한다. 디컨 볼 루션 레이어 스택과 활성화 함수는 비선형 업 샘플링을 학습 할 수도 있습니다.
우리의 실험에서, 우리는 네트워크 내 업 샘플링이 조밀 한 예측 학습에 빠르고 효과적이라는 것을 발견했습니다. 우리의 최고의 세분화 아키텍처는이 계층을 사용하여 4.2 절에서 정제 된 예측을위한 업 샘플링을 학습합니다.

나는 컨볼 루션 레이어가 어떻게 훈련되는지 실제로 이해하지 못했다고 생각합니다.

내가 이해 한 것은 커널 크기 컨볼 루션 레이어는 k × k 크기의 필터를 학습 한다는 것 입니다. 커널 크기 k , 보폭 s Nn 필터를 가진 컨벌루션 레이어의 출력은 입력 치수입니다.kk×kksNn입니다. 그러나 컨볼 루션 레이어 학습이 어떻게 작동하는지 모르겠습니다. (그것이 도움이된다면 간단한 MLP가 기울기 강하로 배우는 방법을 이해합니다).Input dims2n

따라서 컨볼 루션 레이어에 대한 나의 이해가 정확하다면, 이것이 어떻게 되돌릴 수 있는지에 대한 실마리는 없습니다.

누구든지 deconvolutional 레이어를 이해하도록 도와 줄 수 있습니까?


3
이 비디오 강의에서는 디컨 볼 루션 / 업 샘플링에 대해 설명합니다. youtu.be/ByjaPdWXKJ4?t=16m59s
user199309

6
누구에게나 유용 할 수 있기를 바라면서, TensorFlow (0.11)에서 컨볼 루션과 바뀐 컨볼 루션을 어떻게 사용할 수 있는지 살펴보기 위해 노트북 을 만들었습니다 . 실제 사례와 그림을 사용하면 작동 방식을 이해하는 데 도움이 될 수 있습니다.
AkiRoss

1
나를 위해,이 페이지는 나에게 또한 디컨 볼 루션와 회선을 트랜스의 차이를 설명하고 그것을 더 나은 설명을했다 : towardsdatascience.com/...
T.Antoni

매개 변수가 없기 때문에 역방향 스트라이드 컨볼 루션보다 역방향 풀링처럼 업 샘플링하지 않습니까?
Ken

참고 :이 레이어는 deconvolution을 수행 하지 않으므로 "deconvolutional layer"라는 이름이 잘못되었습니다 .
user76284

답변:


210

디컨 볼 루션 레이어 는 매우 불행한 이름이며, 바뀐 컨볼 루션 레이어 라고합니다 .

시각적으로 보폭이 있고 패딩이없는 조옮김 컨볼 루션의 경우 원래 입력 (파란색 항목)을 0 (흰색 항목)으로 채 웁니다 (그림 1).

그림 1

보폭 2와 패딩의 경우 조옮김 컨볼 루션은 다음과 같습니다 (그림 2).

그림 2

컨볼 루션 산술의 더 많은 시각화를 여기서 찾을 수 있습니다 .


16
"Deconvolution"은 convolution과 거의 동일하지만 패딩을 추가 하시겠습니까? (이미지 주변 / s> 1 일 때 각 픽셀 주변)?
Martin Thoma

17
예, 디컨 볼 루션 레이어도 컨볼 루션을 수행합니다! 그렇기 때문에 전치 된 컨볼 루션은 이름과 디컨 볼 루션이라는 용어가 실제로 오도되기 때문에 훨씬 더 적합합니다.
David Dao

11
실제로 입력이 제로 패딩 된 경우 왜 그림 1에서 "패딩 없음"이라고 말합니까?
Stas S

8
그건 그렇고 : 그것은 지금 TensorFlow에서 전치 된 컨볼 루션이라고합니다 : tensorflow.org/versions/r0.10/api_docs/python/…
Martin Thoma

9
이 매우 직관적 인 답변에 감사드립니다. 그러나 두 번째 사례가 왜 '두 번째 단계'인 지에 대해 혼란 스럽습니다. 커널이 움직일 때 첫 번째 사례와 똑같이 작동합니다.
Demonedge

49

컨볼 루션의 기본 직관을 얻는 한 가지 방법은 입력 필터를 통해 K 스텐실로 생각할 수 있고 K 활성화를 생성하는 K 필터를 슬라이딩하는 것입니다. 각 필터는 특정 스텐실과의 일치 정도를 나타냅니다. . 이것의 역동 작은 K 활성화를 취하여 컨볼 루션 동작의 프리 이미지로 확장하는 것입니다. 따라서 역 연산에 대한 직관적 인 설명은 대략 스텐실 (필터)과 활성화 (각 스텐실의 일치 정도)를 고려한 이미지 재구성이므로 기본 직관적 수준에서 스텐실 마스크로 각 활성화를 날려 버리고 싶습니다. 그것들을 추가하십시오.

deconv 이해에 접근하는 또 다른 방법은 Caffe에서 deconvolution 레이어 구현을 검사하는 것입니다. 다음 관련 코드를 참조하십시오.

DeconvolutionLayer<Dtype>::Forward_gpu
ConvolutionLayer<Dtype>::Backward_gpu
CuDNNConvolutionLayer<Dtype>::Backward_gpu
BaseConvolutionLayer<Dtype>::backward_cpu_gemm

Caffe에서 정방향 순방향 컨볼 루션 레이어의 백프로 프와 정확히 동일하게 구현되어 있음을 알 수 있습니다. 따라서 규칙적인 컨볼 루션에 대해 역 전파가 수행되는 방식을 살펴보면 기계적 계산 수준에서 발생하는 상황을 이해할 수 있습니다. 이 계산이 작동하는 방식은이 블 러브의 첫 번째 단락에 설명 된 직관과 일치합니다.

그러나 컨볼 루션 레이어 학습이 어떻게 작동하는지 모르겠습니다. (그것이 도움이된다면 간단한 MLP가 기울기 강하로 배우는 방법을 이해합니다).

첫 번째 질문에서 다른 질문에 대답하기 위해 MLP 역 전파 (완전히 연결된 계층)와 회선망 사이에는 두 가지 주요 차이점이 있습니다.

1) 가중치의 영향이 국한되어 있으므로 먼저 입력 이미지의 작은 3x3 영역으로 얽힌 3x3 필터에 대해 백프로 프를 수행하는 방법을 알아내어 결과 이미지의 단일 지점에 매핑하십시오.

2) 컨벌루션 필터의 가중치는 공간적 불변성을 위해 공유됩니다. 이것이 실제로 의미하는 것은 순방향 패스에서 동일한 가중치를 가진 동일한 3x3 필터가 동일한 가중치로 전체 이미지를 통해 드래그되어 정방향 계산을 위해 출력 이미지를 생성한다는 것입니다 (특정 필터의 경우). 이것이 backprop에 의미하는 것은 소스 이미지의 각 포인트에 대한 backprop gradient가 forward pass 동안 필터를 드래그 한 전체 범위에서 합산된다는 것입니다. dLoss / dx는 역 전파되어야하고 dLoss / dw는 가중치를 업데이트하는 방법이므로 손실 wrt x, w 및 바이어스의 기울기가 다르다는 점에 유의하십시오. w와 바이어스는 계산 DAG에서 독립적 인 입력이므로 (사전 입력은 없으므로) 이들에 대해 역 전파를 수행 할 필요가 없습니다.

(my notation here assumes that convolution is y = x*w+b where '*' is the convolution operation)

7
이것이 이것이이 질문에 대한 가장 좋은 대답이라고 생각합니다.
kli_nlpr

8
이것이 최선의 답변이라는 데 동의합니다. 상단 답변에는 예쁜 애니메이션이 있지만이 답변을 읽을 때까지는 임의의 패딩이있는 일반 회선처럼 보입니다. 사람들이 눈 사탕에 의해 어떻게 흔들리는가.
Reii Nakano

1
동의 된 답변은 아무것도 설명하지 않았습니다. 이것은 훨씬 낫다.
BjornW

훌륭한 설명 감사합니다. 현재 백프로 프를 올바르게 수행하는 방법을 알 수 없습니다. 그에 대한 힌트를 주실 수 있습니까?
Bastian

33

전치 컨볼 루션이 3x3 필터와 2의 보폭으로 2 배 업 샘플링을 수행하는 방법을 단계별로 설명하는 단계별 수학 :

여기에 이미지 설명을 입력하십시오

수학을 검증하는 가장 간단한 TensorFlow 스 니펫 :

import tensorflow as tf
import numpy as np

def test_conv2d_transpose():
    # input batch shape = (1, 2, 2, 1) -> (batch_size, height, width, channels) - 2x2x1 image in batch of 1
    x = tf.constant(np.array([[
        [[1], [2]], 
        [[3], [4]]
    ]]), tf.float32)

    # shape = (3, 3, 1, 1) -> (height, width, input_channels, output_channels) - 3x3x1 filter
    f = tf.constant(np.array([
        [[[1]], [[1]], [[1]]], 
        [[[1]], [[1]], [[1]]], 
        [[[1]], [[1]], [[1]]]
    ]), tf.float32)

    conv = tf.nn.conv2d_transpose(x, f, output_shape=(1, 4, 4, 1), strides=[1, 2, 2, 1], padding='SAME')

    with tf.Session() as session:
        result = session.run(conv)

    assert (np.array([[
        [[1.0], [1.0],  [3.0], [2.0]],
        [[1.0], [1.0],  [3.0], [2.0]],
        [[4.0], [4.0], [10.0], [6.0]],
        [[3.0], [3.0],  [7.0], [4.0]]]]) == result).all()

나는 당신의 계산이 잘못되었다고 생각합니다. 중간 출력은 3+ 2 * 2 = 7이어야하고, 3x3 커널의 경우 최종 출력은 7-3 + 1 = 5x5 여야합니다.
Alex

죄송합니다, @Alex, 왜 중간 출력이 7인지 이해하지 못합니다
andriys

2
@andriys 표시된 이미지에서 최종 결과가 잘리는 이유는 무엇입니까?
제임스 본드

28

Andrej Karpathy의 Stanford CS 클래스 CS231n : 시각적 인식을위한 Convolutional Neural Networks 와 함께 제공 되는 노트는 Convolutional Neural Network를 설명하는 데 탁월합니다.

이 문서를 읽으면 다음에 대한 대략적인 아이디어를 얻을 수 있습니다.

  • Deconvolutional Networks Matthew D. Zeiler, Dilip Krishnan, Graham W. Taylor 및 Rob Fergus 뉴욕 대학교 Courant Institute 컴퓨터 공학과

슬라이드 는 Deconvolutional Networks에 적합합니다.


29
짧은 단락에서 이러한 링크 중 하나의 내용을 요약 할 수 있습니까? 링크는 추가 연구에 유용 할 수 있지만 이상적으로는 스택 교환 답변에 사이트를 벗어나지 않고도 기본적인 질문을 해결하기에 충분한 텍스트가 있어야합니다.
Neil Slater

죄송합니다.이 페이지의 내용이 너무 커서 짧은 단락으로 요약 할 수 없습니다.
Azrael

12
전체 요약은 필요하지 않으며 헤드 라인만으로도 충분합니다. 예를 들어, "비콘 볼 루션 뉴럴 네트워크는 CNN과 유사하지만 숨겨진 계층의 기능을 사용하여 이전 계층을 재구성하는 데 사용할 수 있도록 (그리고 계층 간 반복, 결국에는 입력에서 출력을 재구성 할 수 있습니다.) 문제 영역에서 일반적으로 높은 수준의 기능 (일반적으로 이미지 처리)을 배우기 위해 감독되지 않은 상태에서 학습 할 수 있습니다. (정확한지 확실하지 않아서 자신의 답변).
닐 슬레이터

6
링크는 좋지만 자신의 말로 모델을 간략하게 요약하면 좋을 것입니다.
SmallChess

11

theaon 웹 사이트에서이 주제에 대한 훌륭한 기사를 찾았습니다 [1] :

전치 된 회선의 필요성은 일반적으로 지형도를보다 높은 차원의 공간에 투영하기 위해 정규 회선의 반대 방향으로 진행하는 변환을 사용하려는 소망에서 비롯됩니다. [...] 즉, 컨볼 루션의 연결 패턴을 유지하면서 4 차원 공간에서 16 차원 공간으로 매핑합니다.

전이 된 컨볼 루션 (분수 스트라이드 컨볼 루션이라고도 함)은 컨볼 루션의 앞뒤 패스를 교환하여 작동합니다. 커널은 컨볼 루션을 정의하지만 직접 컨볼 루션인지 또는 조인 컨볼 루션인지는 순방향 및 역방향 패스 계산 방법에 따라 결정됩니다.

전치 된 컨볼 루션 연산은 입력과 관련하여 일부 컨볼 루션의 기울기로 생각할 수 있는데, 이는 일반적으로 바뀐 컨볼 루션이 실제로 구현되는 방식입니다.

마지막으로 직접 컨벌루션으로 조옮김 컨볼 루션을 구현할 수 있습니다. 단점은 일반적으로 많은 열과 행의 0을 입력에 추가하여 구현 효율이 훨씬 떨어진다는 것입니다.

간단히 말해, "전사 된 컨볼 루션"은 컨볼 루션과 같은 행렬을 사용한 수학적 연산이지만 컨볼 루션 된 값에서 원래 (반대 방향)으로 되돌아 가려는 경우 일반 컨볼 루션 연산보다 더 효율적입니다. 이것이 구현에서 반대 방향을 계산할 때 컨벌루션이 선호되는 이유이다 (즉, 입력 패딩으로 인한 희소 행렬로 인한 많은 불필요한 0 곱셈을 피하는 것).

Image ---> convolution ---> Result

Result ---> transposed convolution ---> "originalish Image"

때때로 컨볼 루션 경로를 따라 일부 값을 저장하고 "뒤로"이동할 때 해당 정보를 재사용합니다.

Result ---> transposed convolution ---> Image

그것이 아마도 "deconvolution"이라고 잘못 불리는 이유 일 것입니다. 그러나, 그것은 컨볼 루션 (C ^ T)의 매트릭스 전치와 관련이 있기 때문에, 더 적절한 이름은 "전치 된 컨볼 루션"입니다.

따라서 컴퓨팅 비용을 고려할 때 많은 의미가 있습니다. 조옮김 컨볼 루션을 사용하지 않으면 Amazon GPU에 대해 더 많은 비용을 지불하게됩니다.

여기에서 애니메이션을주의 깊게 읽고보십시오 : http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#no-zero-padding-unit-strides-transposed

다른 관련 독서 :

필터의 전치 (또는 일반적으로 Hermitian 또는 켤레 전치)는 단순히 일치하는 필터입니다 [3]. 이것은 커널을 역전시키고 모든 값의 결합체를 취함으로써 발견된다 [2].

나는 또한 이것에 익숙하지 않으며 피드백이나 수정에 감사드립니다.

[1] http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html

[2] http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#transposed-convolution-arithmetic

[3] https://ko.wikipedia.org/wiki/Matched_filter



1
나는 이것이 최선의 대답이라고 생각합니다!
kli_nlpr

10

우리는 유추를 위해 PCA를 사용할 수 있습니다.

전환을 사용하는 경우 순방향 패스는 입력 이미지에서 기본 구성 요소의 계수를 추출하는 것이며, 역방향 패스 (입력을 업데이트하는)는 계수를 사용 (그라디언트)하여 새로운 입력 이미지를 재구성하는 것입니다. 새로운 입력 이미지에는 원하는 계수와 더 잘 맞는 PC 계수가 있습니다.

deconv를 사용하면 정방향 패스와 역방향 패스가 반대로됩니다. 정방향 패스는 PC 계수에서 이미지를 재구성하려고 시도하고 역방향 패스는 이미지의 주어진 (그라데이션) PC 계수를 업데이트합니다.

deconv forward pass는이 게시물에 제공된 conv gradient 계산을 정확하게 수행합니다 : http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/

이것이 deconv의 caffe 구현 (Andrei Pokrovsky의 답변 참조)에서 deconv 순방향 패스가 backward_cpu_gemm ()를 호출하고 역방향 패스는 forward_cpu_gemm ()을 호출하는 이유입니다.


6

David Dao의 답변 외에도 다른 방식으로 생각하는 것도 가능합니다. 단일 출력 픽셀을 생성하는 데 사용되는 (낮은 해상도) 입력 픽셀에 초점을 맞추는 대신, 개별 입력 픽셀이 출력 픽셀의 어느 영역에 기여하는지에 초점을 맞출 수도 있습니다.

이것은 매우 직관적 인 대화식 시각화 시리즈를 포함 하여이 증류소 간행물 에서 수행됩니다 . 이 방향으로 생각하는 것의 한 가지 장점은 바둑판 인공물을 설명하는 것이 쉬워진다는 것입니다.


5

DSP 관점에서의 컨볼 루션

나는 이것에 조금 늦었지만 여전히 내 관점과 통찰력을 공유하고 싶습니다. 저의 배경은 이론 물리학과 디지털 신호 처리입니다. 특히 나는 웨이블릿을 연구했으며 컨볼 루션은 거의 백본에있다.)

딥 러닝 커뮤니티의 사람들이 컨볼 루션에 대해 이야기하는 방식도 혼란 스러웠습니다. 내 관점에서 누락 된 것들은 우려를 적절히 분리하는 것입니다. 일부 DSP 도구를 사용하여 딥 러닝 컨볼 루션에 대해 설명하겠습니다.

기권

내 설명은 주요한 요점을 얻기 위해 약간 손을 wav 수 있고 수학적으로 엄격하지는 않습니다.


정의

xn={xn}n=={,x1,x0,x1,}

ynxn

(yx)n=k=ynkxk

q=(q0,q1,q2)x=(x0,x1,x2,x3)T

qx=(q1q000q2q1q000q2q1q000q2q1)(x0x1x2x3)

kN

kxn=xnk

kk1

kxn={xn/kn/kZ0otherwise

k=3

3{,x0,x1,x2,x3,x4,x5,x6,}={,x0,x3,x6,}
3{,x0,x1,x2,}={x0,0,0,x1,0,0,x2,0,0,}

k=2

2x=(x0x2)=(10000010)(x0x1x2x3)

2x=(x00x10)=(10000100)(x0x1)

k=kT


부품 별 딥 러닝 컨벌루션

qx

  • kk(qx)
  • k(kq)x
  • kq(kx)

q(kx)=q(kTx)=(k(q)T)Tx

(q)q

q(kx)=(q1q000q2q1q000q2q1q000q2q1)(10000100)(x0x1)=(q1q200q0q1q200q0q1q200q0q1)T(10000010)T(x0x1)=((10000010)(q1q200q0q1q200q0q1q200q0q1))T(x0x1)=(k(q)T)Tx

보시다시피 전치 된 연산이므로 이름입니다.

가장 가까운 이웃 업 샘플링에 연결

컨볼 루션 네트워크에서 발견되는 또 다른 일반적인 접근 방식은 내장 된 보간 형태로 업 샘플링하는 것입니다. 간단한 반복 보간으로 요소 2로 업 샘플링을하겠습니다. 이것은 로 쓸 수 있습니다2(11)xq2(11)qxq=(q0q1q2)

(11)q=(q0q0+q1q1+q2q2),

즉, 우리는 반복 업 샘플러를 인자 2로 대체하고 커널 크기 4를 가진 전치 컨볼 루션으로 크기가 3 인 커널을 갖는 컨볼 루션을 대체 할 수 있습니다.


결론 및 최종 의견

기본 작업에서 딥 러닝에서 발견되는 일반적인 컨볼 루션을 약간 분리하여 명확히 할 수 있기를 바랍니다.

나는 여기서 풀링을 다루지 않았다. 그러나 이것은 단지 비선형 다운 샘플러이며이 표기법 내에서도 처리 될 수 있습니다.


훌륭한 답변입니다. 수학적 / 기호 적 관점을 취하면 종종 문제가 명확 해집니다. 이 문맥에서 "deconvolution"이라는 용어기존 용어 와 충돌한다고 생각하는 것이 맞 습니까?
user76284

그것은 실제로 충돌하지 않으며 단지 의미가 없습니다. 디컨 볼 루션은 업 샘플 연산자와의 컨볼 루션입니다. deconvolution이라는 용어는 어떤 형태의 역 연산 인 것처럼 들립니다. 여기서 역에 대해 이야기하는 것은 행렬 연산의 맥락에서만 의미가 있습니다. 그것은 컨볼 루션의 역 연산이 아닌 역행렬과 곱셈입니다 (나눗셈 대 곱셈과 같은).
André Bergner

zθx=zzθz=x

θz=xz=(θ)+x

요컨대, OP의 소위 "디컨 볼 루션 레이어"는 실제로 디컨 볼 루션을 수행하지 않습니다. 다른 일을하고 있습니다 (답변에 설명 된 것).
user76284

4

나는이 블로그 게시물을 통해 올 때까지 정확히 종이에 무슨 일이 있었는지 이해 문제를 많이했다 : http://warmspringwinds.github.io/tensorflow/tf-slim/2016/11/22/upsampling-and-image-segmentation -tensorflow 및 tf-slim /

다음은 2x 업 샘플링에서 발생하는 상황을 이해하는 방법에 대한 요약입니다.

종이 정보

  • 업 샘플링이란 무엇입니까?
  • 그 회선의 매개 변수는 무엇입니까?
  • 무게는 고정되거나 훈련 가능합니까?
    • 이 논문은 "우리는 이중 선형 보간으로 2x 업 샘플링을 초기화하지만 매개 변수를 학습 할 수있게한다 ...].
    • 그러나 해당 github 페이지 에 "원래 실험에서 보간 레이어가 이중 선형 커널로 ​​초기화 된 후 학습되었습니다. 후속 실험 및이 참조 구현에서는 이중 선형 커널이 고정되었습니다"
    • → 고정 무게

간단한 예

  1. 다음 입력 이미지를 상상해보십시오.

입력 이미지

  1. 분수 스트라이드 컨볼 루션은 이러한 값 사이에 factor-1 = 2-1 = 1 0을 삽입 한 다음 나중에 stride = 1을 가정하여 작동합니다. 따라서 다음 6x6 패딩 이미지가 나타납니다.

패딩 된 이미지

  1. 쌍 선형 4x4 필터는 다음과 같습니다. 사용 된 가중치 (= 모든 가중치에 삽입 된 0을 곱하지 않음)의 합계가 1이되도록 값이 선택됩니다. 3 개의 고유 한 값은 0.56, 0.19 및 0.06입니다. 또한, 필터의 중심은 관례에 따라 세 번째 행과 세 번째 열의 픽셀입니다.

필터

  1. 패딩 된 이미지에 4x4 필터를 적용하면 (padding = 'same'및 stride = 1 사용) 다음 6x6 업 샘플링 된 이미지가 생성됩니다.

업 스케일 된 이미지

  1. 이러한 종류의 업 샘플링은 각 채널에 대해 개별적으로 수행됩니다 ( https://github.com/shelhamer/fcn.berkeleyvision.org/blob/master/surgery.py의 59 행 참조 ). 마지막으로 2x 업 샘플링은 이중선 보간법과 테두리 처리 방법에 대한 규칙을 사용하여 실제로 매우 간단한 크기 조정입니다. 16x 또는 32x 업 샘플링은 거의 같은 방식으로 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.