นี่คือการใช้งาน pytorch ของเวกเตอร์ quantized variational autoencoder (https://arxiv.org/abs/1711.00937)
คุณสามารถค้นหาการใช้งานดั้งเดิมของผู้แต่งใน TensorFlow ได้ที่นี่ด้วยตัวอย่างที่คุณสามารถเรียกใช้ในสมุดบันทึก Jupyter
ในการติดตั้งการพึ่งพาให้สร้าง conda หรือสภาพแวดล้อมเสมือนจริงด้วย Python 3 จากนั้นเรียกใช้ pip install -r requirements.txt
ในการเรียกใช้ vq-vae เพียงเรียกใช้ python3 main.py
ตรวจสอบให้แน่ใจว่าได้รวมการตั้งค่าสถานะ -save
หากคุณต้องการบันทึกโมเดลของคุณ คุณยังสามารถเพิ่มพารามิเตอร์ในบรรทัดคำสั่ง ค่าเริ่มต้นระบุไว้ด้านล่าง:
parser . add_argument ( "--batch_size" , type = int , default = 32 )
parser . add_argument ( "--n_updates" , type = int , default = 5000 )
parser . add_argument ( "--n_hiddens" , type = int , default = 128 )
parser . add_argument ( "--n_residual_hiddens" , type = int , default = 32 )
parser . add_argument ( "--n_residual_layers" , type = int , default = 2 )
parser . add_argument ( "--embedding_dim" , type = int , default = 64 )
parser . add_argument ( "--n_embeddings" , type = int , default = 512 )
parser . add_argument ( "--beta" , type = float , default = .25 )
parser . add_argument ( "--learning_rate" , type = float , default = 3e-4 )
parser . add_argument ( "--log_interval" , type = int , default = 50 )
VQ VAE มีส่วนประกอบโมเดลพื้นฐานดังต่อไปนี้:
Encoder
ที่กำหนดแผนที่ x -> z_e
VectorQuantizer
z_e -> z_q
แปลงเอาต์พุตตัวเข้Decoder
ที่กำหนดแผนที่ z_q -> x_hat
และสร้างภาพต้นฉบับขึ้นใหม่ คลาส ENCODER / DECODER เป็นสแต็คแบบ convolutional และผกผันซึ่งรวมถึงบล็อกที่เหลือในสถาปัตยกรรมของพวกเขาดูกระดาษ Resnet แบบจำลองที่เหลือถูกกำหนดโดยคลาส ResidualLayer
และคลาส ResidualStack
ส่วนประกอบเหล่านี้ถูกจัดระเบียบในโครงสร้างโฟลเดอร์ต่อไปนี้:
models/
- decoder.py -> Decoder
- encoder.py -> Encoder
- quantizer.py -> VectorQuantizer
- residual.py -> ResidualLayer, ResidualStack
- vqvae.py -> VQVAE
ในการสุ่มตัวอย่างจากพื้นที่แฝงเราพอดีกับพิกเซลเหนือค่าพิกเซลแฝง z_ij
เคล็ดลับที่นี่คือการรับรู้ว่า VQ VAE แมปรูปภาพไปยังพื้นที่แฝงที่มีโครงสร้างเดียวกับภาพ 1 ช่อง ตัวอย่างเช่นหากคุณเรียกใช้พารามิเตอร์ VQ VAE เริ่มต้นคุณจะได้รับภาพแผนที่ RGB ของรูปร่าง (32,32,3)
ไปยังพื้นที่แฝงที่มีรูปร่าง (8,8,1)
ซึ่งเทียบเท่ากับภาพ 8x8 สีเทา ดังนั้นคุณสามารถใช้ Pixelcnn เพื่อให้พอดีกับการกระจายผ่านค่า "พิกเซล" ของพื้นที่แฝง 8x8 1 ช่องทาง
ในการฝึกอบรม Pixelcnn ในการเป็นตัวแทนแฝงคุณต้องทำตามขั้นตอนเหล่านี้ก่อน:
np.save
API ใน quantizer.py
นี่คือตัวแปร min_encoding_indices
utils.load_latent_block
ในการเรียกใช้ pixelcnn เพียงพิมพ์
python pixelcnn/gated_pixelcnn.py
เช่นเดียวกับพารามิเตอร์ใด ๆ (ดูคำสั่ง ArgParse) ชุดข้อมูลเริ่มต้นคือ LATENT_BLOCK
ซึ่งจะใช้ได้เฉพาะในกรณีที่คุณได้ฝึกอบรม VQ VAE ของคุณและบันทึกการเป็นตัวแทนแฝง