实践本文之前,请确保已经完成下面这个网址3.1之前的操作:
https://github.com/YunYang1994/tensorflow-yolov3
本文主要参考这个网址的3.1 Train raccoon dataset
第一步:
sh scripts/make_raccoon_tfrecords.sh
win10下这个命令无法运行,只有在linux下面才可以,虽然我在window下安装了ubuntu子系统来执行sh命令(不是双系统),但是子系统的terminal也还是不好弄,比如它缺少了一个numpy模块,我终端里apt-get安装了,但是还是没用,所以我只能打开这个sh文件,一步一步执行里面的命令。(我是用的anaconda prompt)
下面解释一下这个文件里的内容:
git clone https://github.com/YunYang1994/raccoon_dataset.git
cat ./raccoon_dataset/labels.txt | head -n 180 > ./raccoon_dataset/train.txt
cat ./raccoon_dataset/labels.txt | tail -n +181 > ./raccoon_dataset/test.txt
python core/convert_tfrecord.py --dataset_txt ./raccoon_dataset/train.txt --tfrecord_path_prefix ./raccoon_dataset/raccoon_train
python core/convert_tfrecord.py --dataset_txt ./raccoon_dataset/test.txt --tfrecord_path_prefix ./raccoon_dataset/raccoon_test
第一条命令执行后,会下载raccoon_dataset目录,我下载了一个git,然后通过git clone命令下载,那么为什么要通过git而不直接到后面给出的网站下载呢?因为通过git下载会下载完整的分支,在网页直接下载只会下载主干部分,当然你直接下载主干也没问题。
第二条命令就是把raccoon_dataset这个目录下的label.txt文件的从头开始180行复制并粘贴到新生成的的train.txt文件。./表示从当前目录开始。txt文件的每一行是:
xxx/xxx.jpg 55.38 132.63 519.84 380.4 16
# image_path x_min y_min x_max y_max class_id x_min y_min ... class_id
(55.38,132.63) 与 (519.84,380.4) 表示用两个像素点的位置围成的框就是标注的16号识别物,16识别物是什么,可以从xxx.names文件里看(实际上是names文件第17行的标识物,因为第一行标识物是0号)。
第三条命令同上,只是从label.txt倒数第一行开始。但是只复制了20行,我也不知道为什么。
第四条命令:--dataset_txt 后面是刚刚生成的train.txt文件,--tfrecord_path_prefix 后面的目录就是存放生成的tfrecord文件,
tfrecord文件就是把图像文件和它的标注打包起来的以供训练的文件。
第五条命令同四,此命令打包的是测试集。
第二步:(可选)
python show_input_image.py
这一步就是展示你的输入的数据,当你训练自己的数据时可以不用运行它。
第三步:(可选)
python kmeans.py
这个文件要调用train.txt和anchors.txt文件,应该是分类标准之类的东西吧,我不是很了解。
第四步:
python convert_weight.py --convert
这里用的是:--convert参数,这一步会生成*.ckpt文件,第六步还会用到这个py文件。
第五步:
python quick_train.py
这一步就是开始训练,需要标识类别文件:*.names、锚重文件:*_anchors.txt,训练打包文件:*_train.tfrecord,测试打包文件:*_test.tfrecord。会生成一个ckpt文件(重要),还有两个不知道用来干什么的train和test目录。
看看这个py文件开始的一些参数:
其中BATCH_SIZE表示将数据打包成几个,当你的显存不够用了(out of range),死机蓝屏或是程序崩溃时要把这个调小。
STEPS表示训练迭代的次数,调得越小,花的时间越少,训练效果越差。
其它的我就不知道了。。。
第六步:(可选)
tensorboard --logdir ./data
这一步就是打开tensorflow的可视化工具看看框架模型,如果打不开的话,参考:
https://blog.csdn.net/dr_theodore/article/details/80748068
或
https://blog.csdn.net/whitesilence/article/details/79261592
第七步:
python convert_weight.py -cf ./checkpoint/yolov3.ckpt-2500 -nc 1 -ap ./data/raccoon_anchors.txt --freeze
本步会利用上面的ckpt文件生成*cpu_nms.pb和*gpu_nms.pb文件。
第八步:
python quick_test.py
本步就是用两个pb文件来测试。
第九步:
python evaluate.py
测试训练结果,计算mAP识别率,用这个raccoon_dataset我跑得的mAP=0.90左右。