Win10+Faster-RCNN-TensorFlow-Python3-master训练自己的数据 测试图像并输出mAP

mac2024-12-16  15

一、源码地址:https://github.com/smallcorgi/Faster-RCNN_TF

二、环境搭建

    先参考这篇装一下大概环境:https://blog.csdn.net/wwtor/article/details/80603296

    然后打开Anaconda Prompt或cmd安装python包(cython、python-opencv、easydict)

    先cd到文件目录,然后运行`pip install -r requirements.txt`   ,如图

    然后cd到/data/coco/PythonAPI  ,运行 `python setup.py build_ext --inplace`  ,运行`python setup.py build_ext install`       再cd到/lib/utils运行 `python setup.py build_ext --inplace`

三、数据集

    1. 将自己的数据转换为VOC格式,看这篇:https://blog.csdn.net/a417197457/article/details/80701944

    2. 把自己的xml文件放置在Faster-RCNN-TensorFlow-Python3-master/data/VOCdevkit2007/VOC2007/Annotations路径下,记得把原来的删掉

    把jpg文件放在Faster-RCNN-TensorFlow-Python3-master/data/VOCdevkit2007/VOC2007/JPEGImages路径下

    把生成的四个txt文档放在Faster-RCNN-TensorFlow-Python3-master/data/VOCdevkit2007/VOC2007/ImageSets/Layout 和 Faster-RCNN-TensorFlow-Python3-master/data/VOCdevkit2007/VOC2007/ImageSets/Main路径下

四、训练

    1. 网盘:https://pan.baidu.com/share/init?surl=aD0jlYGHhZQeeTvNJy0GGQ 密码:45ef 下载权重数据

    2. 在data目录下创建一个imagenet_weights文件夹,解压权重数据并把解压后的vgg_16.ckpt重命名为vgg16.ckpt,然后放到imagenet_weights文件夹中。

    3. 在Faster-RCNN-TensorFlow-Python3-master\lib\datasets\pascal_voc.py里面修改自己的标注的类别,其中

'__background__'(背景)不能删除,其他的可以根据自己的类别添加或删除。 self._classes = ('__background__', # always index 0 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor')

    例如:

self._classes = ('__background__', # always index 0 'person')

    这里是演示,就只弄了1类,可以根据自己的数据做调整。

    4. 在Faster-RCNN-TensorFlow-Python3-master\lib\config\config.py里可以修改参数。这里因为只是演示,所以我把最大迭代次数max_iters从40000修改为200

tf.app.flags.DEFINE_integer('max_iters', 200, "Max iteration") # 最大迭代次数

    把snapshot_iterations(每迭代多少次,输出一次结果)从5000修改为50。(这里如果把最大迭代次数max_iters改小了,就要相应的改小snapshot_iterations,否则如果max_iters小于snapshot_iterations,会没有结果输出)

tf.app.flags.DEFINE_integer('snapshot_iterations', 50, "Iteration to take snapshot") # 每迭代多少次,输出一次结果

    5. 运行train.py

    结果如下,训练结果被保存到了Faster-RCNN-TensorFlow-Python3-master\default\voc_2007_trainval\default

    注:如果要再次进行训练,需要把Faster-RCNN-TensorFlow-Python3-master\default\voc_2007_trainval\default和Faster-RCNN-TensorFlow-Python3-master/output/vgg16/voc_2007_trainval/default路径下之前训练产生的模型和Faster-RCNN-TensorFlow-Python3-master/data/cache路径下的cache删掉

五、测试图像

    在demo.py中

    1. 修改类别,跟pascal_voc.py里的类别一致

CLASSES = ('__background__', 'person')

    2. 测试数据集改成自己的数据,并替换Faster-RCNN-TensorFlow-Python3-master\data\demo中的图像文件,图像文件的名字与修改后的文件名要一致

im_names = ['000001.jpg', '000002.jpg', '000003.jpg', '000004.jpg', '000005.jpg']

    3. 将

NETS = {'vgg16': ('vgg16_faster_rcnn_iter_70000.ckpt',), 'res101': ('res101_faster_rcnn_iter_110000.ckpt',)} DATASETS = {'pascal_voc': ('voc_2007_trainval',), 'pascal_voc_0712': ('voc_2007_trainval+voc_2012_trainval',)}

    改为

NETS = {'vgg16': ('vgg16.ckpt',), 'res101': ('res101_faster_rcnn_iter_110000.ckpt',)} DATASETS = {'pascal_voc': ('voc_2007_trainval',), 'pascal_voc_0712': ('voc_2007_trainval',)}

    4. 新建Faster-RCNN-TensorFlow-Python3-master\output\vgg16\voc_2007_trainval\default目录,将Faster-RCNN-TensorFlow-Python3-master\default\voc_2007_trainval\default下的这四个文件复制到output\vgg16\voc_2007_trainval\default中

并改名为

    5. 将104行代码中的default='res101'改为default='vgg16'

    6. 运行demo.py,结果如下

六、输出mAP

    1. 在demo.py的import下面添加两行代码

from lib.utils.timer import Timer # 计算mAP的值 from lib.utils.test import test_net from lib.datasets.factory import get_imdb

    2. 在demo.py的最后添加两行代码

print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~') print('Demo for data/demo/{}'.format(im_name)) demo(sess, net, im_name) imdb = get_imdb("voc_2007_trainval") test_net(sess, net, imdb, 'default') plt.show()

    3. 打开pascal_voc.py 修改下面的函数中的filename

def _get_voc_results_file_template(self): # VOCdevkit/results/VOC2007/Main/<comp_id>_det_test_aeroplane.txt # filename = self._get_comp_id() + '_det_' + self._image_set + '_{:s}.txt' filename = self._image_set + '_{:s}' path = os.path.join( self._devkit_path, 'results', 'VOC' + self._year, 'Main', filename) return path

    4. 新建\data\VOCDevkit2007\results\VOC2007\Main目录

    5. 运行demo.py,结果如下

 

 

最新回复(0)