SSD训练自己数据集

SSD训练自己数据集

原理

目标检测|SSD原理与实现
损失函数:(1)类别损失(置信度误差)为softmax loss
在这里插入图片描述(2)位置损失为Smooth L1 Loss
在这里插入图片描述

训练

1.数据制作

(1)首先准备img与txt文件夹(图像及标注的txt文件),txt文件夹下的文件均为txt文件,里边的内容为1 2 26 18 70样式,其中1为类别,(2,26)为左上点坐标,(18,70)为右下角坐标。目标检测标注工具初始生成的文件包括xml,xml2txt文件如下。

import os
import re
import json
import shutil
import numpy as np
from PIL import Image
from lxml import etree
import xml.etree.ElementTree as et
from lxml.etree import Element, SubElement, tostring

#class_filters=['person','bicycle','car','motorcycle','bus','train','truck','backpack','umbrella','handbag','cell phone','suitcase','tie']
#class_filters=['person','bicycle','car','motorcycle','bus','truck']
class_filters=['plate']

anno_folder = '/data_2/LYD/plate_detection/train/data/split/test/xml'

trainval_folder = '/data_2/data/yolo3-train-data/weifa_jiance_20190612/yolov3'


if __name__ == '__main__':
    for root, dirs, files in os.walk(anno_folder):
        for filename in files:

            split_name = re.split('\.', filename)
            bbox_file = split_name[0] + '.txt'
            trainval_file = os.path.join(trainval_folder, bbox_file)
            trainval_txt_file_fd = open(trainval_file, 'w')

            anno_path = os.path.join(anno_folder, filename)
            print 'anno_path = ', anno_path
            tree = et.parse(anno_path)
            root = tree.getroot()


            for obj_size in root.findall('size'):
                width = int(obj_size.find('width').text)
                height = int(obj_size.find('height').text)
                dw = 1.0 / width
                dh = 1.0 / height

            for obj in root.findall('object'):
                obj_name = obj.find('name').text
                if obj_name in class_filters:
                    if obj.find('name').text == 'smallCar':
                        trainval_txt_file_fd.write(str(0) + ' ')
                    elif obj.find('name').text == 'car':
                        trainval_txt_file_fd.write(str(0) + ' ')
                    elif obj.find('name').text == 'Car':
                        trainval_txt_file_fd.write(str(0) + ' ')
                    elif obj.find('name').text == 'xiaoche':
                        trainval_txt_file_fd.write(str(0) + ' ')
                    elif obj.find('name').text == 'bigCar':
                        trainval_txt_file_fd.write(str(1) + ' ')
                        
                    bndbox = obj.find('bndbox')
                    xmin = bndbox.find('xmin').text
                    ymin = bndbox.find('ymin').text
                    xmax = bndbox.find('xmax').text
                    ymax =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值