dcase

    技术2022-07-10  146

    由于工作上的需要,对dcase_util工具箱进行学习,目的在于熟练使用,以及了解它封装性极强的各个函数、类、方法,到底在做什么事情。

    dcase比赛涉及到大量的数据,划分训练/验证集、数据预处理、提特征这些事情如果交给一个成熟工具箱来做的话,还是很香的,就不用重复造轮子了,不过这个工具箱就像个黑箱一样,不把里面(至少浅层的)一些逻辑搞清楚我是不敢用的。。。对于开源的包我一般都是这个态度。。。今天先把dataset的initialize()方法总结一下。

    首先,创建一个dataset对象:

    # Create dataset object and set dataset to be stored under 'data' directory. db = dcase_util.datasets.DCASE2013_Scenes_DevelopmentSet( data_path='datasets' )

    datasets里面有历年的数据集,想要哪年的数据,直接调用就可以了,注意,这句话执行完之后,会在当前目录新建一个名叫‘datasets’的文件夹,里面嵌套一个文件夹,名称为你调用的数据集的名字,如‘DCASE2013_Scenes_DevelopmentSet’,里面用来存放下载的数据包压缩文件。

    上面一步只是new了一个对象,下面要调用它的initialize方法啦,这个方法的功能是下载、解压数据包,准备数据的meta信息(即标签信息等),最后生成一个filelist.python.hash文件,有了这个文件,下次再执行程序时程序就知道了,啊哈,之前已经下载&解压&准备meta全部结束了,这次就不用再来一遍了。

    # Initialize dataset (download, extract and prepare it). db.initialize()

    下面是这个方法里面的全部内容:

    # Create the dataset path if does not exist Path().makedirs(path=self.local_path) # Check file changes if not self.check_filelist(): # Download packages self.download_packages() # Extract content from packages self.extract_packages() # Load meta data in self.load() # Prepare meta data for the dataset class. self.prepare() # Check meta data and cross validation setup if self.check_meta: self.check_metadata() # Save new filelist hash to monitor change in the dataset. self._save_filelist_hash() return self

    然后就到了说明细节的时候了。如果程序检测到datasets/DCASE2013_Scenes_DevelopmentSet文件夹中有filelist.python.hash文件,那么self.check_filelist()返回false,直接结束初始化;如果没有该文件,哪怕已经有了压缩包并且解压好了,依然会进入条件,也就是依次执行self.download_packages()、self.extract_packages()。。。不过,这些函数里面会做进一步判断,如果已经存在压缩包,就不会重新下载;如果已经存在解压完毕的文件夹,就不会再解压一遍。所以,走这一趟就是为了生成filelist.python.hash,确保下回不再进入。里面的代码非常复杂,我也没有调试跟踪到每一个角落,也不太现实,不过还是可以通过自己一些对比试验搞清楚这些子函数都是在做什么的。。可能这也是读别人/读开源程序的一种方法吧。。。

    然后,可以用db.show()来显示一下数据集的内容。

    Processed: 0.014, SQL: 9