本文主要是介绍Keras-Yolo训练自己的手检测器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Keras-yolo 源码
本文采用了Github上用的比较广的keras-python库。代码很简洁易懂,容易实现。在此十分感谢这位大大的分享。
Github: https://github.com/qqwweee/keras-yolo3
下载:
git clone https://github.com/qqwweee/keras-yolo3
收集数据并制作成数据集
在本篇博客之前, 我曾写过一篇如何完善自己的数据集的一篇博文。里面有关于批量修改文件名和XML文件的教程
链接: https://blog.csdn.net/weixin_42835209/article/details/96574992
但此处我还要补充几点:
1. 数据集收集的尺寸要符合标准
我们知道, YOLOv3进行训练的里面是经过一个resize的。会把训练的图片进行压缩, 压成416x416的格式。 如果你拿一些像素很大的,并且比例很不均匀的图片去训练, 如5016x3344的,那么会导致一个结果就是, 你最后训练出来的检测框很小,或者很大。因为你的anchors是基于原本图像的宽高的。即使你最后训练出来的模型识别的精度在机器看来很高, 但是并不能把测试的对象完全框起来, 甚至是框变成了很小的一个点,或者是把整个屏幕给框起来。这都是我们不想要的。
而我选择的训练尺寸是resize成416x416的, 那么我尽量会把数据制作成尽可能接近416x416大小的样本。我的样本基本在500x375和375x500左右浮动, 当然到了600多x400多和400多x600多也是可以的。主要思想是尽量把采集的数据制作成靠近416x416尺寸的图片。当然如果你用608x608就要用接近608x608的数据去训练。网上有很多裁剪的代码, 但是我是手动裁剪的。因为我检测的目标在每张图片所处的位置都不同, 所以不能做到统一, 如果你的数据很相似的话, 那么你可以用代码进行批量操作。
2. 标记的样本要清晰准确
我们在使用LabelImg等标注工具时, 标注的目标其实很讲究的。主要有两个原则: 一、清晰 二、 准确
清晰主要就是指要去除掉像素低的和尺寸小的目标。在初期制作数据集的时候, 我自己标注手把很小很不清晰的手也框了起来。这就导致我训练的时候很难去达到一个很好的效果。
例如像在这张图片里面
很明显正中间那个人的手在图像中是又小又模糊的。那么我们尽量就不要选择这种样本。尽量选择像左下角正在拿叉子的人的手这样的尺寸大的, 清晰的样本。而究其原因还是和上面一样。我们在训练的时候我们标注的检测框是会影响我们kmeans的anchors的。 如果我们标注了这么小的样本, 放到darknet这么深的网络中,基本上就是一个点而已, 这会大大降低我们模型的精确度。
错误训练后的结果:
第二点准确。准确就是要只框你要检测的东西,
这篇关于Keras-Yolo训练自己的手检测器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!