这个还可以关联pascal voc等等,但pascal voc主要是分割等,关键点的话就coco,posetrack
下载:https://blog.csdn.net/u014734886/article/details/78830713
This directory contains symlinks to data locations.
1.COCO 数据集文件结构如下
coco
|_ coco_train2014
| |_ .jpg
| |_ ...
| |_ .jpg
|_ coco_val2014
|_ ...
|_ annotations
|_ instances_train2014.json
|_ ...
Symlink the COCO dataset:
ln -s /path/to/coco detectron/detectron/datasets/data/coco
2.否则,大概是这样。
mkdir -p detectron/detectron/datasets/data/coco
ln -s /media/vivian/资料/datesets/coco_train2014 detectron/detectron/datasets/data/coco/
ln -s /media/vivian/资料/datesets/coco_val2014 detectron/detectron/datasets/data/coco/
ln -s /media/vivian/资料/datesets/annotations detectron/detectron/datasets/data/coco/annotations
ln -s a/ b/ 创建软连接
rm -fr xxxx/ 加了个/ 这个是删除文件夹
rm -fr xxxx 没有/ 这个是删除软链接
Our custom minival
and valminusminival
annotations are available for download here. Please note that minival
is exactly equivalent to the recently defined 2017 val
set. Similarly, the union of valminusminival
and the 2014 train
is exactly equivalent to the 2017 train
set. To complete installation of the COCO dataset, you will need to copy the minival
and valminusminival
json annotation files to the coco/annotations
directory referenced above.
我们的自定义minival
and valminusminival
注释可在[此处下载]。 请注意,minival与最近定义的2017年val set完全相同。 同样,valminusminival和2014 train
的联合完全相同于2017 train
set。 要完成COCO数据集的安装,您需要将minival和valminusminival json注释文件复制到上面引用的coco / annotations目录。
注意:这个官网给的格式不是上面的文件结构,我也不知道作者啥意思。不过有个汇总的(官网加这个):
1.注意更改输出文件地址,先新建文件夹outputs,
--output-dir /tmp/detectron-visualizations 为outputs/detectron-visualizations 是测试图片的结果
OUTPUT_DIR outputs/detectron-output 即训练的输出文件夹
2.缓存文件(预训练模型(训练)+PROPOSAL_FILES(Using Precomputed RPN Proposals训练和测试用到)的地址:
detectron/core/config里面的__C.DOWNLOAD_CACHE = '/tmp/detectron-download-cache' 改成'/detectron/pretrained_models'。如果下载好了,在配置文件更改相关地址。
3.关于测试。
1) 自动下载的文件可能不完整。
2) 测试 TEST.WEIGHTS 是train得到的.pkl文件。
3) 用预先训练的rpn来训练时(非端对端),有两种DATASETS和PROPOSAL
DATASETS: ('keypoints_coco_2014_train', 'keypoints_coco_2014_valminusminival')
这个应该就是上面说的valminusminival和2014 train
的联合完全相同于2017 train
set。即上面数据集相当于2017 train
set了
PROPOSAL_FILES: ('.../rpn_person_only_R-50-FPN_1x.yaml.08_10_08.0ZWmJm6F/output/test/keypoints_coco_2014_train/generalized_rcnn/rpn_proposals.pkl','.../test/keypoints_coco_2014_valminusminival/generalized_rcnn/rpn_proposals.pkl')
用来测试/验证的权重时候,rpn模型有两种
DATASETS: ('keypoints_coco_2014_minival',)
PROPOSAL_FILES: ('.../test/keypoints_coco_2014_minival/generalized_rcnn/rpn_proposals.pkl',)
INFO json_dataset.py: 253: Loading proposals from: /home/vivian/HelloWorld/detect_and_track_new/detectron/pretrained_models/35998996/12_2017_baselines/rpn_person_only_R-50-FPN_1x.yaml.08_10_08.0ZWmJm6F/output/test/keypoints_coco_2014_minival/generalized_rcnn/rpn_proposals.pkl
File "/home/vivian/HelloWorld/detect_and_track_new/detectron/detectron/utils/io.py", line 60, in load_object
return pickle.load(f)
EOFError
EOFError是文件找不到 故重新下一个。
我之前是下载完了之后,改了TEST.PROPOSAL_FILES: 的地址,删除未下载完整的,把相应地址改成原来的链接,让其下载
这些参考https://blog.csdn.net/whz1861/article/details/78783597
1、与之前相同,当IoU与Ground Truth的IoU大于0.5时才会被认为有效的RoI,L{_{mask}}只把有效RoI计算进去。
2、采用image-centric training,图像短边resize到800,每个GPU的mini-batch设置为2,每个图像生成N个RoI,对于C4,backbone的N=64,对于FPN作为backbone的,N=512。作者服务器中使用了8块GPU,所以总的minibatch是16,迭代了160k次,初始lr=0.02,在迭代到120k次时,将lr设定到 lr=0.002,另外学习率的weight_decay=0.0001,momentum = 0.9。如果是resnext,初始lr=0.01,每个GPU的mini-batch是1。
3、RPN的anchors有5种scale,3种ratios。为了方便剥离、如果没有特别指出,则RPN网络是单独训练的且不与Mask R-CNN共享权重。但是在本论文中,RPN和Mask R-CNN使用一个backbone,所以他们的权重是共享的。(Ablation Experiments 为了方便研究整个网络中哪个部分其的作用到底有多大,需要把各部分剥离开)
Inference:在测试时,使用C4 backbone情况下proposal number=300,使用FPN时proposal number=1000。然后在这些proposal上运行bbox预测,接着进行非极大值抑制。mask分支只应用在得分最高的100个proposal上。顺序和train是不同的,但这样做可以提高速度和精度。mask 分支对于每个roi可以预测k个类别,但是我们只要背景和前景两种,所以只用k-th mask,k是根据分类分支得到的类型。然后把k-th mask resize成roi大小,同时使用阈值分割(threshold=0.5)二值化
改进分析
姿态估计实验:
举例ResNet50 Multi-GPU 训练步骤:https://blog.csdn.net/zziahgf/article/details/79022490
ResNet50 模型训练主要包括:
采用 brew 创建训练网络和测试网络;
采用 model helper的 CreateDB 来创建图片数据集读取器(database reader);
创建训练函数来基于一张或多张 GPU 进行 ResNet50 模型训练;
创建并行化(parallelized)模型;
循环训练多个 epoches,每个 epoch 中,包括:
对其每个 batch 图片进行模型训练;
运行测试模型;
计算时间,精度,并显示结果.
---------------------
3. 模型创建与训练
3.1 创建 CNN 网络
采用 Caffe2 Operators - ModelHelper 创建CNN网络:
3.2 从 DB 读取数据
reader = catos_model.CreateDB(name, db, db_type)
3.3 图片变换
Caffe2 编译时需要有 opencv
在实际场景中,图片可能有不同的尺寸(size),长宽比(aspect ratios) 以及旋转角度(orientations),因此训练时需要尽可能的使图片包含更多的情况.
3.4 创建 Residual 网络
Caffe2 提供了 resnet 的创建函数:from caffe2.python.models import resnet
3.5 网络初始化
Caffe2 model helper 对象提供了内在函数,用于采用 BP 算法进行网络学习
3.6 梯度优化
如果不采用内存优化,可以减少 batch size,但这里进行了内存优化.
Caffe2 提供了 memonger函数来进行内存优化,重用计算的梯度.
3.7 单 GPU 网络训练
3.8 多 GPU 并行化
Caffe2 的 data_parallel_model及函数 Parallelize_GPU 来实现多 GPU 并行化.
3.9 创建测试模型
类似于训练网络的创建:
ModelHelper - 创建 model helper object,命名为 “test”;
CreateDB - 创建数据读取 reader,命名为 “test_reader”;
Parallelize_GPU - 并行化模型,设置 param_update_builder_fun=None,以跳过 BP;
workspace.RunNetOnce和 workspace.CreateNet - 启动测试网络
3.10 显示过程信息
在每个 epoch 结束后,对网络表现进行检查,记录训练模型和测试模型的精度.
3.11 Multi-GPU 训练及测试