精华内容
下载资源
问答
  • 利用SSD训练自己数据集
    2021-08-04 15:15:11

    利用SSD训练自己的数据集

    1.下载源码https://github.com/lufficc/SSD
    2.准备自己的数据集(train test json)
    3.python train.py(涉及到的文件path_catlog.py将其中的coco数据的地址改成自己的,coco.py中的class_names,vgg_ssd512_coco_trainval35k.yaml中的num_classes,train,test的地址,max_iter,lr,lr_steps,gamma,batch_size)训练过程中模型隔一段时间会保存一次模型并且进行test
    4.python test.py(python test.py --config-file configs/vgg_ssd512_coco_trainval35k.yaml
    )程序默认使用最近一次训练保存的模型进行test
    5.python demo.py对检测的结果进行可视化,将需要检测的图片放在demo中,python demo.py --config-file configs/vgg_ssd512_coco_trainval35k.yaml --images_dir demo --ckpt ().pth,查看可视化结果。
    6.训练参数修改
    7.修改backbone

    更多相关内容
  • ssd训练自己数据集

    2019-12-17 20:44:01
    解决方法:您需要在运行此脚本的运行环境文件夹中自己创建一个目录 1、前期准备工作 第一步:先将SSD框架下载到本地,解压出来;SSD源码下载 第二步:在解压出来的主目录下依次创建tfrecords_、train_model、VOC...

    1、用labelImg标数据

    2、将数据转换为tfrecord

    错误记录:

    NotFoundError:无法创建NewWriteableFile 

    解决方法:您需要在运行此脚本的运行环境文件夹中自己创建一个目录

    1、前期准备工作

    第一步:先将SSD框架下载到本地,解压出来;SSD源码下载

    第二步:在解压出来的主目录下依次创建tfrecords_train_modelVOC2007文件夹,再将之前在SSD目标检测(2):如何制作自己的数据集(详细说明附源码)中制作的三个文件夹AnnotationsImageSetsJPEGImages全都拖入VOC2007文件夹内;
    第2.5步:为方便操作不易混淆,请在PyCharm里建立工程;得到的截图如下,截图说明如下:

             1、请注意红色框VOCxxx使用的是具体的名字,不过一般都是VOC2007

             2、目录对应的从属关系不要出错

       3、tfrecords_文件夹是用来存储.tfrecords文件(后面有程序可以直接生成)

       4、train_model文件夹是用来存储模型的记录与参数的

    这里写图片描述

    2、生成.tfrecords文件的代码微调说明

    第三步:修改标签项——打开datasets文件夹中pascalvoc_common.py文件,将自己的标签项填入。我之前做的图片标签.xml文件中,就只有一个标签项“watch”,所以要根据你自己数据集实际情况进行修改;

    在这里插入图片描述

    第四步:修改读取个数、读取方式——打开datasets文件夹中的pascalvoc_to_tfrecords.py文件,

    • 修改67行SAMPLES_PER_FILES的个数;
    • 修改83行读取方式为'rb'
    • 如果你的文件不是.jpg格式,也可以修改图片的类型;这里写图片描述

    3、生成.tfrecords文件

    第五步:生成.tfrecords文件——打开tf_convert_data.py文件,依次点击:run、Edit Configuration,在Parameters中填入以下内容,再运行tf_convert_data.py文件,在面板中得到成功信息,可以在tfrecords_文件夹下看到生成的.tfrecords文件;
     

    --dataset_name=pascalvoc
    --dataset_dir=./VOC2007/
    --output_name=voc_2007_train
    --output_dir=./tfrecords_
    

    这里写图片描述

    4、重新训练模型的代码微调说明

    第六步:修改训练数据shape——打开datasets文件夹中的pascalvoc_2007.py文件,

        根据自己训练数据修改:NUM_CLASSES = 类别数;

    说明:TRAIN_STATISTICS的数值我并没有深入了解,大于新数据集该标签的总数一般都不会报错。我的数据集是由20张、每张包含一只手表的图片组成,所以下图的值我设定为20,大于20也没有报错,如果你有更精确的想法,请留言告诉大家!
    在这里插入图片描述

    第七步:修改类别个数——打开nets文件夹中的ssd_vgg_300.py文件,

         根据自己训练类别数修改96 和97行:等于类别数+1

    这里写图片描述

    第八步:修改类别个数——打开eval_ssd_network.py文件,

            修改66行的类别个数:等于类别数+1

    这里写图片描述

    第九步:修改训练步数epoch——打开train_ssd_network.py文件

    • 修改27行的数据格式,改为'NHWC'
    • 修改135行的类别个数:等于类别数+1
    • 修改154行训练总步数,None会无限训练下去;
    • 说明:60行、63行是关于模型保存的参数;

    这里写图片描述

    5、加载vgg_16,重新训练模型

    第十步:下载vgg_16模型——下载地址请点击,密码:ge3x;下载完成解压后存入checkpoint文件中;
    最后一步:重新训练模型——打开train_ssd_network.py文件,依次点击:runEdit Configuration,在Parameters中填入以下内容,再运行train_ssd_network.py文件

    --train_dir=./train_model/
    --dataset_dir=./tfrecords_/
    --dataset_name=pascalvoc_2007
    --dataset_split_name=train
    --model_name=ssd_300_vgg
    --checkpoint_path=./checkpoints/vgg_16.ckpt
    --checkpoint_model_scope=vgg_16
    --checkpoint_exclude_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box
    --trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box
    --save_summaries_secs=60
    --save_interval_secs=100
    --weight_decay=0.0005
    --optimizer=adam
    --learning_rate=0.001
    --learning_rate_decay_factor=0.94
    --batch_size=4
    --gpu_memory_fraction=0.7
    

    注意:上面是输入参数:

        --save_interval_secs是训练多少次保存参数的步长;
        --optimizer是优化器;
        --learning_rate是学习率;
        --learning_rate_decay_factor是学习率衰减因子;
        如果你的机器比较强大,可以适当增大--batch_size的数值,以及调高GPU的占比--gpu_memory_fraction
        --model_name:我并没有尝试使用其他的模型做增量训练,如果你有需要,也请留言联系我,我很乐意研究;

    若得到下图日志,即说明模型开始训练:
    在这里插入图片描述

    训练结束可以在train_model文件夹下看到生成的参数文件;

    在这里插入图片描述

    到这里,训练终于结束了!!!

    二、结果展示

    这是我训练的loss,我的数据集总共就20张图片,进行4.8W次训练用了将近一个小时,我的配置是GTX1060的单显卡;

    在这里插入图片描述

    1、在日志中,选取最后一次生成模型作为测试模型进行测试;
    2、在demo文件夹下放入测试图片;
    3、最后在notebooks文件夹下建立demo_test.py测试文件,代码如下:
    4、注意第48行,导入的新模型的名称是否正确

    # -*- coding:utf-8 -*-
    # -*- author:zzZ_CMing  CSDN address:https://blog.csdn.net/zzZ_CMing
    # -*- 2018/07/20; 15:19
    # -*- python3.6
    import os
    import math
    import random
    import numpy as np
    import tensorflow as tf
    import cv2
    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    from nets import ssd_vgg_300, ssd_common, np_methods
    from preprocessing import ssd_vgg_preprocessing
    from notebooks import visualization
    import sys
    
    sys.path.append('../')
    slim = tf.contrib.slim
    # TensorFlow session: grow memory when needed. TF, DO NOT USE ALL MY GPU MEMORY!!!
    gpu_options = tf.GPUOptions(allow_growth=True)
    config = tf.ConfigProto(log_device_placement=False, gpu_options=gpu_options)
    isess = tf.InteractiveSession(config=config)
    
    
    # 定义数据格式,设置占位符
    net_shape = (300, 300)
    # 输入图像的通道排列形式,'NHWC'表示 [batch_size,height,width,channel]
    data_format = 'NHWC'
    # 预处理,以Tensorflow backend, 将输入图片大小改成 300x300,作为下一步输入
    img_input = tf.placeholder(tf.uint8, shape=(None, None, 3))
    # 数据预处理,将img_input输入的图像resize为300大小,labels_pre,bboxes_pre,bbox_img待解析
    image_pre, labels_pre, bboxes_pre, bbox_img = ssd_vgg_preprocessing.preprocess_for_eval(
        img_input, None, None, net_shape, data_format, resize=ssd_vgg_preprocessing.Resize.WARP_RESIZE)
    # 拓展为4维变量用于输入
    image_4d = tf.expand_dims(image_pre, 0)
    
    # 定义SSD模型
    # 是否复用,目前我们没有在训练所以为None
    reuse = True if 'ssd_net' in locals() else None
    # 调出基于VGG神经网络的SSD模型对象,注意这是一个自定义类对象
    ssd_net = ssd_vgg_300.SSDNet()
    # 得到预测类和预测坐标的Tensor对象,这两个就是神经网络模型的计算流程
    with slim.arg_scope(ssd_net.arg_scope(data_format=data_format)):
        predictions, localisations, _, _ = ssd_net.net(image_4d, is_training=False, reuse=reuse)
    
    # 导入新训练的模型参数
    ckpt_filename = '../train_model/model.ckpt-xxx'   # 注意xxx代表的数字是否和文件夹下的一致
    # ckpt_filename = '../checkpoints/VGG_VOC0712_SSD_300x300_ft_iter_120000.ckpt'
    isess.run(tf.global_variables_initializer())
    saver = tf.train.Saver()
    saver.restore(isess, ckpt_filename)
    
    # 在网络模型结构中,提取搜索网格的位置
    # 根据模型超参数,得到每个特征层(这里用了6个特征层,分别是4,7,8,9,10,11)的anchors_boxes
    ssd_anchors = ssd_net.anchors(net_shape)
    """
    每层的anchors_boxes包含4个arrayList,前两个List分别是该特征层下x,y坐标轴对于原图(300x300)大小的映射
    第三,四个List为anchor_box的长度和宽度,同样是经过归一化映射的,根据每个特征层box数量的不同,这两个List元素
    个数会变化。其中,长宽的值根据超参数anchor_sizes和anchor_ratios制定。
    """
    
    
    # 主流程函数
    def process_image(img, select_threshold=0.6, nms_threshold=.01, net_shape=(300, 300)):
        # select_threshold:box阈值——每个像素的box分类预测数据的得分会与box阈值比较,高于一个box阈值则认为这个box成功框到了一个对象
        # nms_threshold:重合度阈值——同一对象的两个框的重合度高于该阈值,则运行下面去重函数
    
        # 执行SSD模型,得到4维输入变量,分类预测,坐标预测,rbbox_img参数为最大检测范围,本文固定为[0,0,1,1]即全图
        rimg, rpredictions, rlocalisations, rbbox_img = isess.run([image_4d, predictions, localisations, bbox_img],
                                                                  feed_dict={img_input: img})
    
        # ssd_bboxes_select()函数根据每个特征层的分类预测分数,归一化后的映射坐标,
        # ancohor_box的大小,通过设定一个阈值计算得到每个特征层检测到的对象以及其分类和坐标
        rclasses, rscores, rbboxes = np_methods.ssd_bboxes_select(
            rpredictions, rlocalisations, ssd_anchors,
            select_threshold=select_threshold, img_shape=net_shape, num_classes=21, decode=True)
        """
        这个函数做的事情比较多,这里说的细致一些:
        首先是输入,输入的数据为每个特征层(一共6个,见上文)的:
                                                    rpredictions: 分类预测数据,
                                                    rlocalisations: 坐标预测数据,
                                                    ssd_anchors: anchors_box数据
                                                其中:
                                                   分类预测数据为当前特征层中每个像素的每个box的分类预测
                                                   坐标预测数据为当前特征层中每个像素的每个box的坐标预测
                                                   anchors_box数据为当前特征层中每个像素的每个box的修正数据
    
            函数根据坐标预测数据和anchors_box数据,计算得到每个像素的每个box的中心和长宽,这个中心坐标和长宽会根据一个算法进行些许的修正,
        从而得到一个更加准确的box坐标;修正的算法会在后文中详细解释,如果只是为了理解算法流程也可以不必深究这个,因为这个修正算法属于经验算
        法,并没有太多逻辑可循。
            修正完box和中心后,函数会计算每个像素的每个box的分类预测数据的得分,当这个分数高于一个阈值(这里是0.5)则认为这个box成功
        框到了一个对象,然后将这个box的坐标数据,所属分类和分类得分导出,从而得到:
            rclasses:所属分类
            rscores:分类得分
            rbboxes:坐标
            
            最后要注意的是,同一个目标可能会在不同的特征层都被检测到,并且他们的box坐标会有些许不同,这里并没有去掉重复的目标,而是在下文
        中专门用了一个函数来去重
        """
    
        # 检测有没有超出检测边缘
        rbboxes = np_methods.bboxes_clip(rbbox_img, rbboxes)
        rclasses, rscores, rbboxes = np_methods.bboxes_sort(rclasses, rscores, rbboxes, top_k=400)
        # 去重,将重复检测到的目标去掉
        rclasses, rscores, rbboxes = np_methods.bboxes_nms(rclasses, rscores, rbboxes, nms_threshold=nms_threshold)
        # 将box的坐标重新映射到原图上(上文所有的坐标都进行了归一化,所以要逆操作一次)
        rbboxes = np_methods.bboxes_resize(rbbox_img, rbboxes)
        return rclasses, rscores, rbboxes
    
    
    # 测试的文件夹
    path = '../demo/'
    image_names = sorted(os.listdir(path))
    # 文件夹中的第几张图,-1代表最后一张
    img = mpimg.imread(path + image_names[-1])
    rclasses, rscores, rbboxes = process_image(img)
    
    # visualization.bboxes_draw_on_img(img, rclasses, rscores, rbboxes, visualization.colors_plasma)
    visualization.plt_bboxes(img, rclasses, rscores, rbboxes)
    

    结果展示:这是我自己拍的照片,得到的识别效果还算勉强吧(请自动忽略我那性感的手毛!)

    在这里插入图片描述

    如果你的测试结果是下面这样的:

    导致的原因:

       1 训练次数太少,loss过高——解决方法除了优化数据集外,就是增大训练次数(要明白谷歌公布的模型都是在大型集群上训练好多天的结果,我们就在GTX1060单显卡上训练4.8W次就想出非常好的结果?偶然的成功比失败更可怕,而且想弯道超谷歌不太可能吧!)
       2 另外上面程序65行的select_threshold、 nms_threshold参数你也可以做调整;观察下图可以发现误标框框的预测值都小于0.55,而唯一正确的框框预测值等于0.866。所以认真理解上面程序66、67行我写的注释,对你的问题会有帮助;
    在这里插入图片描述

    本博客用的测试数据集在这,只有20张标记图片。并不包含最后训练得到的模型

    参考自https://blog.csdn.net/zzZ_CMing/article/details/81131523

    展开全文
  • SSD训练自己数据集(pytorch版)

    千次阅读 2021-05-17 12:40:33
    ssd.pytorch代码下载地址:https://github.com/amdegroot/ssd.pytorch VGG16_reducedfc.pth预训练模型下载地址:https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth Single-Shot-Object-Detection-...
    • 环境:Win10+Anaconda3+Python3.8.8+Pytorch1.8.1
    • ssd.pytorch代码下载地址:https://github.com/amdegroot/ssd.pytorch
    • VGG16_reducedfc.pth预训练模型下载地址:https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth
    • 修改版代码(Pytorch高于1.3.0需要)下载地址:https://github.com/sayakbanerjee1999/Single-Shot-Object-Detection-Updated

    一、数据集准备(Pascal格式)

    1. 数据集存放位置为ssd.pytorch-master/data目录下,也可以通过修改voc0712.py文件中的VOC_ROOT = osp.join(HOME, "data/VOCdevkit/")来指定数据集存放路径。数据集文件夹格式如下:

      VOCdevkit
      --VOC2020
      ----Annotations
      ----ImageSets
      ----JPEGImages
      
    2. 部分数据集存在xml文件中没有标记数据的情况,也就是没有<object>标签数据,会出现IndexError: too many indices for array:...的数组索引出错,需要使用下面的代码检测出错的xml文件,之后可以手动修改或删除出错的xml文件。

      import argparse
      import sys
      import cv2
      import os
      import os.path as osp
      import numpy as np
      
      if sys.version_info[0] == 2:
          import xml.etree.cElementTree as ET
      else:
          import xml.etree.ElementTree  as ET
      
      parser = argparse.ArgumentParser(
                  description='Single Shot MultiBox Detector Training With Pytorch')
      train_set = parser.add_mutually_exclusive_group()
      parser.add_argument('--root', default='VOCdevkit/VOC2020' , help='Dataset root directory path')
      args = parser.parse_args()
      
      CLASSES = [('person')]
      annopath = osp.join('%s', 'Annotations', '%s.{}'.format("xml"))
      imgpath  = osp.join('%s', 'JPEGImages',  '%s.{}'.format("jpg"))
      
      def vocChecker(image_id, width, height, keep_difficult = False):
          target   = ET.parse(annopath % image_id).getroot()
          res      = []
          for obj in target.iter('object'):
              difficult = int(obj.find('difficult').text) == 1
              if not keep_difficult and difficult:
                  continue
              name = obj.find('name').text.lower().strip()
              bbox = obj.find('bndbox')
              pts    = ['xmin', 'ymin', 'xmax', 'ymax']
              bndbox = []
              for i, pt in enumerate(pts):
                  cur_pt = int(bbox.find(pt).text) - 1
                  # scale height or width
                  cur_pt = float(cur_pt) / width if i % 2 == 0 else float(cur_pt) / height
                  bndbox.append(cur_pt)
              label_idx =  dict(zip(CLASSES, range(len(CLASSES))))[name]
              bndbox.append(label_idx)
              res += [bndbox]  # [xmin, ymin, xmax, ymax, label_ind]
              # img_id = target.find('filename').text[:-4]
          try :
              np.array(res)[:,4]
              np.array(res)[:,:4]
          except IndexError:
              print(image_id+" had error index")
          return res  # [[xmin, ymin, xmax, ymax, label_ind], ... ]
      
      if __name__ == '__main__' :
          i = 0
          for name in sorted(os.listdir(osp.join(args.root,'Annotations'))):
          # as we have only one annotations file per image
              i += 1
              img    = cv2.imread(imgpath  % (args.root,name.split('.')[0]))
              height, width, channels = img.shape
              res = vocChecker((args.root, name.split('.')[0]), height, width)
          print("Total of annotations : {}".format(i))
      

    二、代码修改

    1. 修改data/voc0712.py文件中的VOC_CLASSES 变量。例如,将VOC_CLASSES修改为person类,注意如果只有一类则需要加方括号,修改后的结果如下。

      VOC_CLASSES = [('person')
      
    2. 修改voc0712.py文件中VOCDetection类的__init__函数,将image_sets修改为[('2020', 'train'), ('2020', 'val'),('2020','test')],修改后的结果如下。

      def __init__(self, root,
      	image_sets=[('2020', 'train'), ('2020', 'val'),('2020','test')],
      	transform=None, target_transform=VOCAnnotationTransform(),
      	dataset_name='VOC0712'):
      
    3. 修改config.py文件中的voc字典变量。将其中的num_classes修改为2(背景类和person类),第一次调试时可以将max_iter调小至1000,修改后的结果如下。

      voc = {
          'num_classes': 2,
          'lr_steps': (80000, 100000, 120000),
          'max_iter': 1000,
          'feature_maps': [38, 19, 10, 5, 3, 1],
          'min_dim': 300,
          'steps': [8, 16, 32, 64, 100, 300],
          'min_sizes': [30, 60, 111, 162, 213, 264],
          'max_sizes': [60, 111, 162, 213, 264, 315],
          'aspect_ratios': [[2], [2, 3], [2, 3], [2, 3], [2], [2]],
          'variance': [0.1, 0.2],
          'clip': True,
          'name': 'VOC',
      }
      
    4. coco_labels.txt放在ssd.pytorch-master/data/coco/目录下,也可以通过修改coco.py文件中的COCO_ROOT = osp.join(HOME, 'data/coco/')来指定存放路径。

    5. 在Pytorch1.3以上版本运行时,会出现RuntimeError: Legacy autograd function with non-static forward method is deprecated错误,原因是当前版本要求forward过程是静态的,所以需要将原代码进行修改。
      layers/functions/detection.py文件替换为Single-Shot-Object-Detection-Updated-master中的detection.py文件。
      修改ssd.py文件中SSD类的__init__函数和forward函数,修改后的结果如下。

      if phase == 'test':
      	self.softmax = nn.Softmax(dim=-1)
          self.detect = Detect(num_classes, 0, 200, 0.01, 0.45)
      修改为:
      if phase == 'test':
      	self.softmax = nn.Softmax()
      	self.detect = Detect()
      	
      if self.phase == "test":
      	output = self.detect(
          	loc.view(loc.size(0), -1, 4),                   # loc preds
              self.softmax(conf.view(conf.size(0), -1,
              			 self.num_classes)),                # conf preds
              self.priors.type(type(x.data))                  # default boxes
          )
      修改为:
      if self.phase == "test":
      	output = self.detect.apply(21, 0, 200, 0.01, 0.45,
         		loc.view(loc.size(0), -1, 4),                   # loc preds
              self.softmax(conf.view(-1,21)),                 # conf preds
      		self.priors.type(type(x.data))                  # default boxes
      	)
      
    6. 修改train.py中187至189行代码,原因是.data[0]写法适用于低版本Pytorch,否则会出现IndexError:invalid index of a 0-dim tensor...错误,修改后的结果如下。

      loc_loss += loss_l.item()
      conf_loss += loss_c.item()
      
      if iteration % 10 == 0:
          print('timer: %.4f sec.' % (t1 - t0))
      	print('iter ' + repr(iteration) + ' || Loss: %.4f ||' % (loss.item()), end=' ')
      
    7. 修改train.py中165行代码,否则会出现StopInteration...训练中断错误,修改后的结果如下。

      try:
          images, targets = next(batch_iterator)
      except:
          batch_iterator=iter(data_loader)
          images, targets = next(batch_iterator)
      
    8. 交换layers/modules/multibox_loss.py中97行和98代码位置,否则会出现IndexError: The shape of the mask [14, 8732] at index 0does...错误,修改后的结果如下。

      loss_c = loss_c.view(num, -1)
      loss_c[pos] = 0  # filter out pos boxes for now
      
    9. (可选)可以根据自己的需要对train.py中预训练模型、batch_size、学习率、模型名字和模型保存的次数等参数进行修改。例如,建议学习率修改为1e-4(原因是原版使用1e-3可能会出现loss为nan情况),第一次调试时可以修改为每迭代100次保存,方便调试。

      parser.add_argument('--basenet', default='vgg16_reducedfc.pth',
                          help='Pretrained base model')
      parser.add_argument('--batch_size', default=32, type=int,
                          help='Batch size for training')
      parser.add_argument('--lr', '--learning-rate', default=1e-4, type=float,
                          help='initial learning rate')
      if iteration != 0 and iteration % 5000 == 0:
      	print('Saving state, iter:', iteration)
      	torch.save(ssd_net.state_dict(), 'weights/ssd300_VOC_' + repr(iteration) + '.pth')
      

    三、模型训练

    1. 使用以下命令即可开始训练模型,训练时输出内容如下,可能会出现一些UserWarning...提示,可以不必理会。
      python train.py
      
      Loading base network...
      Initializing weights...
      Loading the dataset...
      Training SSD on: VOC0712
      Using the specified args:
      Namespace(basenet='vgg16_reducedfc.pth', batch_size=32, cuda=True, dataset='VOC', dataset_root='/home/featurize/data/VOCdevkit/', gamma=0.1, lr=0.0001, momentum=0.9, num_workers=4, resume=None, save_folder='weights/', start_iter=0, visdom=False, weight_decay=0.0005)
      timer: 3.1155 sec.
      iter 0 || Loss: 21.9156 || timer: 0.2166 sec.
      iter 10 || Loss: 12.6344 || timer: 0.1833 sec.
      iter 20 || Loss: 9.5942 || timer: 0.1928 sec.
      iter 30 || Loss: 8.4343 || timer: 0.1805 sec.
      iter 40 || Loss: 7.2879 || timer: 0.1652 sec.
      iter 50 || Loss: 6.3154 || timer: 0.1877 sec.
      iter 60 || Loss: 6.3842 || timer: 0.2185 sec.
      iter 70 || Loss: 6.2072 || timer: 0.1802 sec.
      iter 80 || Loss: 6.4077 || timer: 0.1642 sec.
      iter 90 || Loss: 5.8568 || timer: 0.1848 sec.
      iter 100 || Loss: 5.7892 || timer: 0.1976 sec.
      iter 110 || Loss: 5.7187 || timer: 0.2656 sec.
      iter 120 || Loss: 5.3061 || timer: 0.1737 sec.
      ...
      
    展开全文
  • 一、运行环境 windows10 cuda==10.1 python=3.7.x 二、步骤 1、下载SSD代码 SSD-pytorch 代码下载地址: ...(1)想先测试的情况下可以使用VOC或者COCO数据集数据集下载: 链接:https://pan.baid

    一、运行环境
    windows10
    cuda==10.1
    python=3.7.x
    二、步骤
    1、下载SSD代码
    SSD-pytorch 代码下载地址: https://github.com/amdegroot/ssd.pytorch
    如果觉得下载比较慢可以参考https://blog.csdn.net/weixin_43218120/article/details/108253025
    2、准备数据集
    (1)想先测试的情况下可以使用VOC或者COCO数据集,数据集下载:
    链接:https://pan.baidu.com/s/1roX0TULt2AXoppDQsf5zyQ
    提取码:884r
    将下载之后的数据集放在(./data/scripts目录下)
    在该目录下新建coco文件夹并将./data 目录下的coco_labels.txt文件复制到该目录
    具体data目录如下:
    在这里插入图片描述
    (2)准备自己的数据集
    voc数据集的目录如下:
    在这里插入图片描述
    我们只需要对前三个文件夹中的内容进行修改
    在Annotations中放置自己使用标记软件标记的xml文件。
    在JPEGImages中放置自己的图片。
    在ImageStes文件夹中我们只需要对Main文件夹进行修改
    文件夹中只放置train.txt/val.txt/test.txt这三个文件。在文件中只要包含文件的名字,不要有后缀名。具体的方式可以参考:https://blog.csdn.net/weixin_43218120/article/details/109329834
    3、修改代码
    (1)config.py文件
    ①找到config.py文件,打开修改VOC中的num_classes,根据自己的情况修改:classes+1(背景算一类)
    ②修改HOME,将该文件的路径修改为自己的文件路径
    (2)VOC0712.py
    ①找到VOC_CLASSES修改为自己的类别,当自己的类别为1的时候(不算背景)需要在()前面加上[]
    ②注意VOC_ROOT文件路径,不需要修改
    (3)train.py
    ①根据自己的显存修改batch_size,建议一开始修改小一点
    ②将保存训练模型的参数调低一点,之前iter设置的1000,这里设置为500,之后根据自己情况在设置在这里插入图片描述
    在这里插入图片描述
    将loss后面修改为.item()否者会报bug
    (4)multibox_loss.py
    将该文件中的第97行和第98行代码互换一下,否者会报bug
    (5)下载预训练模型
    链接:https://pan.baidu.com/s/1zriDQ7v_ENvOmXfizNFF2w
    提取码:v1r4
    4.现在即可进行训练。

    展开全文
  • Tensorflow下使用SSD训练自己数据集

    万次阅读 热门讨论 2019-03-27 19:21:55
    Tensorflow下使用SSD训练自己数据集 1、数据集格式转换。 ① 将自己数据集做成VOC2007格式,直接将VOC2007文件夹粘贴到SSD-Tensorflow-master目录下。 ② 修改datasets文件夹中pascalvoc_common.py文件中的...
  • item { name: "none_of_the_above" label: 0 display_name: "background" } item { name: "trafficlight" label: 1 display_name: "trafficlight" }
  • windows10运行ssd训练自己数据集

    热门讨论 2021-09-28 16:12:41
    (一)数据集准备阶段 第一步:新建VOC2007文件夹,然后再在里面新建三个文件ImageSets–>main JPEGImages(存放照片),Annotations(存放xml文件)。 第二步:对自己的照片进行标注,工具为labelimg,这个就...
  • Mobilenet SSD框架搭好后,我们就可以开始对自己数据集进行训练,然后验证其模型是否运行正确。 准备工作 1)数据集复用SSD项目的,不用拷贝过来,直接使用软链接,如下所示。 ln -s /work/xxx/caffe_ssd/data/...
  • Tensorflow-SSD测试及训练自己数据集

    万次阅读 热门讨论 2017-07-18 10:56:18
    1、ssd_notebook.ipynb测试 (1)下载程序包并解压。 源代码GitHub: balancap/SSD-Tensorflow (2)打开终端,进入目录路径,运行: jupyter notebook notebooks/ssd_notebook.ipynb2、py脚本测试
  • SSD目标检测】3:训练自己数据集

    万次阅读 多人点赞 2018-07-20 14:22:34
    我也不过是站在前辈的肩膀上,这一章就是讲解如何训练自己数据集,让SSD框架识别。源码也无偿奉上了哦! –—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-——-—-—-—-—-—-—-—-—-—-—-—-...
  • ssd训练自己数据集

    2017-11-01 16:17:00
    1.在ssd/caffe/data下创建VOC2007的目录,将ssd/caffe/data/VOC0712里的create_data.sh、create_list.sh和labelmap_voc.prototxt拷贝到VOC2007下,得如下图: 2.在/home/bnrc下创建data目录,在data目录下创建...
  • caffe-ssd 训练自己的VOC数据集(二):训练生成的lmdb数据-附件资源
  • MobileNet-SSD训练自己数据集

    千次阅读 2020-07-11 12:14:11
    一、配置 ubuntu18.04 ,显卡驱动,cuda10.1,cudnn7.6.5 查看cuda版本: ...二、安装配置Caffe-SSD-GPU annaconda下创建caffe环境 conda create -n caffe2 python=2.7 opencv安装:pip install ope
  • pytorch-SSD在windows下训练自己数据集

    千次阅读 热门讨论 2020-08-10 09:32:08
    最近做实验,参考各位大神的教程来跑自己数据集, 整个过程做一个记录,为以后的复现做参考。 所用的代码地址:https://github.com/lufficc/SSD 这份代码是比较新的,比起两年前star数量最多的SSD Pytorch实现...
  • 目录一、前言二、实现细节1、前提条件2、数据标注2.1 Labelme2.1.1 工具...数据集4、搭建SSD运行环境5、修改代码训练网络5.1 代码架构详解5.2 修改网络配置参数5.3 修改VOC类别参数5.4 下载模型5.5 训练模型5.6 Loss和...
  • ubuntu18.04下SSD的运行及训练自己数据集caffe的SSD运行及训练自己数据集运行一、下载源码二、文件配置三、编译 caffe的SSD运行及训练自己数据集 运行 一、下载源码 git clone ...
  • 准备自己的图片,最好重命名为“000001.jpg”的格式,重命名Python代码如下:import os path = "./123" filelist = os.listdir(path) #该文件夹下所有的文件(包括文件夹) count=0 for file in filelist:...
  • SSD训练自己数据集

    2020-03-04 22:20:31
    SSD 我选择的代码 Visdom 时间原因首先读了摘要 readme里的visdom我一直不知道是什么 jupyter 而且这个代码是demo.ipynb,要使用jupyter ipynb interactive python notebook 也就是交互式python记事本, 这个i 代表的...
  • 本文仅用于我自己实现过程的记录,以防忘记细节,也欢迎同学们和爱好者共同交流进步。 本文代码的运行环境为:pytorch1.9,cuda11.1,mmdetection2.16.0。
  • MobileNet SSD 训练自己数据集

    万次阅读 2018-09-07 20:45:40
    记录下mobilnet-ssd如何跑自己数据集。默认环境已经配置好,并且demo.py已经可以成功运行了。 mobilenet-ssd下载路径(需要注意的点:需要以Git的方式下载,不要以zip的方式下载,否则后面训练时可能报错) $ ...
  • SSD-Pytorch模型训练自己数据集

    千次阅读 多人点赞 2020-04-22 11:48:28
    开始之前声明: ...1.下载SSD-Pytorch代码 SSD-pytorch代码链接: https://github.com/amdegroot/ssd.pytorch git clone https://github.com/amdegroot/ssd.pytorch 运行该代码下载到本地(如果下...
  • SSD制作自己数据集

    2021-05-22 08:40:03
    想制作自己数据集当然要先了解SSD使用的数据集VOC2007长啥样。 (VOC2007完整下载有3个压缩包+1个PDF,上面链接里只包含其中一个压缩包VOCtrainval_06-Nov-2007)。打开压缩包就如下图: VOC2007详细介绍在这里,...
  • 本篇文章是我在自己学习的过程中写的,当作一个笔记,写的比较详细 在github上下载SSD的tensorflow版本: https://github.com/balancap/SSD-Tensorflow 下载后先解压缩checkpoint: unzip ssd_300_vgg.ckpt.zip 用...
  • SSD训练自己数据集 1、pytorch环境安装即SSD-pytorch代码下载 下载SSD代码:https://github.com/amdegroot/ssd.pytorch 下载模型: https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth pyhton3.6 ...
  • SSD框架训练自己数据集

    万次阅读 2018-01-17 16:52:06
    本文介绍如何使用SSD训练自己数据集,内容包括数据集的转化,使用SSD进行训练 1、VOC数据集的介绍 VOC的数据格式: (1)annotation中保存的是xml格式的label信息 (2)ImageSet目录中Main目录存放的是用于...
  • Ubuntu+TensorFlow1.5 下使用SSD-TensorFlow训练自己数据集
  • caffe-ssd训练自己数据集

    千次阅读 2019-04-17 11:00:35
    下面写的是训练自己数据集的一些步骤: 1.cd caffe-ssd/data/VOCdevkit目录下新建一个空文件夹,mkdir Mydataset 2. cd Mydataset,在该目录下分别新建三个文件夹,mkdir Annotations,m...
  • 写在前面:本文不详细介绍SSD,只记录一些大体流程,具体细节可见参考1,换用数据集训练SSD可见参考2 参考1:SSD代码细节讲解 参考2:SSD数据集训练 给定图片如何得到对应的GT SSD网络若指定了先验框的minsize和...
  • SSD-Pytorch训练和测试自己数据集(新手必看)

    万次阅读 多人点赞 2019-03-24 16:37:26
    1.准备自己数据集 2.pytorch环境安装即SSD-pytorch代码下载 3.正常的修改 修改1:config.py 修改2:VOC0712.py 修改3:train.py 修改4:eval.py 修改5:ssd.py 4.遇到的问题和相应的解决办法 问题1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,033
精华内容 4,813
关键字:

ssd训练自己的数据集