文章目录[隐藏]
一、Kaggle竞赛
在上一篇中说明了Kaggle的开放式比赛的参加和提交结果,然后最近参加并了解了非开放式代码竞赛的过程,从中也收获不少。
二、比赛介绍
1、官网地址
2、比赛简介
以下内容是Google翻译。
本次比赛的目标是通过建立一个在珊瑚礁水下视频上训练的物体检测模型,实时准确地识别海星。您的工作将帮助研究人员识别威胁澳大利亚大堡礁的物种,并采取明智的行动为子孙后代保护大堡礁。
澳大利亚令人惊叹的美丽大堡礁是世界上最大的珊瑚礁,拥有 1,500 种鱼类、400 种珊瑚、130 种鲨鱼、鳐鱼和大量其他海洋生物。
不幸的是,珊瑚礁正受到威胁,部分原因是一种特殊的海星——以珊瑚为食的棘冠海星(或简称 COTS)的数量过多。科学家、旅游经营者和珊瑚礁管理者建立了一个大规模干预计划,将 COTS 爆发控制在生态可持续的水平。
要知道 COTS 在哪里,一种称为“Manta Tow”的传统珊瑚礁调查方法是由一名浮潜潜水员执行的。当被船拖着时,他们目视评估珊瑚礁,停下来记录每 200 米观察到的变量。虽然通常有效,但这种方法面临着明显的局限性,包括操作可扩展性、数据分辨率、可靠性和可追溯性。
大堡礁基金会制定了一项创新计划,以开发新的调查和干预方法,从而在 COTS 控制方面取得重大进展。水下摄像机将收集数千张珊瑚礁图像,人工智能技术可以大大提高珊瑚礁管理者检测和控制 COTS 爆发的效率和规模。
为了扩大基于视频的测量系统,澳大利亚国家科学机构 CSIRO 与 Google 合作开发了创新的机器学习技术,可以准确、高效且近乎实时地分析大型图像数据集。
3、比赛奖励
有两部分奖励,一部分是得分的前五名会得到10000到30000美元不等的奖励,另一部分是tensorflow的额外奖励。
另一部分是使用 Tensorflow 最快的模型将获得额外奖品。(本次比赛由 Google 的 TensorFlow 团队赞助。TensorFlow 团队一直与 CSIRO 密切合作,并计划使用获胜的解决方案来创建用于实时检测 COTS 的设备上模型。)
三、数据集和评估方式
1、数据集
举办方提供了23501张图片,其中4919张图片有对应标注数据,每张图片内可能没有棘冠海星,可能有多个。参赛者可以自行组织数据做为自己的训练集。
找了一张图片,并根据标注绘制在图上。如下图
2、评估方式
因为需要预测的图片是不公开的,约13000张。所以和提交预测结果文件方式不一样的是,需要提交notebook的文件,其中需要加载自己训练好的模型,然后调用官方说明的api,循环得到需要预测的图片,进行预测,然后将预测结果按指定格式传递给api。
大致参考代码如下
# 引入包
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import torch
from tqdm import tqdm
import sys
sys.path.append('../input/tensorflow-great-barrier-reef')
# 调用官方的api初始化
import greatbarrierreef
env = greatbarrierreef.make_env()# initialize the environment
iter_test = env.iter_test() # an iterator which loops over the test set and sample submission
# 加载你自己的模型
model = torch.hub.load('../input/yolo5master/yolov5-master',
'custom',
#path='../input/reef-baseline-fold12/l6_3600_uflip_vm5_f12_up/f1/best.pt',
path='../input/l6-3600-uflip-vm5-f118/best.pt',
source='local',
force_reload=True) # local repo
# 循环进行预测
for idx, (img, pred_df) in enumerate(tqdm(iter_test)):
anno = ''
r = model(img, size=4320, augment=True)
if r.pandas().xyxy[0].shape[0] == 0:
anno = ''
else:
for idx, row in r.pandas().xyxy[0].iterrows():
if row.confidence > 0.35:
anno += '{} {} {} {} {} '.format(row.confidence, int(row.xmin), int(row.ymin), int(row.xmax-row.xmin), int(row.ymax-row.ymin))
pred_df['annotations'] = anno.strip(' ')
env.predict(pred_df)
3、排名说明
排名分公开排行榜和私有排行榜。
公开排行榜是一个参考性质的,分数来源于你的模型在测试数据集上25%的数据上得分的排名,提交预测之后就会显示分数和排名。
私有排行榜是最终的排名,分数来源于你的模型在测试数据集上75%的数据上得分的排名,只有在比赛结束后才会显示,最终排名和公开排行榜可能差别很大。
一般情况你会提交很多次预测,然后你可以选择其中你满意的四个结果进行最终提交(在私有排行榜上去比较),如果你不提交,则按你提交的多次预测中的前四个再公共排行榜上的分数排名自动提交。
4、提交预测
(1)上传数据
可以自定义上传数据集或者训练模型,上传完可以再notebook内调用。(如果上传一直没有进度(可以f12,看看浏览器是否报错),如果报错则考虑科学上网,个人体验是有时需要,有时不需要)
(2)提交结果
每次提交,提交之后都会在Kaggle的服务器上运行(可以选择cpu/gpu,一般选择gpu,免得超时),根据模型的不同运行的时间不一样长。
如下图,第一列是提交的描述等,第二列是状态(失败的话一般都是代码有问题或者超市),第三列是本次提交在私有排行榜上的得分(在比赛结束之前是看不到的),第三列是本次提交在公共排行榜上的得分(不失败就会显示得分)。最后的复选框是可以选择作为最终结果提交。
四、收获和要点
1、心得
说是参赛,其实主要目的还是学习下,很多参赛的人/队伍会分享出来使用的模型、代码、一些思路等等很值得学习。
参加比赛会有一个清晰明确的目标,有明确的目标会让人更有的放矢的去思考尝试,比自己学习尝试成长更快。
2、经验分享
(1)Kaggle提供的gpu有点慢。
(2)每天可以提交5次结果,不要浪费,多进行测试可以对于下一步方向有指导意义,排名好的参赛都提交了上百次。
(3)提交预测结果,出现错误,大多情况是代码问题或者超时问题(每次预测不能超过9小时)。
(4)每次提交结果之前,如果代码有大的改动,先进行一次测试在提交,免得报错浪费提交次数。
(5)里面参赛有很多大神,多看看别人分享的代码以及得到高分的思路,但是不要乱了本心。
3、其它参考
关于这个比赛的一些参考
版权声明:本文为CSDN博主「bashendixie5」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bashendixie5/article/details/122941336
暂无评论