yolo训练自己的数据实践总结

1.yolo训练数据准备

darknet训练数据比较繁琐,数据准备参考 [yolo训练数据制作](http://blog.csdn.net/burning_keyboard/article/details/71055557)

2.网络准备

1.修改 cfg/voc.data:
  classes= 10                                     //类别数量
  train  = ../your_save_path/trainImagePath.txt   //相对路径设置为
  validate = ../zifu1/validateImagePath.txt
  names = data/voc.names                          // voc.names 类别的名称,这个文件去改一下
  backup = backup                                 // 记录每迭代100次得到的模型 .weights文件

 2.修改网络结构 cfg/yolo-voc.cfg:
 (1)最后一个卷积层
     [convolutional]
     size=1
     stride=1
     pad=1
     filters=125 // 125 = 5(anchor box) * (20(class) + 4(coor) + 1(confidence))
     ...         // 根据class数算好filters个数
 (2)[region]
      anchors = 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52
      bias_match=1
      classes=10       // 改成目标分类数量
      coords=4
      num=5            // anchor box 数量
      ...
 (3)预训练文件cfg/darknet19_448.conv.23:在其他数据集上pretrain的模型做为初值

3.训练命令

 cd darknet
 ./darknet detector train cfg/voc.data cfg/yolo-voc.cfg cfg/darknet19_448.conv.23
 每train一个batch会用validate检测数据检测一次,显示迭代次数,学习率,recall值,已训练图片数等,
 每100次会在backup里存一次 weights

4.检测命令

 ./darknet detector test cfg/voc.data cfg/yolo-voc.cfg backup/yolo-voc_400.weights testImage/738780.jpg

5.yolo-darknet主函数入口

 1.所有脚本在src文件夹。主函数入口在darknet.c中。其中有run_yolo和run_detector都能用于训练检测。

 2.进入detector.c文件可以找到解析训练和检测命令的函数:
    void run_detector(int argc, char **argv)//dark.c中如果命令如果第二个参数是detector,则调用这个
{
    //寻找是否有参数prefix
    char *prefix = find_char_arg(argc, argv, "-prefix", 0);//prefix默认参数是0,argv为二维数组,存储了参数字符串
    //寻找是否有参数thresh参数,thresh为输出的阈值
    float thresh = find_float_arg(argc, argv, "-thresh", .24);//0.24,thresh默认参数为0.24
    //寻找是否有参数hier_thresh,默认为0.5
    float hier_thresh = find_float_arg(argc, argv, "-hier", .5);
    //类似上面的
    int cam_index = find_int_arg(argc, argv, "-c", 0);
    //类似上面的
    int frame_skip = find_int_arg(argc, argv, "-s", 0);
    //如果输入参数小于4个,输出正确语法如何使用
    //printf 应该等价于 fprintf(stdout, ...),这里stderr和stdout默认输出设备都是屏幕,但是stderr一般指标准出错输入设备 
    if(argc < 4){
        fprintf(stderr, "usage: %s %s [train/test/valid] [cfg] [weights (optional)]\n", argv[0], argv[1]);
        return;
    }
    //类似上面
    char *gpu_list = find_char_arg(argc, argv, "-gpus", 0);
    //检查是否指定GPU运算
    char *outfile = find_char_arg(argc, argv, "-out", 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 = calloc(ngpus, sizeof(int));
        for<
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值