Day 20 - 重新检视 mAP, F1, IoU, Precision-Recall 精准度

Day 20 - 重新检视 mAP, F1, IoU, Precision-Recall 精准度

AlexeyAB/darknet 版本的 YOLO 最被称羡的就是可以输出很多研究需要用的评估数据,因为有这些数据才有办法评量目前的准确度是否足够使用者满意,安装方式可以参照 Day 19 - 安装 AlexeyAB/darknet ON Amazon Linux 2,下图是安装 AlexeyAB/darknet 版本的 YOLO 的档案结构图,介绍一下比较重要的档案或文件夹:

  • build_release: 这是先前用来编译 AlexeyAB/darknet 原始档的暂时文件夹,编译后就可以删除。
  • cfg:一些常用来评估用的资料集的网路结构设定档,如 yolov3, yolov4, coco, voc 等。
  • darknet: AlexeyAB/darknet 的主要执行档。
  • darknet_image.py, darknet.py, darknet_video.py:透过呼叫 libdarknet.so ,可以在 Python 中直接调用 AlexeyAB/darknet 的一些主要功能,如训练、测试、载入网路结构等。
  • libdarknet.so: AlexeyAB/darknet 使用 c 语言所撰写的共享函式库,可供其他程式语言呼叫。
  • predictions.jpg: AlexeyAB/darknet 测试结果,会将便是结果直接画在图上,但跟 data 这个文件夹相关连,没有这个文件夹的话,在 Joseph/darknet 的版本会直接出错,无法运行;在 AlexeyAB/darknet 的版本方块框会正确标示出来,只是物件名称部分会是一堆黑线。
  • yolov4.weights: 这是 yolov4 事先训验好的权重模型,需要额外下载

在这里插入图片描述
图 1、AlexeyAB/darknet 版本的 YOLO 的档案结构图

因为要将先前用 Joseph/darknet 训练好的权重模型直接拿用套用,因为我们只是需要更多验证或是测试期间的数据,所以就不重新训练模型。最简单的方法就是把 AlexeyAB/darknet 的 darknet 这个主程式搬到先前安装的环境,请参考 Day 14 - 安装与执行 YOLO 以及 Day 15 - 说明 YOLO 相关设定,下图为使用自己图片来训练的的档案结构图,说明一下相关文件:

  • cfg: 用来存放自定义网路结构组态档 yolov3.cfg,以及一些图片配置档。
  • data: 这是为了测试画图用,是直接使用 Joseph/darknet 的内容。
  • labels: 自己的图片训练集,包含图片档和标签档。
  • utils: 自己撰写的一些工具程式,如切分训练集与测试集。
  • weights:训练后的权重模型档。

在这里插入图片描述
图 2、使用自己图片来训练的的档案结构图

首先检查 darknet 的执行是否包含一些共享函式库,使用以下指令检查,下图中显示出来的结果为虽然会用到很多共享函式库,但都不在 AlexeyAB 这个文件夹内,所以直接复制过去就可以使用了。

ldd darknet
cd ~/fishRecognition/fishsite/FishRecognition/
cp ~/AlexeyAB/darknet .

在这里插入图片描述
图 3、AlexeyAB/darknet的共享函式库

运行先前的测试指令,可以发现跟先前的 Joseph/darknet 相比,输出结果是一样的,只是内容多了一点,而且看以下的讯息,似乎会自动弹出 OpenCV 的图型画面,来显示结果,但因为是在远端 EC2 的文件介面的 Amazon Linux 上运行,所以会出现 OpenCV exception 的错误讯息。

./darknet detector test cfg/obj.data cfg/yolov3.cfg weights/yolov3.backup ./labels/00-frame-608x608-0030.jpg

在这里插入图片描述
图 4、AlexeyAB/darknet 使用 yolov3 的测试结果

以下是尝试没有 data 这个文件夹的测试结果,如下图所示,左边是有 data 这个目录的,右边是把 data 改成 data~ 后的结果。

mv data data~
./darknet detector test cfg/obj.data cfg/yolov3.cfg weights/yolov3.backup ./labels/00-frame-608x608-0030.jpg

在这里插入图片描述
图 5、比较使用 data 与没有的测试图片

以下是 AlexeyAB/darknet 才可使用的语法,分别是显示测试资料的 mAP, recall,结果分别如下图分别显示测试图片针对个类别的 ap ,以及所有类别的 mAP, precision, recall, F1-score:还有个别图片的 recall 值。

./darknet detector map cfg/obj.data cfg/yolov3.cfg weights/yolov3.backup -iou_thresh 0.75 
./darknet detector recall cfg/obj.data cfg/yolov3.cfg weights/yolov3.backup 

在这里插入图片描述
图 6、测试图片的 mAP, precision, recall, F1-score

在这里插入图片描述
图 7、测试图片中个别图片的 recall 值

新增新的测试集 cfg/new-test.txt 来进行验证。

cfg/new-test.txt
./labels/00-frame-608x608-0004-1.jpg
./labels/02-frame-608x608-0091-1.jpg

将所有的图片改个名字,进行新的测试集的测试,并要求显示出物件方块框的所在座标。

cd labels
cp 00-frame-608x608-0004.jpg 00-frame-608x608-0004-1.jpg
cp 00-frame-608x608-0004.txt 00-frame-608x608-0004-1.txt
cp 02-frame-608x608-0091.jpg 02-frame-608x608-0091-1.jpg
cp 02-frame-608x608-0091.txt 02-frame-608x608-0091-1.txt
cd ..
./darknet detector map cfg/obj.data cfg/yolov3.cfg weights/yolov3.backup  -dont_show -save_labels -ext_output < cfg/new-test.txt > result_newtest.txt

在这里插入图片描述
图 8、新增测试图片

在下图可以看出,除了显示辨识的判断机率外,还会显示物体的方块框座标。

在这里插入图片描述
图 9、测试结果

此外,AlexeyAB/darknet 可以在验证时对每一个类别产生一份验证报告,要先新增一个 results 目录,接着执行以下语法,便会在 results 目录中生成三份验证报告,因为这个练习只有三种辨识类别。

./darknet detector valid cfg/obj.data cfg/yolov3.cfg weights/yolov3.backup

./results/comp4_det_test_Altolamprologuscompressiceps.txt

00-frame-608x608-0004 0.695091 148.112183 405.041626 393.484497 485.914856
00-frame-608x608-0004 0.985318 44.345947 214.757629 326.162659 374.902832
00-frame-608x608-0004 0.045742 1.000000 216.310822 534.158752 384.061310
00-frame-608x608-0004 0.999615 38.003654 385.539154 208.513092 464.205353
00-frame-608x608-0004 0.990907 319.298859 388.642517 373.815460 433.122864
00-frame-608x608-0004 0.005802 137.095795 373.144440 366.280151 515.184265
00-frame-608x608-0004 0.003790 106.269424 242.552902 285.968262 334.292328
00-frame-608x608-0004 0.001615 73.208344 205.587555 247.985931 384.088348
00-frame-608x608-0004 0.001459 212.050888 374.788483 288.383789 412.966339
02-frame-608x608-0091 0.007312 105.508369 321.543884 170.846069 405.676208
02-frame-608x608-0091 0.001923 311.552612 233.153625 423.720398 279.820404
02-frame-608x608-0091 0.008265 135.432083 243.298737 185.704086 311.564911
02-frame-608x608-0091 0.003497 368.839294 292.943481 416.401672 344.871155
02-frame-608x608-0091 0.001466 184.931564 264.106323 231.303848 323.692810
02-frame-608x608-0091 0.001011 117.095284 334.017792 162.991821 392.841461
...部分内容

最后再介绍一个语法,据说是针对 AWS EC2 的专属语法,可以在训练期间就可以看到 mAP 以及 损失 Loss 图型

./darknet detector train cfg/coco.data yolov4.cfg yolov4.conv.137 -dont_show -mjpeg_port 8090 -map

然后打开浏览器,输入网址 http://[EC2_PUBLIC_IP]:8090 就可以看到。

参考资料

  • Yolo v4, v3 and v2 for Windows and Linux, https://github.com/AlexeyAB/darknet
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值