YOLOv1 目标检测 训练及训练中存在的问题

下载的版本为:https://github.com/pjreddie/darknet.git

根据官网教程下载VOC数据集及权重:https://pjreddie.com/darknet/yolov1/

训练

1. 对cfg/yolov1.cfg做修改:

    注释掉Testing的部分,使用Training部分,batch=64,subdivisions=8,否则会出现大量-nan,以及loss不收敛情况

[net]
# Testing
# batch=1
# subdivisions=1
# Training   // 使用training部分
batch=64
subdivisions=8
height=448
width=448
channels=3
momentum=0.9
decay=0.0005
saturation=1.5
exposure=1.5
hue=.1

batch=1,-nan情况:

2. 对examples/yolo.c做修改:

    相比较yolov2和yolov3,yolov1还没有采用类似 voc.data 的配置文件,故需要在源代码里,修改trainset的路径

void train_yolo(char *cfgfile, char *weightfile)
{
    char *train_images = "/data/voc/train.txt";  //修改为train.txt对应路径
    char *backup_directory = "/home/pjreddie/backup/";   //训练后得到的权重(weights)的存放地
    srand(time(0));
    char *base = basecfg(cfgfile);
    printf("%s\n", base);
    float avg_loss = -1;
    network *net = load_network(cfgfile, weightfile, 0);
    printf("Learning Rate: %g, Momentum: %g, Decay: %g\n", net->learning_rate, net->momentum, net->decay);
    int imgs = net->batch*net->subdivisions;
    int i = *net->seen/imgs;
    data train, buffer;

3. 开始训练:

./darknet yolo train cfg/yolov1/yolo.train.cfg extraction.conv.weights

使用GPU,CUDA,显卡为GeForce GTX 1080,在VOC数据集完成了对YOLOv1的训练(iter = 40000),IOU普遍在0.69以上,且loss从一开始的15收敛到了2.7左右(忘记保存训练过程了),得到最终权重yolov1_final_weight.weight,训练时间差不多25小时。

训练log(末期):

    

最终得到的权重进行单张图片检测的精确度不如作者在官网上给的权重高

作者所给权重:

    

训练所得权重:

    
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值