文章目录
一、faster-rcnn.pytorch-1.0
1、下载代码与权重文件
选择的是当前最火的框架,直接从jwyang大神的github上下载即可,注意要选择pytorch1.0版本进行下载。
数据集准备:Pascal_VOC数据集
下载训练、验证测试数据集training, validation, test data 和 VOCdevkit
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
将三个文件解压到同一个文件夹内VOCdevkit
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
VOC数据集的文件夹tree结构:其中Annotations内放xml标注文件,JPEGImages内放图片,ImageSets/Main/内的四个txt文件分别是测试集、训练集、训练验证集、验证集。
最终在VOCdevkit目录下有VOC2007/Annotations等文件夹,数据集格式如图所示
VOCdevkit
└── VOC2007
├── Annotations
├── ImageSets
│ └── Main
│ ├── test.txt
│ ├── train.txt
│ ├── trainval.txt
│ └── val.txt
└── JPEGImages
特征提取训练权重准备:作者给出了两种特征提取网络的Pretrained Models,下载完成后把他们放到data/pretrained_model目录下(见作者github)
cp /data/faster-rcnn.pytorch.zip ~/
unzip faster-rcnn.pytorch.zip
将下载的压缩包拷贝到云服务器上后进行解压。
2、先安装所有环境
要进入到faster-rcnn.pytorch目录下,后执行命令
pip install -r requirements.txt
3、相关库函数版本以及安装
sudo pip uninstall torch
sudo pip install torch==1.0.0
sudo pip uninstall torchvision
sudo pip install torchvision==0.2.1
sudo pip uninstall scipy
sudo pip install scipy==1.0.0
可以跑通的版本号
cython==0.29.21
cffi==1.11.5
opencv-python==4.3.0.36
scipy==1.0.0
msgpack==1.0.0
easydict==1.9
matplotlib==3.3.0
pyyaml==5.3.1
tensorboardX==2.1
4、创建软连接
cd faster-rcnn.pytorch/data
# 进入到我们创建的data文件夹
ln -s /home/mist/faster-rcnn.pytorch/data/VOCdevkit VOCdevkit2007
# ln -s VOCdevkit的绝对路径 VOCdevkit2007
# ln是链接(link)命令,ln -s 表示创建软连接。具体用法是:ln -s 源文件 目标文件。
5、编译CUDA依赖环境
cd lib
sudo python setup.py build develop
6、改bug
运行出现一个错误
ImportError: cannot import name '_mask'
解决——安装CoCO API
cd data
git clone https://github.com/pdollar/coco.git
cd coco/PythonAPI
make
cd ../../..
7、训练
CUDA_VISIBLE_DEVICES=$GPU_ID python trainval_net.py \
--dataset pascal_voc --net vgg16 \
--bs $BATCH_SIZE --nw $WORKER_NUMBER \
--lr $LEARNING_RATE --lr_decay_step $DECAY_STEP \
--cuda
可用的示例
CUDA_VISIBLE_DEVICES=0 python trainval_net.py \
--dataset pascal_voc --net vgg16 \
--epochs 1 --bs 1 --nw 4 \
--lr 1e-3 --lr_decay_step 5 \
--cuda
参数选择图
从断点开始继续训练方法:
例如我训练好的模型名为faster_rcnn_1_9_9547.pth,它就对应了 checksession 为1 ,checkepoch为 9,checkpoint为 9547
例如我要继续训练这个模型到20次epoch,就可以写
CUDA_VISIBLE_DEVICES=0 python trainval_net.py --dataset pascal_voc --net res101 --bs 1 --nw 4 --cuda --r true --checksession 1 --checkepoch 8 --checkpoint 9547 --epochs 20
训练过程:
8、测试
python test_net.py --dataset pascal_voc --net vgg16 \
--checksession $SESSION --checkepoch $EPOCH --checkpoint $CHECKPOINT \
--cuda
python test_net.py --dataset pascal_voc --net vgg16 \
--checksession 1 --checkepoch 1 --checkpoint 10021 \
--cuda
测试过程:
9、demo
- 在跑demo文件过程中,也需要把类别修改成适应你的新数据集的形式。
//个例实验
python demo.py --net vgg16 --checksession 1 --checkepoch 10 --checkpoint 359 --cuda --load_dir models
二、生成数据集
1、修改xml文件参数
import os
import os.path
import xml.dom.minidom
# path="../xml/"
path_xml = '/home/Annotations/'
path_img='/home/JPEGImage/'
files = os.listdir(path_xml) # 得到文件夹下所有文件名称
modify_folder = "Annotations"
modify_database = "labproject"
for xmlFile in files: # 遍历文件夹
if not os.path.isdir(xmlFile): # 判断是否是文件夹,不是文件夹才打开
print(xmlFile)
xmlFile
filepath = os.path.join(path_xml, xmlFile)
# 最核心的部分,路径拼接,输入的是具体路径
dom = xml.dom.minidom.parse(os.path.join(path_xml, xmlFile))
root = dom.documentElement
# 修改path
oldpath = root.getElementsByTagName('path_xm')
# print(oldpath[0].firstChild.data)
newpath = path_img + xmlFile[0:6] + ".jpg"
oldpath[0].firstChild.data = newpath
# 修改folder
oldfolder = root.getElementsByTagName('folder')
oldfolder[0].firstChild.