大数据文摘作品,转载要求见文末

作者 | Dat Tran

编译 | 康璐、元元、宁云州

谁动了我最爱的干脆面?!

美好的周五,大数据文摘的办公室居然出现了一起偷窃事件。查看监控后,伟大的文摘菌很快用TensorFlow抓住了凶手,TA就是——一只蠢萌的小浣熊

来,一起听文摘菌讲讲,这一简易浣熊识别器是如何实现的吧~

文摘菌的这个浣熊识别器到底长啥样呢?先给你看看最终效果~

一张图看懂tensorflow 干脆面君你给我站住(1)

小偷浣熊独白:文摘菌,我不是故意要吃你的干脆面的 ><

想知道这是如何实现的?在这篇文章中,我会详细说明制作这个浣熊识别器的所有步骤。

为什么要选择浣熊???

不为什么,就是可爱!!!

戳链接可观看视频:https://youtu.be/Bl-QY84hojs

建立数据集

让我们开始吧!我们需要做的第一件事是建立自己的数据集:

一张图看懂tensorflow 干脆面君你给我站住(2)

  • 然后,我用LabelImg手动给图片打上了标签。LabelImg是一个用Python编写和用Qt做图形交互的图像标注工具。它可以支持Python2和3,但是我使用的是Python2和Qt4来从头编译,因为我用不了Python3和Qt5 。LabelImg非常好用,标注可以保存为PASCAL VOC格式的 XML文件。虽然我可以用create_pascal_tf_record.py脚本生成TFRecord文件,但我还是想自己编写脚本。

  • 不知道为什么,在MAC OSX系统上LabelImg无法打开jpeg格式的图片,所以我不得不把他们转化成png格式然后再转化回jpeg格式。实际上,因为API也能支持png格式,我不需要再转化为jpeg格式,但是当时我还不知道这一点。下次我会直接使用png格式图片。

  • 最终,在标识了这些图片后,我写了一个脚本把XML文件转化成csv格式并建立了TFRecord。我使用160张图片来训练(train.records),40张图片来测试(test.records)。

  • 注意:

    训练模型

    在建立好符合要求的API输入文件后,就可以训练模型了。

    在训练中,你需要下述部分:

    注意:如果你的数据集多样性不足,如比例、姿态等没有太多变化,data_augmentation_option的设置值得选择。完整的选线清单可以在这里找到(参考PREPROCESSING_FUNCTION_MAP)。

    一张图看懂tensorflow 干脆面君你给我站住(3)

    注意:所有id编号都要从1开始,这是很重要的。0是一个占位索引。

    开始训练!

    设置TensorBoard路径: tensorboard — logdir=gs://${YOUR_CLOUD_BUCKET}

    下面是我的训练和评估工作结果。总体来说,我以批量大小24运行了一个小时,约22000步。在大概40分钟时我已经得到了很好的结果。

    一张图看懂tensorflow 干脆面君你给我站住(4)

    总误差的进展图

    因为是从预训练模型开始训练的,总误差下降的很快。

    因为我只有一个类,只需要看总体平均准确率就足够了。

    一张图看懂tensorflow 干脆面君你给我站住(5)

    平均准确率在20000步的时候就达到了0.8,这个结果很不错。

    下面是在训练模型的过程中,一个图像评估的例子。

    一张图看懂tensorflow 干脆面君你给我站住(6)

    框住浣熊的探测框越来越准确。

    导出模型

    我把训练后的模型用在了我在youtube找的视频上

    一张图看懂tensorflow 干脆面君你给我站住(7)

    地球上最有名的浣熊

    结论

    在本文中,我只使用了一个类,因为我懒得标注更多数据。有很多公司比如CrowdFlower、 CrowdAI和Amazon’s Mechanical Turk均提供标注服务,但是本文还用不到这样的服务。

    我用了很短的训练时间就得到了相当不错的结果,这也是由于识别器只需要训练一个类。对于多类别的情况,总平均准确率就不会这么高了,也需要更长的训练时间来获得好的结果。实际上,我也在Udacity提供的带标注的驾驶数据集上训练了识别器。训练一个能识别小汽车、卡车和行人的识别器花了很长时间。很多其他类似的案例中可能需要使用更复杂的模型。我们还要考虑在模型速度和模型准确度之间寻找平衡。

    原文链接:https://medium.com/towards-data-science/how-to-train-your-own-object-detector-with-tensorflows-object-detector-api-bec72ecfe1d9

    看完了文摘菌的教程,是不是也想亲手抓一只自己的小浣熊呢?如果你不满足只是抓一只干脆面君,那么可以跟我们一起来~~~

    ,