【darknet學習筆記】train_classifier()函數調用參數說明

更多修改darknet訓練圖像分類筆記,見:修改darknet源代碼,使其能夠直接訓練二進制圖像數據

classifier.c文件中的train_classifier()函數聲明:

void train_classifier(char *datacfg, char *cfgfile, char *weightfile, int *gpus, int ngpus, int clear, int dont_show, int mjpeg_port, int calc_topk);

其中包括參數:

char *datacfg,數據說明文件路徑,圖像分類數據說明文件一般命名爲meta.data

char *cfgfile,網絡結構說明文件路徑,一般以*.cfg命名

char *weightfile,權重文件路徑.

int *gpus,訓練圖像分類使用gpu編號

int ngpus,訓練圖像分類使用gpu數量

int clear,

int dont_show,

int mjpeg_port,

int calc_topk

classifier.c中run_classifier()函數調用train_classifier()代碼:

char *data = argv[3];
char *cfg = argv[4];
char *weights = (argc > 5) ? argv[5] : 0;
int clear = find_arg(argc, argv, "-clear");
int dont_show = find_arg(argc, argv, "-dont_show");
int mjpeg_port = find_int_arg(argc, argv, "-mjpeg_port", -1);
int calc_topk = find_arg(argc, argv, "-topk");
train_classifier(data, cfg, weights, gpus, ngpus, clear, dont_show, mjpeg_port, calc_topk);

darknet訓練圖像分類指令:

darknet classifier train data/METAL/metal.data data/METAL/darknet19_448.cfg pretrained_weights/darknet19_448.conv.23

data:訓練圖像分類指令中第四個參數,即data/METAL/metal.data,分類數據描述文件路徑

cfg:訓練圖像分離指令第五個參數,即data/METAL/darknet19_448.cfg,網絡模型文件路徑

weights:訓練圖像分類指令第六個參數,即pretrained_weights/darknet19_448.conv.23,權重文件路徑

clear

dont_show

mjpeg_port

calc_topk

1.參數gpus,ngpus, gpu_index

ngpus是訓練使用gpu個數,

gpus是一個數組,數組中存放gpu編號

指令中通過-gpus指定gpu的編號,如果沒有使用-gpus指定,則默認使用1個gpu訓練圖像分類任務,gpus中存放gpu_index.

 char *gpu_list = find_char_arg(argc, argv, "-gpus", 0);
    int *gpus = 0;
    int gpu = 0;
    int ngpus = 0;
    if(gpu_list){
        printf("%s\n", gpu_list);
        int len = strlen(gpu_list);
        ngpus = 1;
        int i;
        for(i = 0; i < len; ++i){
            if (gpu_list[i] == ',') ++ngpus;
        }
        gpus = (int*)calloc(ngpus, sizeof(int));
        for(i = 0; i < ngpus; ++i){
            gpus[i] = atoi(gpu_list);
            gpu_list = strchr(gpu_list, ',')+1;
        }
    } else {
        gpu = gpu_index;
        gpus = &gpu;
        ngpus = 1;
    }

gpu_index:darknet訓練圖像指令,通過-i參數來指定,如果沒有指定,調用cuda_set_device設置。

    gpu_index = find_int_arg(argc, argv, "-i", 0);
    if(find_arg(argc, argv, "-nogpu")) {
        gpu_index = -1;
        printf("\n Currently Darknet doesn't support -nogpu flag. If you want to use CPU - please compile Darknet with GPU=0 in the Makefile, or compile darknet_no_gpu.sln on Windows.\n");
        exit(-1);
    }

#ifndef GPU
    gpu_index = -1;
#else
    if(gpu_index >= 0){
        cuda_set_device(gpu_index);
        CHECK_CUDA(cudaSetDeviceFlags(cudaDeviceScheduleBlockingSync));
    }
#endif

 

發佈了373 篇原創文章 · 獲贊 151 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章