帧准备:
1. 下载框架代码,以ssd-为例
基于 VGG 的 SSD 网络的实现(具有 300 和 512 个输入)
2.按要求下载数据集:VOC数据集(2007和2012)或使用自己的数据集(数据集制作)
3. 下载基础模型
需要Fq下载:
4.安装(根据需要可以在IDE中修改代码直接执行,无需安装)
数据集制作:
1. 下载标记工具,这里推荐标记工具(box )
提取码:6666
2.给自己的数据集打标签(得到一个xml文件,里面包含标签框的坐标、名称等)
创建文件路径:
–主文件夹
—放置xml生成文件的文件夹
– –放置数据集图像的文件夹
–
–Main–放置自动划分train/val/test的txt文件
3.使用.py生成一个txt文件,划分训练集、验证集、测试集,生成的文件放在Main中
4. 使用框架中的 .py 将数据集转换成方便的 tf 类型文件
在构建之后创建一个文件夹
训练模型
一、修改.py代码
1.进入SSD—>—>.py改代码,根据自己的情况改。
VOC_LABELS = { 'none': (0, 'Background'), 'aeroplane': (1, 'Vehicle'), 'bicycle': (2, 'Vehicle'), 'bird': (3, 'Animal'), ... }
2. SSD—>—>ds.py
一个。然后将文件第83行改为’rb’: = tf.gfile.(, ‘rb’).read()
b. = 200,你可以根据自己的需要修改,可以保持不变。意思是把200张图片转换成一个文件。
3..py
一个。修改最大训练步数参数,例如将None改为50000。
b.参数根据类别数量变化,数量为类别数量加1。
s/.py
将 , , 更改为您的类别数加 1
5./.py
= 1
6..py 更改为您的类别编号加上 1.
会出现shape不匹配等问题
二、使用.py训练模型,注意调整参数
训练的两种情况,第一种情况,不加载模型,直接全部训练。第二种情况,加载预训练好的模型,训练一些参数。
第一种:不加载模型,直接全部训练
python3 train_ssd_network.py --train_dir=/media/comway/data/dial_SSD/SSD-Tensorflow-master/train_log/ --dataset_dir=/media/comway/data/dial_SSD/SSD-Tensorflow-master/dialvoc-train-tfrecords --dataset_name=pascalvoc_2007 --dataset_split_name=train --model_name=ssd_300_vgg --save_summaries_secs=60 --save_interval_secs=600 --weight_decay=0.0005 --optimizer=adam --learning_rate=0.001 --learning_rate_decay_factor=0.94 --batch_size=16
第二种:加载预训练好的模型,训练一些参数。从 vgg 开始训练其中一些层的参数。其实就是加了–copes,还有–。
python3 train_ssd_network.py --train_dir=/media/comway/data/dial_SSD/SSD-Tensorflow-master/train_log/ #训练生成模型的存放路径 --dataset_dir=/media/comway/data/dial_SSD/SSD-Tensorflow-master/dialvoc-train-tfrecords #数据存放路径 --dataset_name=pascalvoc_2007 #数据名的前缀,我觉得应该通过这个调用是2007还是2012 --dataset_split_name=train #是加载训练集还是测试集 --model_name=ssd_300_vgg #加载的模型的名字 --checkpoint_path=/media/comway/data/dial_SSD/SSD-Tensorflow-master/checkpoints/ssd_300_vgg.ckpt #所加载模型的路径 --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 #每60s保存一下日志 --save_interval_secs=600 #每600s保存一下模型 --weight_decay=0.0005 #正则化的权值衰减的系数 --optimizer=adam #选取的最优化函数 --learning_rate=0.001 #学习率 --learning_rate_decay_factor=0.94 #学习率的衰减因子 --batch_size=16 --gpu_memory_fraction=0.9 #指定占用gpu内存的百分比
1.指定数据集的位置,即文件的位置
2. 指定基础模型的位置,框架中的一个文件夹
3. 指定生成模型的放置位置,自己创建文件夹。这是一个模型的例子
4.根据电脑配置调整batch-size等参数
问题:
执行.py时遇到错误
1.使用CPU执行代码时:
修改代码中的 DATA_FORMAT = 'NCHW'
2.提示找不到“标注名称”
在框架中datasets文件夹中pascalvoc_common.py里找到VOC_LABELS={ 。。。}, 将除去‘none’外所有不属于自己的标签都可以删掉,然后填入自己标注时的标签名称
3. 错误:Nan in for:///
1. 修改batch-size,将数值改小 (每次处理的图像数量) 2. 修改learning_rate,将数值改小,可改为0.0001(学习速率) 同时修改end_learning_rate,可改为0.00001
4. 错误: 错误: : .// : ./ >> 图像 1/(最后一次调用):文件“./.py”,第 59 行,intf.app.run(): ‘utf-8’ codec can’t byte 0xff in 0: start byte
修改:将datasets/pascalvoc_to_tfrecords.py文件83行中的读取方式由 image_data = tf.gfile.FastGFile(filename, 'r').read() 改为image_data = tf.gfile.FastGFile(filename, 'rb').read()
5. 错误:INFO::Error to : ,所有框必须在 [0.0, 1.0]: 1.002 中。 . .
一般是在转tfrecord文件时,tf_convert_data.py,产生错误(数据集中的数据标记不规范,出现了bbox四个坐标值落到到图像外的情况。)
解决问题方法1:
错误位置:datasets/pascalvoc_to_tfrecords.py bboxes.append((float(bbox.find('ymin').text) / shape[0], float(bbox.find('xmin').text) / shape[1], float(bbox.find('ymax').text) / shape[0], float(bbox.find('xmax').text) / shape[1] )) 修改为: ymin = max(float(bbox.find('ymin').text) / shape[0], 0.0)
xmin = max(float(bbox.find('xmin').text) / shape[1], 0.0)
ymax = min(float(bbox.find('ymax').text) / shape[0], 1.0)
xmax = min(float(bbox.find('xmax').text) / shape[1], 1.0)
bboxes.append(ymin, xmin, ymax, xmax)
解决问题方法2:
如果修改后还会有此类报错,也可能是图像扩展时,某个框跑到了旋转后的页面之外。
可以尝试在修改方法1中的bboxes.append(ymin, xmin, ymax, xmax)之前增加一行代码:
...
if max(ymin, xmin, ymax, xmax) > 1.0:
return False
bboxes.append(ymin, xmin, ymax, xmax)
当筛选后的两个顶角坐标仍有超过图像尺寸的,直接跳过
注意:
数据集的图像不能太小。目前,vgg模型支持的标准图片尺寸有:224*224、300*300、512*512。图片太小会报错
暂无评论内容