caffe-SSD训练自己的数据

本文档详细介绍了在Ubuntu和Mac系统上配置SSD目标检测算法所需环境的过程,包括下载Caffe-SSD代码、配置Caffe环境以及处理数据集。数据集准备部分涉及VOC数据集的标注、转换和生成LMDB文件。接着,指导如何下载预训练权重并修改训练脚本ssd_pascal.py以适应自定义数据集。最后,提供了训练SSD模型的步骤。
摘要由CSDN通过智能技术生成

一、环境搭建

1.1下载caffe-ssd代码:

git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd

1.2 caffe环境配置

具体请看博客Ubuntu16.04系统中caffe环境配置和博客Mac系统中caffe环境配置,以上方法仅供参考,由于caffe环境配置问题较多,编译报错,根据具体的问题再搜索解决方法。

二、数据集准备

这里介绍voc数据集格式训练。

2.1 数据集标注

具体标注方法参考博客labelimg安装及数据集标柱

2.1 数据集转换

在这里插入图片描述
JPEGImages存储的是图片,Annotations存储的是标签文件,ImageSets用于存储txt文件

2.1.1 生成图片名的txt文件

txt文件包含trainval.txt, test.txt, val.txt,txt文件中存储的是图片名(不带后缀.jpg或者.png,只是名字),txt文件由getTxt.py文件生成,代码中包含了训练集与测试集的划分。
生成的文件会保存在ImageSets/Main文件夹下

import os
import random
from os import listdir, getcwd

testval_percent = 0.01 # train_percent = 1 - testval_precent
testOfval_percent = 1 # test_percent = testOfval_percent * testval_percent
imgpath = 'JPEGImages'
total_img = os.listdir(imgpath)

num = len(total_img)
list = range(num)
tv = int(num * testval_percent)
tr = int(tv * testOfval_percent)
testval = random.sample(list, tv)
test = random.sample(testval, tr)

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

wd = os.getcwd()
for i in list:
    name = total_img[i][:-4] + '\n'
    if i in testval:
        if i in test:
            ftest.write(name)
        else:
            fval.write(name)
    else:
        ftrain.write(name)


ftrain.close()
fval.close()
ftest.close()
# os.system("cat train.txt val.txt > trainval.txt")
2.1.2 生成数据和标签路径的txt文件

在caffe-ssd/data目录下创建mydataset目录,同时将caffe-ssd/data/VOC0712目录下的create_list.sh,create_data.sh, labelmap_voc.prototxt这三个文件复制到cafe-ssd/data/mydataset目录下,第三个文件重命名为labelmap_mydataset.prototxt。

修改create_list.sh文件

#!/bin/bash
 
root_dir=/home/test/caffe-ssd/data/VOCdevkit/  # 修改为数据集路径
sub_dir=ImageSets/Main
bash_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
for dataset in trainval test
do
  dst_file=$bash_dir/$dataset.txt
  if [ -f $dst_file ]
  then
    rm -f $dst_file
  fi
  for name in MyDataSet  # 也需要修改,修改为VOCdevkit下级目录的名字
  do
    if [[ $dataset == "test" && $name == "VOC2012" ]]
    then
      continue
......
运行脚本文件:
sh create_list.sh

在caffe-ssd/data/mydataset目录下会生成三个文件trainval.txt,test.txt,test_name_size.txt
其中trainval.txt 和 test.txt 文件中包含了图片和标签的路径
在这里插入图片描述
test_name_size.txt包含了测试集的路径和图片大小
在这里插入图片描述

2.1.3 生成lmdb文件
修改标签名称文件labelmap_mydataset.prototxt
item {                      #背景要保留
  name: "none_of_the_above"
  label: 0
  display_name: "background"
}
item {                      #标签
  name: "car"
  label: 1
  display_name: "car"
}

修改create_data.sh文件

在caffe-ssd/example下新建文件夹mydataset

cur_dir=$(cd $( dirname ${BASH_SOURCE[0]} ) && pwd )
root_dir=/home/test/caffe-ssd # 修改成ssd-caffe的根目录
cd $root_dir
 
redo=1
data_root_dir=/home/test/caffe-ssd/data/VOCdevkit #数据集目录
dataset_name="mydataset" #改为mydataset
mapfile="$root_dir/data/$dataset_name/labelmap_mydataset.prototxt" # 修改标签文件的名称
anno_type="detection"
db="lmdb"
修改caffe-ssd/scripts/create_annoset.py文件
import sys
caffe_root = '/home/test/caffe-ssd/' #要加入的内容,caffe-ssd的路径
sys.path.insert(0, caffe_root + 'python') #python路径,对应caffe中编译的版本
from caffe.proto import caffe_pb2
from google.protobuf import text_format
运行脚本
sh create_data.sh

在caffe-ssd/example/mydataset文件夹下生成lmdb文件。

三、训练

3.1 下载预训练权重

下载vggNet的预训练权重,下载后,放到caffe-ssd/models/VGGNet下。

3.2 修改ssd_pascal.py文件

修改caffe-ssd/example/ssd/ssd_pascal.py文件,也可以复制一份,命名为ssd_mydataset.py,并修改其中的内容,
同样需要在导入caffe之前加入caffe-ssd的路径

caffe_root = '/home/test/caffe-ssd/' #要加入的内容,caffe-ssd的路径
sys.path.insert(0, caffe_root + 'python') #python路径,对应caffe中编译的版本

修改参数配置

1. train_data和test_data分别修改为生成的lmdb路径
train_data = "examples/mydataset/mydataset_trainval_lmdb"
test_data = "examples/mydataset/mydataset_test_lmdb"
2. num_test_image该变量修改成自己数据集中测试数据的数量
3. num_classes 该变量修改成自己数据集中标签类别数量数+1
4. gpus=’0,1,2,3’设置要使用的gpu
5. max_iter为迭代次数
6. setpvalue为分步迭代的阈值,但是最后一个值等于max_iter
7. snapshot迭代多少次保存一次结果
8. bath_size根据需要调整
9. base_lr根据需要调整学习率
10.resize_width,resize_height改变图像大小 

3.3 训练

python example/ssd/ssd_mydataset.py
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值