1.yolov3代码地址
yolov3代码下载:https://github.com/bubbliiiing/yolo3-pytorch
2.数据集下载
红外数据集来自于文章《地空背景下红外图像弱小飞机目标检测跟踪数据集》
下载地址:地/空背景下红外图像弱小飞机目标检测跟踪数据集 (csdata.org)
与常见数据集不同的是:该数据集为灰度图像,图像格式为bmp,且标注信息为目标中心点位置,所以需要重新标注数据集。
3.数据集标注处理
(1)标注软件使用的是labelImg,下面百度云链接:
http://链接:https://pan.baidu.com/s/1eN7izcxorsNiOBdJVpj18A 提取码:a508
(2)按照voc数据集的格式对图像进行标注;其中文件夹中JPEGImages放置图像数据,Annotations中放置图像的标注文件,ImageSets/Main用来放置生成的txt文件
(3)双击labelImg.exe,首先点击左侧的Open Dir选项,选择需要标注的图像文件夹JPEGImages,随后点击Change Save Dir选项,选择图像标注数据存放的位置Annotations;然后将输入法切换至英文模式,在图像上使用快捷键‘W’对待检测物体画框,获得目标所在的位置及坐标信息,随后在弹窗中添加该物体所属类别,点击“OK”,并使用“Ctrl+s”保存标注信息。快捷键“D”可以切换下一张图像,依次进行标注,直至所有图像标注完成。
(4)根据标注信息在model_data文件夹下建立一个自己的my_classes.txt,里面写自己所需要区分的类别
(5)标注完成后,利用根目录下的voc_annotation.py获得训练用的2007_train.txt和2007_val.txt。
第一次训练时将voc_annotation.py中的annotation_mode修改为0,并且修改对应的classes_path(自己的数据集一定要修改)。运行voc_annotation.py处理标签,获得VOCdevkit/VOC2007/ImageSets里面的txt以及训练用的007_train.txt和2007_val.txt
(6)修改train.py文件中的classes_path(与voc_annotation.py中相同)
注意,在训练时需要注意输入图片的格式应该为*.jpg格式,所以需要先转换图像格式
import os
from PIL import Image
import shutil
import sys
# 原图片存放的地址
source_path="JPEGImage/"
# 转换后的图片格式
types='jpg'
#最终图片存放的地址
target_path="JPEGImages/"
# 如果存放路径不存在则创建
if not os.path.exists(target_path):
os.makedirs(target_path)
#转换函数
def changeImage(source_path,types):
files = []
image_list=os.listdir(source_path) # 用于返回指定的文件夹包含的文件或文件夹的名字的列表
files = [os.path.join(source_path,_) for _ in image_list] #拼接文件路径,可传入多个参数
for file in files:
try:
sys.stdout.flush()
im = Image.open(file)
image = os.path.splitext(file)[0] + "." + types
im.save(image)
shutil.move(image,target_path)
except IOError as e:
print('could not read:',file)
print('error:',e)
print('skip it\n')
sys.stdout.write('Convert Over!\n')
sys.stdout.flush()
#执行函数
if __name__ == "__main__"
changeImage(source_path,types)
最后,根据自己的需要,设置epoch、batch_size、learning_rate等相关信息就可以开始训练了。在训练多个epoch后,权值会生成在logs文件夹中。
(7)训练结果预测
训练结果预测需要用到两个文件,分别是yolo.py和predict.py。在yolo.py里面修改model_path以及classes_path。
model_path指向训练好的权值文件,在logs文件夹里。
classes_path指向检测类别所对应的txt。
完成修改后就可以运行predict.py进行检测了。运行后输入图片路径即可检测