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('\<path>(.*?)\</path>',
f.close()
f = open(_dir + xml, "w")
f.write(xmldata)
f.close()
n += 1