Notes de lecture du code source Darknet (1)

Je regardais yolo récemment, et au fait, je prends des notes.

Gardez une trace de l'endroit où les images et les étiquettes sont lues.

Dans data.c

int fill_truth_detection(const char *path, int num_boxes, float *truth, int classes, int flip, float dx, float dy, float sx, float sy,
    int net_w, int net_h)

Remplacera le chemin de l'image par le chemin de l'étiquette et lira l'étiquette.

char labelpath[4096];
replace_image_to_label(path, labelpath);

int count = 0;
int i;
box_label *boxes = read_boxes(labelpath, &count);

Il y a la définition de box_label dans darknet.h:

// data.h
typedef struct box_label {
    int id;
    float x, y, w, h;
    float left, right, top, bottom;
} box_label;

Essayez ici pour afficher les informations:

box_label *read_boxes(char *filename, int *n)
{
    box_label* boxes = (box_label*)xcalloc(1, sizeof(box_label));
    FILE *file = fopen(filename, "r");
    if (!file) {
        printf("Can't open label file. (This can be normal only if you use MSCOCO): %s \n", filename);
        //file_error(filename);
        FILE* fw = fopen("bad.list", "a");
        fwrite(filename, sizeof(char), strlen(filename), fw);
        char *new_line = "\n";
        fwrite(new_line, sizeof(char), strlen(new_line), fw);
        fclose(fw);
        if (check_mistakes) getchar();

        *n = 0;
        return boxes;
    }
    float x, y, h, w;
    int id;
    int count = 0;
    while(fscanf(file, "%d %f %f %f %f", &id, &x, &y, &w, &h) == 5){
        boxes = (box_label*)xrealloc(boxes, (count + 1) * sizeof(box_label));
        boxes[count].id = id;
        boxes[count].x = x;
        boxes[count].y = y;
        boxes[count].h = h;
        boxes[count].w = w;
        boxes[count].left   = x - w/2;
        boxes[count].right  = x + w/2;
        boxes[count].top    = y - h/2;
        boxes[count].bottom = y + h/2;
        ++count;
    }
    fclose(file);
    *n = count;
    return boxes;
}

À partir du code ci-dessus, nous pouvons voir que les quatre limites gauche, droite, haut et bas sont calculées par les coordonnées centrales x, y et la largeur et la hauteur w, h.

Le code ci-dessus montre que si vous souhaitez remplacer la méthode de positionnement yolo par la méthode des coordonnées à quatre sommets, vous devez ajouter une nouvelle structure d'étiquette et modifier le code correspondant. On s'attend à ce que la charge de travail soit relativement importante.

 

Après avoir appris comment les données entrent, regardez comment les données sont utilisées dans le code. Le point clé est la rétropropagation du dégradé.

 

analyse du code source de yolov2

 

Référence: Analyse du code source de la fonction de perte YOLO v2

Référence: Interprétation du code source de la fonction de perte yolo v2

 

 

 

 

Je suppose que tu aimes

Origine blog.csdn.net/juluwangriyue/article/details/109047636
conseillé
Classement