计算机视觉比赛RANZCR CLiP:Few best public notebook and dataset ensemble以及Making Sense from Annotations学习

学习的notebook
https://www.kaggle.com/kiranchaudharyy/few-best-public-notebook-and-dataset-ensemble
https://www.kaggle.com/nickuzmenkov/ranzcr-clip-making-sense-from-annotations

代码技术:

Python isinstance() 函数,判断是否是这个类。
anno_df.index.drop_duplicates()显然是删掉index重复的那些行。
anno_df.index.nunique()}/{len(main_df):这显然是计算有标注的图片占总的图片的比例,nunique——将索引中那些重复值只保留1个,一个图片可能会有多个anno,但是我们统计有标注的图片数量,而非anno

主要的思路过一遍:

main_df = pd.read_csv(
os.path.join(root, ‘train.csv’),
index_col=‘StudyInstanceUID’).drop(‘PatientID’, axis=1)
这句话是读入比赛csv文件,然后以图片ID而不是病人ID作为Index;
之后画图这一部分做的非常精彩,plt.barh顾名思义是横向的条形图。

在这里插入图片描述对annotation的csv形成的dataframe进行处理,用value_counts得到一个频次,然后用这些类标签作为新的标签(原来是图片的序号是标签)
在这里插入图片描述可以看到使用reindex之前的标签顺序。
他和上面那张图里,顺序是不一样的。
在这里插入图片描述
对于main_df,即由train.csv生成的,我们用算子(pd.Series.value_counts)来处理,即对每列统计频数的算子。
然后loc方法取出频数为1的统计(即统计相关存在的属性个数,而不是统计标注的)。
这里频数为1其实是包括了anno和无anno的,所以作者画图是又用了一个技巧,就是用红色作为背景色,然后蓝色是anno的,覆盖在总的红上,所以露出来的红色就是无anno的!

在这里插入图片描述

可以注意到,main_df里没有超过1的值,这里面要么是0,要么是1,因此他代表某张图是否存在某个类别,而不体现类别的数量。

接下来统计了有标注和没有标注的图片的数量;利用标记的那个CSV文件anno,按照他的索引去重,这个的索引用reindex方法,映射到main_df索引上,促使其重新排序,得到一个新的data frame main_df_count.

定义了一个,解析用的方法parse_,他返回一个解析的一个长度为类别数目的一个数组.那传入的这个字符串跟这个类别的名称相同的时候,就在对应类别的那个位置,把它赋值为一,然后返回 。

上面去重后的索引在下边又用到了:
新建了一个dataframe:
他的这个列是类别数目,然后它的索引是刚才用的那个索引。
然后下边就是遍历这个索引:
循环体内部,对应寻找那个索引在anno-df中的值,在这个指导中提取了这一行类别的名字,传入刚才提到的那个解析的函数parse_,然后就会返回一个长度为类别数目、记载着对应类别位置是相应的类别数目的一个numpy数组。事实上,这一个anno df count和main df,他们两个的性质是不同的,前者是经过去重之后,统计类别anno个数,后者则是也不重复,但只统计类别的存在,而不会计算个数。

In-over-和正好complete,其实就是对,存在,一个还是零个还是多个的一个统计。
不完备的话就代表,这个标注是不全的,明明存在类别,但是没有标注—— 0
完备的话就代表存在一个标注,而且对应的类别也是存在的——1
过完备的话就代表这个类别是显示是存在的,而且实际上这个类别有多个标注——多个

最后作者train_annoated.csv返回的实际上是,那些被完毕,标注的图片.

Few best public notebook and dataset ensemble学习:
https://blog.csdn.net/qq_44065334/article/details/114377288

猜你喜欢

转载自blog.csdn.net/qq_44065334/article/details/114365243