mirror of
https://github.com/pjreddie/darknet.git
synced 2023-08-10 21:13:14 +03:00
for dan, anyone else don't use, 🗑️ 🔥
This commit is contained in:
@ -47,6 +47,8 @@ void train_classifier(char *datacfg, char *cfgfile, char *weightfile, int *gpus,
|
||||
int tag = option_find_int_quiet(options, "tag", 0);
|
||||
char *label_list = option_find_str(options, "labels", "data/labels.list");
|
||||
char *train_list = option_find_str(options, "train", "data/train.list");
|
||||
char *tree = option_find_str(options, "tree", 0);
|
||||
if (tree) net->hierarchy = read_tree(tree);
|
||||
int classes = option_find_int(options, "classes", 2);
|
||||
|
||||
char **labels;
|
||||
|
@ -188,6 +188,25 @@ void partial(char *cfgfile, char *weightfile, char *outfile, int max)
|
||||
save_weights_upto(net, outfile, max);
|
||||
}
|
||||
|
||||
void print_weights(char *cfgfile, char *weightfile, int n)
|
||||
{
|
||||
gpu_index = -1;
|
||||
network *net = load_network(cfgfile, weightfile, 1);
|
||||
layer l = net->layers[n];
|
||||
int i, j;
|
||||
//printf("[");
|
||||
for(i = 0; i < l.n; ++i){
|
||||
//printf("[");
|
||||
for(j = 0; j < l.size*l.size*l.c; ++j){
|
||||
//if(j > 0) printf(",");
|
||||
printf("%g ", l.weights[i*l.size*l.size*l.c + j]);
|
||||
}
|
||||
printf("\n");
|
||||
//printf("]%s\n", (i == l.n-1)?"":",");
|
||||
}
|
||||
//printf("]");
|
||||
}
|
||||
|
||||
void rescale_net(char *cfgfile, char *weightfile, char *outfile)
|
||||
{
|
||||
gpu_index = -1;
|
||||
@ -467,6 +486,8 @@ int main(int argc, char **argv)
|
||||
oneoff(argv[2], argv[3], argv[4]);
|
||||
} else if (0 == strcmp(argv[1], "oneoff2")){
|
||||
oneoff2(argv[2], argv[3], argv[4], atoi(argv[5]));
|
||||
} else if (0 == strcmp(argv[1], "print")){
|
||||
print_weights(argv[2], argv[3], atoi(argv[4]));
|
||||
} else if (0 == strcmp(argv[1], "partial")){
|
||||
partial(argv[2], argv[3], argv[4], atoi(argv[5]));
|
||||
} else if (0 == strcmp(argv[1], "average")){
|
||||
|
186
examples/lsd.c
186
examples/lsd.c
@ -395,7 +395,7 @@ void slerp(float *start, float *end, float s, int n, float *out)
|
||||
scale_array(out, n, 1./mag);
|
||||
}
|
||||
|
||||
image random_unit_vector_image(w, h, c)
|
||||
image random_unit_vector_image(int w, int h, int c)
|
||||
{
|
||||
image im = make_image(w, h, c);
|
||||
int i;
|
||||
@ -480,13 +480,7 @@ void test_dcgan(char *cfgfile, char *weightfile)
|
||||
char *input = buff;
|
||||
int i, imlayer = 0;
|
||||
|
||||
for (i = 0; i < net->n; ++i) {
|
||||
if (net->layers[i].out_c == 3) {
|
||||
imlayer = i;
|
||||
printf("%d\n", i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
imlayer = net->n-1;
|
||||
|
||||
while(1){
|
||||
image im = make_image(net->w, net->h, net->c);
|
||||
@ -494,8 +488,8 @@ void test_dcgan(char *cfgfile, char *weightfile)
|
||||
for(i = 0; i < im.w*im.h*im.c; ++i){
|
||||
im.data[i] = rand_normal();
|
||||
}
|
||||
float mag = mag_array(im.data, im.w*im.h*im.c);
|
||||
scale_array(im.data, im.w*im.h*im.c, 1./mag);
|
||||
//float mag = mag_array(im.data, im.w*im.h*im.c);
|
||||
//scale_array(im.data, im.w*im.h*im.c, 1./mag);
|
||||
|
||||
float *X = im.data;
|
||||
time=clock();
|
||||
@ -514,6 +508,173 @@ void test_dcgan(char *cfgfile, char *weightfile)
|
||||
}
|
||||
}
|
||||
|
||||
void set_network_alpha_beta(network *net, float alpha, float beta)
|
||||
{
|
||||
int i;
|
||||
for(i = 0; i < net->n; ++i){
|
||||
if(net->layers[i].type == SHORTCUT){
|
||||
net->layers[i].alpha = alpha;
|
||||
net->layers[i].beta = beta;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void train_prog(char *cfg, char *weight, char *acfg, char *aweight, int clear, int display, char *train_images, int maxbatch)
|
||||
{
|
||||
#ifdef GPU
|
||||
char *backup_directory = "/home/pjreddie/backup/";
|
||||
srand(time(0));
|
||||
char *base = basecfg(cfg);
|
||||
char *abase = basecfg(acfg);
|
||||
printf("%s\n", base);
|
||||
network *gnet = load_network(cfg, weight, clear);
|
||||
network *anet = load_network(acfg, aweight, clear);
|
||||
|
||||
int i, j, k;
|
||||
layer imlayer = gnet->layers[gnet->n-1];
|
||||
|
||||
printf("Learning Rate: %g, Momentum: %g, Decay: %g\n", gnet->learning_rate, gnet->momentum, gnet->decay);
|
||||
int imgs = gnet->batch*gnet->subdivisions;
|
||||
i = *gnet->seen/imgs;
|
||||
data train, buffer;
|
||||
|
||||
|
||||
list *plist = get_paths(train_images);
|
||||
char **paths = (char **)list_to_array(plist);
|
||||
|
||||
load_args args= get_base_args(anet);
|
||||
args.paths = paths;
|
||||
args.n = imgs;
|
||||
args.m = plist->size;
|
||||
args.d = &buffer;
|
||||
args.type = CLASSIFICATION_DATA;
|
||||
args.threads=16;
|
||||
args.classes = 1;
|
||||
char *ls[2] = {"imagenet", "zzzzzzzz"};
|
||||
args.labels = ls;
|
||||
|
||||
pthread_t load_thread = load_data_in_thread(args);
|
||||
clock_t time;
|
||||
|
||||
gnet->train = 1;
|
||||
anet->train = 1;
|
||||
|
||||
int x_size = gnet->inputs*gnet->batch;
|
||||
int y_size = gnet->truths*gnet->batch;
|
||||
float *imerror = cuda_make_array(0, y_size);
|
||||
|
||||
float aloss_avg = -1;
|
||||
|
||||
if (maxbatch == 0) maxbatch = gnet->max_batches;
|
||||
while (get_current_batch(gnet) < maxbatch) {
|
||||
{
|
||||
int cb = get_current_batch(gnet);
|
||||
float alpha = (float) cb / (maxbatch/2);
|
||||
if(alpha > 1) alpha = 1;
|
||||
float beta = 1 - alpha;
|
||||
printf("%f %f\n", alpha, beta);
|
||||
set_network_alpha_beta(gnet, alpha, beta);
|
||||
set_network_alpha_beta(anet, beta, alpha);
|
||||
}
|
||||
|
||||
i += 1;
|
||||
time=clock();
|
||||
pthread_join(load_thread, 0);
|
||||
train = buffer;
|
||||
|
||||
load_thread = load_data_in_thread(args);
|
||||
|
||||
printf("Loaded: %lf seconds\n", sec(clock()-time));
|
||||
|
||||
data gen = copy_data(train);
|
||||
for (j = 0; j < imgs; ++j) {
|
||||
train.y.vals[j][0] = 1;
|
||||
gen.y.vals[j][0] = 0;
|
||||
}
|
||||
time=clock();
|
||||
|
||||
for (j = 0; j < gnet->subdivisions; ++j) {
|
||||
get_next_batch(train, gnet->batch, j*gnet->batch, gnet->truth, 0);
|
||||
int z;
|
||||
for(z = 0; z < x_size; ++z){
|
||||
gnet->input[z] = rand_normal();
|
||||
}
|
||||
/*
|
||||
for(z = 0; z < gnet->batch; ++z){
|
||||
float mag = mag_array(gnet->input + z*gnet->inputs, gnet->inputs);
|
||||
scale_array(gnet->input + z*gnet->inputs, gnet->inputs, 1./mag);
|
||||
}
|
||||
*/
|
||||
*gnet->seen += gnet->batch;
|
||||
forward_network(gnet);
|
||||
|
||||
fill_gpu(imlayer.outputs*imlayer.batch, 0, imerror, 1);
|
||||
fill_cpu(anet->truths*anet->batch, 1, anet->truth, 1);
|
||||
copy_cpu(anet->inputs*anet->batch, imlayer.output, 1, anet->input, 1);
|
||||
anet->delta_gpu = imerror;
|
||||
forward_network(anet);
|
||||
backward_network(anet);
|
||||
|
||||
float genaloss = *anet->cost / anet->batch;
|
||||
|
||||
scal_gpu(imlayer.outputs*imlayer.batch, 1, imerror, 1);
|
||||
scal_gpu(imlayer.outputs*imlayer.batch, 0, gnet->layers[gnet->n-1].delta_gpu, 1);
|
||||
|
||||
axpy_gpu(imlayer.outputs*imlayer.batch, 1, imerror, 1, gnet->layers[gnet->n-1].delta_gpu, 1);
|
||||
|
||||
backward_network(gnet);
|
||||
|
||||
for(k = 0; k < gnet->batch; ++k){
|
||||
int index = j*gnet->batch + k;
|
||||
copy_cpu(gnet->outputs, gnet->output + k*gnet->outputs, 1, gen.X.vals[index], 1);
|
||||
}
|
||||
}
|
||||
harmless_update_network_gpu(anet);
|
||||
|
||||
data merge = concat_data(train, gen);
|
||||
float aloss = train_network(anet, merge);
|
||||
|
||||
#ifdef OPENCV
|
||||
if(display){
|
||||
image im = float_to_image(anet->w, anet->h, anet->c, gen.X.vals[0]);
|
||||
image im2 = float_to_image(anet->w, anet->h, anet->c, train.X.vals[0]);
|
||||
show_image(im, "gen");
|
||||
show_image(im2, "train");
|
||||
save_image(im, "gen");
|
||||
save_image(im2, "train");
|
||||
cvWaitKey(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
update_network_gpu(gnet);
|
||||
|
||||
free_data(merge);
|
||||
free_data(train);
|
||||
free_data(gen);
|
||||
if (aloss_avg < 0) aloss_avg = aloss;
|
||||
aloss_avg = aloss_avg*.9 + aloss*.1;
|
||||
|
||||
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);
|
||||
if(i%10000==0){
|
||||
char buff[256];
|
||||
sprintf(buff, "%s/%s_%d.weights", backup_directory, base, i);
|
||||
save_weights(gnet, buff);
|
||||
sprintf(buff, "%s/%s_%d.weights", backup_directory, abase, i);
|
||||
save_weights(anet, buff);
|
||||
}
|
||||
if(i%1000==0){
|
||||
char buff[256];
|
||||
sprintf(buff, "%s/%s.backup", backup_directory, base);
|
||||
save_weights(gnet, buff);
|
||||
sprintf(buff, "%s/%s.backup", backup_directory, abase);
|
||||
save_weights(anet, buff);
|
||||
}
|
||||
}
|
||||
char buff[256];
|
||||
sprintf(buff, "%s/%s_final.weights", backup_directory, base);
|
||||
save_weights(gnet, buff);
|
||||
#endif
|
||||
}
|
||||
|
||||
void train_dcgan(char *cfg, char *weight, char *acfg, char *aweight, int clear, int display, char *train_images, int maxbatch)
|
||||
{
|
||||
@ -668,7 +829,7 @@ void train_dcgan(char *cfg, char *weight, char *acfg, char *aweight, int clear,
|
||||
show_image(im2, "train");
|
||||
save_image(im, "gen");
|
||||
save_image(im2, "train");
|
||||
cvWaitKey(50);
|
||||
cvWaitKey(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -850,7 +1011,7 @@ void train_colorizer(char *cfg, char *weight, char *acfg, char *aweight, int cle
|
||||
image im2 = float_to_image(anet->w, anet->h, anet->c, train.X.vals[0]);
|
||||
show_image(im, "gen");
|
||||
show_image(im2, "train");
|
||||
cvWaitKey(50);
|
||||
cvWaitKey(1);
|
||||
}
|
||||
#endif
|
||||
free_data(merge);
|
||||
@ -1217,6 +1378,7 @@ void run_lsd(int argc, char **argv)
|
||||
//else if(0==strcmp(argv[2], "traincolor")) train_colorizer(cfg, weights, acfg, aweights, clear);
|
||||
//else if(0==strcmp(argv[2], "train3")) train_lsd3(argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], clear);
|
||||
if(0==strcmp(argv[2], "traingan")) train_dcgan(cfg, weights, acfg, aweights, clear, display, file, batches);
|
||||
else if(0==strcmp(argv[2], "trainprog")) train_prog(cfg, weights, acfg, aweights, clear, display, file, batches);
|
||||
else if(0==strcmp(argv[2], "traincolor")) train_colorizer(cfg, weights, acfg, aweights, clear, display);
|
||||
else if(0==strcmp(argv[2], "gan")) test_dcgan(cfg, weights);
|
||||
else if(0==strcmp(argv[2], "inter")) inter_dcgan(cfg, weights);
|
||||
|
Reference in New Issue
Block a user