faster rcnn 学习 搭建

本文详细介绍Faster R-CNN的搭建流程,包括代码克隆、环境配置、数据准备、模型训练及测试,适合初学者快速入门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载 https://blog.youkuaiyun.com/char_QwQ/article/details/80980505

一、克隆代码

git clone https://github.com/endernewton/tf-faster-rcnn.git

二、根据你的显卡更改下对应的架构。

在tf-faster-rcnn/lib/setup.py的第130行,Tesla K40m对应的是sm_35
三、编译Cython

仍然在lib路径下,编译Cython模块(确保你已经安装了easydict,如果没有,pip install easydict):

    make clean
    make
    cd ..

四、安装COCO API。

这点按照GitHub的步骤走就ok,没啥错误:

    cd data
    git clone https://github.com/pdollar/coco.git
    cd coco/PythonAPI
    make
    cd ../../..

五、下载数据:

    Download the training, validation, test data and 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

    Extract all of these tars into one directory named VOCdevkit

        tar xvf VOCtrainval_06-Nov-2007.tar
        tar xvf VOCtest_06-Nov-2007.tar
        tar xvf VOCdevkit_08-Jun-2007.tar

    It should have this basic structure

        $VOCdevkit/                           # development kit
        $VOCdevkit/VOCcode/                   # VOC utility code
        $VOCdevkit/VOC2007                    # image sets, annotations, etc.
        # ... and several other directories ...

    Create symlinks for the PASCAL VOC dataset

        cd $FRCN_ROOT/data
        ln -s $VOCdevkit VOCdevkit2007

这里有点小问题,我的软连接似乎不起作用了,于是我直接把VOCdevkit文件夹拷贝到tf-fater-rcnn/data路径下,并重命名为VOCdevkit2007,记得删除那个VOCdevkit的软连接。
六、下载预训练模型

需要翻墙,如果翻不了墙就从网盘里下吧,我存网盘了。链接:预训练模型 密码:8ahl
七、建立预训练模型的软连接

在tf-faster-rcnn目录下建立output文件夹,并使用软连接来使用预训练模型,这里按照步骤走就行,没啥问题:

    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 ../../..

八、对一些图片进行测试。

仍然按步骤走:

    GPU_ID=0
    CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/demo.py

九、使用训练好的faster模型对数据进行测试。

这里有点地方需要改:首先把 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])

然后再按步骤运行就ok了!

    GPU_ID=0
    ./experiments/scripts/test_faster_rcnn.sh $GPU_ID pascal_voc_0712 res101

测试结果:

十、训练模型

 

在data目录下创建一个imagenet_weights文件夹,解压权重数据并把解压后的vgg_16.ckpt重命名为vgg16.ckpt,因为后面在调用权重数据的时候名字需要对应的上。

开始训练(这里最后的vgg16就是对应的权重数据,名字要对的上,0是GPU的ID,pascal_voc是训练使用的数据集):

./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc vgg16

为了节省时间并排除错误,我把迭代次数只设置了20次,把./experiments/scripts/train_faster_rcnn.sh里的第22行把ITERS=70000改成ITERS=20,同时记得把./experiments/scripts/test_faster_rcnn.sh的ITERS也改成20。

注意:因为我使用的是pascal_voc数据集,所以只需要更改对应数据集的ITERS的就行了,训练和测试的都要改,因为在train_faster_rcnn.sh的末尾会执行test_faster_rcnn.sh。

训练过程的loss:

训练结果:

可以看到,结果都很差,因为就迭代了20轮。
十一、替换自己的数据

在替换数据之前,先介绍一下标注工具,我用的labelImg对数据进行标注的,其界面如下:

具体怎么安装以及用法就不介绍了,GitHub上已经介绍的很详细了。然后介绍一下xml数据格式:

    <annotation>
        <folder>fire_data</folder>
        <filename>000001.jpg</filename>    #图像名称
        <path>/home/htu/yc/fire_data/000001.jpg</path>    #路径
        <source>
            <database>Unknown</database>
        </source>
        <size>
            <width>450</width>    #宽
            <height>253</height>    #高
            <depth>3</depth>    #RGB三通道
        </size>
        <segmented>0</segmented>
        <object>
            <name>fire</name>    #目标名称
            <pose>Unspecified</pose>    
            <truncated>0</truncated>
            <difficult>0</difficult>
            <bndbox>    #BBOX值
                <xmin>146</xmin>
                <ymin>22</ymin>
                <xmax>207</xmax>
                <ymax>60</ymax>
            </bndbox>
        </object>
    </annotation>

其中需要说明的是:图像名称一定要命名为000001.jpg,以及xml也要命名为000001.xml格式(事实上如果你对图像名称是六位数字组成的,xml也会自动生成六位数字)。我之前用的是1,2,3,4这样命名,结果运行总是会提示Keyerror:"1"。

一般出现keyerror的原因有两种,一是图像以及xml命名不符合要求,这就需要你重命名;二是标注的object信息有误,什么意思呢?拿我的数据来说,我是对火焰进行标注的,所以label是fire,如果因为操作失误导致fire变成如w或者其他字母,就会提示keyerror。为什么会是w呢?因为标注的快捷键是w,所以有时候会因为粗心把w写到label里。我就犯过这样的错误,这样的错误排除起来很麻烦,还需要再写一段代码,对xml的所有name节点的值进行访问,如果不是你的label,把对应的索引记录下来,手动再修改。

xml数据准备完毕后,需要划分训练验证以及测试集,这里我使用的别人写好的划分代码(读书人的事,怎么能叫偷呢?)Creat_FRCNN_DataSet,是matlab的,下载后更改下VOC2007xml.m中前四行的路径就能用了。执行结果会按比例对你的数据划分为训练集验证集以及测试集,同时会生成四个txt文档,分别是test.txt,train.txt,trainval.txt,val.txt。

训练验证测试集划分之后,就开始替换自己的数据了(讲了那么多废话终于到正点了,其实主要是怕自己以后忘记了,脑子不太好用了)。

首先,在tf-faster-rcnn/lib/datasets目录下的pascal_voc.py里第36行更改自己的类别,'__background__'切记不可删掉,把后面的原来的20个label换成自己的,不用更改类别数目,也没有地方可以更改。

然后把你的xml文件放置在tf-faster-rcnn/data/VOCdevkit2007/VOC2007/Annotations路径下,记得把原来的删掉;同时把你的jpg文件放在tf-faster-rcnn/data/VOCdevkit2007/VOC2007/JPEGImages路径下,xml和jpg替换完了,现在该txt了,把之前matlab生成是四个txt文档放在tf-faster-rcnn/data/VOCdevkit2007/VOC2007/ImageSets/Layout 和 tf-faster-rcnn/data/VOCdevkit2007/VOC2007/ImageSets/Main。

在开始训练之前,还需要把之前训练产生的模型以及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

因为我只训练了20轮,而且因为写博客需要,数据总共就100个,所以效果很差,不过能跑通就行了。

 

### Fasterrcnn 环境搭建与安全帽检测教程 #### 1. 准备工作 安装必要的依赖库,确保计算机配置满足深度学习框架的要求。对于Faster R-CNN模型而言,推荐使用GPU加速来提高训练效率。 ```bash pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113 ``` 此命令会依据CUDA版本调整URL中的`cu113`部分以匹配本地环境[^2]。 #### 2. 数据准备 收集并整理用于训练的数据集,包括但不限于正负样本图片及其标签文件。针对安全帽检测项目,需特别注意采集不同场景下的工人头像作为数据输入,并通过工具完成边界框标注工作。 #### 3. 配置环境变量 设置PYTHONPATH以便能够访问自定义模块路径: ```bash export PYTHONPATH=$PYTHONPATH:/path/to/faster_rcnn_project/ ``` 此处应替换为实际项目的根目录位置。 #### 4. 下载预训练权重 利用官方提供的ResNet或其他骨干网(pre-trained backbone networks)初始化参数可以加快收敛过程,减少过拟合风险。 ```python import torchvision.models as models model = models.detection.fasterrcnn_resnet50_fpn(pretrained=True) ``` 上述代码片段展示了如何加载带有FPN结构的Faster R-CNN预训练模型实例。 #### 5. 修改配置文件 根据具体应用场景修改默认超参设定,比如batch size, learning rate等;同时指定好类别数目以及对应的名称映射关系。 #### 6. 开始训练 编写简单的脚本来启动整个流程,期间可加入tensorboard监控指标变化趋势辅助调优操作。 ```python from engine import train_one_epoch, evaluate ... for epoch in range(num_epochs): # 训练阶段 train_one_epoch(model, optimizer, data_loader, device, epoch, print_freq=10) # 更新学习率调度器 lr_scheduler.step() # 测试评估性能表现 evaluate(model, data_loader_test, device=device) ``` 以上循环体实现了单轮迭代内的前向传播、反向传播更新及周期性的测试验证逻辑。 #### 7. 推理预测 当模型训练完成后即可进入部署环节,在线服务化接口供前端调用返回最终结果。 ```python def predict(image_path): image = Image.open(image_path).convert('RGB') transform = T.Compose([T.ToTensor()]) img_tensor = transform(image).unsqueeze(0).to(device) model.eval() with torch.no_grad(): prediction = model(img_tensor)[0] boxes = prediction['boxes'].cpu().numpy() labels = prediction['labels'].cpu().numpy() scores = prediction['scores'].cpu().numpy() return boxes, labels, scores ``` 这段函数接受一张待测图像地址作为入口参数,经过一系列处理后输出候选区域坐标列表、所属类目编号数组还有相应的置信度得分向量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值