训练自己的数据--基于ssd_mobilenet模型实现目标检测

 训练数据(在我下载中,大家可以自行下载)

最近在做反光检测的时候,使用vGG的时候效果可以,但是c++没有调起来,所以使用SSD-mobilenet来训练。

我的系统win10;python3.6

1. 在GitHub上下载所需的models文件,地址:https://github.com/tensorflow/models(这是tensorflow提供训练好的model)

2. 安装pillow、Jupyter、matplotlib、lxml,打开anaconda prompt输入以下命令,并安装成功

pip install pillow
pip install jupyter
pip install matplotlib
pip install lxml

3:下载SSD-MobileNet,我们做得,相当于在这个基础上进行再次训练(retrain).

4. (参考:https://blog.youkuaiyun.com/dy_guox/article/details/79081499)编译protobuf,使用protobuf来训练模型和配置参数的,所以得先编译protobuf,下载地址:https://github.com/google/protobuf/releases

对于protobuf的具体配置如下,下载以后

{

在 https://github.com/google/protobuf/releases  网站中选择windows 版本(最下面),解压后将bin文件夹中的【protoc.exe】放到C:\Windows

 

在models\research\目录下打开命令行窗口,输入:
 

# From tensorflow/models/
protoc object_detection/protos/*.proto --python_out=.

如果出错可能会报文件找不到的错误,这时最简单的方法就是直接一个一个配置,命令如下

protoc --python_out=. .\object_detection\protos\anchor_generator.proto 
protoc --python_out=. .\object_detection\protos\argmax_matcher.proto  
protoc --python_out=. .\object_detection\protos\bipartite_matcher.proto 
protoc --python_out=. .\object_detection\protos\box_coder.proto 
protoc --python_out=. .\object_detection\protos\box_predictor.proto 
protoc --python_out=. .\object_detection\protos\eval.proto 
protoc --python_out=. .\object_detection\protos\faster_rcnn.proto 
protoc --python_out=. .\object_detection\protos\faster_rcnn_box_coder.proto 
protoc --python_out=. .\object_detection\protos\grid_anchor_generator.proto 
protoc --python_out=. .\object_detection\protos\hyperparams.proto 
protoc --python_out=. .\object_detection\protos\image_resizer.proto 
protoc --python_out=. .\object_detection\protos\input_reader.proto 
protoc --python_out=. .\object_detection\protos\losses.proto 
protoc --python_out=. .\object_detection\protos\matcher.proto 
protoc --python_out=. .\object_detection\protos\mean_stddev_box_coder.proto 
protoc --python_out=. .\object_detection\protos\model.proto 
protoc --python_out=. .\object_detection\protos\optimizer.proto 
protoc --python_out=. .\object_detection\protos\pipeline.proto 
protoc --python_out=. .\object_detection\protos\post_processing.proto 
protoc --python_out=. .\object_detection\protos\preprocessor.proto 
protoc --python_out=. .\object_detection\protos\region_similarity_calculator.proto 
protoc --python_out=. .\object_detection\protos\square_box_coder.proto 
protoc --python_out=. .\object_detection\protos\ssd.proto 
protoc --python_out=. .\object_detection\protos\ssd_anchor_generator.proto 
protoc --python_out=. .\object_detection\protos\string_int_label_map.proto 
protoc --python_out=. .\object_detection\protos\train.proto 
protoc --python_out=. .\object_detection\protos\keypoint_box_coder.proto 
protoc --python_out=. .\object_detection\protos\multiscale_anchor_generator.proto

不报错就是对。
如果运行时候出现这种错误

ModuleNotFoundError: No module named 'object_detection'

需在models/research/目录下执行:

python setup.py install

可解决该问题。

如果后续出现:

ModuleNotFoundError: No module named 'pycocotools'

对于使用conda的,可以这样解决:

conda install pycocotools

如果出现:

ImportError: No module named 'nets'

需在models/research/slim目录下执行:

python setup.py install

 

 

}

 

/

首先是我们下载好tensorflow的model后怎样安装呀:

很简单把其放在\Anaconda3\Lib\site-packages\tensorflow  文件夹下面即可

测试有没有安装好:

model里面自带的有经典的GoogleInceptionNet模型。因此可以直接运行\Anaconda3\Lib\site-packages\tensorflow\models\tutorials\image\imagent下面的classify_image.py。

进入Imagenet目录后运行classify_image.py脚本。具体为:

python classify_image.py --model_dir F:\Image   --image_file  F:\Image\timg.jpg结果为:(其中--model_dir表示模型将要下载的地址。 --image_file表示模型将要识别的图片)

成功===========================================================

现在需要准备自己的数据了:

制作自己的样本集

  1. 下载labelImg,并标注自己收集的图片样本,标注的标签自动保存为xml格式,

 

2. 在工程文件夹下新建以下目录,并将所有的样本图片放入images文件夹,将标注保存的xml文件保存到merged_xml文件夹

将样本数据转换为TFRecord格式

  1. 新建train_test_split.py把xml数据集分为了train 、test、 validation三部分,并存储在annotations文件夹中,train为训练集占76.5%,test为测试集10%,validation为验证集13.5%,train_test_split.py代码如下:

import os  
import random  
import time  
import shutil  
  
xmlfilepath=r'merged_xml'  
saveBasePath=r"./annotations"  
  
trainval_percent=0.9  
train_percent=0.85  
total_xml = os.listdir(xmlfilepath)  
num=len(total_xml)  
list=range(num)  
tv=int(num*trainval_percent)  
tr=int(tv*train_percent)  
trainval= random.sample(list,tv)  
train=random.sample(trainval,tr)  
print("train and val size",tv)  
print("train size",tr)  
# print(total_xml[1])  
start = time.time()   
# print(trainval)  
# print(train)  
test_num=0  
val_num=0  
train_num=0  
# for directory in ['train','test',"val"]:  
#         xml_path = os.path.join(os.getcwd(), 'annotation
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值