- 可视化语句
darknet.exe visualize cfg/yolo-obj.cfg .\backup\yolo-obj_last.weights
2. 调用函数一:可视化cfg和weight
C:darknet-master\src\darknet.c
void visualize(char *cfgfile, char *weightfile)
{
network net = parse_network_cfg(cfgfile);//解析配置文件
if(weightfile){
load_weights(&net, weightfile);//加载权重模型至net网络中
}
visualize_network(net);
#ifdef OPENCV
wait_until_press_key_cv();
#endif
}
3.调用函数二:可视化网络
C:\darknet-master\src\network.c
void visualize_network(network net)
{
image *prev = 0;
int i;
char buff[256];
for(i = 0; i < net.n; ++i){
sprintf(buff, "Layer %d", i);
layer l = net.layers[i];
if(l.type == CONVOLUTIONAL){
prev = visualize_convolutional_layer(l, buff, prev);
}
}
}
4.调用函数三:可视化卷继层
C:\darknet-master\src\convolutional_layer.c
image *visualize_convolutional_layer(convolutional_layer l, char *window, image *prev_weights)
{
image *single_weights = get_weights(l);
show_images(single_weights, l.n, window);
image delta = get_convolutional_image(l);
image dc = collapse_image_layers(delta, 1);
char buff[256];
sprintf(buff, "%s: Output", window);
//show_image(dc, buff);
//save_image(dc, buff);
free_image(dc);
return single_weights;
}
5.调用函数四:获得权重
C:\darknet-master\src\convolutional_layer.c
image *get_weights(convolutional_layer l)
{
image *weights = (image *)calloc(l.n, sizeof(image));
int i;
for (i = 0; i < l.n; ++i) {
weights[i] = copy_image(get_convolutional_weight(l, i));
normalize_image(weights[i]);
/*
char buff[256];
sprintf(buff, "filter%d", i);
save_image(weights[i], buff);
*/
}
//error("hey");
return weights;
}
6.调用函数五:归一化
C:\darknet-master\src\image.c
void normalize_image(image p)
{
int i;
float min = 9999999;
float max = -999999;
for(i = 0; i < p.h*p.w*p.c; ++i){
float v = p.data[i];
if(v < min) min = v;
if(v > max) max = v;
}
if(max - min < .000000001){
min = 0;
max = 1;
}
for(i = 0; i < p.c*p.w*p.h; ++i){
p.data[i] = (p.data[i] - min)/(max-min);
}
}