1. 程式人生 > >對抗式生成網路---驗證碼的生成

對抗式生成網路---驗證碼的生成

最近看生成式對抗網路,做了一點有意思的事情,發現這個東西用於生成驗證碼真是太爽了,當然精度還有待提高。

傳送門
關於生成式對抗網路的原理,自己百度下很多博文
條件生成式對抗網路,也有很多

概述
使用的原始域影象為SVHN資料集(老外的門牌號數字),目標域影象為MINST資料集,利用生成式對抗網路可以完成下圖的轉換。看見這個我想起讓我想起了12306的驗證碼,這讓我覺得生成式對抗網路可能會應用於Anti-spam工作。

這裡寫圖片描述

原工作概述
上面的工作來自於《UNSUPERVISED CROSS-DOMAIN IMAGE GENERATION》這篇論文,其原理圖如下
這裡寫圖片描述

f相當於一個編碼器使用的是卷積網路,g相當於解碼器使用的是反捲積網路,兩者合併起來相當於G生成網路,D是用來同生成網路對抗訓練的鑑別網路使用的為卷積網路,這兩部分是比較原始的條件生成式對抗網路。在此基礎上,又利用共享的權重對於G生成的影象再次輸入到f中,計算f(g(x))和f(x)的L1損失,其中x為輸入的影象。這一改進通俗的說就是無論你是什麼形式的圖片(SVHN還是MINIST)你經過卷積提取出的高維特徵都應該是一樣,因為你們本質上表達的資訊都是“同一個數字”。此外,作者在這裡還改進了一點就是將目標域影象也輸入到G網路中那麼他生成的網路應該仍然是目標域的影象。

原工作的訓練

預設已經知道原始生成式對抗網路的訓練過程

  • 預訓練
    這篇論文說是無監督的訓練,但是在f編碼器使用的時候需要對其進行預訓練,並且是有監督的訓練。
    1)設計好f編碼網路,在其最後一層加上softmax層用於輸入“0-9”的結果
    2)使用原始域(SVHN資料集)並且帶有標籤的,對1)中的網路進行有監督的分類訓練
    3)將最後一層softmax層去除,連線g解碼網路

  • 對抗網路的損失
    只要是生成網路生成的影象都是負樣本,目標域影象是正樣本,使用的是crossentropy損失函式

  • 生成網路的損失
    1)來自對抗網路的鑑別損失;2)兩個f編碼器的L1損失,3)輸入目標域影象與生成的目標域的L1損失

  • 總結
    使用了原論文的設計跑出來的效果還算可以,但是預訓練是有監督的訓練跟論文題目說的無監督有點相悖,以下我改進了一點,主要提升了轉換後的準確率和清晰度

改進的網路結構
這裡寫圖片描述

改進說明
既然原文使用的資料都是有標籤的,且f編碼網路使用了有監督的預訓練,博主借鑑了pix2pix的思想,直接改成有監督的訓練。
1)兩個f編碼網路最後一層L1損失,反映的最後一層損失,按此思路在其之前輸出應該也同樣存在著損失,所以我增加了多層之間的損失
2)既然有了真實的標籤,那麼轉換後生成的目標域影象就能和真實的影象進行損失計算,這裡使用的同樣是L1的損失
3)D鑑別網路原論文使用的是簡單的二分類網路,提供的損失只是真假

資訊,但是哪個部分真哪個部位假這些資訊沒有提供,於是我使用“PatchGAN”裡面的鑑別網路,即使用卷積層最為D鑑別網路的輸出,使用的“Patch”思想,這樣做的能提高清晰度,如下圖
這裡寫圖片描述
使用“patchGAN還是有效果的”,同樣的迭代清晰與非清晰對比還是比較明顯的。

關於原始碼
只能給你們一個《UNSUPERVISED CROSS-DOMAIN IMAGE GENERATION》的傳送門了,自己的原始碼可能不能馬上公佈,還有些試驗要使用。
https://github.com/yunjey/domain-transfer-network

相關推薦

對抗生成網路---驗證生成

最近看生成式對抗網路,做了一點有意思的事情,發現這個東西用於生成驗證碼真是太爽了,當然精度還有待提高。 傳送門 關於生成式對抗網路的原理,自己百度下很多博文 條件生成式對抗網路,也有很多 概述 使用的原始域影象為SVHN資料集(老外的門牌號數字

PHP GD 生成圖片驗證+session獲取儲存驗證

mark ast rac alloc orm ext random col nbsp 以下分享一個PHP制作的圖片驗證碼案例:案比例如以下圖: 運用PHP GD具體請看:http://www.php.net/manual/zh/book.im

Python 生成隨機驗證

安裝 alt rndc 字母 .text key red 圖片查看 fill Python生成隨機驗證碼 Python生成隨機驗證碼,需要使用PIL模塊. 安裝: 1 pip3 install pillow 基本使用 1. 創建圖片

生成隨機驗證的方法

隨機驗證碼 clas pan 我們 -s string elif else 驗證 1、借助列表 import random def random_code(): random_list = [] for i in range(4): ra

java生成簡單驗證圖片

沒有 setfont red width public bre 成功 edi args 概要   最近項目需要用java實現輸出隨機驗證碼圖片到前臺,正好有機會接觸下java的繪圖類,完成需求後也有時間做個總結,寫篇隨筆記錄下也希望能幫助到有同樣需求的人! 需求流程圖 1

用Canvas生成隨機驗證(後端前端都可以)

ntb inf pre text contex back data listen nload 一 、使用前端生成驗證碼 <!DOCTYPE html> <html> <head> <meta charse

驗證生成驗證

+= pan onclick eat insert round tty ntb 驗證碼生成 js /**從b * */ var code ; //在全局定義驗證碼 //產生驗證碼 window.onload = function createCode(){

java生成圖片驗證實現

isp tex version edi ade 頁面 類型 logs exp 兩種圖片樣式分別是用Graphics類和Graphics2D 類實現(Graphics2D擴展了Graphics類),可以參考資料,畫出自己想要的圖片 Graphics2D 參考api地址:ht

驗證生成工具

ray 位置 next create web hist awt public let CaptchaUnit.javapackage com.jason.www.common;import java.awt.*;import java.awt.image.BufferedI

jquery如何生成圖片驗證

sla style ctx ott etc func max ++ 導致 jQuery(function($){ /**生成一個隨機數**/ function randomNum(min, max) { return Math.f

thinkphp生成驗證不顯示問題解決

復制 出現問題 get tar 內容 題解 出現 clean span 在調用驗證碼之前加上 ob_clean();不顯示驗證碼的代碼: public function verify(){ $verify = new \Think\V

PHP生成圖片驗證、點擊切換實例

調用 ret image etc 格式 點擊切換 article png get http://www.jb51.net/article/51506.htm 現在讓我們來看下 PHP 代碼 復制代碼代碼如下: <?php session_start();functi

java圖形驗證生成工具類及web頁面校驗驗證

組合 line des resp word buffere 需要 case ali 最近做驗證碼,參考網上案例,發現有不少問題,特意進行了修改和完善。驗證碼生成器:[ht

python生成圖片驗證

per ont 字符 ESS ext ttf 隨機 dom ice import PIL from PIL import Image from PIL import ImageDraw,ImageFont import random def get_r

生成隨機驗證

emp OS [] () 隨機 style odin utf str #coding=utf-8方法一import random checkcode=‘‘for i in range(4): #0,1,2,3 current=random.randrange(

強大的驗證生成模塊

繁體字 new ase import ini lse 圖片 codes ID # 首先要安裝PIL庫 pip3 install pillow from PIL import Image, ImageDraw, ImageFont, ImageFilter import

Net Core 生成圖形驗證

max 輸出 from sys 驗證碼 format bitmap reg length 1. NetCore ZKweb 在我第一次繪制圖形驗證碼時是采用的ZKweb的繪制庫,奉上代碼參考 1 public byte[] GetVerifyC

python生成隨機驗證

python生成隨機密碼 random模塊生成隨機密碼 一、生成隨機驗證碼(純數字及字母加數字): import random import string checkcod=‘‘ for i in range(5): #5位驗證碼 ‘‘‘ #純數字驗證碼 #隨機值1-9取可

登陸頁面的驗證生成驗證

數字 name ron als ntc per null 註冊 errorlog 登陸頁面的驗證碼生成與驗證 特點:基於strurs2框架 減少對數據庫的訪問次數 避免無效的訪問 提高服務器的性能 1 登陸界面:基於struts2框架 <s:src actio

JS驗證生成(入門級別)

mage default etc 更換 默認 function asc col lineto 練手項目:JavaScript驗證碼 1 <!DOCTYPE html> 2 <html> 3 4 <head> 5