3—YOLO:训练自己的数据
来源:互联网 发布:网络诈骗案案例 编辑:程序博客网 时间:2024/06/06 15:41
YOLO: Real-Time Object Detection:https://pjreddie.com/darknet/yolo/
YOLO模型训练可视化训练过程中的中间参数:http://blog.csdn.net/yudiemiaomiao/article/details/72469135
——————————————————————
一.制作数据集
1.数据集准备(1)将数据集VOCdevkit2007拷贝到darknet\scripts下 (2)VOCdevkit2007修改名称为VOCdevkit2.修改darknet\scripts\voc_label.pysets=[('2007', 'train'), ('2007', 'val'), ('2007', 'test')] classes = ["comp"] #os.system("cat 2007_train.txt 2007_val.txt 2012_train.txt 2012_val.txt > train.txt")#os.system("cat 2007_train.txt 2007_val.txt 2007_test.txt 2012_train.txt 2012_val.txt > train.all.txt")3.终端进入darknet\scripts,执行: python voc_label.py 此后可以看到:VOCdevkit\VOC2007里多了一个labels文件夹(如下)darknet\scripts下多了2007_train.txt、2007_val.txt和2007_test.txt三个文件
二.修改配置文件
(1)修改data/voc.names文件:comp(2)修改cfg/voc.data文件。classes= 1 //类别数train = /home/gjw/darknet/scripts/train.txt //训练集valid = /home/gjw/darknet/scripts/2007_test.txt //测试集names = data/voc.namesbackup = backup //在darknet新建一个backup目录,存储.weight(3) 修改×××.cfg(以yolo-voc.cfg为例),修改2个参数(filters,class),见下:① 【region】层中 classes 改成1。② 【region】层上方第一个【convolution】层,其中的filters值要进行修改,改成(classes+ coords+ 1)* (NUM) ,我的情况中:(1+4+1)* 5=30③ learning_rate:学习率④ max_batches:最大迭代次数
三.下载预训练模型
下载好的预训练模型保存在/darknet/目录下PS:经过以上的修改,记得重新make一下darknet
四.训练
在darknet/目录下新建backup目录用于存放训练生成的模型
官网上下载预训练的模型,训练命令: ./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23 ./darknet detector train cfg/voc.data cfg/yolo-voc.cfg yolo-voc.weights【结果】训练完毕就可以生成weights文件Saving weights to backup/yolo-voc.backupSaving weights to backup/yolo-voc_100.weightsSaving weights to backup/yolo-voc_final.weights
五.评估性能http://blog.csdn.net/hysteric314/article/details/54093734
经过漫长的训练过程,model终于训练好了,为了评估性能,可以使用以下指令 ./darknet detector recall cfg/voc.data cfg/yolo_voc.cfg backup/yolo_voc_final.weights需要注意的是,在使用这个指令之前,我先修改一下src/detector.c 这一函数(1)位置第375行改成:list *plist = get_paths(“/home/yolo_v2_tinydarknet/darknet/infrared/infrared_val.txt”);//改成infrared_val.txt的完整路径(2)运行上面的指令会调用validate_detector_recall函数,这个函数中有个参数thresh(阈值),默认的值是.001,这个默认值设的很小,会让系统识别出更多的框来,导致proposals值激增,还会让recall值变高,达到98.5%。最终我改成了 .25。(3)上面的函数只会显示出recall值,没有precision值,precision的值计算方法是:识别为正确的个数/画了多少个框,所以我修改了代码。我把第447行显示结果的代码修改为 :fprintf(stderr, "ID:%5d Correct:%5d Total:%5d\tRPs/Img: %.2f\tIOU: %.2f%%\tRecall:%.2f%%\t", i, correct, total, (float)proposals/(i+1), avg_iou*100/total, 100.*correct/total);fprintf(stderr, "proposals:%5d\tPrecision:%.2f%%\n",proposals,100.*correct/(float)proposals); 运行后显示的结果是: Correct :可以理解为正确地画了多少个框,遍历每张图片的Ground Truth,网络会预测出很多的框,对每一Groud Truth框与所有预测出的框计算IoU,在所有IoU中找一个最大值,如果最大值超过一个预设的阈值,则correct加一。Total:一共有多少个Groud Truth框。Rps/img:p 代表proposals, r 代表region。 意思就是平均下来每个图片会有预测出多少个框。预测框的决定条件是,预测某一类的概率大于阈值。在validation_yolo_recall函数中,默认的这一个阈值是0.001,这一阈值设置的比较低,这就会导致会预测出很多个框,但是这样做是可以提升recall的值,一般yolo用于画框的默认值是.25,使用这个阈值会让画出来的框比较准确。而validation_yolo_recall使用的阈值改成。25的时候,Rps/img 值会降低,recall的值会降低,所以validation_yolo_recall默认使用一个较低的阈值,有可能作者的目的就是为了提高recall值,想在某种程度上体现网络的识别精度比较高。IoU、Recall、Precision:解释起来比较麻烦,请看博客有详细说明: http://blog.csdn.net/hysteric314/article/details/54093734
六.测试单张图像
./darknet detector test cfg/voc.data cfg/yolo-voc.cfg backup/yolo-voc_final.weights data/000020.jpg[扩展] 可以通过-thresh 0设置所有检测的阈值为0,同理,也可以通过设置不同的阈值进行检测。 ./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg -thresh 0
七.测试摄像头/视频
./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights <video file>
http://blog.csdn.net/burning_keyboard/article/details/71056164
http://blog.csdn.net/xjz18298268521/article/details/61922405
http://blog.csdn.net/sinat_30071459/article/details/53100791
http://blog.csdn.net/sinat_30071459/article/details/53161113
阅读全文
1 0
- 3—YOLO:训练自己的数据
- yolo训练自己的数据
- YOLO教程之训练自己的数据
- darknet yolo v2 训练自己的数据
- tiny-yolo 训练自己的数据集
- yolo训练自己的数据实践总结
- darknet yolo v2 训练自己的数据
- YOLO训练自己的数据集
- YOLO v2 训练自己的图像数据
- darknet yolo训练自己的数据
- 详解:YOLO-darknet训练自己的数据
- yolo训练自己的数据集
- 【YOLO学习】使用YOLO v2训练自己的数据
- 【YOLO学习】使用YOLO v2训练自己的数据
- 【YOLO】详解:YOLO-darknet训练自己的数据
- 【YOLO】数据集处理训练自己的数据集
- 使用YOLO训练自己的数据样本经验总结
- Yolo-v2训练voc及自己的数据集
- JAVA集合知识点汇总
- JAVA调用C or C++的两种方式
- (lintcode)第2题尾部的零
- 设计模式C++版:第十四式命令模式
- linux下ACL权限
- 3—YOLO:训练自己的数据
- Android stroke 边框线 某一边
- 浅析Java中CountDownLatch用法
- 树分治
- 树状网络攻击(LCA和树上差分的应用)
- Mysql 字符串Split之存储过程实现
- 贪心-POJ 1700 过河问题
- NIO阻塞与非阻塞IO
- mysql将一个表的数据插入到另外一个表,如果某个字段已经存在将不插入的sql