我使用的代码链接在这里 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
修改为自己数据的类
/home/deep/jcx/Faster-RCNN_TF/lib/networks/VGGnet_train.py
修改类的个数
/home/deep/jcx/Faster-RCNN_TF/lib/networks/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目录下执行:
demo.pyexport PATH=$PATH:/usr/local/cuda-8.0/bin/
make
退回到Faster-RCNN_TF执行:
./experiments/scripts/faster_rcnn_end2end.sh gpu 0 VGG16 pascal_voc
★注意:训练到最后会报错,提示 --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
里添加我们要保存图片的路径
结果展示
疣1.jpg疣2.jpg
疣29.jpg
疣35.jpg 疣45.jpg 疣101.jpg
网友评论
numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
另外,楼主的环境可以说下吗?我tensorflow-gpu==1.2,不知道警告是不是这里的原因,谢谢!
你的这个报错我没有遇到过
[[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报出上边的错误,请问您有出过类似到情况吗
./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}
请问是什么原因?
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