關於2018 AI challenger植物病害程度圖片數據集的發現(python下根據json將數據集按照類別分文件夾放置)

最近看論文發現有使用植物病害程度來做實驗的,查了一下,這個數據集是AI challenger在2018年的一個比賽,是將plant village的數據集,根據不同的病害程度來劃分種類。

AI challenger病害程度數據集,開始我沒有找到每個標籤的信息,就自己分文件夾,對照plant village數據集來自己打的標籤(因爲有些圖片的命名和原plant village數據集的命名是一樣的,所以能夠直接搜文件名看再哪個文件夾裏),自己總結了一圈下來,又再網上找到了一個標籤信息表,但是發現其中有些信息是錯誤的!也就是比賽數據的種類就分錯了,雖然這個對分類是沒什麼影響的,但是如果用這個數據集做葉片分類的話就有影響了呀~下面說一下哪裏錯誤


首先說一下知乎上的信息:

2018ai_challenger之農作物病害檢測比賽總結 - 燕小花的文章 - 知乎 https://zhuanlan.zhihu.com/p/50178745

 

先來說下數據集的大概情況,官方前後總共發佈了兩次比賽數據集.第一次數據集有很多圖像存在標籤交叉的情況(即相同的圖像存在不同的標籤,特別是病害程度一般和嚴重存在交叉情況),訓練圖像總數爲32768張,驗證圖像總數爲4992張,測試集A圖像總數爲4959張;因爲比賽社區很多人反饋數據交叉的現象,官方在比賽的又發佈了第二次比賽數據,第二次發佈的數據是對存在標籤交叉部分的進行更新,訓練圖像總數爲31718張,驗證圖像總數爲4540張,測試集A圖像總數爲4514張,測試集B圖像總數爲4513張.



作者:燕小花
鏈接:https://zhuanlan.zhihu.com/p/50178745
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

我下載的數據集是第一次和第二次的數據集都有。整理第一次數據集的時候我還納悶呢,爲啥有幾個類是重複的數據。後來第二個數據集把重複的去掉了。也就是標籤44,45的訓練集測試集都變成了一張圖(44,45和標籤52,53重複!)

但是第二次數據集依然沒有解決三個問題:1、就是標籤33,詳細信息上說它是馬鈴薯健康葉,但其實是大豆的健康葉。而原數據集其實是有馬鈴薯健康葉的(不知道爲什麼會犯這種錯誤)2、標籤42,43是南瓜的白粉病,卻被歸類到番茄的白粉病!3、標籤16說是玉米花葉病,但是圖片是玉米的健康葉片,不同的是16裏的圖片屬於plant village數據集,是實驗室採集圖,而9是在田裏採集的圖,而且有的還虛焦了很模糊。

以上就是我對AI challenger這個病害數據集的質疑了~有沒有同樣有疑惑的小夥伴呢?

下面對數據集的下載地址,和對數據集的整理代碼進行說明。


數據集https://blog.csdn.net/a940902940902/article/details/83993234這個博主的文末給出了百度雲網盤,有訓練集驗證集和測試集,測試集沒有標籤,所以自己實驗用的話只能使用訓練集和驗證集了。

根據python操作json文件、創建文件夾、複製文件的相關博客,寫了本文的代碼來處理數據,參考博客分別是:

python數據分析之json文件:https://blog.csdn.net/qq_40123329/article/details/82024564

python創建文件和文件夾:https://blog.csdn.net/vip_lvkang/article/details/76906718

Python文件名匹配,文件複製:https://blog.csdn.net/LOVE1055259415/article/details/79168190


以訓練集文件夾爲例,先說一下目錄結構

——ai_challenger_pdr2018_trainingset_20181023

————AgriculturalDisease_trainingset

——————images

——————AgriculturalDisease_train_annotations

在AgriculturalDisease_trainingset文件夾下創建一個新的class文件夾和一個demo.py文件

——ai_challenger_pdr2018_trainingset_20181023

————AgriculturalDisease_trainingset

——————images

——————AgriculturalDisease_train_annotations

——————class

——————demo.py

下面在demo.py文件中寫入一下代碼運行:

import json
import os
import shutil


def mkdir(path):
 
    folder = os.path.exists(path)
 
    if not folder:                   #判斷是否存在文件夾如果不存在則創建爲文件夾
        os.makedirs(path)            #makedirs 創建文件時如果路徑不存在會創建這個路徑
        #print("---  new folder...  ---")
       # print("---  OK  ---")   
    #else:
        #print("---  There is this folder!  ---")
        

source_dir='./images/'        
img=os.listdir(source_dir)  #得到文件夾下所有文件名稱

with open("AgriculturalDisease_train_annotations.json",'r') as load_f:
    load_dict = json.load(load_f)
    #print(load_dict)

for pop_dict in load_dict:
    path="./class/"+str(pop_dict['disease_class'])
    mkdir("./class/"+str(pop_dict['disease_class'])) #根據類別創建文件夾
    #print(path)
    for fileNum in img:
        if not os.path.isdir(fileNum): #判斷是否是文件夾,不是文件夾纔打開
            if fileNum == pop_dict['image_id']:
                print(fileNum)  #打印出文件名
                imgname= os.path.join(source_dir,fileNum)
                shutil.copy(source_dir+fileNum,path) #複製蹄片到class文件夾

 

 

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