dcase_util學習筆記(一):dataset.initialize()概覽

由於工作上的需要,對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()來顯示一下數據集的內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章