{"action":"created","issue":{"url":"https://api.github.com/repos/iperov/DeepFaceLab/issues/82","repository_url":"https://api.github.com/repos/iperov/DeepFaceLab","labels_url":"https://api.github.com/repos/iperov/DeepFaceLab/issues/82/labels{/name}","comments_url":"https://api.github.com/repos/iperov/DeepFaceLab/issues/82/comments","events_url":"https://api.github.com/repos/iperov/DeepFaceLab/issues/82/events","html_url":"https://github.com/iperov/DeepFaceLab/issues/82","id":393896836,"node_id":"MDU6SXNzdWUzOTM4OTY4MzY=","number":82,"title":"trying to implement RecycleGAN","user":{"login":"iperov","id":8076202,"node_id":"MDQ6VXNlcjgwNzYyMDI=","avatar_url":"https://avatars1.githubusercontent.com/u/8076202?v=4","gravatar_id":"","url":"https://api.github.com/users/iperov","html_url":"https://github.com/iperov","followers_url":"https://api.github.com/users/iperov/followers","following_url":"https://api.github.com/users/iperov/following{/other_user}","gists_url":"https://api.github.com/users/iperov/gists{/gist_id}","starred_url":"https://api.github.com/users/iperov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iperov/subscriptions","organizations_url":"https://api.github.com/users/iperov/orgs","repos_url":"https://api.github.com/users/iperov/repos","events_url":"https://api.github.com/users/iperov/events{/privacy}","received_events_url":"https://api.github.com/users/iperov/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":9,"created_at":"2018-12-24T15:10:03Z","updated_at":"2018-12-28T14:53:35Z","closed_at":null,"author_association":"OWNER","body":"My gtx1060 6GB can run recycle only with 1 batch size.\r\n\r\nwhat I got on first epochs, predictings just stuck on dots, is it normal?\r\n\r\n![python_2018-12-24_19-07-16](https://user-images.githubusercontent.com/8076202/50402312-28ff4500-07af-11e9-8712-d142dbd9cae2.jpg)\r\n\r\nany advices???\r\n\r\nmodel sizes:\r\n\r\n![explorer_2018-12-24_19-05-04](https://user-images.githubusercontent.com/8076202/50402276-d45bca00-07ae-11e9-9102-a1053286f83a.jpg)\r\n\r\ncode:\r\n\r\n```\r\ndef UNet(keras, tf, input_shape, output_nc, num_downs, ngf=64, use_dropout=False):\r\n    Conv2D = keras.layers.convolutional.Conv2D\r\n    Conv2DTranspose = keras.layers.convolutional.Conv2DTranspose\r\n    LeakyReLU = keras.layers.advanced_activations.LeakyReLU\r\n    BatchNormalization = keras.layers.BatchNormalization\r\n    ReLU = keras.layers.ReLU\r\n    tanh = keras.layers.Activation('tanh')\r\n    Dropout = keras.layers.Dropout\r\n    Concatenate = keras.layers.Concatenate\r\n    ZeroPadding2D = keras.layers.ZeroPadding2D\r\n    \r\n    conv_kernel_initializer = keras.initializers.RandomNormal(0, 0.02)\r\n    norm_gamma_initializer = keras.initializers.RandomNormal(1, 0.02)\r\n    \r\n    input = keras.layers.Input (input_shape)\r\n    \r\n    def UNetSkipConnection(outer_nc, inner_nc, sub_model=None, outermost=False, innermost=False, use_dropout=False):       \r\n        def func(inp):\r\n            downconv_pad = ZeroPadding2D( (1,1) )\r\n            downconv = Conv2D(inner_nc, kernel_size=4, kernel_initializer=conv_kernel_initializer, strides=2, padding='valid', use_bias=False)\r\n            downrelu = LeakyReLU(0.2)        \r\n            downnorm = BatchNormalization( gamma_initializer=norm_gamma_initializer )        \r\n            \r\n            upconv = Conv2DTranspose(outer_nc, kernel_size=4, kernel_initializer=conv_kernel_initializer, strides=2, padding='same', use_bias=False)\r\n            uprelu = ReLU()\r\n            upnorm = BatchNormalization( gamma_initializer=norm_gamma_initializer )\r\n            \r\n            if outermost:      \r\n                x = inp\r\n                x = downconv(downconv_pad(x))\r\n                x = sub_model(x)\r\n                x = uprelu(x)\r\n                x = upconv(x)\r\n                x = tanh(x)            \r\n            elif innermost:           \r\n                x = inp\r\n                x = downrelu(x)\r\n                x = downconv(downconv_pad(x))\r\n                x = uprelu(x)\r\n                x = upconv(x)\r\n                x = upnorm(x)   \r\n                x = Concatenate(axis=3)([inp, x])                                \r\n            else:\r\n                x = inp\r\n                x = downrelu(x)\r\n                x = downconv(downconv_pad(x))\r\n                x = downnorm(x)\r\n                x = sub_model(x)\r\n                x = uprelu(x)                \r\n                x = upconv(x)\r\n                x = upnorm(x)                \r\n                if use_dropout:\r\n                    x = Dropout(0.5)(x)        \r\n                x = Concatenate(axis=3)([inp, x])\r\n\r\n            return x           \r\n            \r\n        return func\r\n        \r\n\r\n    unet_block = UNetSkipConnection(ngf * 8, ngf * 8, sub_model=None, innermost=True)\r\n\r\n    #for i in range(num_downs - 5):\r\n    #    unet_block = UNetSkipConnection(ngf * 8, ngf * 8, sub_model=unet_block, use_dropout=use_dropout)\r\n    \r\n    unet_block = UNetSkipConnection(ngf * 4  , ngf * 8, sub_model=unet_block)\r\n    unet_block = UNetSkipConnection(ngf * 2  , ngf * 4, sub_model=unet_block)\r\n    unet_block = UNetSkipConnection(ngf      , ngf * 2, sub_model=unet_block)\r\n    unet_block = UNetSkipConnection(output_nc, ngf    , sub_model=unet_block, outermost=True)\r\n    \r\n    x = input\r\n    x = unet_block(x)\r\n    \r\n    return keras.models.Model (input,x)\r\n\r\n#predicts based on two past_image_tensors\r\ndef UNetTemporalPredictor(keras, tf, input_shape, output_nc, num_downs, ngf=32, use_dropout=False):\r\n    K = keras.backend\r\n    Conv2D = keras.layers.convolutional.Conv2D\r\n    Conv2DTranspose = keras.layers.convolutional.Conv2DTranspose\r\n    LeakyReLU = keras.layers.advanced_activations.LeakyReLU\r\n    BatchNormalization = keras.layers.BatchNormalization\r\n    ReLU = keras.layers.ReLU\r\n    tanh = keras.layers.Activation('tanh')\r\n    ReflectionPadding2D = ReflectionPadding2DClass(keras, tf)\r\n    ZeroPadding2D = keras.layers.ZeroPadding2D\r\n    Dropout = keras.layers.Dropout\r\n    Concatenate = keras.layers.Concatenate\r\n    \r\n    conv_kernel_initializer = keras.initializers.RandomNormal(0, 0.02)\r\n    norm_gamma_initializer = keras.initializers.RandomNormal(1, 0.02)\r\n\r\n    past_2_image_tensor = keras.layers.Input (input_shape)\r\n    past_1_image_tensor = keras.layers.Input (input_shape)\r\n    \r\n    def model1(input_shape):   \r\n        input = keras.layers.Input (input_shape)\r\n        x = input\r\n        x = ReflectionPadding2D((3,3))(x)\r\n        x = Conv2D(ngf, kernel_size=7, kernel_initializer=conv_kernel_initializer, strides=1, padding='valid', use_bias=False)(x)\r\n        x = BatchNormalization( gamma_initializer=norm_gamma_initializer )(x)\r\n        x = ReLU()(x)\r\n        \r\n        x = ZeroPadding2D((1,1))(x)\r\n        x = Conv2D(ngf*2, kernel_size=3, kernel_initializer=conv_kernel_initializer, strides=1, padding='valid', use_bias=False)(x)\r\n        x = BatchNormalization( gamma_initializer=norm_gamma_initializer )(x)\r\n        x = ReLU()(x)\r\n        \r\n        x = ZeroPadding2D((1,1))(x)\r\n        x = Conv2D(ngf*4, kernel_size=3, kernel_initializer=conv_kernel_initializer, strides=1, padding='valid', use_bias=False)(x)\r\n        x = BatchNormalization( gamma_initializer=norm_gamma_initializer )(x)\r\n        x = ReLU()(x)\r\n        \r\n        return keras.models.Model(input, x)\r\n        \r\n    def model3(input_shape):\r\n        input = keras.layers.Input (input_shape)\r\n        x = input\r\n        \r\n        x = ZeroPadding2D((1,1))(x)\r\n        x = Conv2D(ngf*2, kernel_size=3, kernel_initializer=conv_kernel_initializer, strides=1, padding='valid', use_bias=False)(x)\r\n        x = BatchNormalization( gamma_initializer=norm_gamma_initializer )(x)\r\n        x = ReLU()(x)\r\n        \r\n        x = ZeroPadding2D((1,1))(x)\r\n        x = Conv2D(ngf, kernel_size=3, kernel_initializer=conv_kernel_initializer, strides=1, padding='valid', use_bias=False)(x)\r\n        x = BatchNormalization( gamma_initializer=norm_gamma_initializer )(x)\r\n        x = ReLU()(x)\r\n        \r\n        x = ReflectionPadding2D((3,3))(x)\r\n        x = Conv2D(output_nc, kernel_size=7, kernel_initializer=conv_kernel_initializer, strides=1, padding='valid', use_bias=False)(x)\r\n        x = tanh(x)\r\n        return keras.models.Model(input, x)\r\n    \r\n    x = Concatenate(axis=3)([ model1(input_shape)(past_2_image_tensor), model1(input_shape)(past_1_image_tensor) ])\r\n\r\n    unet = UNet(keras, tf, K.int_shape(x)[1:], ngf*4, num_downs=num_downs, ngf=ngf*4*2, #ngf=ngf*4*4,\r\n                        use_dropout=use_dropout)\r\n                        \r\n    x = unet(x)\r\n    x = model3 ( K.int_shape(x)[1:] ) (x)\r\n\r\n    return keras.models.Model ( [past_2_image_tensor,past_1_image_tensor], x )\r\n```\r\n\r\n```\r\ndef Resnet(keras, tf, input_shape, output_nc, ngf=64, use_dropout=False, n_blocks=6):\r\n    Conv2D = keras.layers.convolutional.Conv2D\r\n    Conv2DTranspose = keras.layers.convolutional.Conv2DTranspose\r\n    LeakyReLU = keras.layers.advanced_activations.LeakyReLU\r\n    BatchNormalization = keras.layers.BatchNormalization\r\n    ReLU = keras.layers.ReLU\r\n    Add = keras.layers.Add\r\n    tanh = keras.layers.Activation('tanh')\r\n    ReflectionPadding2D = ReflectionPadding2DClass(keras, tf)\r\n    ZeroPadding2D = keras.layers.ZeroPadding2D\r\n    Dropout = keras.layers.Dropout\r\n    Concatenate = keras.layers.Concatenate\r\n    \r\n    conv_kernel_initializer = keras.initializers.RandomNormal(0, 0.02)\r\n    norm_gamma_initializer = keras.initializers.RandomNormal(1, 0.02)\r\n    use_bias = False\r\n\r\n    input = keras.layers.Input (input_shape)\r\n    \r\n    def ResnetBlock(dim, use_dropout, use_bias):    \r\n        def func(inp):\r\n            x = inp\r\n            \r\n            x = ReflectionPadding2D((1,1))(x)\r\n            x = Conv2D(dim, kernel_size=3, kernel_initializer=conv_kernel_initializer, padding='valid', use_bias=use_bias)(x)\r\n            x = BatchNormalization( gamma_initializer=norm_gamma_initializer )(x)\r\n            x = ReLU()(x)\r\n            \r\n            if use_dropout:\r\n                x = Dropout(0.5)(x)\r\n                \r\n            x = ReflectionPadding2D((1,1))(x)\r\n            x = Conv2D(dim, kernel_size=3, kernel_initializer=conv_kernel_initializer, padding='valid', use_bias=use_bias)(x)\r\n            x = BatchNormalization( gamma_initializer=norm_gamma_initializer )(x)    \r\n            return Add()([x,inp])            \r\n        return func\r\n\r\n    x = input\r\n    \r\n    x = ReflectionPadding2D((3,3))(x)\r\n    x = Conv2D(ngf, kernel_size=7, kernel_initializer=conv_kernel_initializer, padding='valid', use_bias=use_bias)(x)\r\n    x = BatchNormalization( gamma_initializer=norm_gamma_initializer )(x)\r\n    x = ReLU()(x)\r\n    \r\n    n_downsampling = 2\r\n    for i in range(n_downsampling):            \r\n        x = ZeroPadding2D( (1,1) ) (x)\r\n        x = Conv2D(ngf * (2**i) * 2, kernel_size=3, kernel_initializer=conv_kernel_initializer, strides=2, padding='valid', use_bias=use_bias)(x)\r\n        x = BatchNormalization( gamma_initializer=norm_gamma_initializer )(x)\r\n        x = ReLU()(x)\r\n    \r\n    for i in range(n_blocks):\r\n        x = ResnetBlock(ngf*(2**n_downsampling), use_dropout=use_dropout, use_bias=use_bias)(x)\r\n    \r\n    for i in range(n_downsampling):\r\n        x = Conv2DTranspose( int(ngf* (2**(n_downsampling - i)) /2), kernel_size=3, kernel_initializer=conv_kernel_initializer, strides=2, padding='same', output_padding=1, use_bias=use_bias)(x)\r\n        x = BatchNormalization( gamma_initializer=norm_gamma_initializer )(x)\r\n        x = ReLU()(x)\r\n    \r\n    \r\n        \r\n    x = ReflectionPadding2D((3,3))(x)\r\n    x = Conv2D(output_nc, kernel_size=7, kernel_initializer=conv_kernel_initializer, padding='valid')(x)\r\n    x = tanh(x)\r\n    \r\n    return keras.models.Model(input, x)\r\n```\r\n\r\n```\r\ndef NLayerDiscriminator(keras, tf, input_shape, ndf=64, n_layers=3, use_sigmoid=False):\r\n    Conv2D = keras.layers.convolutional.Conv2D\r\n    LeakyReLU = keras.layers.advanced_activations.LeakyReLU\r\n    BatchNormalization = keras.layers.BatchNormalization\r\n    sigmoid = keras.layers.Activation('sigmoid')\r\n    ZeroPadding2D = keras.layers.ZeroPadding2D\r\n    conv_kernel_initializer = keras.initializers.RandomNormal(0, 0.02)\r\n    norm_gamma_initializer = keras.initializers.RandomNormal(1, 0.02)\r\n    use_bias = False\r\n    \r\n    input = keras.layers.Input (input_shape, name=\"NLayerDiscriminatorInput\") ###\r\n    \r\n    x = input\r\n    x = ZeroPadding2D( (1,1) ) (x)\r\n    x = Conv2D(ndf, kernel_size=4, kernel_initializer=conv_kernel_initializer, strides=2, padding='valid', use_bias=use_bias)(x)\r\n    x = LeakyReLU(0.2)(x)\r\n    \r\n    nf_mult = 1\r\n    nf_mult_prev = 1\r\n    for n in range(1, n_layers):\r\n        nf_mult = min(2**n, 8)\r\n        \r\n        x = ZeroPadding2D( (1,1) ) (x)\r\n        x = Conv2D(ndf * nf_mult, kernel_size=4, kernel_initializer=conv_kernel_initializer, strides=2, padding='valid', use_bias=use_bias)(x)\r\n        x = BatchNormalization( gamma_initializer=norm_gamma_initializer )(x)\r\n        x = LeakyReLU(0.2)(x)\r\n        \r\n    nf_mult = min(2**n_layers, 8)\r\n    \r\n    #x = ZeroPadding2D( (1,1) ) (x)\r\n    x = Conv2D(ndf * nf_mult, kernel_size=4, kernel_initializer=conv_kernel_initializer, strides=1, padding='same', use_bias=use_bias)(x)\r\n    x = BatchNormalization( gamma_initializer=norm_gamma_initializer )(x)\r\n    x = LeakyReLU(0.2)(x)\r\n    \r\n    #x = ZeroPadding2D( (1,1) ) (x)\r\n    x = Conv2D(1, kernel_size=4, kernel_initializer=conv_kernel_initializer, strides=1, padding='same', use_bias=use_bias)(x)\r\n    \r\n    if use_sigmoid:\r\n        x = sigmoid(x)\r\n        \r\n    return keras.models.Model (input,x)\r\n```\r\n\r\n```\r\nbgr_shape = (256, 256, 3)\r\n        ngf = 64\r\n        npf = 8\r\n        ndf = 64\r\n        lambda_A = 10\r\n        lambda_B = 10\r\n\r\n        self.GA = Resnet (keras, tf, input_shape=bgr_shape, output_nc=bgr_shape[2], n_blocks=9, ngf=ngf, use_dropout=True)\r\n        self.GB = Resnet (keras, tf, input_shape=bgr_shape, output_nc=bgr_shape[2], n_blocks=9, ngf=ngf, use_dropout=True)\r\n        \r\n        self.PA = UNetTemporalPredictor(keras, tf, input_shape=bgr_shape, output_nc=bgr_shape[2], num_downs=6, ngf=npf, use_dropout=True)\r\n        self.PB = UNetTemporalPredictor(keras, tf, input_shape=bgr_shape, output_nc=bgr_shape[2], num_downs=6, ngf=npf, use_dropout=True)\r\n        \r\n        self.DA = NLayerDiscriminator(keras, tf, input_shape=bgr_shape, n_layers=3)\r\n        self.DB = NLayerDiscriminator(keras, tf, input_shape=bgr_shape, n_layers=3)\r\n        \r\n        if not self.is_first_run():\r\n            self.GA.load_weights (self.get_strpath_storage_for_file(self.GAH5))\r\n            self.DA.load_weights (self.get_strpath_storage_for_file(self.DAH5))\r\n            self.PA.load_weights (self.get_strpath_storage_for_file(self.PAH5))\r\n            self.GB.load_weights (self.get_strpath_storage_for_file(self.GBH5))\r\n            self.DB.load_weights (self.get_strpath_storage_for_file(self.DBH5))\r\n            self.PB.load_weights (self.get_strpath_storage_for_file(self.PBH5))\r\n            \r\n        real_A0 = self.keras.layers.Input(bgr_shape, name=\"real_A0\")\r\n        real_A1 = self.keras.layers.Input(bgr_shape, name=\"real_A1\")\r\n        real_A2 = self.keras.layers.Input(bgr_shape, name=\"real_A2\")\r\n        \r\n        real_B0 = self.keras.layers.Input(bgr_shape, name=\"real_B0\")\r\n        real_B1 = self.keras.layers.Input(bgr_shape, name=\"real_B1\")\r\n        real_B2 = self.keras.layers.Input(bgr_shape, name=\"real_B2\")\r\n        \r\n        DA_ones =  K.ones ( K.int_shape(self.DA.outputs[0])[1:] )\r\n        DA_zeros = K.zeros ( K.int_shape(self.DA.outputs[0])[1:] )\r\n        DB_ones = K.ones ( K.int_shape(self.DB.outputs[0])[1:] )\r\n        DB_zeros = K.zeros ( K.int_shape(self.DB.outputs[0])[1:] )\r\n\r\n        fake_B0 = self.GA(real_A0)\r\n        loss_G_A0 = K.mean(K.square(self.DA(fake_B0) - DA_ones))\r\n        \r\n        fake_B1 = self.GA(real_A1)\r\n        loss_G_A1 = K.mean(K.square(self.DA(fake_B1) - DA_ones))\r\n        \r\n        fake_B2 = self.PB ( [fake_B0, fake_B1] ) #predict future        \r\n        loss_G_A2 = K.mean(K.square(self.DA(fake_B2) - DA_ones))\r\n \r\n        fake_A0 = self.GB(real_B0)\r\n        loss_G_B0 = K.mean(K.square(self.DB(fake_A0) - DB_ones))\r\n        \r\n        fake_A1 = self.GB(real_B1)\r\n        loss_G_B1 = K.mean(K.square(self.DB(fake_A1) - DB_ones))\r\n        \r\n        fake_A2 = self.PA ( [fake_B0, fake_B1] ) #predict future        \r\n        loss_G_B2 = K.mean(K.square(self.DB(fake_A2) - DB_ones))\r\n        \r\n        \r\n        pred_A2 = self.PA ( [real_A0, real_A1])\r\n        loss_pred_A = K.mean(K.abs(pred_A2 - real_A2)) * lambda_A\r\n        \r\n        pred_B2 = self.PB ( [real_B0, real_B1])\r\n        loss_pred_B = K.mean(K.abs(pred_B2 - real_B2)) * lambda_B\r\n        \r\n        rec_A = self.GB (fake_B2)\r\n        loss_cycle_A = K.mean(K.abs(rec_A - real_A2)) * lambda_A\r\n        \r\n        rec_B = self.GA (fake_A2)\r\n        loss_cycle_B = K.mean(K.abs(rec_B - real_B2)) * lambda_B\r\n        \r\n        loss_G = loss_G_A0 + loss_G_A1 + loss_G_A2 + loss_G_B0 + loss_G_B1 + loss_G_B2 + loss_cycle_A + loss_cycle_B + loss_pred_A + loss_pred_B\r\n        \r\n        weights_G = self.GA.trainable_weights + self.GB.trainable_weights + self.PA.trainable_weights + self.PB.trainable_weights\r\n        \r\n        self.G_train = K.function ([real_A0, real_A1, real_A2, real_B0, real_B1, real_B2],[loss_G],\r\n                                    self.keras.optimizers.Adam(lr=2e-4, beta_1=0.5, beta_2=0.999).get_updates(loss_G, weights_G) )\r\n        \r\n        \r\n        ###########\r\n        \r\n        loss_D_A0 = ( K.mean(K.square( self.DA(real_B0) - DA_ones)) + \\\r\n                      K.mean(K.square( self.DA(fake_B0) - DA_zeros)) ) * 0.5\r\n        \r\n        loss_D_A1 = ( K.mean(K.square( self.DA(real_B1) - DA_ones)) + \\\r\n                      K.mean(K.square( self.DA(fake_B1) - DA_zeros)) ) * 0.5\r\n                      \r\n        loss_D_A2 = ( K.mean(K.square( self.DA(real_B2) - DA_ones)) + \\\r\n                      K.mean(K.square( self.DA(fake_B2) - DA_zeros)) ) * 0.5\r\n                      \r\n        loss_D_A3 = ( K.mean(K.square( self.DA(real_B2) - DA_ones)) + \\\r\n                      K.mean(K.square( self.DA(pred_B2) - DA_zeros)) ) * 0.5\r\n\r\n        loss_D_A = loss_D_A0 + loss_D_A1 + loss_D_A2 + loss_D_A3\r\n        \r\n        self.DA_train = K.function ([real_A0, real_A1, real_A2, real_B0, real_B1, real_B2],[loss_D_A],\r\n                                    self.keras.optimizers.Adam(lr=2e-4, beta_1=0.5, beta_2=0.999).get_updates(loss_D_A, self.DA.trainable_weights) )\r\n        \r\n        ############\r\n        \r\n        \r\n        loss_D_B0 = ( K.mean(K.square( self.DB(real_A0) - DB_ones)) + \\\r\n                      K.mean(K.square( self.DB(fake_A0) - DB_zeros)) ) * 0.5\r\n        \r\n        loss_D_B1 = ( K.mean(K.square( self.DB(real_A1) - DB_ones)) + \\\r\n                      K.mean(K.square( self.DB(fake_A1) - DB_zeros)) ) * 0.5\r\n                      \r\n        loss_D_B2 = ( K.mean(K.square( self.DB(real_A2) - DB_ones)) + \\\r\n                      K.mean(K.square( self.DB(fake_A2) - DB_zeros)) ) * 0.5\r\n                      \r\n        loss_D_B3 = ( K.mean(K.square( self.DB(real_A2) - DB_ones)) + \\\r\n                      K.mean(K.square( self.DB(pred_A2) - DB_zeros)) ) * 0.5              \r\n                      \r\n        loss_D_B = loss_D_B0 + loss_D_B1 + loss_D_B2 + loss_D_B3\r\n        \r\n        self.DB_train = K.function ([real_A0, real_A1, real_A2, real_B0, real_B1, real_B2],[loss_D_B],\r\n                                    self.keras.optimizers.Adam(lr=2e-4, beta_1=0.5, beta_2=0.999).get_updates(loss_D_B, self.DB.trainable_weights) )\r\n        \r\n        ############\r\n```"},"comment":{"url":"https://api.github.com/repos/iperov/DeepFaceLab/issues/comments/450371292","html_url":"https://github.com/iperov/DeepFaceLab/issues/82#issuecomment-450371292","issue_url":"https://api.github.com/repos/iperov/DeepFaceLab/issues/82","id":450371292,"node_id":"MDEyOklzc3VlQ29tbWVudDQ1MDM3MTI5Mg==","user":{"login":"Eleganze","id":37071118,"node_id":"MDQ6VXNlcjM3MDcxMTE4","avatar_url":"https://avatars0.githubusercontent.com/u/37071118?v=4","gravatar_id":"","url":"https://api.github.com/users/Eleganze","html_url":"https://github.com/Eleganze","followers_url":"https://api.github.com/users/Eleganze/followers","following_url":"https://api.github.com/users/Eleganze/following{/other_user}","gists_url":"https://api.github.com/users/Eleganze/gists{/gist_id}","starred_url":"https://api.github.com/users/Eleganze/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Eleganze/subscriptions","organizations_url":"https://api.github.com/users/Eleganze/orgs","repos_url":"https://api.github.com/users/Eleganze/repos","events_url":"https://api.github.com/users/Eleganze/events{/privacy}","received_events_url":"https://api.github.com/users/Eleganze/received_events","type":"User","site_admin":false},"created_at":"2018-12-28T14:53:35Z","updated_at":"2018-12-28T14:53:35Z","author_association":"NONE","body":"I can test this on 4 Tesla GPU’s when the code is ready\n\nOutlook<https://aka.ms/qtex0l> / iOS\n\n________________________________\nFra: iperov <notifications@github.com>\nSendt: fredag, desember 28, 2018 2:56 pm\nTil: iperov/DeepFaceLab\nKopi: Subscribed\nEmne: Re: [iperov/DeepFaceLab] trying to implement RecycleGAN (#82)\n\n\nI found another implementation of RecycleGAN https://github.com/SerialLain3170/VideoProcessing/tree/master/Recycle-GAN\nand it is differs from aayushbansal/Recycle-GAN\n\n—\nYou are receiving this because you are subscribed to this thread.\nReply to this email directly, view it on GitHub<https://github.com/iperov/DeepFaceLab/issues/82#issuecomment-450362951>, or mute the thread<https://github.com/notifications/unsubscribe-auth/AjWpDqcPrxPUTPlPxOF0FaXckLPfwjTbks5u9iMpgaJpZM4ZghC->.\n"}}
{"actor":{"display_login":"Eleganze"}}