论文及代码来源:https://github.com/PeizeSun/SparseR-CNN
1. 环境配置
环境名如下:
1.1 将anconda的安装源修改为清华的镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes
// 中科院也就可以
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
conda config --set show_channel_urls yes
// 把源换回来
conda config --remove-key channels
1.2 安装pytorch
论文中有要求
PyTorch≥1.5和torchvision的PyTorch安装相匹配,我这里安装的是1.7
conda install pytorch torchvision torchaudio cudatoolkit=10.1
【注】cuda的版本要对应,不要错了,可以用命令行
vim ~/.bashrc # 查看去这个配置文件中的路径,看安装的cuda版本
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
1.3 在SparseR-CNN目录下运行setup
这一步应该也是运行装一些相关的包。
cd SparseR-CNN
python setup.py build develop
1.4 漏下了一个scipy的包
问题:No module named ‘scipy’
在你想要运行代码的时候,你发现还漏了一个包,可能是当时的脚本跑起来的,有个网不好,没下载。
(但我保险起见,新建了两次,发现,是都没有下载的)
conda install scipy
2. 训练和测试过程
2.1 图片和标注信息的数据集下载
可以看到我们在训练过程中需要下载coco的数据集,,以下是下载的网址:
训练集图片:http://images.cocodataset.org/zips/train2017.zip
验证集图片:http://images.cocodataset.org/zips/val2017.zip
测试集图片:http://images.cocodataset.org/zips/test2017.zip
训练集、验证集标注信息:http://images.cocodataset.org/annotations/annotations_trainval2017.zip
http://images.cocodataset.org/annotations/stuff_annotations_trainval2017.zip
http://images.cocodataset.org/annotations/panoptic_annotations_trainval2017.zip
下载完成后,我们将数据放在datasets中的coco中。同时coco文件中还需要val2017和train2017的图片。
最后如下所示:
2.2 跑模型
根据GitHub上的命令行跑代码,我这里有一块1080ti的显卡,所以这里设置成1。
python projects/SparseRCNN/train_net.py --num-gpus 1 \
--config-file projects/SparseRCNN/configs/sparsercnn.res50.100pro.3x.yaml
跑的时候发现,内存溢出了?然后就去找到他的batchsize修改,可以找到config中修改IMS_PER_BATCH: 16为1,然后去跑代码没有溢出情况。
3. 参数说明
因为这是我跑的第一个目标检测,所以下面参数进行说明,参考了还是那个B站大佬对这个的解说视频https://www.bilibili.com/video/BV1ez4y1X7g2
3.1 TP、FP、FN、Precision、Recall
举了个例子说:
比如:我的confidence是采取了0.89,那么我的TP=2,我的FP,因为没错的,就是0,那么FN=5,因为我confidence取了0.89,小于0.89就都算没有检测到的。
再比如:我的confidence是采取了0.66,那么我的TP=4,我的FP=1,因为有个错了,就是1,那么FN=3,因为我confidence取了0.66,小于0.66就都算没有检测到的是2个,再加上有1个不是错了吗?所以等于3。至于查准率,查全率看上图的公式。
3.2 AP以及mAP
召回率取最高准确率的召回率,(别问我为什么这么做,定义就是这样)可以看到AP就是上图阴影的面积。这一个AP比如说就是我一个猫的分类的,mAP呢,就是我所有分类的AP的求和取平均。如果我分了60个类,我第一个猫的AP是a,我第二个狗的AP是b…这样下去,60个AP加起来除60就是我的mAP
论文中跑出来的是数据解释下:
这张是我实际跑出来的模型最终过测试集的样子。
官网给出的指标的解释如下:
第一个就是根据 IoU = 0.5 0.75的一个标准,第一个中第一个AP值的是0.5到0.95之间每个间隔0.05的意思;这里的AP就是我们刚刚说的mAP。
第二个就是根据范围,从而的出来的AP值,可以看到这个模型更适合用小目标,中目标和大目标的检测。
第三第四和前两个类似,就是变成了召回率而已。至此结束。