ImageNet1K數據集的下載解壓與處理

前言

博主因為這個數據集踩了好多坑,浪費了好幾天時間,最近終于找到了高效的辦法,寫此篇文章來記錄具體操作方法,也希望可以幫助到有需要的人。(主要是在云服務器是使用)在這里插入圖片描述

下載數據集

一共下載三個文件,力求高效,也不要糾結在官網下載了(官網需要學校郵箱),下載的文件和官網一樣的。
在Linux上直接用命令行進行下載:

1.訓練集(ILSVRC2012_img_train.tar):【費時3h+】

wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar --no-check-certificate

2.驗證集(ILSVRC2012_img_val.tar):【費時40min+】

wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar --no-check-certificate

3.標簽映射文件(ILSVRC2012_devkit_t12.tar.gz):【費時幾秒】

wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_devkit_t12.tar.gz --no-check-certificate

下載好后是這樣的
在這里插入圖片描述

解壓數據集

1.在當前目錄下執行命令,解壓ILSVRC2012_devkit_t12.tar.gz這個文件:

tar -xzf ILSVRC2012_devkit_t12.tar.gz

會得到文件夾ILSVRC2012_devkit_t12,該文件中記錄著驗證集中的圖像名及其類別標簽之間的映射關系。

2.在當前目錄下創建val文件夾,使用命令解壓。執行命令,將驗證集圖像解壓到 val 目錄下:

tar xvf ILSVRC2012_img_val.tar -C ./val

此時 val 目錄下是50000張圖像,并沒有被分類到1000個文件夾下。因此需要將驗證集中的圖像進行分類存放。【稍后會講怎么操作】

3.在當前目錄下創建img文件夾,存ILSVRC2012_img_train.tar解壓后的1000個.tar文件。執行命令,將訓練集解壓到文件夾 img目錄下:

tar xvf ILSVRC2012_img_train.tar -C ./img

用腳本檢查是不是有1000個.tar文件,執行腳本代碼如下【將代碼保存為.py文件】(可選)

import osdef count_tar_files():count = 0for root, dirs, files in os.walk('.'):for file in files:if file.endswith('.tar'):count += 1return countif __name__ == "__main__":tar_file_count = count_tar_files()print(f"當前目錄及其子目錄下共有 {tar_file_count} 個.tar 文件。")

在當前目錄下創建train文件夾,存1000個.tar文件解壓后的圖片。
執行腳本代碼如下【將代碼保存為.py文件】

import os
import tarfile
from pathlib import Pathdef batch_extract_tar():"""批量解壓目錄下的所有.tar文件解壓后的文件將保存到知道目錄中"""# 指定絕對路徑【換成你自己的】source_dir = "/root/lanyun-tmp/img"target_dir = "/root/lanyun-tmp/train"# 驗證源目錄是否存在source_path = Path(source_dir)if not source_path.exists() or not source_path.is_dir():print(f"錯誤: 源目錄 '{source_dir}' 不存在或不是目錄")return# 創建目標目錄(如果不存在)target_path = Path(target_dir)target_path.mkdir(parents=True, exist_ok=True)# 統計解壓的文件數量extracted_count = 0failed_count = 0# 直接遍歷源目錄中的所有文件for item in source_path.iterdir():if item.is_file() and item.suffix.lower() == '.tar':try:print(f"正在解壓: {item}")# 獲取tar文件名(不含擴展名),用于創建子目錄tar_name = item.stem  # 例如:n01440764.tar → n01440764target_subdir = target_path / tar_nametarget_subdir.mkdir(exist_ok=True)# 打開tar文件并解壓到目標子目錄with tarfile.open(item, 'r') as tar:tar.extractall(path=target_subdir)print(f"成功解壓到: {target_subdir}")extracted_count += 1except Exception as e:print(f"錯誤: 解壓文件 '{item}' 失敗: {e}")failed_count += 1print(f"解壓完成: 成功 {extracted_count} 個,失敗 {failed_count} 個")if __name__ == "__main__":# 直接調用函數,無需解析命令行參數batch_extract_tar()    

處理val文件夾

解壓后的val文件夾是全部圖片在一個文件夾,需要把他們按類別分開,分類后是和訓練集train一樣的顯示格式,1000個文件夾的名字和順序都是完全一致的。
在這里插入圖片描述
具體是需要用到文件夾ILSVRC2012_devkit_t12下的文件
在這里插入圖片描述
先執行命令安裝scipy包

pip install scipy  # 用于解析 .mat 文件

執行腳本代碼如下【將代碼保存為.py文件】

from scipy import io
import os
import shutildef move_valimg(val_dir='./val', devkit_dir='./ILSVRC2012_devkit_t12'):"""move valimg to correspongding folders.val_id(start from 1) -> ILSVRC_ID(start from 1) -> WINDorganize like:/val/n01440764images/n01443537images....."""# load synset, val ground truth and val images listsynset = io.loadmat(os.path.join(devkit_dir, 'data', 'meta.mat'))ground_truth = open(os.path.join(devkit_dir, 'data', 'ILSVRC2012_validation_ground_truth.txt'))lines = ground_truth.readlines()labels = [int(line[:-1]) for line in lines]root, _, filenames = next(os.walk(val_dir))for filename in filenames:# val image name -> ILSVRC ID -> WINDval_id = int(filename.split('.')[0].split('_')[-1])ILSVRC_ID = labels[val_id-1]WIND = synset['synsets'][ILSVRC_ID-1][0][1][0]print("val_id:%d, ILSVRC_ID:%d, WIND:%s" % (val_id, ILSVRC_ID, WIND))# move val imagesoutput_dir = os.path.join(root, WIND)if os.path.isdir(output_dir):passelse:os.mkdir(output_dir)shutil.move(os.path.join(root, filename), os.path.join(output_dir, filename))if __name__ == '__main__':move_valimg()

到此,恭喜你已經完成了全部工作。

尾聲

一些碎碎念念。博主一開始在官網下載不了數據集,在咸🐟上花幾塊錢買了百度網盤資源,先把資源下載在本地之后又通過FileZilla來把資源上傳到云服務器上【因為網絡傳輸的不穩定,FileZilla還經常傳輸失敗】,花了好幾天終于完成了數據集的下載與上傳工作,結果處理val驗證集成功之后發現他的1000個文件夾與train的1000個文件夾名有一些對不上【具體來說就是train文件夾中有兩個文件夾是完全重復的一個是XXX.tar文件另外一個是XXX(1).tar文件,然后val中的最后一個文件,train中沒有。】,博主的心情五味雜陳,這證明train文件有錯,博主前面的工作都白費了那些資源根本用不了,咸魚上的ImageNet的網盤資源大家還是不要隨便相信了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90152.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90152.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90152.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OkHttp 與 Room 結合使用:構建高效的 Android 本地緩存策略

前言在現代 Android 應用開發中,網絡請求與本地數據持久化是兩大核心功能。OkHttp 作為強大的網絡請求庫,與 Jetpack Room 持久化庫的結合使用,可以創建高效的數據緩存策略,提升應用性能和用戶體驗。本文將詳細介紹如何將這兩者完…

Nacos中feign.FeignException$BadGateway: [502 Bad Gateway]

Nacos中feign.FeignException$BadGateway: [502 Bad Gateway] 文章目錄Nacos中feign.FeignException$BadGateway: [502 Bad Gateway]背景原因背景 Mac本地運行Nacos微服務項目,調用服務失敗 原因 關閉本地代理clash或者其他,windows沒發現問題&#x…

基于deepseek的LORA微調

LORA微調: 核心是:低秩轉換,減少參數。凍結大部分,調節部分模塊(注意力模塊的Wq,Wk,Wv)。 調整過后得到一個lora.safetensors, 內部記錄了(detail W: 即部分修改的W)。推理使用原權重和lora權重。 具體操…

Linux運維新手的修煉手扎之第22天

Tomcat服務1 java項目部署方式:war包部署、jar包部署、源代碼部署2 Ubuntu環境部署Java - openjdk[熟練]:#安裝軟件rootubuntu24-13:~# apt update; apt list openjdk*rootubuntu24-13:~# apt install openjdk-11-jdk -y#檢測效果rootubuntu24-13:~# whereis javaja…

Python爬蟲實戰:研究Genius庫相關技術

1. 引言 在當今數字化時代,音樂數據的分析與挖掘成為了音樂學、計算機科學等領域的研究熱點。歌詞作為音樂的重要組成部分,蘊含著豐富的情感、文化和社會信息。通過對歌詞數據的分析,可以揭示音樂風格的演變、流行趨勢的變化以及社會情緒的波動等。 Genius 是一個專注于歌詞…

內核協議棧源碼閱讀(一) ---驅動與內核交互

文章目錄 一、硬中斷 1.1 `e100_intr` 1.2 `__netif_rx_schedule` 1.3 補充: 二、軟中斷 2.1 net_rx_action 2.2 e100_poll 2.3 補充 三、非 NAPI 的軟中斷處理 3.1 netif_rx 3.2 backlog_dev->poll 3.3 補充 四、總結 以 e100_intr 為例: 一、硬中斷 1.1 e100_intr 網卡…

Vue3 面試題及詳細答案120道(61-75 )

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

ubuntulinux快捷鍵

1.復制文件使用cp命令。cp是復制的簡寫。語法也很簡單。使用,cp后跟要復制的文件以及要將其移動到的目的地cp ~/Downloads/your-file.txt ~/Documents/2.復制文件夾為了復制文件夾及其內容,您將需要告訴cp命令以遞歸方式復制。使用-r標志就足夠簡單了。c…

將 `knife4j` 和 `springdoc-openapi` 集成到你的 Spring Boot 應用

集成 knife4j 和 springdoc-openapi 可以讓你在 Spring Boot 應用中擁有更美觀和功能豐富的 API 文檔界面。knife4j 是基于 Swagger 的一個 UI 增強包,而 springdoc-openapi 則是用于生成 OpenAPI 3 文檔的庫。下面是如何將兩者集成到你的 Spring Boot 項目中的步驟。 步驟 1…

split() 函數在 Java、JavaScript 和 Python 區別

split() 函數在 Java、JavaScript 和 Python 中均用于字符串分割,但在語法、參數設計和行為上存在顯著差異。以下是三者的核心區別及使用示例:1. ??語法與參數設計????語言????語法????參數說明????Java??String.split(regex, limit…

zabbix基于GNS3監控部署

目錄 一、配置 二、zabbix配置 一、配置 1.添加路由和主機 f2接口配置192.168.80.254 f3接口配置192.168.90.254 R2的f3接口配置192.168.33.200 2.配置虛擬機ip網關 web1 web2 3.測試三臺主機zhijianshifoutongxin ping pc1 ping pc2 4.在R2網關中配置專業模式下設置共同體…

Java編程與GMSEC_API在UE4集成的筆試實戰

本文還有配套的精品資源,點擊獲取 簡介:本次4399游戲公司的Java筆試題主要針對應聘者的編程能力,特別強調了與游戲開發相關的技術知識。題目的核心內容是使用Java環境下的GMSEC_API與流行的游戲引擎Unreal Engine 4進行交互。這不僅考察了…

學習C++、QT---33(QT庫中如何使用事件過濾器實現我們的放大縮小字體功能)

🌟 嗨,我是熱愛嵌入式的濤濤同學!每日一言別害怕改變,走出舒適圈才能遇見更好的自己。實現完這個之后我們來接觸一下事件過濾器來實現這個功能吧好的那么我們的這個事件過濾器的這個函數在QObject類里面這邊也有相對應的代碼案例進…

[每日隨題15] 前綴和 - 拓撲排序 - 樹狀數組

整體概述 難度:1000 →\rightarrow→ 1500 →\rightarrow→ 2000 1567B. MEXor Mixup 標簽:前綴和 前置知識:無 難度:Div.2.B 1000 題目描述: 輸入格式: 輸出格式: 樣例輸入: …

DDD領域驅動設計C++實現案例:訂單管理系統

一、DDD核心概念簡介 領域驅動設計(Domain-Driven Design)是一種軟件開發方法論,強調將業務領域的概念和規則融入軟件設計中。核心概念包括: 值對象(Value Object): 無唯一標識,基于屬性值判斷相等性實體(Entity): 有唯一標識,其生…

神經網絡和機器學習的一些基本概念

記錄一些基本概念,不涉及公式推導,因為數學不好,記了也沒啥用,但是知道一些基本術語以及其中的關系,對神經網絡訓練有很大幫助。 可能有些概念不會講得很詳細,但是當你有了這個概念,你就知道往這個方向去獲取更詳細的信息,不至于連往哪走都不知道。 下面以多元線性回歸…

MySQL(146) 如何遷移數據庫到新服務器?

數據庫遷移到新服務器是一項復雜而重要的任務,確保數據完整性和最小化停機時間至關重要。以下是一個詳細的步驟指導,包括準備工作、數據備份、數據傳輸、數據恢復和驗證的全過程。 一、準備工作 1. 確認服務器環境 源服務器:當前運行數據庫的…

圖論的整合

圖 有若干個節點,有若干條邊連接節點。(兩個點之間不是必須相連) 比如: 有向圖 可以理解為邊上面有箭頭的圖,比如下面這張圖: 在這張圖中,點 111 可以通過這條有向邊到達點 222&#xff0c…

電子設計大賽【C語言核心知識點】講解

目錄 前言 1. 基礎語法 2. 流程控制 3. 函數 4. 數組與字符串 5. 指針(核心重點) 6. 內存管理 7. 結構體與聯合體 8. 文件操作 9. 預處理器 10. 高級特性 內存布局圖解 前言 在進行程序代碼開發之前,需要掌握好C語言各個模塊之間…

Numpy 庫 矩陣數學運算,點積,文件讀取和保存等

目錄 1.數組(矩陣)的組合 2.數組(矩陣)的切割 3.數組的數學運算 4.數組的深拷貝和淺拷貝 5.隨機模塊 6.矩陣統計運算 7.矩陣的特有運算點積,求逆 8.文件讀取和保存 1.數組(矩陣)的組合 水…