질을 높이는 점진적 생장 방식
5832 단어 deeplearningaipythonarchitecture
PGGAN의 품질을 향상시키기 위한 점진적 성장 Gan
PGGAN이란?품질, 안정성, 변이성을 높이기 위해 감초를 점차적으로 재배하다.관건은 생성기와 감별기를 점차적으로 늘리는 것이다.낮은 해상도부터 나는 새로운 도층을 추가했다. 훈련이 진행됨에 따라 이 도층들은 점점 정교해지는 디테일을 모의할 수 있다.이것은 훈련 속도를 가속화할 뿐만 아니라 훈련을 크게 안정시켜 우리로 하여금 전대미문의 품질, 예를 들어 1024^2의 셀레비아 이미지를 생성할 수 있게 한다.이미지 생성의 변화를 늘리고 감독이 없는 CIFAR10에서 8.80의 기록 시작 점수를 실현하는 간단한 방법도 제시했다.이 밖에 생성기와 감별기 간의 불건전한 경쟁을 막는 데 매우 중요한 세부 사항을 묘사한다.마지막으로 나는 GAN 결과를 평가하는 새로운 지표를 제시했는데 이미지의 질과 변화를 포함한다.추가적인 공헌으로 나는 더욱 높은 품질의 셀럽A 데이터 집합을 구축할 수 있다.
숫자.
감초의 점진적 생장
시퀀스는 발생기 G와 감별기 D가 모두 4X4 픽셀의 낮은 공간 해상도에서 시작된다.기술이 발전함에 따라 나는 그림을 만드는 공간 해상도를 얻기 위해 G와 D에 층을 추가했다.전체 과정에서 모든 층이 교육을 진행할 수 있다.NXN은 NXN 공간 해상도에서 실행되는 볼륨 레이어입니다.고해상도에서 안정적인 합성을 허용하고 훈련 속도도 크게 빨라졌다.오른쪽 한 장, 위의 여섯 장의 사진은 1024X1024의 속도로 점차적으로 생성된 것이다.
발생기 G와 감별기 D의 해상도가 배가될 때, 나는 새로운 층에서 매끄럽게 담금질할 것이다.이것은 16X16 이미지에서 32X32 이미지로 변환하는 것을 설명한다.
과도 b 기간에 더 높은 해상도로 운행하는 층은 잉여 블록처럼 그 무게가 0선에서 1로 증가한다.toRGB는 특징 벡터를 RGB 색에 투영하는 도면층으로 fromRGB는 이 두 개의 1X1 볼륨을 반전시킨다.감별기를 훈련할 때, 실제 그림은 네트워크의 현재 해상도와 일치하도록 축소됩니다.해상도 변환 기간에 실제 이미지의 두 해상도 사이에 삽입을 하는 것은 생성기 출력이 두 해상도를 조합하는 방식과 유사하다.
def lerp(a, b, t): return a + (b - a) * t
def lerp_clip(a, b, t): return a + (b - a) * tf.clip_by_value(t, 0.0, 1.0)
//omitted
if structure == 'linear':
img = images_in
x = fromrgb(img, resolution_log2)
for res in range(resolution_log2, 2, -1):
lod = resolution_log2 - res # lod: levels-of-details
x = block(x, res)
img = downscale2d(img)
y = fromrgb(img, res - 1)
with tf.variable_scope('Grow_lod%d' % lod):
x = lerp_clip(x, y, lod_in - lod)
gerator와 감별기의 귀일화
균형 잡힌 학습률:기존 방식과 달리 중량.의 초기화는 N(0,1)로 하되, 런타임중에 동적으로 가중치 매개 변수의 스케일을 조절해주자는 아이디어. 그는 초기화자이다에서 제안된 층마다 귀일화 상수로 가중치 매개 변수를 나누어준다. 사람들에게 즐겨 사용되는 RMSProp이나 아담의 경우 계단식 업데이트에 대해 정상화을 해주게 되는데, 이것이 매개 변수들에 대한 규모과는 별개로 계산되는 것이기 때문에 변동이 큰 매개 변수에 대해서는 학습에 효과적이지 않을 수 있다. 이 방법을 사용하면 모든 매개 변수가 같은 동적 범위를 갖게 하므로 동일한 학습속도를 보장할 수 있다.
def get_weight(shape, gain=np.sqrt(2), use_wscale=False, fan_in=None):
if fan_in is None: fan_in = np.prod(shape[:-1])
std = gain / np.sqrt(fan_in)
if use_wscale:
wscale = tf.constant(np.float32(std), name='wscale')
return tf.get_variable('weight', shape=shape, initializer=tf.initializers.random_normal())
else:
return tf.get_variable('weight', shape=shape, initializer=tf.initializers.random_normal(0, std))
✔️ 생성기의 픽셀 특징 벡터 귀일화: 생성기와 감별기의 등급가 경쟁에 의해 통제불능의 상태가 되는 것을 막기위해 각 권적층의 요소층에 대해 픽셀단위로 정상화을 해준다. 결과물의 품질에 큰 영향을 준 것은 아니지만 필요시 신호량가 점차 증가되는 것을 막아주었다.
def pixel_norm(x, epsilon=1e-8):
with tf.variable_scope('PixelNorm'):
return x * tf.rsqrt(tf.reduce_mean(tf.square(x), axis=1, keepdims=True) + epsilon)
소량의 표준 편차를 사용하여 변이를 증가시키다현재 해상도에 맞춰 우리가 가지고 있는 실제 이미지를 규모를 축소하다하면 저해상도 이미지도 바뀌게 된다. 하지만 고해상도 이미지에 대한 정보도 담고 있다는 것을 알아두자. 두개의 해상도 사이를 선형보간 (보간)하는 과정을 거치며 학습을 진행한다. 일반적인 비지도학습의 특징으로 훈련 중 열차 데이터에서 찾은 피쳐 정보보다 변경 사항 감소한 생성기 이미지를 생성해내는 경향이 있다. 그로 인한 고해상도 이미지를 생성해내기 어렵다는 단점이 발생하게 되는데 이를 해결하고자 PGGAN에서는 표준편차 미니배치 기법을 제안한 것이다. 이를 사용하면 감별기가 미니배치 전체에 대한 기능 통계를 계산하도록 하기 위해서 실제 훈련 데이터와 휴가 회수이미지를 구별해내도록 도움을 줄 수 있다. 또한 생성된 배치 이미지에서 계산된 특징 정력학가 훈련된 일괄 처리 이미지 데이터의 정역학와 더 유사하게 만들도록 생성기가 낮은 분산값을 갖는게 아닌 더 풍부한 분산값을 갖도록 권장한다!
수렴과 훈련 속도
CELEBA-HQ 데이터 세트를 사용하여 고해상도 이미지 생성
결론
Reference
이 문제에 관하여(질을 높이는 점진적 생장 방식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/juyae/upgrade-pggan-lij텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)