darknet  v3
voxel.c
Go to the documentation of this file.
1 #include "darknet.h"
2 
3 void extract_voxel(char *lfile, char *rfile, char *prefix)
4 {
5 #ifdef OPENCV
6  int w = 1920;
7  int h = 1080;
8  int shift = 0;
9  int count = 0;
10  CvCapture *lcap = cvCaptureFromFile(lfile);
11  CvCapture *rcap = cvCaptureFromFile(rfile);
12  while(1){
13  image l = get_image_from_stream(lcap);
14  image r = get_image_from_stream(rcap);
15  if(!l.w || !r.w) break;
16  if(count%100 == 0) {
17  shift = best_3d_shift_r(l, r, -l.h/100, l.h/100);
18  printf("%d\n", shift);
19  }
20  image ls = crop_image(l, (l.w - w)/2, (l.h - h)/2, w, h);
21  image rs = crop_image(r, 105 + (r.w - w)/2, (r.h - h)/2 + shift, w, h);
22  char buff[256];
23  sprintf(buff, "%s_%05d_l", prefix, count);
24  save_image(ls, buff);
25  sprintf(buff, "%s_%05d_r", prefix, count);
26  save_image(rs, buff);
27  free_image(l);
28  free_image(r);
29  free_image(ls);
30  free_image(rs);
31  ++count;
32  }
33 
34 #else
35  printf("need OpenCV for extraction\n");
36 #endif
37 }
38 
39 void train_voxel(char *cfgfile, char *weightfile)
40 {
41  char *train_images = "/data/imagenet/imagenet1k.train.list";
42  char *backup_directory = "/home/pjreddie/backup/";
43  srand(time(0));
44  char *base = basecfg(cfgfile);
45  printf("%s\n", base);
46  float avg_loss = -1;
47  network net = parse_network_cfg(cfgfile);
48  if(weightfile){
49  load_weights(&net, weightfile);
50  }
51  printf("Learning Rate: %g, Momentum: %g, Decay: %g\n", net.learning_rate, net.momentum, net.decay);
52  int imgs = net.batch*net.subdivisions;
53  int i = *net.seen/imgs;
54  data train, buffer;
55 
56 
57  list *plist = get_paths(train_images);
58  //int N = plist->size;
59  char **paths = (char **)list_to_array(plist);
60 
61  load_args args = {0};
62  args.w = net.w;
63  args.h = net.h;
64  args.scale = 4;
65  args.paths = paths;
66  args.n = imgs;
67  args.m = plist->size;
68  args.d = &buffer;
69  args.type = SUPER_DATA;
70 
71  pthread_t load_thread = load_data_in_thread(args);
72  clock_t time;
73  //while(i*imgs < N*120){
74  while(get_current_batch(net) < net.max_batches){
75  i += 1;
76  time=clock();
77  pthread_join(load_thread, 0);
78  train = buffer;
79  load_thread = load_data_in_thread(args);
80 
81  printf("Loaded: %lf seconds\n", sec(clock()-time));
82 
83  time=clock();
84  float loss = train_network(net, train);
85  if (avg_loss < 0) avg_loss = loss;
86  avg_loss = avg_loss*.9 + loss*.1;
87 
88  printf("%d: %f, %f avg, %f rate, %lf seconds, %d images\n", i, loss, avg_loss, get_current_rate(net), sec(clock()-time), i*imgs);
89  if(i%1000==0){
90  char buff[256];
91  sprintf(buff, "%s/%s_%d.weights", backup_directory, base, i);
92  save_weights(net, buff);
93  }
94  if(i%100==0){
95  char buff[256];
96  sprintf(buff, "%s/%s.backup", backup_directory, base);
97  save_weights(net, buff);
98  }
99  free_data(train);
100  }
101  char buff[256];
102  sprintf(buff, "%s/%s_final.weights", backup_directory, base);
103  save_weights(net, buff);
104 }
105 
106 void test_voxel(char *cfgfile, char *weightfile, char *filename)
107 {
108  network net = parse_network_cfg(cfgfile);
109  if(weightfile){
110  load_weights(&net, weightfile);
111  }
112  set_batch_network(&net, 1);
113  srand(2222222);
114 
115  clock_t time;
116  char buff[256];
117  char *input = buff;
118  while(1){
119  if(filename){
120  strncpy(input, filename, 256);
121  }else{
122  printf("Enter Image Path: ");
123  fflush(stdout);
124  input = fgets(input, 256, stdin);
125  if(!input) return;
126  strtok(input, "\n");
127  }
128  image im = load_image_color(input, 0, 0);
129  resize_network(&net, im.w, im.h);
130  printf("%d %d\n", im.w, im.h);
131 
132  float *X = im.data;
133  time=clock();
134  network_predict(net, X);
135  image out = get_network_image(net);
136  printf("%s: Predicted in %f seconds.\n", input, sec(clock()-time));
137  save_image(out, "out");
138 
139  free_image(im);
140  if (filename) break;
141  }
142 }
143 
144 
145 void run_voxel(int argc, char **argv)
146 {
147  if(argc < 4){
148  fprintf(stderr, "usage: %s %s [train/test/valid] [cfg] [weights (optional)]\n", argv[0], argv[1]);
149  return;
150  }
151 
152  char *cfg = argv[3];
153  char *weights = (argc > 4) ? argv[4] : 0;
154  char *filename = (argc > 5) ? argv[5] : 0;
155  if(0==strcmp(argv[2], "train")) train_voxel(cfg, weights);
156  else if(0==strcmp(argv[2], "test")) test_voxel(cfg, weights, filename);
157  else if(0==strcmp(argv[2], "extract")) extract_voxel(argv[3], argv[4], argv[5]);
158  /*
159  else if(0==strcmp(argv[2], "valid")) validate_voxel(cfg, weights);
160  */
161 }
float decay
Definition: darknet.h:447
char ** paths
Definition: darknet.h:553
int batch
Definition: darknet.h:436
int best_3d_shift_r(image a, image b, int min, int max)
Definition: image.c:881
pthread_t load_data_in_thread(load_args args)
Definition: data.c:1135
void set_batch_network(network *net, int b)
Definition: network.c:339
int w
Definition: darknet.h:559
float learning_rate
Definition: darknet.h:445
float momentum
Definition: darknet.h:446
void free_data(data d)
Definition: data.c:665
char * basecfg(char *cfgfile)
Definition: utils.c:179
void ** list_to_array(list *l)
Definition: list.c:82
size_t * seen
Definition: darknet.h:437
float train_network(network *net, data d)
Definition: network.c:314
int size
Definition: darknet.h:603
Definition: darknet.h:512
void save_image(image p, const char *name)
Definition: image.c:717
int h
Definition: darknet.h:558
data_type type
Definition: darknet.h:580
void save_weights(network *net, char *filename)
Definition: parser.c:1080
network * parse_network_cfg(char *filename)
Definition: parser.c:742
network_predict
Definition: darknet.py:79
image get_network_image(network *net)
Definition: network.c:466
int h
Definition: darknet.h:514
int max_batches
Definition: darknet.h:453
int resize_network(network *net, int w, int h)
Definition: network.c:358
int m
Definition: darknet.h:556
data * d
Definition: darknet.h:577
free_image
Definition: darknet.py:95
int subdivisions
Definition: darknet.h:440
image load_image_color(char *filename, int w, int h)
Definition: image.c:1486
float get_current_rate(network *net)
Definition: network.c:90
void run_voxel(int argc, char **argv)
Definition: voxel.c:145
int scale
Definition: darknet.h:568
float sec(clock_t clocks)
Definition: utils.c:232
int n
Definition: darknet.h:555
image crop_image(image im, int dx, int dy, int w, int h)
Definition: image.c:861
void test_voxel(char *cfgfile, char *weightfile, char *filename)
Definition: voxel.c:106
void * load_thread(void *ptr)
Definition: data.c:1090
int w
Definition: darknet.h:513
Definition: darknet.h:602
size_t get_current_batch(network *net)
Definition: network.c:63
int h
Definition: darknet.h:468
list * get_paths(char *filename)
Definition: data.c:12
void train_voxel(char *cfgfile, char *weightfile)
Definition: voxel.c:39
void load_weights(network *net, char *filename)
Definition: parser.c:1308
int w
Definition: darknet.h:468
Definition: darknet.h:538
void extract_voxel(char *lfile, char *rfile, char *prefix)
Definition: voxel.c:3
float * data
Definition: darknet.h:516