此篇文章主要记录怎样快速使用tf-faster-rcnn训练自己的数据集,其他的问题可参考其他博客。
根据提示缺少的库,自行安装即可。
git clone https://github.com/endernewton/tf-faster-rcnn.git
根据自己的显卡 在…/lib/setup.py文件 130行 修改适合的 -arch
在lib路径下,编译Cython模块
make clean
make
cd ..
cd data
git clone https://github.com/pdollar/coco.git
cd coco/PythonAPI
make
cd ../../..
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
$VOCdevkit/ # development kit
$VOCdevkit/VOCcode/ # VOC utility code
$VOCdevkit/VOC2007 # image sets, annotations, etc.
# ... and several other directories ...
cp -r VOCdevkit /home/ql/env3.6/tf-faster-rcnn/data/VOCdevkit2007
当然,你也可以建立软连接,但是我的有问题,也不愿深究。
# Resnet101 for voc pre-trained on 07+12 set
./data/scripts/fetch_faster_rcnn_models.sh
或者网盘下载:Resnet101 for voc pre-trained on 07+12 set 提取码:un64
NET=res101
TRAIN_IMDB=voc_2007_trainval+voc_2012_trainval
mkdir -p output/${NET}/${TRAIN_IMDB}
cd output/${NET}/${TRAIN_IMDB}
ln -s ../../../data/voc_2007_trainval+voc_2012_trainval ./default
cd ../../..
# at repository root
GPU_ID=0
CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/demo.py
3.Test with pre-trained Resnet101 models
把 tf-faster-rcnn/lib/datasets/voc_eval.py的第121行的
with open(cachefile,‘w’) as f
改成:
with open(cachefile,‘wb’) as f
同时还要把第105行的
cachefile = os.path.join(cachedir, ‘%s_annots.pkl’ % imagesetfile)
改成:
cachefile = os.path.join(cachedir, ‘%s_annots.pkl’ % imagesetfile.split("/")[-1].split(".")[0])
GPU_ID=0
./experiments/scripts/test_faster_rcnn.sh $GPU_ID pascal_voc_0712 res101
在此,表明此模型安装成功且能正常运行。
tf-faster-rcnn/data/VOCdevkit2007/VOC2007/JPEGImages
tf-faster-rcnn/data/VOCdevkit2007/VOC2007/Annotations
#创建文件夹,重命名文件
mkdir -p data/imagenet_weights
mv vgg_16.ckpt vgg16.ckpt
#开始训练 vgg16对应权重数据,0是GPU的ID,pascal_voc是训练使用的数据集
#在开始训练之前,还需要把之前训练产生的模型以及cache删除掉,分别在
#tf-faster-rcnn/output/vgg16/voc_2007_trainval/default
#tf-faster-rcnn/data/cache
./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc vgg16
./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc res101
Set proposal method: gt
Appending horizontally-flipped training examples…
objs : [
Traceback (most recent call last):
File “./tools/train_net.py”, line 104, in
imdb, roidb = combined_roidb(args.imdb_name)
File “./tools/train_net.py”, line 69, in combined_roidb
roidbs = [get_roidb(s) for s in imdb_names.split(’+’)]
File “./tools/train_net.py”, line 66, in get_roidb
roidb = get_training_roidb(imdb)
File “/home/sai/py-faster-rcnn/tools/…/lib/fast_rcnn/train.py”, line 118, in get_training_roidb
imdb.append_flipped_images()
File “/home/sai/py-faster-rcnn/tools/…/lib/datasets/imdb.py”, line 106, in append_flipped_images
boxes = self.roidb[i][‘boxes’].copy()
File “/home/sai/py-faster-rcnn/tools/…/lib/datasets/imdb.py”, line 67, in roidb
self._roidb = self.roidb_handler()
File “/home/sai/py-faster-rcnn/tools/…/lib/datasets/pascal_voc.py”, line 111, in gt_roidb
for index in self.image_index]
File “/home/sai/py-faster-rcnn/tools/…/lib/datasets/pascal_voc.py”, line 217, in _load_pascal_annotation
cls = self._class_to_ind[obj.find(‘name’).text.lower().strip()]
KeyError: ‘chair’
打开tf-faster-rcnn/lib/datasets/pascal_voc.py
in _load_pascal_annotation method, look for something like
objs = diff_objs (or non_diff_objs)
After that line insert something similar to below code:
cls_objs = [obj for obj in objs if obj.find(‘name’).text in self._classes]
objs = cls_objs
参考博客:
https://blog.csdn.net/char_QwQ/article/details/80980505
https://blog.csdn.net/attitude_yu/article/details/81906193