我想在没有bbox检测的情况下使用YOLOv3进行分类,并遵循此链接how to train a classifier with darknet
然而,我似乎找不到每个图像的确切类被分配到哪里。对于每个图像都没有任何.txt文件,比如用于检测。这个类只是从文件名中提取出来的吗?
如何为多类分类中的每个图像分配类?或者,我只是简单地添加图像,然后YOLO会根据您在labels.txt中指定的类数自动学习
发布于 2021-03-31 15:19:23
是的,每个训练图像的类别都是从文件名中提取的。查看src/data.c中的load_labels_path()和fill_truth()函数。load_labels_path()创建一个# of images by # of classes矩阵,并使用fill_truth()测试类名是否为图像文件名的子字符串,并使用1和0填充该矩阵。
matrix load_labels_paths(char **paths, int n, char **labels, int k, tree *hierarchy)
{
matrix y = make_matrix(n, k);
int i;
for(i = 0; i < n && labels; ++i){
fill_truth(paths[i], labels, k, y.vals[i]);
if(hierarchy){
fill_hierarchy(y.vals[i], k, hierarchy);
}
}
return y;
}
...
void fill_truth(char *path, char **labels, int k, float *truth)
{
int i;
memset(truth, 0, k*sizeof(float));
int count = 0;
for(i = 0; i < k; ++i){
if(strstr(path, labels[i])){
truth[i] = 1;
++count;
//printf("%s %s %d\n", path, labels[i], i);
}
}
if(count != 1 && (k != 1 || count != 0)) printf("Too many or too few labels: %d, %s\n", count, path);
}https://github.com/pjreddie/darknet/blob/master/src/data.c#L620 https://github.com/pjreddie/darknet/blob/master/src/data.c#L543
https://stackoverflow.com/questions/61383471
复制相似问题