毕设日志——增加多尺度对应的不一样scale的RPN网络

4.25

错误
毕设日志——增加多尺度对应的不一样scale的RPN网络_第1张图片


4.27

修改anchor不同的RPN,即conv5-3和conv4-3融合
本来想运行一个epoch,结果运行成下面的没有指定epoch个数的:

CUDA_VISIBLE_DEVICES=1 python trainval_net.py --dataset pascal_voc --net vgg16 --bs 1 --nw 1  --cuda

以后记住用:

CUDA_VISIBLE_DEVICES=0 python trainval_net.py --dataset pascal_voc --net vgg16 --epochs 1 --bs 1 --nw 1 --cuda >output.log 2>&1 &
# 或者
CUDA_VISIBLE_DEVICES=0 python trainval_net.py --dataset pascal_voc --net vgg16 --epochs 1 --bs 1 --nw 1 --cuda 

然后八点生成了第一个epoch的结果:

毕设日志——增加多尺度对应的不一样scale的RPN网络_第2张图片
之后第二个epoch看loss=0.3095效果还不错:
毕设日志——增加多尺度对应的不一样scale的RPN网络_第3张图片

测试

python test_net.py --dataset pascal_voc --net vgg16 --checkepoch 1 --checkpoint 13463 --cuda

毕设日志——增加多尺度对应的不一样scale的RPN网络_第4张图片

demo

python demo.py --net vgg16 --checksession 1 --checkepoch 1 --checkpoint 13463 --cuda

效果好像变差了:
左边是新的,右边是4.21结果
毕设日志——增加多尺度对应的不一样scale的RPN网络_第5张图片
毕设日志——增加多尺度对应的不一样scale的RPN网络_第6张图片
毕设日志——增加多尺度对应的不一样scale的RPN网络_第7张图片

  • 可以看到,更小的依然检测不到


4.27晚

  • 修改config.py里面的train和test的参数:
# Scale to use during training (can list multiple scales)
# The scale is the pixel size of an image's shortest side
#__C.TRAIN.SCALES = (600,) # wjg,4.27
__C.TRAIN.SCALES = (375,)

# Max pixel size of the longest side of a scaled input image
#__C.TRAIN.MAX_SIZE = 1000 # wjg 4.27
__C.TRAIN.MAX_SIZE = 1200

# Scale to use during testing (can NOT list multiple scales)
# The scale is the pixel size of an image's shortest side
#__C.TEST.SCALES = (600,)
# wjg 4.27
__C.TEST.SCALES = (375,)

# Max pixel size of the longest side of a scaled input image
#__C.TEST.MAX_SIZE = 1000
# wjg 4.27
__C.TEST.MAX_SIZE = 1200
  • 增加conv3-3对应的RPN
  • 修改3个RPN的anchor scale分布
  • 明天可以考虑自适应修改(kmeans???)anchor

4.27-28

CUDA_VISIBLE_DEVICES=0 python trainval_net.py --dataset pascal_voc --net vgg16 --epochs 6 --bs 1 --nw 1 --cuda >output.log 2>&1 &

记住是1961号python进程:
毕设日志——增加多尺度对应的不一样scale的RPN网络_第8张图片
毕设日志——增加多尺度对应的不一样scale的RPN网络_第9张图片
4.28早上结果:
毕设日志——增加多尺度对应的不一样scale的RPN网络_第10张图片
毕设日志——增加多尺度对应的不一样scale的RPN网络_第11张图片

测试

python test_net.py --dataset pascal_voc --net vgg16 --checkepoch 6 --checkpoint 13463 --cuda

毕设日志——增加多尺度对应的不一样scale的RPN网络_第12张图片
检测结果还不错:

AP for pedestrian = 0.6944
AP for car = 0.8666
AP for truck = 0.9036
AP for tram = 0.8095
AP for van = 0.8804
Mean AP = 0.8309
~~~~~~
Results:
0.694
0.867
0.904
0.809
0.880
0.831
demo
python demo.py --net vgg16 --checksession 1 --checkepoch 6 --checkpoint 13463 --cuda

效果在KITTI的testing集合上还可以,对小目标有提升:
毕设日志——增加多尺度对应的不一样scale的RPN网络_第13张图片
毕设日志——增加多尺度对应的不一样scale的RPN网络_第14张图片
毕设日志——增加多尺度对应的不一样scale的RPN网络_第15张图片
毕设日志——增加多尺度对应的不一样scale的RPN网络_第16张图片
毕设日志——增加多尺度对应的不一样scale的RPN网络_第17张图片
毕设日志——增加多尺度对应的不一样scale的RPN网络_第18张图片
毕设日志——增加多尺度对应的不一样scale的RPN网络_第19张图片
毕设日志——增加多尺度对应的不一样scale的RPN网络_第20张图片

4.28总结

  • 我在KITTI数据集上用faster rcnn和修改之后的faster rcnn分别进行了测试比较
    针对小目标在高层特征下不易检测出的问题,经VGG16提取特征,将其中conv4_3提取的特征送入和conv5_3各自的RPN,之后分别通过RPI

  • pooling后再一起送入分类器 两层feature map对应的RPN使用的anchor的scale不同

  • 没有增加RPN之前,测试5类,epoch=6的测试结果mAP是0.8428,增加RPN之后为0.8309

  • 但是从图片效果来看,对图片中更小目标的检测效果有提高

  • 下一步我考虑:

  • 将conv3_3层的feature map也加入一个anchor scale更小的RPN是否会有提升。

  • 参考yolo v2中的聚类方法获取anchor size的方法,在不同层feature map上能不能获得比手工指定anchor scale更好的效果。

  • 之前老师说KITTI不够multi scale,我目前只尝试了KITTI,在数据集的使用和处理方面不知道如何能有所改进。

你可能感兴趣的:(毕业设计,faster,rcnn)