Darknet框架复现Yolo v3 & coco API评估 & coco 官网提交评估

在这里插入图片描述
快捷入口: YOLO官网yolov3_paper、嘿芝麻的Github。

【写在前面】
本博客详述率darknet训练yolo v3的全过程并采用cocoAPI对结果进行评估。

满满干货,不容错过~


一、前期准备

1 安装Darknet环境

1.1 下载源码

git clone https://github.com/pjreddie/darknet.git
cd darknet

需要注意的地方:
【1】Compiling With CUDA: 使用 GPU,需要在Makefile文件中将GPU设置为1,如下修改:

GPU=1

【2】 Compiling With OpenCV:使用OpenCV,需要在Makefile文件中将OPENCV设置为1,如下修改:

OPENCV=1

1.2 编译源码

make

此时将会看到一系列编译信息如:

mkdir -p obj
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
.....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast -lm....

!需要注意的地方:
如果报错一般是环境变量的问题,可以检查cuda、nvcc等路径。(欢迎留言交流)

1.3 测试是否安装成功

./darknet

此时将会看到信息如:

usage: ./darknet <function>

2 下载COCO数据集

论文使用的是COCO2014_trainCOCO2014_validation

2.1 使用官方shell脚本下载

在darknet目录下执行:bash ./scripts/get_coco_dataset.sh;就会自动下载。
但是这个数据集太大,如果中途中断或者特殊原因没有全部下载完成的盆友们请看 2.2 使用一步一步命令下载,如果顺利完成请跳过。

2.2 使用一步一步命令下载

2.2.1 创建images文件夹
mkdir images
cd images
2.2.2 开始下载并解压
# Download Images
wget -c https://pjreddie.com/media/files/train2014.zip
wget -c https://pjreddie.com/media/files/val2014.zip

# Download COCO Metadata
wget -c https://pjreddie.com/media/files/instances_train-val2014.zip
wget -c https://pjreddie.com/media/files/coco/5k.part
wget -c https://pjreddie.com/media/files/coco/trainvalno5k.part
wget -c https://pjreddie.com/media/files/coco/labels.tgz

#Unzip
unzip -q train2014.zip
unzip -q val2014.zip 
tar xzf labels.tgz
unzip -q instances_train-val2014.zip
2.2.3 创建 Image Lists

images路径下运行命令:

paste <(awk "{print \"$PWD\"}" <5k.part) 5k.part | tr -d '\t' > 5k.txt
paste <(awk "{print \"$PWD\"}" <trainvalno5k.part) trainvalno5k.part | tr -d '\t' > trainvalno5k.txt

此时会在该路径下生成两个文件:5k.txttrainvalno5k.txt
!需要注意的地方:
生成完这两个文件后请务必检查一下文件内容,每一行表示的是图片的路径。(欢迎留言交流)

3 文件夹布局

3.1 images文件夹布局

各位盆友参照如下保存路径设置存放。
在这里插入图片描述
!需要注意的地方:
【1】细心的盆友应该发现了我路径有COCO_train2014_000000167126.jpg这样子的两张图片,由于有我在训练的时候报错 “Syncing… Cannot load image xxxxxxxxxx…STB Reason: expected marker”. 这张图片损坏了(你可以下载下来打开看看的确是损坏的图片),如果有需要的可以到这里下载:https://msvocds.blob.core.windows.net/images/262993_z.jpg。对应的github的issue是:https://github.com/pjreddie/darknet/issues/312。
==============>所以,报错之前请各位忽略上图那两张“COCO_train”的图片信息。

3.2 数据集部署Darknet

上一步后数据就整理好了,现在需要制作软连接或者将数据移动到该有的地方啦!!
制作软连接:

ln -s /path/images /path/darknet-master/data/coco

二、开始训练

1 确认配置路径

1.1 检查文件:cfg/coco.data

在这里插入图片描述
需要检查 trainvalid的路径。

1.2 检查文件:cfg/yolo.cfg

在这里插入图片描述
红框上面的配置是测试时候用的,确认已经注释。

1.2 下载darknet53预训练权重

wget https://pjreddie.com/darknet/imagenet/#darknet53

2 开始训练

【1】 创建**_log**文件夹用来保存日志文件
【2】运行命令:

./darknet detector train cfg/coco.data cfg/yolov3.cfg model/darknet53.conv.74 -gpus 0,1,2,3 2>&1 | tee _log/train_yolov3_201910242151.log

可选参数:-clear 1(默认0)进行ft时不考虑模型原本的迭代次数。
在这里插入图片描述
一大堆日志,这里就不说明了,有不清楚的也欢迎各位留言交流。

训练结束后:
在这里插入图片描述
 82,94,106为一组,一共有16(subdivision)组,每组又包含了4(batch/subdivision)张图片;
 Region Avg IOU: 表示在当前subdivision内的图片的平均IOU,代表预测的矩形框和真实目标的交集与并集之比;
 Class: 标注物体分类的正确率,期望该值趋近于1;
 Obj: 越接近1越好,与No Obj相对;
 count:所有的当前subdivision图片中包含正样本的图片的数量;
 1:第1个batch;
 578.041992:总损失;
 578.041992 avg:平均损失;
 0.000000 rate:当前学习率;
 1.394934 seconds:当前batch训练所花的时间;
 256 images:目前为止参与训练的图片总数;
在这里插入图片描述

三、评估

1.1 安装COCO API

git clone https://github.com/cocodataset/cocoapi.git
cd coco/PythonAPI
make

!需要注意的地方:
添加环境变量:export PYTHONPATH=/home/tencent/Documents/cocoapi/PythonAPI:$PYTHONPATH

测试一下:
在这里插入图片描述

1.2 进行评估

1.2.1 修改配置文件cfg/yolo.cfg

在这里插入图片描述
这个Testing的配置要是未注释的,下面的Training的配置注释一下哈。

1.2.2 运行评估代码

【0】运行需要检查一下该目录下是否有results文件夹,如果没有需要创建一下。
测试集一共有20288张图片,在官网下载的测试集包含了test-dev和test- challenge两部分,根据官网下载页面的Testing Image info 文件进行选择。

./darknet detector valid cfg/coco.data cfg/yolov3.cfg backup/yolov3_final.weights

运行之后,在results文件夹会生成coco_results.json文件。
可选参数:-out a/b(结果默认保存在results文件夹里coco_results.json)此例修改为结果保存在a文件夹里b.json。

提交官网在线测试
test-dev 2015 – 至今的测试集均一致,只是官网每年更新入口,如今年的是2019-test。
将json文件重新命名,命名规则为:[type][testset][alg]_results.json

[type]challenge type: "detections", "person_keypoints", or "stuff" 
[testset]test split: "val2017", "test-dev2017", or "test-challenge2017" 
[alg]your algorithm name

直接将结果json文件压缩为zip文件,提交官网测试即可。

以下为本地采用coco api对val数据集进行评估:

1.2 创建评估文件:val.py

import matplotlib.pyplot as plt
from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval
import numpy as np
import skimage.io as io
import pylab,json
pylab.rcParams['figure.figsize'] = (10.0, 8.0)
def get_img_id(file_name):
    ls = []
    myset = []
    annos = json.load(open(file_name, 'r'))
    for anno in annos:
      ls.append(anno['image_id'])
    myset = {}.fromkeys(ls).keys()
    return myset
if __name__ == '__main__':
    annType = ['segm', 'bbox', 'keypoints']#set iouType to 'segm', 'bbox' or 'keypoints'
    annType = annType[1] # specify type here
    cocoGt_file = '/home/tentcent/Documents/valuation_yolo/json/instances_val2014.json'
    cocoGt = COCO(cocoGt_file)#取得标注集中coco json对象
    #cocoDt_file = '/home/tentcent/Documents/valuation_yolo/json/coco_results_origin.json'
    #cocoDt_file = '/home/tentcent/Documents/valuation_yolo/json/coco_results_ourtrain.json'
    cocoDt_file = '/home/tentcent/Documents/valuation_yolo/json/coco_results_pretrain.json'
    print("Valuation: {}".format(cocoDt_file.split('/')[-1]))
    imgIds = get_img_id(cocoDt_file)
    print(len(imgIds))
    cocoDt = cocoGt.loadRes(cocoDt_file)#取得结果集中image json对象
    imgIds = sorted(imgIds)#按顺序排列coco标注集image_id
    imgIds = imgIds[0:5000]#标注集中的image数据
    cocoEval = COCOeval(cocoGt, cocoDt, annType)
    cocoEval.params.imgIds = imgIds#参数设置
    cocoEval.evaluate()#评价
    cocoEval.accumulate()#积累
    cocoEval.summarize()#总结

!需要注意的地方:
【1】 cocoGt_filecocoDt_file 两个变量需要自行修改一下哈。
【2】 cocoGt_fileinstances_val2014.json文件路径(之前下载coco数据集的时候就有,不清楚可以回去看看); cocoDt_file :上一步评估操作生成的coco_results.json文件路径。
代码运行结果:
在这里插入图片描述


最后,欢迎各位盆友们点赞收藏评论交流喔~~

评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值