Class Project using Deep Learning and GANs
Clone or download
Pull request Compare This branch is 2 commits behind lisafan:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
docker
docs
old_pix2pix
server
tools
README
discrim_only.py
pen_test.py
pix2pix.py
pix2pix_2n.py
pix2pix_2n2n.py
pix2pix_2n2n_discrim.py
pix2pix_2n_rf.py
pix2pix_cond.py
pix2pix_cond_n.py
pix2pix_cond_nplus1.py
pix2pix_cond_pen.py
pix2pix_nplus1.py
pix2pix_orig.py
pix2pix_pen.py
pix2pix_penalty.py
pix2pix_penalty2.py
pix2pix_rf_class.py

README

To Run:

    python pix2pix_.py --mode train --output_dir /a/data/grp1/two_n_ --max_epochs 100 --input_dir /a/data/grp1/sketch_photo_pairs/train/ --which_direction AtoB --save_freq 1000 --display_freq 500

In tools directory:

-incpetion_score.py
    Calculates inception score for images in input directory

-combine.py
	Creates input data by putting sketches and photos side by side in a single png

-move.py
	Moves images from images folder into batch directories

-collage.py
	Takes images from a batch and puts them into one png
	Makes three files for input, output, and target images

-gen_val2.py
	Takes generated images and runs them through Inception classifier
	Need to change input_dir line in main
	Prints misclassified data, Top 1 accuracy, and Top 5 accuracy

-gen_val3.py
	Takes generated images and runs them through Inception classifier
	Need to change input_dir line in main
	Dumps top1/top5 accuracy by class to a json
	Need to change output_file in run_inference

Models:

- pix2pix_2n.py
    Discrim loss: real/fake cross entropy + class cross entropy
    Generator loss: fake cross entropy + class cross entropy
    Treats both sides of 2n vector as n classes, disregards real/fake

- pix2pix_penalty2.py
    Discrim loss: (2N real cross entropy + 2N fake cross entropy) * penalties
    Generator loss: 2N fake cross entropy * penalties + L1 distance
    No unsupervised loss

    

POTENTIAL EXPERIMENTS:
     X  1. N+1 loss (baseline)  (pix2pix_nplus1.py)
        2. Inception scoring
     X  3. Combine classes in loss for 2N (pix2pix_2n.py)
		-Discrim loss: real/fake cross entropy + class cross entropy
		-Generator loss: fake cross entropy + class cross entropy
     X  4. Remove real/fake in loss for penalties (pix2pix_penalty2.py)
		-Discrim loss: (2N real cross entropy + 2N fake cross entropy) * penalties
		-Generator loss: 2N fake cross entropy * penalties + L1 distance
        5. Preprocess original photos with image segmentation  [Sam]
     X  6. Make penalty mask a function
     X  7. Add class condition to generator with just real/fake discriminator (pix2pix_cond_n.py)

** pix2pix_cond_n.py and pix2pix_2n.py and pix2pix_penalty2.py are untested but should be ready to run as soon as a gpu opens up
** pix2pix_penalty2.py has a separate function for getting the penalty mask, should copy over to pix2pix_penalty.py once tested
** N+1 also done but not tested

Paper:
    file_name, data_directory

    ======== Base Line =========
    1. pix2pix_orig.py, orig: out of the box version (seems to generate the
      best images). discrim: real / fake, gen: real / fake
      (Running on GPU 8)

    ======== Improved Techniques GANs (N+1)  ======
    2. pix2pix_nplus1.py, nplus1: baseline model
    (Running on GPU 1)

    ======== 2n output layer =======
    3a. pix2pix_rf_class.py, 2n: discrim - class loss cross entropy and real fake
      generator - class loss and real fake 

    XXX3b. two_n2: discrim: real fake + 2n, gen: real fake 

    3c. pix2pix_2n2n.py, 2n2n: discrim: 2n, 2n
    
    3d. 2n_rf: discrim: real fake + 2n, gen: real fake + 2n

    ======== Conditional pix2pix =====
    4a. pix2pix_cond_n.py, cond_n: basline discriminator with class conditional
    generator (TODO: if this is better than Base Line add it to 2N below)

    4b. pix2pix_cond_nplus1.py, : conditional with nplus1 loss

    XXX4b. pix2pix_cond.py, two_n_cond: conditional generator, has real fake 
    loss and 2n loss. TODO: get rid of real fake loss

    ======== Penalty =======
    5a. pix2pix_pen.py, pen: 2n loss (no real fake) and penalty

    XXX5b. pix2pix_penalty.py, two_n_pen: 2n loss with penalty and real fake loss

    - two_n: ??? 

    ======== Super Model =====

    6. TODO: take best of penalty (yes no) and conditional (yes no)

    ======= Pre-Processing: Segmentation Mask =======

    7. TODO: runn on Baseline, N+1, and Super Model

    ========= Evaluation =======

    8. TODO: inception score + qualitative + semi-supervised classification accuracy
    inception scores:
        1. all original photos: ('scores mean:', 9.1729546, ' scores std:', 0.90772361)
        2. validation photos: ('scores mean:', 74.813187, ' scores std:', 1.4033152)
        3. orig: ('scores mean:', 5.2578478, ' scores std:', 0.12857515)
        4. orig2: ('scores mean:', 5.2614627, ' scores std:', 0.16161911)
        5. 2n2n: ('scores mean:', 6.1084046, ' scores std:', 0.11478753)
        6. 2n: ('scores mean:', 5.0989408, ' scores std:', 0.11322323)
        7. pen: ('scores mean:', 6.4307909, ' scores std:', 0.19561777)
        8. pen2: ('scores mean:', 6.2003007, ' scores std:', 0.10216211)
        9. cond_n: ('scores mean:', 4.2493067, ' scores std:', 0.074722126)
        10. image_seg: ('scores mean:', 5.9599605, ' scores std:', 0.24508114)
        11. image segmented validation photos: ('scores mean:', 13.329549, ' scores std:', 0.89784962)
    generated images accuracy:
        1. all original photos:
        2. validation photos: (Accuracy: 0.719030437598 Top 5: 0.790359885281)
        3. orig: (Accuracy: 0.00860394116014 Top 5: 0.0263669164585)
        4. orig2: (Accuracy: 0.00832639467111 Top 5: 0.0235914515681)
        5. 2n2n: (Accuracy: 0.00481080580997 Top 5: 0.0189656767509)
        6. 2n: (Accuracy: 0.00582847626978, Top 5: 0.0221112036266)
        7. pen: (Accuracy: 0.00962161161995, Top 5 Accuracy: 0.0271070404293)
        8. pen2: (Accuracy: 0.0085114256638, Top 5: 0.0244240910352)
        9. cond_n: (Accuracy: 0.0105467665834, Top 5: 0.0312702377648)
        10. image_seg: (Accuracy: 0.0198717948718, Top 5 Accuracy: 0.0442307692308)
	11. image segmented validation photos: (Accuracy: 0.405769230769, Top 5: 0.605128205128)
    discriminator accuracy:
        1. all original photos:
        2. validation photos:
        3. orig:
        4. orig2:
        5. 2n2n: 0.269785502959
        6. 2n: 0.0183062130178
        7. pen: 0.102625739645
        8. pen2: 0.290865384615
        9. cond_n:
        10. image_seg:
	11. image segmented validation photos: