TensorFlow 新手踩坑杂谈

如果可以建议你有个好CPU,有块好显卡才来做这个事情,当然如果你有台矿机最好,因为做过一个测试,GPU 的计算能力是CPU的100倍以上,这还是在我6年前购买的笔记本上测试的结果。

 

tensorflow 现在已经更新到2.5版本了,网上很多资料还都在1.x 的版本,1.x 的版本和2.x 的版本相差挺大,tensorflow 两个版本之间严重缺少兼容性,所以如果你要查找资料最好确定资料对应的tensorflow 的版本。

如果是针对自定义识别进行样本训练,最好样本的图片一定要小,越小训练速度越快,我最初以为config中指定了长宽就无所谓原始样本的大小,结果最后发现相差很大,为了训练速度应该尽可能保证样本小,但是多。

tensorflow 2.0中用于训练样本的文件是: model_main_tf2.py ,用于处理训练后数据文件是: exporter_main_v2.py 。很多文档会让你使用 export_inference_graph.py 和 model_main.py 这里面是有坑的!

在tensorflow 的各种教程中一个让人头疼的问题是目录问题:样本目录、处理样本目录、训练目录、训练数据处理目录 等等,这让人看起来就眼花缭乱了,当然熟悉了是另外一回事!

 

python model_main_tf2.py  --model_dir=C:\opencv\test\train\model2\  --pipeline_config_path=C:\opencv\test\train\ssd_mobilenet_v2_keras.config

python exporter_main_v2.py --input_type image_tensor  --trained_checkpoint_dir=C:\opencv\test\train\model2\  --pipeline_config_path=C:\opencv\test\train\ssd_mobilenet_v2_keras.config  --output_directory=c:/opencv/test/chkpoint2/


这个版本的新手入门还可以:https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/2.2.0/index.html#

但是里面可能有部分错误,难以理解!

现在回头来看,如果不是安装和配置有各种问题,在是实际使用上tensorflow 还是很简单的。

 

 

对于样本训练,SSD 的 训练更快,CPU占用更多;Faster RCNN 的训练 要慢很多,CPU占用少了一半

同等训练次数,例如1000 步,Faster RCNN已经可以非常准确的找出你要找的物体,至少90%了,但是SSD不行,可能只有30%左右,还有很多干扰;

而当你想非常清楚了解不同训练的不同的时候,缺发现很多能找到的资料都是从国外拷贝过来的。

 

但是如果你要查找的图片中存在多个目标,可能在训练次数OK的情况下SSD可能可以更准确的查找出来,这只是一种可能罢了,我在20万次的训练下还是没有找到一些结果,只是它呈现了不同的目标可能,而Faster RCNN 压根都没有这种呈现,对于Faster RCNN 可以采用对于visualize_boxes_and_labels_on_image_array 进行特殊处理来获得某些呈现。

下面是

ssd_mobilenet_v2_keras 训练3000 和  faster_rcnn_resnet50_keras 训练 3000 后,相同训练样本,其他所有参数都相同的情况下进行目标检测的效果对比:

训练样本数 三类共 39个,

在以下配置参数下的结果:

    viz_utils.visualize_boxes_and_labels_on_image_array(
          image_np_with_detections,
          detections['detection_boxes'][0].numpy(),
          (detections['detection_classes'][0].numpy() + label_id_offset).astype(int),
          detections['detection_scores'][0].numpy(),
          category_index,
          use_normalized_coordinates=True,
          max_boxes_to_draw=4,
          min_score_thresh=.30,
          agnostic_mode=False),

 

TensorFlow 新手踩坑杂谈

ssd_mobilenet_v2_keras

TensorFlow 新手踩坑杂谈

faster_rcnn_resnet50_keras

TensorFlow 新手踩坑杂谈

ssd_mobilenet_v2_keras

TensorFlow 新手踩坑杂谈

faster_rcnn_resnet50_keras

 

TensorFlow 新手踩坑杂谈

ssd_mobilenet_v2_keras

TensorFlow 新手踩坑杂谈

faster_rcnn_resnet50_keras

TensorFlow 新手踩坑杂谈

ssd_mobilenet_v2_keras

TensorFlow 新手踩坑杂谈

faster_rcnn_resnet50_keras

TensorFlow 新手踩坑杂谈

ssd_mobilenet_v2_keras

TensorFlow 新手踩坑杂谈

faster_rcnn_resnet50_keras

 

TensorFlow 新手踩坑杂谈

ssd_mobilenet_v2_keras

TensorFlow 新手踩坑杂谈

faster_rcnn_resnet50_keras

上面这个结果基本就可以对比出一个判断,让你选择用SSD还是Faster RCNN,不知道是不是不小心调了那个参数的缘故,上面faster rcnn 的结果差于之前的结果;但就算是这样其实也可以判断出来到底应该用哪一个了。

 

上一篇:day08 总结和考试


下一篇:【python】Scrapy爬虫框架入门