训练数据(在我下载中,大家可以自行下载)
最近在做反光检测的时候,使用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