美文网首页机器学习我爱编程machine learning
Faster R-CNN(Tensorflow版) 训练自己的数

Faster R-CNN(Tensorflow版) 训练自己的数

作者: JayIsAmazing | 来源:发表于2018-03-19 11:06 被阅读5956次

    我使用的代码链接在这里 https://github.com/smallcorgi/Faster-RCNN_TF
    我处理自己数据的标记工具在这里 https://github.com/tzutalin/labelImg

    为了最小程度的修改源代码,我把自己的数据处理成和 VOC2007 文件格式一模一样的结构。这样,只需要修改 classes 里的类别就可以了,路径的问题完全不用管。

    修改的文件路径

    /home/deep/jcx/Faster-RCNN_TF/lib/datasets/pascal_voc.py
    修改为自己数据的类

    pascal_voc.py

    /home/deep/jcx/Faster-RCNN_TF/lib/networks/VGGnet_train.py
    修改类的个数

    VGGnet_train.py

    /home/deep/jcx/Faster-RCNN_TF/lib/networks/VGGnet_test.py
    修改类的个数

    VGGnet_test.py

    以上就是我修改的所有地方,简单吧 :D

    训练我们的数据

    训练前要把官方的数据替换掉,如果你拿原始VOC数据训练过,还需要把load的数据和模型删掉。

    需要删除这两个目录下的文件:

    /home/deep/jcx/Faster-RCNN_TF/data/cache
    /home/deep/jcx/Faster-RCNN_TF/output/faster_rcnn_end2end

    开始训练

    首先要到根目录 Faster-RCNN_TF
    然后到lib目录下执行:

    export PATH=$PATH:/usr/local/cuda-8.0/bin/
    make
    退回到Faster-RCNN_TF执行:
    ./experiments/scripts/faster_rcnn_end2end.sh gpu 0 VGG16 pascal_voc

    demo.py

    ★注意:训练到最后会报错,提示 --weights: expected one argument, 这时候需要添加我们训练好的模型路径。在训练阶段。

    开始测试

    执行test_net.py 并添加了--weights 的参数。
    执行前查看 /home/deep/jcx/Faster-RCNN_TF/data/VOCdevkit2007/annotations_cache/annots.pkl 的缓存文件是不是清空的。

    python ./tools/test_net.py --device gpu --device_id 0 --weights /home/deep/jcx/Faster-RCNN_TF/output/faster_rcnn_end2end/voc_2007_trainval/VGGnet_fast_rcnn_iter_70000.ckpt --imdb voc_2007_test --cfg experiments/cfgs/faster_rcnn_end2end.yml --network VGGnet_test

    使用 demo.py 检测从网上找到的相关皮肤病图片

    直接用模型对相关图片进行目标检测
    首先要把 demo.py 文件里的 CLASSES 要与之前修改的类别保持一致
    /home/deep/jcx/Faster-RCNN_TF/tools
    在文件根目录下面执行此命令,开始生成结果:

    python ./tools/demo.py --model /home/deep/jcx/Faster-RCNN_TF/output/faster_rcnn_end2end/voc_2007_trainval/VGGnet_fast_rcnn_iter_70000.ckpt

    保存标记好的图片

    demo.py 里添加我们要保存图片的路径

    demo.py.png

    结果展示

    疣1.jpg
    疣2.jpg
    疣29.jpg
    疣35.jpg 疣45.jpg 疣101.jpg

    相关文章

      网友评论

      • 全方位小白:感谢楼主,请问你知不知道如果训练中断了如何重新载入继续训练?
      • lwq1122:请问你是怎么生成每个类别的四个txt文件的,我只按照网上的额代码生成了所有类别的trainval,train,val,test,然后报错了。:disappointed_relieved: 我看网上其他教程都是说只用了四个txt文件的
        JayIsAmazing:@lwq1122 那是我自己写的脚本
      • 斐波那契的数字:很棒, 就是图片看的我很慌张,,,,
      • 49d8a90d149a:非常感谢楼主的分享,我遇到了这个警告,不知道是什么原因:
        numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
        另外,楼主的环境可以说下吗?我tensorflow-gpu==1.2,不知道警告是不是这里的原因,谢谢!
        49d8a90d149a:谢谢楼主,我再试试。
        JayIsAmazing:我的环境是 ubuntu 16.04,python2.7, tensorflow-gpu==1.0.0, cuda8
        你的这个报错我没有遇到过
      • d154835812e2:InvalidArgumentError (see above for traceback): exceptions.ValueError: could not broadcast input array from shape (4) into shape (0)
        [[Node: roi-data/PyFunc = PyFunc[Tin=[DT_FLOAT, DT_FLOAT, DT_INT32], Tout=[DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], token="pyfunc_2", _device="/job:localhost/replica:0/task:0/cpu:0"](rpn_rois/_105, _arg_Placeholder_2_0_2, roi-data/PyFunc/input_2)]]
        [[Node: roi-data/PyFunc/_107 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/gpu:0", send_device="/job:localhost/replica:0/task:0/cpu:0", send_device_incarnation=1, tensor_name="edge_301_roi-data/PyFunc", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"]()]]
        您好,我运行./experiments/scripts/faster_rcnn_end2end.sh gpu 0 VGG16 pascal_voc报出上边的错误,请问您有出过类似到情况吗
        JayIsAmazing:@17806291972 您好,没遇到。我make完运行就可以了。
      • 单斌_c932:楼主,你用的什么数据集 啊
        JayIsAmazing:@单斌_c932 自己网上爬的,然后自己标注
      • 一直是首歌:博主你好,请问这个是在window系统下运行还是在linux系统下运行,请问在window下可以运行吗?
        聿默:Faster-RCNN-TensorFlow-Python3.5-master可以
        JayIsAmazing:linux下的,windows的话恐怕不可以,环境比较难配。
      • 凉介_9798:博主你好!我运行./experiments/scripts/faster_rcnn_end2end.sh gpu 0 VGG16 pascal_voc后,出现:
        ./experiments/scripts/faster_rcnn_end2end.sh: line 57: 3054 Segmentation fault (core dumped) python ./tools/train_net.py --device ${DEV} --device_id ${DEV_ID} --weights data/pretrain_model/VGG_imagenet.npy --imdb ${TRAIN_IMDB} --iters ${ITERS} --cfg experiments/cfgs/faster_rcnn_end2end.yml --network VGGnet_train ${EXTRA_ARGS}
        请问是什么原因?
        Leon_01ac:你好,我也遇到了同样的问题请问解决了吗?
      • 73ea74847f65:你好!我想请问一下,就是我按照你的步骤一步一步来做,但是在手动执行test的时候,一直卡在Waiting for /home/hxsz/Faster-RCNN_TF/output/faster_rcnn_end2end/voc_2007_trainval/VGGnet_fast_rcnn_iter_70000.ckpt to exist... 请问这是怎么一回事呀?也没有报错,只是这一句话不停地每隔10s重复一遍出现。
        d154835812e2:@JayIsAmazing 你好按照错误路径把VGGnet_fast_rcnn_iter_70000.ckpt放进去就好了
        JayIsAmazing:不会啊,如果训练好且路径正确不会报错的
      • 20132018:你好,请问自己文件怎么处理成和voc2007一样呢?我做了VOCdevkit\VOC2007\Annotations下的xml文件,VOCdevkit\VOC2007\JPEGImages下的图片,VOCdevkit\VOC2007\ImageSets\Main下的train.txt(训练集)、val.txt(测试集)。然后参照你的说明修改程序,没有得到checkpoint文件。。。
        JayIsAmazing:@20132018 其实最难的就是处理自己的数据,你一定要把原数据的文件结构弄明白,然后仿照这去创建一些文件,在VOC2007/ImageSets/Main/ 的目录下面,我先用代码生成4个基本的文件用于是训练还是验证还是测试,val.txt, trainval.txt, train.txt, test.txt,然后每个类也要生成4个对应的txt文件,这是为了打标签。不知道这样解释能不能让你明白
        JayIsAmazing:@20132018 你说的完全正确。报这个错,要手动执行测试的命令
        20132018:训练到最后会报错,提示 --weights: expected one argument, 这时候需要添加我们训练好的模型路径。在训练阶段。 这句话是什么意思呢?到这里是不是训练完成了,然后执行test_net.py 去手动测试?
      • 潘潘潘番潘:楼主你好,请问你自己用来训练的数据集有多大呢,我看你测试的效果挺好的,但是我用了700张图片作训练,感觉效果不太好,想添加训练数据,但不知道大概要多少张,所以请教一下你的训练经验。
        7ce042169bf6:楼主请问我按你的方法训练自己的数据一直报错

        Traceback (most recent call last):
        File "./tools/train_net.py", line 96, in <module>
        max_iters=args.max_iters)
        File "/home/miaozhen/projects/Faster-RCNN_TF/tools/../lib/fast_rcnn/train.py", line 262, in train_net
        sw = SolverWrapper(sess, saver, network, imdb, roidb, output_dir, pretrained_model=pretrained_model)
        File "/home/miaozhen/projects/Faster-RCNN_TF/tools/../lib/fast_rcnn/train.py", line 38, in __init__
        self.bbox_means, self.bbox_stds = rdl_roidb.add_bbox_regression_targets(roidb)
        File "/home/miaozhen/projects/Faster-RCNN_TF/tools/../lib/roi_data_layer/roidb.py", line 48, in add_bbox_regression_targets
        assert len(roidb) > 0
        AssertionError
        7ce042169bf6:你好,请问你怎么训练数据的,我训练自己的数据一直报错
        JayIsAmazing:@潘潘潘番潘 每个类大概在 500-1000。而且每个类的特征区别差异比较大
      • 19cc7dd669c6:楼主你好,我测试完成得到结果,但是没有在results里面生成相应的txt文件,这是怎么回事
        19cc7dd669c6:@JayIsAmazing 你解决了吗
        19cc7dd669c6:@JayIsAmazing 就很奇怪,应该是会有的,因为文件夹绝对路径不对会报错,而且我前面一个数据集是生成了txt,换了个数据集就没有了
        JayIsAmazing:我貌似也没有。。。
      • MemoryLeak_cabe:楼主你好,我想问一下,你为什么有两个“开始训练”而且执行的命令不一样
        JayIsAmazing:@MemoryLeak_cabe 执行demo.py的源码是不保存图片的,需要自己添加。我刚又更新了一下
        MemoryLeak_cabe:@JayIsAmazing 请问你测试完之后的图片放在了哪里,为什么我只有一个.pkl文件
        JayIsAmazing:@MemoryLeak_cabe 已经更新了。这个命令是训练模型 faster_rcnn_end2end.sh gpu 0 VGG16 pascal_voc。这个命令是用模型来进行目标检测 demo.py --model ‘你的模型地址’

      本文标题:Faster R-CNN(Tensorflow版) 训练自己的数

      本文链接:https://www.haomeiwen.com/subject/zjtjqftx.html