1.标注数据
https://cloud.tencent.com/developer/news/325876
2.处理标注数据
按照VOC数据集的要求,创建以下文件夹
Annotations:用于存放标注后的xml文件
ImageSets/Main:用于后续存放训练集、测试集、验收集的文件列表
JPEGImages:用于存放原始图像
下载自动划分脚本,与三个数据文件放在同一目录下
https://github.com/EddyGao/make_VOC2007/blob/master/make_main_txt.py
运行make_main_txt。py文件,ImageSets/Main路径下会生成
trainval_percent代表交叉验证集占总图片的比例,train_percent是训练集占交叉验证集的比例。
3.xml转化为tfrecord格式
tfrecord数据文件tensorflow中的一种将图像数据和标签统一存储的二进制文件,能更加快速地在tensorflow中复制、移动、读取和存储等。首先下载ssd
https://github.com/balancap/SSD-Tensorflow
解压ssd_300_vgg.ckpt.zip 到checkpoint文件夹下。
把三个文件放进panda_voc2007文件,panda_voc2007与SSD-Tensorflow-master在同目录下
SSD-Tensorflow-master—>datasets—>pascalvoc_to_tfrecords.py 更改83行读取方式为’rb’
116行开始,防止坐标越界,修改如图
执行命令开始转换
DATASET_DIR=./panda_voc2007/
OUTPUT_DIR=./panda_tfrecord/
python SSD-Tensorflow-master/tf_convert_data.py --dataset_name=pascalvoc
--dataset_dir=${DATASET_DIR} --output_name=voc_2007_train --output_dir=${OUTPUT_DIR}
转换完成
4.修改
SSD-Tensorflow-master—>datasets—>pascalvoc_common.py 根据实际情况进行修改
VOC_LABELS = {
'none': (0, 'Background'),
'box': (1, 'box'),
}
train_ssd_network.py修改第154行的最大训练步数,将None改为比如50000。
nets/ssd_vgg_300.py,修改87 和88行的类别
train_ssd_network.py,修改类别120行
eval_ssd_network.py 修改类别,66行
datasets/pascalvoc_2007.py 根据自己的训练数据修改整个文件
5.从头训练模型
python SSD-Tensorflow-master/train_ssd_network.py --train_dir ./logs --dataset_dir ./panda_tfrecord --dataset_name=pascalvoc_2007 --dataset_split_name=train --model_name=ssd_300_vgg --checkpoint_model_scope=ssd_300_vgg --save_summaries_secs=60 --save_interval_secs=600 --weight_decay=0.0005 --optimizer=adam --learning_rate=0.0001 --batch_size=4
把训练的模型放在logs文件里,
6.验证模型
然后启动jupyter-notebook
jupyter-notebook SSD-Tensorflow-master/notebooks/ssd_notebook.ipynb
修改6使用训练好的模型
修改8
# Test on some demo image and visualize output.
path = "./1.jpg"
#image_names = sorted(os.listdir(path))
img=cv2.imread(path)
img=cv2.cvtColor(img, cv2.COLOR_RGBA2RGB)
img=cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
#img=np.expand_dims(img,0)
rclasses, rscores, rbboxes = process_image(np.array(img))
# visualization.bboxes_draw_on_img(img, rclasses, rscores, rbboxes, visualization.colors_plasma)
visualization.plt_bboxes(img, rclasses, rscores, rbboxes)
运行全部出现结果