深度学习(六十八)darknet使用
这几天因为要对yolo进行重新训练,需要用到imagenet pretrain,由于网络是自己设计的网络,所以需要先在darknet上训练imagenet,由于网上都没有相关的说明教程,特别是图片路径是怎么和类别标签对应起来的,让我百思不得其解,所以最后就自己去查看了darknet的源码,发现原来作者是用了字符串匹配,来查找图片路径字符串中是否有与类别标签字符串匹配的子字符串,以此判断该类别标签的。
1、darknet对于图片分类训练、验证命令为:
./darknet classifier train cfg/imagenet1k.data cfg/extraction.cfg extraction.weights ./darknet classifier valid cfg/imagenet1k.data cfg/extraction.cfg extraction.weights
2、数据格式:数据路径配置主要读取自:cfg/imagenet1k.data
classes=1000 train = imagenet/darknet_train.txt valid = imagenet/darknet_val.txt backup = backup/ labels = data/imagenet.labels.list names = data/imagenet.shortnames.list top=5
darknet_train.txt,darknet_val.txt的训练格式只有图片路径,比如:
/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10026.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10027.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10029.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10040.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10042.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10043.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10048.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10066.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10074.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_1009.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10095.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10108.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10110.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10120.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10124.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10150.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10159.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10162.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10183.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10194.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10211.JPEG /home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/n01440764/n01440764_10218.JPEG
那么darknet是怎么知道每一行图片路径,对应的类别标签的。其主要是从:
data/imagenet.labels.list
读取标签字符串,然后用类别标签字符串,匹配上面每一行的图片路径,查找是否有子字符串,以此确定类别标签,所以训练的时候,一定要确保图片路径包含了类别标签,比如:n01440764等就是类别标签。
3、由于imagenet的val图片是放在一起的,路径不包含标签,所以需要读取val标签.xml文件,把val的图片根据标签,重新存过一遍,放在对应的类别标签文件:
#coding=utf-8
import os
import shutil
from BeautifulSoup import BeautifulSoup
#train.txt可通过运行脚本caffe/data/get_ilsvrc_aux.sh下载获得
'''with open("../imagenet/train.txt") as f:
with open("../imagenet/darknet_train.txt",'w') as w:
for l in f.readlines():
w.writelines('/home/research/disk1/imagenet/ILSVRC2015/Data/CLS-LOC/train/'+l.split()[0]+'\n')'''
#val
dataroot='/home/research/disk1/imagenet/ILSVRC2015/'
vallabel=dataroot+'Annotations/CLS-LOC/val'
valimage=dataroot+'Data/CLS-LOC/val'
with open("../imagenet/darknet_val.txt",'w') as w:
for l in os.listdir(vallabel):
xml = ""
with open(os.path.join(vallabel,l)) as f:
xml = f.readlines()
xml = ''.join([line.strip('\t') for line in xml])
label=BeautifulSoup(xml).find('name').string
filename=BeautifulSoup(xml).find('filename').string+'.JPEG'
saveroot='../temp/'+label
if os.path.exists(saveroot) is False:
os.makedirs(saveroot)
shutil.copy(os.path.join(valimage,filename),os.path.join(saveroot,filename))
w.writelines('/home/research/disk1/compress_yolo/temp/' + filename+ '\n')
深度学习(六十八)darknet使用的更多相关文章
- B站动手学深度学习第十八课:seq2seq(编码器和解码器)和注意力机制
from mxnet import nd h_forward = nd.array([1,2]) h_backward = nd.array([3,4]) h_bi = nd.concat(h_for ...
- python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置
python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...
- 《剑指Offer》题六十一~题六十八
六十一.扑克牌中的顺子 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2~10为数字本身,A为1,J为11,Q为12,K为13,而大.小王可以看成任意数字. 六十二.圆圈中 ...
- Tensorflow深度学习之十二:基础图像处理之二
Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474 首先放出原始图像: ...
- 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除
目录 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除 18.1 centos6系统启动过程及相关配置文件 18.1.1 centos6系统启动过程 18.1.2 centos6启 ...
- 《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 - 下篇(详细教程)
1.简介 今天继续操作Excle,小伙伴或者童鞋们是不是觉得宏哥会介绍第三种工具操作Excle,今天不介绍了,有两种就够用了,其实一种就够用了,今天主要是来介绍如何使用不同的数据类型读取Excel文件 ...
- Deep learning深度学习的十大开源框架
Google开源了TensorFlow(GitHub),此举在深度学习领域影响巨大,因为Google在人工智能领域的研发成绩斐然,有着雄厚的人才储备,而且Google自己的Gmail和搜索引擎都在使用 ...
- (C/C++学习笔记) 十八. 继承和多态
十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...
- 深度学习(十) GoogleNet
GoogLeNet Incepetion V1 这是GoogLeNet的最早版本,出现在2014年的<Going deeper with convolutions>.之所以名为“GoogL ...
- arXiv 2015深度学习年度十大论文
由康奈尔大学运营维护着的arXiv网站,是一个在学术论文还未被出版时就将之向所有人开放的地方.这里汇聚了无数科学领域中最前沿的研究,机器学习也包括在内.它反映了学术界当前的整体趋势,我们看到,近来发布 ...
随机推荐
- 20145314郑凯杰 《Java程序设计》第5周学习总结
20145314郑凯杰 <Java程序设计>第5周学习总结 教材学习内容总结 托管的代码: 电脑上的代码: try与catch 简单来说,try与catch是两个块,java的程序会把正常 ...
- obtainBuffer timed out (is the CPU pegged?)
https://stackoverflow.com/questions/5293025/audiotrack-lag-obtainbuffer-timed-out [典] 03-13 14:55:57 ...
- 深度学习:Keras入门(二)之卷积神经网络(CNN)【转】
本文转载自:https://www.cnblogs.com/lc1217/p/7324935.html 说明:这篇文章需要有一些相关的基础知识,否则看起来可能比较吃力. 1.卷积与神经元 1.1 什么 ...
- uboot下如何查看内存里的数据
答:使用md工具 md.b $address $count (从地址$address处显示$count个字节的数据,b=byte,8位) md.w $address $count (从地址$addre ...
- 【转载】showModalDialog returnValue is undefined in Google Chrome
showModalDialog returnValue is undefined in Google Chrome Posted on August 22, 2012by briancaos For ...
- POJ 3352 Road Construction(边—双连通分量)
http://poj.org/problem?id=3352 题意: 给出一个图,求最少要加多少条边,能把该图变成边—双连通. 思路:双连通分量是没有桥的,dfs一遍,计算出每个结点的low值,如果相 ...
- geoserver源码学习与扩展——增加服务接口
参看:http://www.cnblogs.com/sillyemperor/archive/2011/01/11/1929420.html 上文写的很详细了.
- Dive into Spring framework -- 了解基本原理(一)
在继续我们的分析之前,推荐各位静心来读一下<<Expert_OneOne_J2EE_Design_and_Development>> 第四章, 正如spring BeanFac ...
- bzoj 1192 鬼谷子的钱袋 数学
1192: [HNOI2006]鬼谷子的钱袋 Time Limit: 10 Sec Memory Limit: 162 MB Description 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各 ...
- Struts2框架学习第二章——Struts2下的HelloWorld
本章要点 — Struts 2的下载和安装 — 纯手工创建一个Web应用 — 纯手工创建一个Struts 2应用 — 实现Struts 2的Action — 配置Struts 2的Action — ...