Faster-RCNN-TensorFlow-Python3.5-master 时隔一年再次跑起来

听着电脑风扇呼呼转的声音真舒服

    • 2019本科毕业设计题目是《海洋生物图像的增强与检测算法研究》
  • 数据集制作VOC2007
    • 更改训练内容
    • 几个重要程序
    • 批量修改图片名称,以及XML名称
    • 修改对应xml文件

2019本科毕业设计题目是《海洋生物图像的增强与检测算法研究》

2020年6月。最近隔壁实验室的小伙,伙同参加一个腾讯Al的海洋生物图像检测,这简直就和我本科毕业设计一样啊。
调试了三天,终于跑起来了,记录几个坑。

数据集制作VOC2007

关于如何制作数据集不在叙述,只推荐软件:Colabeler
重点:数据要亲自制作,而且画的框不要超过图像界限----画的框不要超过图像界限----画的框不要超过图像界限
----画的框不要超过图像界限----画的框不要超过图像界限-
---画的框不要超过图像界限----画的框不要超过图像界限-
---画的框不要超过图像界限----画的框不要超过图像界限
----画的框不要超过图像界限----画的框不要超过图像界限-
---画的框不要超过图像界限。
------检测目标不要太小!!!!!!!!!!!!!!!说完了。

更改训练内容

lib/config/config.py-------------30行---负责调解迭代运行次数。
lib/config/config.py-------------44行---负责调解迭代多少次数后保存model,不然不保存model。
lib/datasets/pascal_voc.py---------33行负责-------运行的目标名称更改------‘__background__’不要动,直接在后面更改。
demo.py------------------91行负责调解test显示被测目标的阈值,默认0.1.

几个重要程序

调解图像大小: #coding=utf-8
import os  #打开文件时需要
from PIL import Image
import re

Start_path='C:\\Users\\zcy\\Desktop\\transform\\' #你的图片目录
iphone5_width=333 #图片最大宽度
iphone5_depth=500 #图片最大高度

list=os.listdir(Start_path)
#print list
count=0
for pic in list:
   path=Start_path+pic
  print path
	im=Image.open(path)
  w,h=im.size
 #print w,h
 #iphone 5的分辨率为1136*640,如果图片分辨率超过这个值,进行图片的等比例压缩

if w>iphone5_width:
    print pic
    print "图片名称为"+pic+"图片被修改"
    h_new=iphone5_width*h/w
    w_new=iphone5_width
    count=count+1
    out = im.resize((w_new,h_new),Image.ANTIALIAS)
    new_pic=re.sub(pic[:-4],pic[:-4]+'_new',pic)
    #print new_pic
    new_path=Start_path+new_pic
    out.save(new_path)

if h>iphone5_depth:
    print pic
    print "图片名称为"+pic+"图片被修改"
    w=iphone5_depth*w/h
    h=iphone5_depth
    count=count+1
    out = im.resize((w_new,h_new),Image.ANTIALIAS)
    new_pic=re.sub(pic[:-4],pic[:-4]+'_new',pic)
    #print new_pic
    new_path=Start_path+new_pic
    out.save(new_path)
    print 'END'
count=str(count)
print "共有"+count+"张图片尺寸被修改"




*命名图像名称:*    
		#coding=utf-8
import os  #打开文件时需要
from PIL import Image
import re

class BatchRename():
 def __init__(self):
	    #我的图片文件夹路径
 	   self.path = 'C:\\Users\\zcy\\Desktop\\transform'

	def rename(self):
    filelist = os.listdir(self.path)
    total_num = len(filelist)
    i = 10000 #图片编号从多少开始,不要跟VOC原本的编号重复了
    n = 6
    for item in filelist:
        if item.endswith('.jpg'):
            n = 6 - len(str(i))
            src = os.path.join(os.path.abspath(self.path), item)
            dst = os.path.join(os.path.abspath(self.path), str(0)*n + str(i) + '.jpg')
            try:
                os.rename(src, dst)
                print 'converting %s to %s ...' % (src, dst)
                i = i + 1
            except:
                continue
    print 'total %d to rename & converted %d jpgs' % (total_num, i)
if __name__ == '__main__':
demo = BatchRename()
demo.rename()
       

生成VOC2007Main文件夹内容:
	# !/usr/bin/python
# -*- coding: utf-8 -*-
import os
import random  

trainval_percent = 0.8  #trainval占比例多少
train_percent = 0.7  #test数据集占比例多少
xmlfilepath = 'Annotations'  
txtsavepath = 'ImageSets\Main'  
total_xml = os.listdir(xmlfilepath)  

num=len(total_xml)  
list=range(num)  
tv=int(num*trainval_percent)  
tr=int(tv*train_percent)  
trainval= random.sample(list,tv)  
train=random.sample(trainval,tr)  

ftrainval = open('ImageSets/Main/trainval.txt', 'w')  
ftest = open('ImageSets/Main/test.txt', 'w')  
ftrain = open('ImageSets/Main/train.txt', 'w')  
fval = open('ImageSets/Main/val.txt', 'w')  

for i  in list:  
   name=total_xml[i][:-4]+'\n'  
  if i in trainval:  
 	   ftrainval.write(name)  
  	  if i in train:  
     	   ftrain.write(name)  
   	 else:  
    	    fval.write(name)  
  else:  
  	  ftest.write(name)  

ftrainval.close()  
ftrain.close()  
fval.close()  
ftest .close()  

批量修改图片名称,以及XML名称

	import os
	import glob
	import shutil
	目录名称,你要自己修改
	_dir = "H:/mypic/"
	file_name = os.listdir(_dir)
	print(file_name)

	n=1
	for file in file_name:
	  pic_name = os.listdir(_dir+file)
	 #print(pic_name)
	 for pic in pic_name:
 		   if os.path.isdir(_dir+file+'/'+pic):
    		    xml_name=os.listdir(_dir+file+"/"+pic)
	            for xml in xml_name:
          		  shutil.copy( _dir+file+'/'+pic+"/"+xml, 		'G:/data/VOCdevkit2007/VOC2007/Annotations/')
           # print(pic)


          #修改个别XML名称
          # if xml == '1000010.xml':
               #print(dir + file + '/' + pic)
              # os.rename(_dir+file + '/' + pic + '/' + xml, _dir + file + '/' + pic + "/" + "100010.xml")


           # oldname = _dir+file+'/'+pic+"/"+xml
           # newname = _dir+file+'/'+pic+"/"+ str(n).zfill(6) + ".xml"
            #os.rename(oldname, newname)
            #n = n + 1
           # print(oldname, '--->', newname)

# zfill是一个自动补零的函数 6 就是一共六位 不足的补零 只有字符串才有这个函数 所以转换了
# newname = _dir+str(xml_name.index(xml)+1).zfill(6)+".xml"

#批量修改图片的名称
n=1
for file in file_name:
    pic_name = os.listdir(_dir+file)
    print(pic_name)
  	 for pic in pic_name:
   	 oldname = _dir+file+"/"+pic
 	   newname = _dir+file+"/" + str(n).zfill(6) + ".jpg"
   	 os.rename(oldname, newname)
   	 n = n + 1
    print(oldname, '--->', newname)
# zfill是一个自动补零的函数 6 就是一共六位 不足的补零 只有字符串才有这个函数 所以转换了
# newname = _dir+str(xml_name.index(xml)+1).zfill(6)+".xml"

修改对应xml文件

	import os
	import re

	_dir = "G:/Annotations/"
	xmlList = os.listdir(_dir)
	n = 1
	for xml in xmlList:
	   #f = open(_dir + xml, "r")
	   f = open(_dir + xml, "r", encoding='utf-8')
	   xmldata = f.read()
	   xmldata = re.sub('\(.*?)\', 		
	   f.close()
	   f = open(_dir + xml, "w")
       f.write(xmldata)
	   f.close()
       n += 1

你可能感兴趣的:(faterrcnn,深度学习,图像识别,计算机视觉,人工智能,python)