387 void slerp(
float *start,
float *end,
float s,
int n,
float *out)
389 float omega = acos(
dot_cpu(n, start, 1, end, 1));
390 float so = sin(omega);
392 axpy_cpu(n, sin((1-s)*omega)/so, start, 1, out, 1);
393 axpy_cpu(n, sin(s*omega)/so, end, 1, out, 1);
403 for(i = 0; i < im.
w*im.
h*im.
c; ++i){
422 for (i = 0; i < net->
n; ++i) {
440 if(count == max_count){
448 if(c>300 + max_count)
return;
460 printf(
"%s: Predicted in %f seconds.\n", input,
sec(clock()-time));
462 sprintf(buff,
"out%05d", c);
485 for(i = 0; i < im.
w*im.
h*im.
c; ++i){
497 printf(
"%s: Predicted in %f seconds.\n", input,
sec(clock()-time));
508 for(i = 0; i < net->
n; ++i){
516 void train_prog(
char *cfg,
char *weight,
char *acfg,
char *aweight,
int clear,
int display,
char *train_images,
int maxbatch)
519 char *backup_directory =
"/home/pjreddie/backup/";
523 printf(
"%s\n", base);
532 i = *gnet->
seen/imgs;
542 args.
m = plist->
size;
547 char *ls[2] = {
"imagenet",
"zzzzzzzz"};
558 float *imerror = cuda_make_array(0, y_size);
560 float aloss_avg = -1;
566 float alpha = (float) cb / (maxbatch/2);
567 if(alpha > 1) alpha = 1;
568 float beta = 1 - alpha;
569 printf(
"%f %f\n", alpha, beta);
576 pthread_join(load_thread, 0);
581 printf(
"Loaded: %lf seconds\n",
sec(clock()-time));
584 for (j = 0; j < imgs; ++j) {
585 train.
y.
vals[j][0] = 1;
586 gen.
y.
vals[j][0] = 0;
593 for(z = 0; z < x_size; ++z){
608 anet->delta_gpu = imerror;
621 for(k = 0; k < gnet->
batch; ++k){
622 int index = j*gnet->
batch + k;
626 harmless_update_network_gpu(anet);
642 update_network_gpu(gnet);
647 if (aloss_avg < 0) aloss_avg = aloss;
648 aloss_avg = aloss_avg*.9 + aloss*.1;
650 printf(
"%d: adv: %f | adv_avg: %f, %f rate, %lf seconds, %d images\n", i, aloss, aloss_avg,
get_current_rate(gnet),
sec(clock()-time), i*imgs);
653 sprintf(buff,
"%s/%s_%d.weights", backup_directory, base, i);
655 sprintf(buff,
"%s/%s_%d.weights", backup_directory, abase, i);
660 sprintf(buff,
"%s/%s.backup", backup_directory, base);
662 sprintf(buff,
"%s/%s.backup", backup_directory, abase);
667 sprintf(buff,
"%s/%s_final.weights", backup_directory, base);
672 void train_dcgan(
char *cfg,
char *weight,
char *acfg,
char *aweight,
int clear,
int display,
char *train_images,
int maxbatch)
675 char *backup_directory =
"/home/pjreddie/backup/";
679 printf(
"%s\n", base);
686 for (i = 0; i < gnet->
n; ++i) {
688 imlayer = gnet->
layers[i];
695 i = *gnet->
seen/imgs;
706 args.
m = plist->
size;
711 char *ls[2] = {
"imagenet",
"zzzzzzzz"};
722 float *imerror = cuda_make_array(0, y_size);
726 float aloss_avg = -1;
734 pthread_join(load_thread, 0);
742 printf(
"Loaded: %lf seconds\n",
sec(clock()-time));
745 for (j = 0; j < imgs; ++j) {
746 train.
y.
vals[j][0] = 1;
747 gen.
y.
vals[j][0] = 0;
754 for(z = 0; z < x_size; ++z){
757 for(z = 0; z < gnet->
batch; ++z){
777 anet->delta_gpu = imerror;
802 for(k = 0; k < gnet->
batch; ++k){
803 int index = j*gnet->
batch + k;
807 harmless_update_network_gpu(anet);
836 update_network_gpu(gnet);
841 if (aloss_avg < 0) aloss_avg = aloss;
842 aloss_avg = aloss_avg*.9 + aloss*.1;
844 printf(
"%d: adv: %f | adv_avg: %f, %f rate, %lf seconds, %d images\n", i, aloss, aloss_avg,
get_current_rate(gnet),
sec(clock()-time), i*imgs);
847 sprintf(buff,
"%s/%s_%d.weights", backup_directory, base, i);
849 sprintf(buff,
"%s/%s_%d.weights", backup_directory, abase, i);
854 sprintf(buff,
"%s/%s.backup", backup_directory, base);
856 sprintf(buff,
"%s/%s.backup", backup_directory, abase);
861 sprintf(buff,
"%s/%s_final.weights", backup_directory, base);
866 void train_colorizer(
char *cfg,
char *weight,
char *acfg,
char *aweight,
int clear,
int display)
871 char *train_images =
"/home/pjreddie/data/imagenet/imagenet1k.train.list";
872 char *backup_directory =
"/home/pjreddie/backup/";
876 printf(
"%s\n", base);
882 for (i = 0; i < net->
n; ++i) {
902 args.
m = plist->
size;
907 char *ls[2] = {
"imagenet"};
917 float *pixs = calloc(x_size,
sizeof(
float));
918 float *graypixs = calloc(x_size,
sizeof(
float));
925 float *imerror = cuda_make_array(0, imlayer.
outputs*imlayer.
batch);
927 float aloss_avg = -1;
928 float gloss_avg = -1;
935 pthread_join(load_thread, 0);
939 printf(
"Loaded: %lf seconds\n",
sec(clock()-time));
942 for(j = 0; j < imgs; ++j){
945 train.
y.
vals[j][0] = .95;
946 gray.
y.
vals[j][0] = .05;
954 cuda_push_array(net->input_gpu, graypixs, net->
inputs*net->
batch);
955 cuda_push_array(net->truth_gpu, pixs, net->
truths*net->
batch);
964 forward_network_gpu(net);
969 anet->delta_gpu = imerror;
970 forward_network_gpu(anet);
971 backward_network_gpu(anet);
977 printf(
"realness %f\n", cuda_mag_array(imerror, imlayer.
outputs*imlayer.
batch));
978 printf(
"features %f\n", cuda_mag_array(net->
layers[net->
n-1].delta_gpu, imlayer.
outputs*imlayer.
batch));
982 backward_network_gpu(net);
987 for(k = 0; k < net->
batch; ++k){
988 int index = j*net->
batch + k;
992 harmless_update_network_gpu(anet);
998 update_network_gpu(net);
1011 if (aloss_avg < 0) aloss_avg = aloss;
1012 aloss_avg = aloss_avg*.9 + aloss*.1;
1013 gloss_avg = gloss_avg*.9 + gloss*.1;
1015 printf(
"%d: gen: %f, adv: %f | gen_avg: %f, adv_avg: %f, %f rate, %lf seconds, %d images\n", i, gloss, aloss, gloss_avg, aloss_avg,
get_current_rate(net),
sec(clock()-time), i*imgs);
1018 sprintf(buff,
"%s/%s_%d.weights", backup_directory, base, i);
1020 sprintf(buff,
"%s/%s_%d.weights", backup_directory, abase, i);
1025 sprintf(buff,
"%s/%s.backup", backup_directory, base);
1027 sprintf(buff,
"%s/%s.backup", backup_directory, abase);
1032 sprintf(buff,
"%s/%s_final.weights", backup_directory, base);
1294 void test_lsd(
char *cfg,
char *weights,
char *filename,
int gray)
1305 for (i = 0; i < net->
n; ++i) {
1315 strncpy(input, filename, 256);
1317 printf(
"Enter Image Path: ");
1319 input = fgets(input, 256, stdin);
1321 strtok(input,
"\n");
1328 float *X = crop.
data;
1334 printf(
"%s: Predicted in %f seconds.\n", input,
sec(clock()-time));
1342 if (filename)
break;
1350 fprintf(stderr,
"usage: %s %s [train/test/valid] [cfg] [weights (optional)]\n", argv[0], argv[1]);
1354 int clear =
find_arg(argc, argv,
"-clear");
1355 int display =
find_arg(argc, argv,
"-display");
1357 char *file =
find_char_arg(argc, argv,
"-file",
"/home/pjreddie/data/imagenet/imagenet1k.train.list");
1359 char *cfg = argv[3];
1360 char *weights = (argc > 4) ? argv[4] : 0;
1361 char *filename = (argc > 5) ? argv[5] : 0;
1362 char *acfg = argv[5];
1363 char *aweights = (argc > 6) ? argv[6] : 0;
1368 if(0==strcmp(argv[2],
"traingan"))
train_dcgan(cfg, weights, acfg, aweights, clear, display, file, batches);
1369 else if(0==strcmp(argv[2],
"trainprog"))
train_prog(cfg, weights, acfg, aweights, clear, display, file, batches);
1370 else if(0==strcmp(argv[2],
"traincolor"))
train_colorizer(cfg, weights, acfg, aweights, clear, display);
1371 else if(0==strcmp(argv[2],
"gan"))
test_dcgan(cfg, weights);
1372 else if(0==strcmp(argv[2],
"inter"))
inter_dcgan(cfg, weights);
1373 else if(0==strcmp(argv[2],
"test"))
test_lsd(cfg, weights, filename, 0);
1374 else if(0==strcmp(argv[2],
"color"))
test_lsd(cfg, weights, filename, 1);
image copy_image(image p)
void scale_array(float *a, int n, float s)
pthread_t load_data_in_thread(load_args args)
int find_arg(int argc, char *argv[], char *arg)
load_args get_base_args(network *net)
void set_batch_network(network *net, int b)
int show_image(image p, const char *name, int ms)
char * find_char_arg(int argc, char **argv, char *arg, char *def)
char * basecfg(char *cfgfile)
void ** list_to_array(list *l)
float train_network(network *net, data d)
void axpy_gpu(int N, float ALPHA, float *X, int INCX, float *Y, int INCY)
void test_dcgan(char *cfgfile, char *weightfile)
void set_network_alpha_beta(network *net, float alpha, float beta)
void save_image(image p, const char *name)
void slerp(float *start, float *end, float s, int n, float *out)
image float_to_image(int w, int h, int c, float *data)
void save_weights(network *net, char *filename)
void fill_gpu(int N, float ALPHA, float *X, int INCX)
data concat_data(data d1, data d2)
void grayscale_image_3c(image im)
void test_lsd(char *cfg, char *weights, char *filename, int gray)
void train_dcgan(char *cfg, char *weight, char *acfg, char *aweight, int clear, int display, char *train_images, int maxbatch)
image resize_min(image im, int min)
void fill_cpu(int N, float ALPHA, float *X, int INCX)
image get_network_image_layer(network *net, int i)
void scal_gpu(int N, float ALPHA, float *X, int INCX)
void forward_network(network *net)
void get_next_batch(data d, int n, int offset, float *X, float *y)
void normalize_image(image p)
void axpy_cpu(int N, float ALPHA, float *X, int INCX, float *Y, int INCY)
image load_image_color(char *filename, int w, int h)
void train_prog(char *cfg, char *weight, char *acfg, char *aweight, int clear, int display, char *train_images, int maxbatch)
void constrain_image(image im)
void backward_network(network *net)
float get_current_rate(network *net)
void train_colorizer(char *cfg, char *weight, char *acfg, char *aweight, int clear, int display)
float sec(clock_t clocks)
void copy_gpu(int N, float *X, int INCX, float *Y, int INCY)
int find_int_arg(int argc, char **argv, char *arg, int def)
network * load_network(char *cfg, char *weights, int clear)
image crop_image(image im, int dx, int dy, int w, int h)
void * load_thread(void *ptr)
float dot_cpu(int N, float *X, int INCX, float *Y, int INCY)
void copy_cpu(int N, float *X, int INCX, float *Y, int INCY)
void run_lsd(int argc, char **argv)
size_t get_current_batch(network *net)
list * get_paths(char *filename)
void inter_dcgan(char *cfgfile, char *weightfile)
float mag_array(float *a, int n)
image random_unit_vector_image(int w, int h, int c)