环境win10 cuda10 pytorch1.0
项目地址:链接
参考博客: https://blog.csdn.net/weixin _ 43380510/article/details/83004127
data文件夹格式---VOC2007
--------annotations
----- -图像集
---------Main
--------trainval.txt
--------test.txt
--------JPEGimages
Annotations放置xml文件
JPEGImages上传照片
Main包含txt文件,其中包含图像名称,没有“. jpg”
脚本编写的txt代码如下。 导入操作系统
path _ name=r ' d :codingpythonfaster-rcnn.py torch-py torch-1.0dataVOC dev kitVOC 2007 jpp
f=open (d :/coding/python/faster-rcnn.py torch-py torch-1.0/data/VOC dev kit/VOC 2007 /图像集/maii
foriteminOS.listdir(path_name ) :
original _ name=OS.path.join (path _ name,item ) ) ) ) )。
print(item ) #原始名称带. jpg
str_name=item.split('.'#分隔符
打印(str _ name [0] )
f.write(str_name[0]'n ' )
另外,也可以参照链接博客的github,重命名xml文件的folder,根据博客的代码修改其他属性。 #编码=utf-8
导入操作系统
import os.path
import xml.dom.minidom
path=' d :codingpython\ faster-rcnn.py torch-py torch-1.0\ data\ VOC dev kitVOC 2007
获取files=OS.listdir(path ) )文件夹下的所有文件名
遍历for xmlFile in files: #文件夹
判断是否为ifnotOS.path.isdir(xmlfile ) : #文件夹,否则无法打开
#打印(xmlfile )
#将获取的xml文件名发送到dom分析
DOM=XML.DOM.minidom.parse (OS.path.join ) path,xmlFile ) )输入XML文件的具体路径
root=dom.documentElement
获取#标签和的值
# name=root.getelementsbytagname (' filename ) )。
folder=root.getelementsbytagname (' folder ' ) ) ) ) ) ) ) )。
cnt=0
#修改每个xml文件的多个相同属性值。 此处将每个属性更改为plane,将每个属性更改为VOC2007
#forIinrange(Len ) name ) :
#print(name[I].firstchild.data )。
# name [ I ].first child.data=' RES ' str (CNT ).jpg )
#print(name[I].firstchild.data )。
# cnt =1
#print(name[I].firstchild.data )。
傅里叶变换(len )文件夹) :
print (folder [ I ].first child.data )。
folder [ I ].first child.data=' VOC 2007 '
print (folder [ I ].first child.data )。
#将属性保存到xml文件
withopen(OS.path.join(path,xmlFile ),' w ' ) as fh:
是DOM.writexml(FH )
打印(“已写入”)。
有几个问题和解决办法
1自制的xml包含中文字符,读取失败
这个问题真的很麻烦,一个个修改起来又很麻烦,我的path包含中文,想用上面的方法批量修改,但是XML.DOM.minidom.parse (OS.path.join ) patth
批量从xml到txt,同样从txt到xml导入操作系统
path _ name=r ' d :neu-detimages ' #批量修改的文件夹路径
i=0 #起始数字
foriteminOS.listdir(path_name ) :
original _ name=OS.path.join (path _ name,item ) ) ) ) )。
new _ name=OS.path.join (path _ name,(' RES'str(I ).jpg ) )
#在上面的行中,选择您想要的格式和命名方法
print(new_name )是
OS.rename(original_name,new_name ) #重命名
i =1
txt修改,我也更改了脚本。 主要是删除了path的行,更改了第一行: import os,sys
path _ name=r ' d :studytest ' #请考虑批量修改的txt文件夹路径
# f=open (r ' d : (编码(left.txt ),模式=' w ' ) ) ) ) ) ) ) ) )
foriteminOS.listdir(path_name ) :
original _ name=OS.path.join (path _ name,item ) ) ) ) )。
是打印(item )
str_name=item.split ('.' )
file _ name=str _ name [0] '.' str _ name [1]
f=open(path_name''item,' r ' )这用于读取源文件
flist=f.readlines (
w=open(path_name''item,' w ' )这用于写入新文件以替换旧文件,并且可以使用与原始文件相同的名称复盖原始文件
for l in flist:
if 'version' in l:
l=l.replace (? XML版本=' 1.0 '?'')
替换#replace函数
#if 'path'not in l: #这里是为了删除带path的行
w .写入(l )。
# f .写入行(flist ) ) )。
写完后放回xml就好了……我真的是另一条路的mrdpkq哈哈哈
2密钥错误:‘none’
这是因为我的签证误操作了。 img标签在画边框的时候,灵机一下子画了“none”,忘了放进class里。 我找了半天……这是上述方法之一,筛选name是否都是你的class,找出错误的文件,删除就可以了。
3key error :‘width’
/faster-rcnn.py torch/data/cache/VOC _ 2007 _ train val _ gt _ roidb.pkl删除介绍即可。
4资产(boxes [ :2 ]=boxes [ :0 ] ).all ) ) ) ) ) ) )。
总之,就是图框太靠一边了,问题不大……
参考链接: https://blog.csdn.net/xzzppp/article/details/52036794
修改lib/datasets/imdb.py,append_flipped_images ()函数,一行代码在boxes [ :2 ]=widths [ I ]-ol dx1-1下
if boxes[b][2] boxes[b][0]:
boxes[b][0]=0
更改lib/datasets/pascal_voc.py,_load_pascal_annotation ()函数for ix,objinenumerate ) objs ) :
box=obj.find('bndbox ' ) )。
# make pixel indexes0-基
x1=浮动(bbox.find (xmin ).text () ) ) ) ) )。
y1=float(Bbox.find(ymin ).text () ) ) ) ) )。
x2=浮动(bbox.find (xmax ).text () ) ) ) ) )。
y2=浮动(bbox.find ) (' ymax ' ).text () ) ) ) ) ) ) ) )。
x1 y1 x2 y2本来就有-1,所以把-1全部删除就可以了。
如果没有用,参考元博进行步骤3的修改。