如果可以建议你有个好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),
ssd_mobilenet_v2_keras
faster_rcnn_resnet50_keras
ssd_mobilenet_v2_keras
faster_rcnn_resnet50_keras
ssd_mobilenet_v2_keras
faster_rcnn_resnet50_keras
ssd_mobilenet_v2_keras
faster_rcnn_resnet50_keras
ssd_mobilenet_v2_keras
faster_rcnn_resnet50_keras
ssd_mobilenet_v2_keras
faster_rcnn_resnet50_keras
上面这个结果基本就可以对比出一个判断,让你选择用SSD还是Faster RCNN,不知道是不是不小心调了那个参数的缘故,上面faster rcnn 的结果差于之前的结果;但就算是这样其实也可以判断出来到底应该用哪一个了。