SSD+Tensorflow

参考:

http://blog.csdn.net/liuyan20062010/article/details/78905517


1.  搭建SSD框架,下载解压即可

下载SSD-tensorflow并解压

https://github.com/balancap/SSD-Tensorflow

2. 下载官方数据

下载VOC2007和VOC2012数据集, 放在/imagedata目录下:

cd imagedata
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar

tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar

     下载pascalvoc数据,解压后生成三个文件夹,主要是利用训练集测试的文件夹,VOCtrainval用来训练,VOCtest用来测试。

    VOCtrainval 中JPEGImage文件夹中仅是训练和验证的图片,Main文件夹中仅是trainval.txt,  train.txt,   val.txt

    VOCtest中JPEGImage文件夹中仅是测试图片,Main文件夹中仅是test.txt

  


3. 自己的图片

自己的数据根据voc格式改写(图片的名称,不用拘泥于6位数字,其他命名也可以)

图片数据重命名为6位数字的代码如下:

   python代码

[html]  view plain  copy
  1. import os    
  2.         
  3. class BatchRename():    
  4.       #  '''''   
  5.      #   批量重命名文件夹中的图片文件   
  6.        
  7.        # '''    
  8.         def __init__(self):    
  9.             #我的图片文件夹路径horse    
  10.             self.path = '/home/xxx/imagedata/image_xml'    
  11.         
  12.         def rename(self):    
  13.             filelist = os.listdir(self.path)    
  14.             total_num = len(filelist)    
  15.             i = 1    
  16.             n = 6    
  17.             for item in filelist:    
  18.                 if item.endswith('.jpg'):    
  19.                     n = 6 - len(str(i))    
  20.                     src = os.path.join(os.path.abspath(self.path), item)    
  21.                     dst = os.path.join(os.path.abspath(self.path), str(0)*n + str(i) + '.jpg')    
  22.                     try:    
  23.                         os.rename(src, dst)    
  24.                         print 'converting %s to %s ...' % (src, dst)    
  25.                         i = i + 1    
  26.                     
  27.                     except:    
  28.                         continue    
  29.             print 'total %d to rename & converted %d jpgs' % (total_num, i)    
  30.         
  31. if __name__ == '__main__':    
  32.         demo = BatchRename()    
  33.         demo.rename()    

4.标记数据  标注工具:windows_v1.5.0

5.生成txt文件,train.txt, trainval.txt, test.txt, val.txt

python代码

[html]  view plain  copy
  1. import os    
  2. import random     
  3.     
  4. xmlfilepath=r'/home/xxx/subimage_xml_xiao'    
  5. saveBasePath=r"/home/xxx/txt"    
  6.     
  7. trainval_percent=0.7   
  8. train_percent=0.7    
  9. total_xml = os.listdir(xmlfilepath)    
  10. num=len(total_xml)      
  11. list=range(num)      
  12. tv=int(num*trainval_percent)      
  13. tr=int(tv*train_percent)      
  14. trainvalrandom.sample(list,tv)      
  15. train=random.sample(trainval,tr)      
  16.     
  17. print("train and val size",tv)    
  18. print("traub suze",tr)    
  19. ftrainval = open(os.path.join(saveBasePath,'Main/trainval.txt'), 'w')      
  20. ftest = open(os.path.join(saveBasePath,'Main/test.txt'), 'w')      
  21. ftrain = open(os.path.join(saveBasePath,'Main/train.txt'), 'w')      
  22. fval = open(os.path.join(saveBasePath,'Main/val.txt'), 'w')      
  23.     
  24. for i  in list:      
  25.     name=total_xml[i][:-4]+'\n'      
  26.     if i in trainval:      
  27.         ftrainval.write(name)      
  28.         if i in train:      
  29.             ftrain.write(name)      
  30.         else:      
  31.             fval.write(name)      
  32.     else:      
  33.         ftest.write(name)      
  34.       
  35. ftrainval.close()      
  36. ftrain.close()      
  37. fval.close()      
  38. ftest .close()   

6.  将训练类别修改为和自己一样的

   SSD-Tensorflow-master—>datasets—>pascalvoc_common.py

  根据实际情况进行修改

[html]  view plain  copy
  1. VOC_LABELS = {   
  2.     'none': (0, 'Background'),   
  3.     'aeroplane': (1, 'Vehicle'),   
  4.     'bicycle': (2, 'Vehicle'),   
  5.     'bird': (3, 'Animal'),   
  6.     'boat': (4, 'Vehicle'),   
  7.     'bottle': (5, 'Indoor'),   
  8.     'bus': (6, 'Vehicle'),   
  9.     'car': (7, 'Vehicle'),   
  10.     'cat': (8, 'Animal'),   
  11.     'chair': (9, 'Indoor'),   
  12.     'cow': (10, 'Animal'),   
  13.     'diningtable': (11, 'Indoor'),   
  14.     'dog': (12, 'Animal'),   
  15.     'horse': (13, 'Animal'),   
  16.     'motorbike': (14, 'Vehicle'),   
  17.     'Person': (15, 'Person'),   
  18.     'pottedplant': (16, 'Indoor'),   
  19.     'sheep': (17, 'Animal'),   
  20.     'sofa': (18, 'Indoor'),   
  21.     'train': (19, 'Vehicle'),   
  22.     'tvmonitor': (20, 'Indoor'),   
  23. }   

7.  将图像数据转换为tfrecods格式

   SSD-Tensorflow-master—>datasets—>pascalvoc_to_tfrecords.py 。。。然后更改文件的83行读取方式为’rb’)

    修改67行,可以修改几张图片转为一个tfrecords,如下图

     

    在SSD-Tensorflow-master文件夹下创建tf_conver_data.sh   (vi tf_conver_data.sh)

注意:tab键和空格键不能混合用。

[html]  view plain  copy
  1.   1 #!/bin/bash  
  2.   2 #this is a shell script to convert pascal VOC datasets into tf-records only  
  3.   3 #directory where the original dataset is stored   
  4.   4   
  5.   5 DATASET_DIR=/home/xxx/imagedata/VOCdevkit/VOC2007/     #VOC数据保存的文件夹(VOC的目录格式未改变)  
  6.   6   
  7.   7 #output directory where to store TFRecords files  
  8.   8 OUTPUT_DIR=/home/xxx/imagedata/tf_records  #自己建立的保存tfrecords数据的文件夹  
  9.   9     
  10.  10 python ./tf_convert_data.py \  
  11.  11        --dataset_name=pascalvoc \  
  12.  12        --dataset_dir=${DATASET_DIR} \  
  13.  13        --output_name=voc_2007_train \  
  14.  14        --output_dir=${OUTPUT_DIR}  
  15. ~  
8. 训练模型

train_ssd_network.py修改第154行的最大训练步数,将None改为比如50000。(tf.contrib.slim.learning.training函数中max-step为None时训练会无限进行。)

   train_ssd_network.py:

网络参数配置,若需要改,在此文件中进行修改,因为不知道为啥修改后面的sh文件没有效。如果训练时loss为nan,则把该学习率改小0.1倍。网络内存不够训练时,把batch_size(32->16)和最大训练步数(50000->5000)改小。

  修改如下图中的数字600,可以改变训练多长时间保存一次模型

   

 
需要修改的地方:

         a.   nets/ssd_vgg_300.py  (因为使用此网络结构) ,修改87 和88行的类别              

[html]  view plain  copy
  1. default_params = SSDParams(  
  2.        img_shape=(300, 300),  
  3.        num_classes=21,   #根据自己的数据修改为类别+1  
  4.        no_annotation_label=21, #根据自己的数据修改为类别+1  
  5.        feat_layers=['block4', 'block7', 'block8', 'block9', 'block10', 'block11'],  
  6.        feat_shapes=[(38, 38), (19, 19), (10, 10), (5, 5), (3, 3), (1, 1)],  
  7.        anchor_size_bounds=[0.15, 0.90],  
  8.        # anchor_size_bounds=[0.20, 0.90],  
           b.    train_ssd_network.py,修改类别120行,GPU占用量,学习率,batch_size等
[html]  view plain  copy
  1. tf.app.flags.DEFINE_integer(  
  2.     'num_classes', 21, 'Number of classes to use in the dataset.')      
  3.   
  4.     #根据自己的数据修改为类别+1  

     c.   eval_ssd_network.py 修改类别,66行

[html]  view plain  copy
  1. # =========================================================================== #  
  2. # Main evaluation flags.  
  3. # =========================================================================== #  
  4. tf.app.flags.DEFINE_integer(  
  5. 'num_classes', 21, 'Number of classes to use in the dataset.')    
  6.   
  7.   #根据自己的数据修改为类别+1  

d.   datasets/pascalvoc_2007.py 根据自己的训练数据修改整个文件

[html]  view plain  copy
  1. TRAIN_STATISTICS = {  
  2.     'none': (0, 0),  
  3.     'aeroplane': (238, 306),  #238图片书, 306目标总数  
  4.     'bicycle': (243, 353),  
  5.     'bird': (330, 486),  
  6.     'boat': (181, 290),  
  7.     'bottle': (244, 505),  
  8.     'bus': (186, 229),  
  9.     'car': (713, 1250),  
  10.     'cat': (337, 376),  
  11.     'chair': (445, 798),  
  12.     'cow': (141, 259),  
  13.     'diningtable': (200, 215),  
  14.     'dog': (421, 510),  
  15.     'horse': (287, 362),  
  16.     'motorbike': (245, 339),  
  17.     'person': (2008, 4690),  
  18.     'pottedplant': (245, 514),  
  19.     'sheep': (96, 257),  
  20.     'sofa': (229, 248),  
  21.     'train': (261, 297),  
  22.     'tvmonitor': (256, 324),  
  23.     'total': (5011, 12608),    //5011 为训练的图片书,12608为目标总数  
  24. }  
  25. TEST_STATISTICS = {  
  26.     'none': (0, 0),  
  27.     'aeroplane': (1, 1),  
  28.     'bicycle': (1, 1),  
  29.     'bird': (1, 1),  
  30.     'boat': (1, 1),  
  31.     'bottle': (1, 1),  
  32.     'bus': (1, 1),  
  33.     'car': (1, 1),  
  34.     'cat': (1, 1),  
  35.     'chair': (1, 1),  
  36.     'cow': (1, 1),  
  37.     'diningtable': (1, 1),  
  38.     'dog': (1, 1),  
  39.     'horse': (1, 1),  
  40.     'motorbike': (1, 1),  
  41.     'person': (1, 1),  
  42.     'pottedplant': (1, 1),  
  43.     'sheep': (1, 1),  
  44.     'sofa': (1, 1),  
  45.     'train': (1, 1),  
  46.     'tvmonitor': (1, 1),  
  47.     'total': (20, 20),  
  48. }  
  49. SPLITS_TO_SIZES = {  
  50.     'train': 5011,        #训练数据量  
  51.     'test': 4952,         #测试数据量  
  52. }  
  53. SPLITS_TO_STATISTICS = {  
  54.     'train': TRAIN_STATISTICS,  
  55.     'test': TEST_STATISTICS,  
  56. }  
  57. NUM_CLASSES = 20    #类别,根据自己数据的实际类别修改(不包含背景)  


方案1 从vgg开始训练其中某些层的参数:

ssd_300_vgg中的300是指把图片归一化为300*300,所以如果要用ssd_512_vgg来fineturn的话,就只需要重新训练受图片分辨率影响的层即可。

[html]  view plain  copy
  1. # 通过加载预训练好的vgg16模型,对“voc07trainval+voc2012”进行训练  
  2. # 通过checkpoint_exclude_scopes指定哪些层的参数不需要从vgg16模型里面加载进来  
  3. # 通过trainable_scopes指定哪些层的参数是需要训练的,未指定的参数保持不变,<strong>若注释掉此命令,所有的参数均需要训练</strong>  
  4. DATASET_DIR=/home/data/liangxiaoyun/SSD-Tensorflow-master/dataset/VOC0712/  
  5. TRAIN_DIR=/home/data/liangxiaoyun/SSD-Tensorflow-master/voc0712_model/  
  6. CHECKPOINT_PATH=../checkpoints/vgg_16.ckpt  
  7.   
  8. python ../train_ssd_network.py \  
  9.     --train_dir=${TRAIN_DIR} \      #训练生成模型的存放路径  
  10.     --dataset_dir=${DATASET_DIR} \  #数据存放路径  
  11.     --dataset_name=pascalvoc_2007 \ #数据名的前缀  
  12.     --dataset_split_name=train \  
  13.     --model_name=ssd_300_vgg \      #加载的模型的名字  
  14.     --checkpoint_path=${CHECKPOINT_PATH} \  #所加载模型的路径  
  15.     --checkpoint_model_scope=vgg_16 \   #所加载模型里面的作用域名  
  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 \  
  17.     --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 \  
  18.     --save_summaries_secs=60 \  #每60s保存一下日志  
  19.     --save_interval_secs=600 \  #每600s保存一下模型  
  20.     --weight_decay=0.0005 \     #正则化的权值衰减的系数  
  21.     --optimizer=adam \          #选取的最优化函数  
  22.     --learning_rate=0.001 \     #学习率  
  23.     --learning_rate_decay_factor=0.94 \ #学习率的衰减因子  
  24.     --batch_size=24 \     
  25.     --gpu_memory_fraction=0.9   #指定占用gpu内存的百分比  


方案2 : 从自己预训练好的模型开始训练(依然可以指定要训练哪些层)



[html]  view plain  copy
  1. (当你的模型通过vgg训练的模型收敛到大概o.5mAP的时候,可以进行这一步的fine-tune)  
  2.   
  3.   
  4. # 通过加载预训练好的vgg16模型,对“voc07trainval+voc2012”进行训练  
  5. # 通过checkpoint_exclude_scopes指定哪些层的参数不需要从vgg16模型里面加载进来  
  6. # 通过trainable_scopes指定哪些层的参数是需要训练的,未指定的参数保持不变  
  7. DATASET_DIR=/home/doctorimage/kindlehe/common/dataset/VOC0712/  
  8. TRAIN_DIR=.././log_files/log_finetune/train_voc0712_20170816_1654_VGG16/  
  9. CHECKPOINT_PATH=./log_files/log_finetune/train_voc0712_20170712_1741_VGG16/model.ckpt-253287  
  10.   
  11. python3 ../train_ssd_network.py \  
  12.     --train_dir=${TRAIN_DIR} \      #训练生成模型的存放路径  
  13.     --dataset_dir=${DATASET_DIR} \  #数据存放路径  
  14.     --dataset_name=pascalvoc_2007 \ #数据名的前缀  
  15.     --dataset_split_name=train \  
  16.     --model_name=ssd_300_vgg \      #加载的模型的名字  
  17.     --checkpoint_path=${CHECKPOINT_PATH} \  #所加载模型的路径  
  18.     --checkpoint_model_scope=vgg_16 \   #所加载模型里面的作用域名  
  19.     --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 \  
  20.     --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 \  
  21.     --save_summaries_secs=60 \  #每60s保存一下日志  
  22.     --save_interval_secs=600 \  #每600s保存一下模型  
  23.     --weight_decay=0.0005 \     #正则化的权值衰减的系数  
  24.     --optimizer=adam \          #选取的最优化函数  
  25.     --learning_rate=0.001 \     #学习率  
  26.     --learning_rate_decay_factor=0.94 \ #学习率的衰减因子  
  27.     --batch_size=24 \     
  28.     --gpu_memory_fraction=0.9   #指定占用gpu内存的百分比  


从自己训练的ssd_300_vgg模型开始训练ssd_512_vgg的模型

      因此ssd_300_vgg中没有block12,又因为block7,block8,block9,block10,block11,中的参数张量两个网络模型中不匹配,因此ssd_512_vgg中这几个模块的参数不从ssd_300_vgg模型中继承,因此使用checkpoint_exclude_scopes命令指出。

         因为所有的参数均需要训练,因此不使用命令--trainable_scopes

[html]  view plain  copy
  1. 1 #/bin/bash  
  2.  2 DATASET_DIR=/home/data/xxx/imagedata/xing_tf/train_tf/  
  3.  3 TRAIN_DIR=/home/data/xxx/model/xing300512_model/  
  4.  4 CHECKPOINT_PATH=/home/data/xxx/model/xing300_model/model.ckpt-60000   #加载的ssd_300_vgg模型  
  5.  5 python3 ./train_ssd_network.py \  
  6.  6        --train_dir=${TRAIN_DIR} \  
  7.  7        --dataset_dir=${DATASET_DIR} \  
  8.  8        --dataset_name=pascalvoc_2007 \  
  9.  9        --dataset_split_name=train \  
  10. 10        --model_name=ssd_512_vgg \  
  11. 11        --checkpoint_path=${CHECKPOINT_PATH} \  
  12. 12        --checkpoint_model_scope=ssd_300_vgg \  
  13. 13        --checkpoint_exclude_scopes=ssd_512_vgg/block7,ssd_512_vgg/block7_box,ssd_512_vgg/block8,ssd_512_vgg/block8_box,    ssd_512_vgg/block9,ssd_512_vgg/block9_box,ssd_512_vgg/block10,ssd_512_vgg/block10_box,ssd_512_vgg/block11,ssd_512_vgg/b    lock11_box,ssd_512_vgg/block12,ssd_512_vgg/block12_box \  
  14. 14        #--trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block1    0,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_3    00_vgg/block10_box,ssd_300_vgg/block11_box \  
  15. 15        --save_summaries_secs=28800 \  
  16. 16        --save_interval_secs=28800 \  
  17. 17        --weight_decay=0.0005 \  
  18. 18        --optimizer=adam \  
  19. 19        --learning_rate_decay_factor=0.94 \  
  20. 20        --batch_size=16 \  
  21. 21        --num_classes=4 \  
  22. 22        -gpu_memory_fraction=0.8 \  
  23. 23   

方案3:从头开始训练自己的模型 

[html]  view plain  copy
  1. # 注释掉CHECKPOINT_PATH,不提供初始化模型,让模型自己随机初始化权重,从头训练  
  2. # 删除checkpoint_exclude_scopes和trainable_scopes,因为是从头开始训练  
  3.   #/bin/bash
      2 DATASET_DIR=/home/data/liangxiaoyun/SSD-Tensorflow-master/imagedata/VOCtrainval_06-Nov-2007/tfrecords/
      3 TRAIN_DIR=/home/data/liangxiaoyun/SSD-Tensorflow-master/VOC2007_model/
      4 #CHECKPOINT_PATH=/home/data/liuyan/model/xingshizheng512_model/model.ckpt-60000
      5 CUDA_VISIBLE_DEVICES=0 python ./train_ssd_network.py \
      6        --train_dir=${TRAIN_DIR} \
      7        --dataset_dir=${DATASET_DIR} \
      8        --dataset_name=pascalvoc_2007 \
      9        --dataset_split_name=train \
     10        --model_name=ssd_300_vgg \
     11        #--checkpoint_path=${CHECKPOINT_PATH} \
     12        #--checkpoint_model_scope=ssd_512_vgg \
     13        #--checkpoint_exclude_scopes=ssd_300_vgg/block10,ssd_300_vgg/block10_box,ssd_300_vgg/block11,ssd_300_vgg/block11_bo    x \ 
     14        #--checkpoint_exclude_scopes=ssd_512_vgg/conv6,ssd_512_vgg/conv7,ssd_512_vgg/block8,ssd_512_vgg/block9,ssd_512_vgg/    block10,ssd_512_vgg/block11,ssd_512_vgg/block4_box,ssd_512_vgg/block7_box,ssd_512_vgg/block8_box,ssd_512_vgg/block9_box,ss    d_512_vgg/block10_box,ssd_512_vgg/block11_box \
     15        #--trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,s    sd_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 \
     16        --save_summaries_secs=600 \
     17        --save_interval_secs=600 \
     18        --optimizer=adam \
     19        --learning_rate_decay_factor=0.94 \
     20        --batch_size=32 \
     21        --num_classes=20 \

8. 测试或验证

    首先将测试数据转换为tfrecords

[html]  view plain  copy
  1.   1 #!/bin/bash
      2 #this is a shell script to convert pascal VOC datasets into tf-records only
      3 #directory where the original dataset is stored
      4 DATASET_DIR=/home/data/liangxiaoyun/SSD-Tensorflow-master/imagedata/VOCtest_06-Nov-2007/VOCdevkit/VOC2007/
      5 #OUTPUT directory where to store TFRecords files
      6 OUTPUT_DIR=/home/data/liangxiaoyun/SSD-Tensorflow-master/imagedata/VOCtest_06-Nov-2007/tfrecords
      7 python ./tf_convert_data.py \
      8        --dataset_name=pascalvoc \
      9        --dataset_dir=${DATASET_DIR} \
     10        --output_name=voc_2007_test \
     11        --output_dir=${OUTPUT_DIR}

         在SSD-Tensorflow-master文件夹下建立一个sh文件


  1.   1 DATASET_DIR=/home/data/liangxiaoyun/SSD-Tensorflow-master/imagedata/VOCtest_06-Nov-2007/tfrecords/
      2 EVAL_DIR=/home/data/liangxiaoyun/SSD-Tensorflow-master/ssd_eval_log/
      3 CHECKPOINT_PATH=/home/data/liangxiaoyun/SSD-Tensorflow-master/VOC2007_model/model.ckpt-5000
      4 python ./eval_ssd_network.py \
      5        --eval_dir=${EVAL_DIR} \
      6        --dataset_dir=${DATASET_DIR} \
      7        --dataset_name=pascalvoc_2007 \
      8        --dataset_split_name=test \
      9        --model_name=ssd_300_vgg \
     10        --checkpoint_path=${CHECKPOINT_PATH} \
     11        --batch_size=1 \

测试结果如下:MAP值太低,至少得0.5才能准确检测。增加迭代次数。

9.    利用在notebooks下的ssd_notebook.ipy来查看模型标注的图片。ssd_notebook.ipynb显示训练测试模型的结果

      修改红框标注的位置,一个是修改为自己的模型所在的路径,另一个是修改为自己图片所在的路径

   



      

10. 注意

[html]  view plain  copy
  1. <pre name="code" class="html"><blockquote><ol><li>dataset_name=pascalvoc_2007 、–dataset_split_name=train、–model_name=ssd_300_vgg这三个参数不要自己随便取,在代码里,这三个参数是if…else…语句,有固定的判断值,所以要根据实际情况取选择</li><li>TypeError: expected bytes, NoneType found   
  2. SystemError: returned a result with an error set   
  3. 这是由于CHECKPOINT_PATH定义的时候不小心多了个#号键,将输入给注释掉了,如果不想使用预训练的模型,需要将<code>--checkpoint_path=${CHECKPOINT_PATH} \</code>注释掉即可</li><li>SSD有在VOC07+12的训练集上一起训练的,用一个笨一点的办法:   
  4. pascalvoc_to_tfrecords.py文件中,改变SAMPLES_PER_FILES,减少输出tfrecord文件的个数,再修改tf_convert_data.py的dataset参数,记得将前后两次的输出名改变一下,前后两次转换的tfrecords放在同一个文件夹下,然后手工重命名。(这里由于只是验证论文的训练方法是否有效,所以没必要写这些自动化代码实现合并,以后要用自己的数据集训练的时候就可以写一些自动化脚本)</li><li>有时候运行脚本会报错,可能是之前依次运行导致显存占满。</li><li>从pyCharm运行时,如果模型保存路径里之前的模型未删除,将会报错,必须保证该文件夹为空。</li><li>在TRAIN_DIR路径下会产生四中文件:   
  5. 1. checkpoint :文本文件,包含所有model.ckpt-xxxx,相当于是不同时间节点生成的所有ckpt文件的一个索引。   
  6. 2. model.ckpt-2124.data-000000-of-000001:模型文件,保存模型的权重   
  7. 3. model.ckpt-2124.meta: 图文件,保存模型的网络图   
  8. 4. model.ckpt-2124.index : 这个没搞太清楚   
  9. 5. graph.pbtxt: 用protobuf格式保存的模型的图   
  10. </li></ol></blockquote></pre>  
  11. <pre></pre>  
  12. <pre></pre>  
  13. <pre></pre>  
  14. <pre></pre>  
  15. <pre></pre>  
  16. <pre></pre>  
  17. <pre></pre>  
  18. <pre></pre>  
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值