您的位置:首页 > 编程语言 > Go语言

mac做目标检测 google colaboratory训练(ssd,vgg模型,直接上手,顺便教你使用免费服务器训练)

2020-03-06 21:31 1366 查看

训练自己的目标检测模型(SSD篇)SSD-Tensorflow-master MAC纠错版,并使用Google colab进行训练^_^

本文主体部分来自于文章:
https://blog.csdn.net/comway_Li/article/details/85240291
在应用SSD-Tensorflow-master于mac的过程中遇到诸多问题,记之。

本次的任务在于识别出环境下的文本文件,废话不多说,成品图

1.第一步:制作数据集by labelImg(这一步很重要啊,大家想训练啥一定要制作自己的数据集)

下载labelimg:github页面(https://github.com/tzutalin/labelImg
Mac 安装应该挺简单,可百度,安装完成之后启动labelImg,打开终端,
输入:

labelImg

即可启动


标注数据
成功安装了标注工具后,现在就来开始标注数据了。
按照VOC数据集的要求,创建以下文件夹
Annotations:用于存放标注后的xml文件
ImageSets/Main:用于存放训练集、测试集、验收集的文件列表
JPEGImages:用于存放原始图像

打开labelImg,打开目录,导入原始图片,开始标记,依次标记并保存即可

标记完所有的数据集之后,划分训练集、测试集、验证集
完成所有熊猫照片的标注后,还要将数据集划分下训练集、测试集和验证集。在github上下载一个自动划分的脚本(https://github.com/EddyGao/make_VOC2007/blob/master/make_main_txt.py
将此py文件放入同一目录下,如下

运行

python make_main_txt.py

2.转换数据集类型并开始训练

本案例是基于tensorflow的,因此,在github上下载一个基于tensorflow的SSD,地址是 https://github.com/balancap/SSD-Tensorflow

在下载好的SSD-Tensorflow-master文件中(此处为区分我将文件名改为SSD-Tensorflow-master gpu)加入两个新文件 text_voc2007 和 text_tfrecord

将刚刚配置好的三个文件拷贝进入 text_voc2007

以上为准备工作,完成之后打开终端,路径cd 至

python tf_convert_data.py --dataset_name=pascalvoc --dataset_dir=./text_voc2007/ --output_name=voc_2007_train --output_dir=./text_tfrecord/


此时按下回车,mac一般都会报错


一般情况下会warning:numpy相关的问题 可直接忽略
但mac可能会爆出另外的错误即:

其中.DS_S.jpg为mac文件格式中特有的检查文件可修改相关的代码 删去.DS_S.jpg文件即可 根据报错 我的解决方法为找到 pascalvoc_to_tfrecords.py文件
在第200行插入

index=filenames.index('.DS_Store')
filenames.pop(index)

删除.DS_Store文件即可

再次回车
接下来会出现报错
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xff in position 0: invalid start byte
推测为读取方式错误,网上查找后
应为pascalvoc_to_tfrecords.py文件第83行出错

将r改为rb即可

修改完成后依旧会报错(key error可能是其他,不重要)

主要是ssd例子中没有我们自己的目标 ,打开
pascalvoc_common.py
将其中的字典的key修改为自己的labelimg中保存的标签即可(我的为line和circle)
再运行就发现finished

以上数据转换就基本完成

下载预训练模型
SSD-Tensorflow提供了预训练好的模型,基于VGG模型,可直接百度此模型vgg_voc0712_ssd_300x300_ft_iter_120000
选择他

文件内部


创建此文件夹,将vgg网络文件放入其中

右下角有文件名,请参考
〉===================
标注文件、SSD模型都配置完成,开始训练
在训练模型之前,有个参数要修改下,打开SSD-Tensorflow-master/train_ssd_network.py找到里面的DATA_FORMAT参数项,如果是使用cpu训练则值为NHWC,如果是使用gpu训练则值为NCHW,如下:

DATA_FORMAT = 'NCHW'  # gpu
# DATA_FORMAT = 'NHWC'    # cpu

而mac一般情况下都是cpu版,直接改成cpu就行

打开终端,cd至

python train_ssd_network.py \
--train_dir=./text_model \
--dataset_dir=./text_tfrecord \
--dataset_name=pascalvoc_2007 \
--dataset_split_name=train \
--model_name=ssd_300_vgg \
--checkpoint_path=./model_pre_train/VGG_VOC0712_SSD_300x300_ft_iter_120000.ckpt/VGG_VOC0712_SSD_300x300_ft_iter_120000.ckpt\
--save_summaries_secs=60 \
--save_interval_secs=600 \
--weight_decay=0.0005 \
--optimizer=adam \
--learning_rate=0.01 \
--batch_size=8

输入后如图

有可能训练成功,但也有可能失败,应该是错误

检查两项
1.checkpoint的的地址是否正确, --checkpoint_path=./model_pre_train/VGG_VOC0712_SSD_300x300_ft_iter_120000.ckpt/VGG_VOC0712_SSD_300x300_ft_iter_120000.ckpt
应为此种形式


2.检查程序是cpu版还是gpu版
默认为gpu版,若需要更改为CPU版即可

若检查都为正常,却还是报错

实在无法解决的路径问题 直接在代码中固定

终端运行代码,去掉啦checkpoint_path

python train_ssd_network.py \
--train_dir=./text_model \
--dataset_dir=./text_tfrecord \
--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.01 \
--batch_size=8

此时mac上的代码一般运行应该无错,出现queuestep基本就是正确的啦

》〉》〉》〉》〉》〉》〉》〉》〉》〉》〉》〉》〉》〉

正片开始

你的mac去训练一定非常慢,那么在没有服务器的情况下怎么办呢,使用智商上网模式,打开google,右上角九宫格

打开云端硬盘,新建文件夹,导入你刚刚测试成功的SSD文件,如下

再新建 colabortory ## (注意:要先关联更多应用,但我第一次关联之后新建没有colabortory,可直接google “colabortory” 进入官方网站,在那里新建,再回到云端硬盘,就有啦)

应该是此种模式,这里面和jupyter差不多

首先,修改,重要重要重要


然后装载云端硬盘

from google.colab import drive
drive.mount('/content/drive')

运行这段代码,刷新左侧,看见我们的云端文件加载进来啦,hhhh

同样,首先应该cd至相关文件下,自己的文件名自己cd,不要说cd都不会^_^

cd drive/My\ Drive/line/SSD-Tensorflow-master gpu

这个时候操作就和终端里差不多啦(注意:终端命令前面要加“!”)

!python train_ssd_network.py \
--train_dir=./line_model \
--dataset_dir=./line_tfrecord \
--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.01 \
--batch_size=8

输入代码直接训练,成功


训练了2万多步control+c终止就可,会自动保存,然后到云端硬盘把最后一步的文件下载下来就可以啦。hhh

OK,到此基本结束,有啥问题欢迎联系704020674@qq.com

  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
kulinbin 发布了3 篇原创文章 · 获赞 5 · 访问量 1767 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐