环境:win10 py36 cuda10 pytorch1.0
源代码:pytorch1.0
(如果是pytorch0.4可以看pytorch0.4)
两个代码都是linux下的,win10坑很多……
1、遇到的cl.exe找不到或者.cu导致setup.py编译不成功
网上解决问题很多 ,参考链接:参考1以及参考2 修改setup.py文件及一些ROIPooling等cu文件。
也可以去源码的issue将faster-rcnn.pytorch-pytorch-1.0\lib\model\csrc\cuda中的两个ROIXXXXX.cu进行修改。
要修改的就是这两个.cu文件的dim3 grid函数
首先,添加一个函数:
int ceil_div(int a, int b):
return (a + b - 1) / b;
再将原来的dim3 grid函数修改为:
dim3 grid(std::min(ceil_div((int)grad.numel(), 512), 4096));
然后在执行一下 python setup.py build develop或者python setup.py install。
实在不行,重装cuda或者vs2017我重装完了路径都不用配置直接好了。
2、数据集及预训练模型准备
这个比较坑人,要下voc2007和coco太慢了,不如自制……我使用的是男票给“基情”提供的东北大学的缺陷数据集,一共20m,voc格式,很多博客有链接,就不放上来了。具体怎么准备,看这篇博客。
还有就是预训练模型的准备,这个虽然作者给出的链接中的.pth文件后缀是caffe但是不影响使用,各种预训练模型参考pytorch预训练模型。
3、代码修改及代码解读
因为在win10下进行训练,相对于linux下面可以使用带参数命令行进行跑代码,很多参数可以在def parse_args()中进行修改,改变defaul值即可,比如使用cuda的话,
parser.add_argument('--cuda', dest='cuda', help='whether use CUDA',default=True, action='store_true')
在原来的基础上加了default=True,不然跑的时候报错(可能我脸黑)。
代码解读
[1]名词解释:AP及mAP
参考知乎
AP:Average Precision
Precision:准确率
Recall:召回率
None | Postive(置信度) | Negative(置信度) |
---|---|---|
IOU>X | TP | TN |
IOU<X | FP | FN |
Preecison=TP/(TP+FP)
Recall=TP/(TP+FN)
Interplolated AP(Pascal Voc 2008 的AP计算方式)
mAP(coco):AP值在所有类别下的均值
[2]代码解读,引用作者提供的口令(应该叫他什么……)
CUDA_VISIBLE_DEVICES=$GPU_ID python trainval_net.py \
--dataset pascal_voc --net res101 \
--bs $BATCH_SIZE --nw $WORKER_NUMBER \
--lr $LEARNING_RATE --lr_decay_step $DECAY_STEP \
--cuda
-net :backbone 可以是vgg也可以是resnet
-bs :batch size,一次训练所选取的样本数,参数更新所需要损失函数一组数据加权得到的,这一组数据的数量就是batchsize。
-nw :worker number 我也不知道是啥……
-epoch :1个epoch等于使用训练集中的全部样本训练一次,通俗的讲epoch的值就是整个数据集被轮几次
在网上发现一个大大写的详解,搬运一下!
def parse_args():
"""
Parse input arguments
"""
parser = argparse.ArgumentParser(description=