目标检测算法SSD_训练自有数据

本文介绍了如何在Caffe框架下使用SSD进行目标检测,特别是针对自有数据的预处理,包括标签数据和图片数据的转换,如YOLOv3标签格式转SSD格式,PNG图片转JPG格式,以及数据转化为VOC和LMDB格式的过程,为后续的网络训练做准备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于Caffe框架的目标检测算法SSD–进行自有数据替换并训练

主要步骤:

  1. 标签数据预处理
  2. 图片数据预处理
  3. 数据及标签的VOC格式以及LMDB格式转化
  4. 网络训练
  5. 其他问题分析

1.标签数据预处理

由于拿到的是YOLOv3格式的训练集label,不满足SSD标签格式。故标签需要先被转化成符合要求的输入格式。
注:YOLOv3标签格式为(x,y,w,h)。其中x,y为物体框中点横纵坐标表示,w,h为物体框的宽、高。四类信息数据均被进行了数值归一化预处理,除以了512(512为图片大小)。
初期得到的满足YOLOv3的数据格式
我们需要调整为满足SSD数据输入格式的标签,保证txt格式的第一行为object_number,第二行五列数值依次为:标识物label序号–Xmin–Ymin–Xmax–Ymax。制作python脚本进行数值转换。

#在第一行插入object_number程序
for i in range(612):  #612为待处理图片个数
    i+=1    
    with open(str(i)+'.txt', 'r+') as f:
        content = f.read()  
        f.seek(0, 0)
        f.write('0\n'+content)
#坐标转换修改程序
import numpy as np

numbers = 612

for i in xrange(numbers):   
    f=open(str(i+1)+".txt", "r")
    lines = f.readlines() 
    length = len(lines)
    elements = np.zeros(shape=(length-1,5))
    for j in xrange(length-1):
        elements[j] = lines[j+1].split()
        for k in xrange(4):
            elements[j][k+1] = 512*float(elements[j][k+1])
        elements[j][1] = elements[j][1] - elements[j][3]/2
        elements[j][2] = elements[j][2] - elements[j][4]/2
        elements[j][3] = elements[j][1] + elements[j][3]
        elements[j][4] = elements[j][2] + elements[j][4]
    f.close()

    f = open(str(i+1)+".txt","w")
    f.write('0')
    f.close()

    f = open(str(i+1)+".txt","a")
    for j in xrange(length-1):
        f.write('\n')
        for k in xrange(5):
            if k<4:
                element = elements[j][k]
                f.write(str(int(element))+' ')
            else:
                element = elements[j][k]
                f.write(str(int(element)))
    f.close()

修改后的label文件

图片数据预处理

由于拿到的图片为.png格式,但caffe的voc_to_lmdb过程需要.jpg图片格式,因此在这里需要进一步进行图片转化。图片转化不能借助python脚本强行修改文件名,要借助PIL库进行图片读取–保存,脚本程序如下:

import Image

i=0
for i in range(612):
    i+=1
    im = Image.open('/media/y666/00008FEA00024472/man/SSD/caffe/data/VOCdevkit/car/JPEGImages/'+str(i)+'.png')
    im.save('/media/y666/00008FEA00024472/man/SSD/caffe/data/VOCdevkit/car/JPEGImages/'+str(i)+'.jpg')
特别说明的是,如果图片与label文件名为乱序,建议自行修改文件名为以1开头的自然数组成(1.jpg\2.jpg\1.txt...),借助此种方法可以保证在数据集制作的过程中避免因文件名出现的各类错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值