objectdetection
利用slim框架和objectdetection框架,做一个物体检测的模型。熟悉物体检测模型的数据准备,训练和验证过程。
- Python3.6
- Tensorflow1.5
- tinymind 2CPU
https://github.com/tensorflow/models/blob/r1.5/research/object_detection/g3doc/detection_model_zoo.md
ssd_mobilenet_v1(主要快),mAP可能相对于其他预训练模型稍低。
150张图片,5个分类(computer,monitor,scuttlebutt,water dispenser,drawer chest)。需要使用标注工具
使用tensorflow官方代码https://github.com/tensorflow/models/tree/r1.5
主要是research/object_detection目录下的物体检测框架代码,以及slim框架。
- object_detection/train.py。运行训练,两个命令行参数:train_dir, pipeline_config_path
- object_detection/eval.py。运行验证,--checkpoint_dir(输出在train_dir中) --eval_dir --pipeline_config_path
- object_detection/export_inference_graph.py。导出训练好的模型。 --input_type --pipeline_config_path --train_checkpoint_prefix(model.ckpt) --output_diectory(exported_graphs冻结模型frozen_inference_graph.pb)
最后将模型进行inference,需要上一步得到的frozen_inference_graph.pb以及标签文件labels_items.txt,执行inference.py脚本。输出output.png
- 阅读了mobilenet的论文,再加上大牛对其网络的解析,对网络有了初步的了解。
个人比较倾向于深度学习能在移动或车载系统上得到应用,但一般的网络计算量、存储空间都是非常的巨大,所以mobilenet有它值得学习并深究的点 - mobilenet使用了一种deep_wise卷积方式代替了传统的卷积,减少了计算参数量。一般来说卷积核和输入数据进行逐个卷积,一个卷积核去处理输入数据其计算量是ChannelHeightwidthinput_Heightintput_width,如果需要N个卷积核的话还要再乘上一个N,计算量随数据增大会有指数般的增涨。
- 而且Mobilenet的deep-wise方式,每次只处理一个通道,而且这些卷积核都是11,根据论文所说,计算量大致在:Heightwidthchannelinput_heightinput_width Nchannelinput_heightinputwidth,是传统的网络的(1/N 1/heightwidth)
而且在经过depthwise卷积后,与一般的网络经过BN-ReLu不同,Mobilenet是-BN-ReLu-1x1Conv-BN-ReLu,能1x1卷积能大大减少了参数量,Mobilenet论文指出,95%计算量和75%的参数量是属于1x1卷积。当然减少了如此大的计算量,免不了对于准确率的丢失。期待以后哪个大神能在保持准确率情况下,大大减少计算量。
运行500step,total_loss=2.45。数据集是150张图片,5个分类,选取一张图片做验证图片。
test中有一主机和饮水机accuracy依次是59%和53%,效果较低。影响因素可能是:1.该图主机和饮水机一个bounding box有两个物体,有干扰2.迭代次数较少;3.代码问题