ความเร็วของรูปแบบข้อมูลแรสเตอร์ต่างๆ


25

ฉันมีปัญหาในการหาการสนทนาหรือการเปรียบเทียบเปรียบเทียบรูปแบบไฟล์แรสเตอร์ที่แตกต่างกัน (เช่นเพื่อใช้ในการวิเคราะห์ข้อมูลใน R) ไม่มีใครเข้าใจว่าทำไมรูปแบบเฉพาะอาจเร็วขึ้นหรือช้าลง? หรือความแตกต่างควรน้อยที่สุด?

โดยเฉพาะฉันสนใจว่าการแปลงแรสเตอร์ (เช่นไฟล์ GEOTIFF) เป็นรูปแบบอื่น (เช่น netCDF) นั้นคุ้มค่าสำหรับการเร่งความเร็วในการอ่าน / เขียนและการดำเนินการอื่น ๆ


2
คำถามนี้เกี่ยวข้องกับ GIS แต่ฉันสงสัยว่าคุณมีแนวโน้มที่จะได้รับคำตอบเกี่ยวกับ SO ซึ่งมีชุมชนย่อยที่แข็งแกร่งของผู้เชี่ยวชาญ R หากคุณไม่ได้รับคำตอบอย่างรวดเร็วโปรดตั้งค่าสถานะคำถามนี้และผู้ดำเนินการจะโยกย้ายคำถามให้คุณ
whuber

คำตอบ:


9

นี่คือบทความบล็อกเก่าของฉันที่ดูขนาดไฟล์และเวลาในการเข้าถึงของรูปแบบ ฉันไม่ได้ตรวจสอบความเร็วการเขียนเฉพาะเวลาเข้าถึง ฉันว่าพวกเขาอาจจะเกี่ยวข้องโดยตรง แต่จะไม่สามารถรับรองได้

สรุปบทความ: ดูเหมือนว่า Packbits จะให้เวลาในการเข้าถึงที่ดีที่สุด (โดยมีค่าใช้จ่ายในพื้นที่ดิสก์) ในขณะที่ Deflate ให้เวลาในการเข้าถึงระดับกลาง / ช้าสำหรับไฟล์ระดับกลาง / ขนาดเล็ก นอกจากนี้คุณสามารถทดสอบเวลาการเข้าถึงได้อย่างชัดเจนยิ่งขึ้นด้วยการสร้างภาพขนาดย่อที่มีขนาดและเวลาต่าง ๆ นานเท่าใด คำสั่งตัวอย่าง:time gdal_translate -outsize <thumbnail dimensions> -of GTiff <compressed image file> <thumbnail file>

สมมติว่าสิ่งเดียวที่เกี่ยวข้องกับ R ในกรณีนี้คือความรวดเร็วในการอ่านข้อมูลจากไฟล์เช่นเดียวกับกระบวนการอื่น ๆ ที่จะทำให้คุณมีข้อบ่งชี้ที่ดี


+1 สำหรับบทความที่เชื่อมโยง แต่ข้อมูลสำคัญอยู่นอกสถานที่และจะหายไปกับเราหากหน้านั้นหยุดหรือย้าย ฉันขอแนะนำให้ให้ข้อสรุปโดยย่อของบทความเพื่อที่ว่าในกรณีที่หน้าไม่สามารถใช้งานได้แม้ในขณะนี้ผู้อ่านจะมีบางสิ่งบางอย่างที่จะทำงานร่วมกับการวิจัยและการคิดในอนาคต ขอบคุณ!
matt wilkie

ยุติธรรมพอ! ดูเหมือนว่า Packbits จะให้เวลาในการเข้าถึงที่ดีที่สุดสำหรับคุณ (ในค่าใช้จ่ายของพื้นที่ดิสก์) ในขณะที่ Deflate จะให้เวลาในการเข้าถึงระดับกลาง / ช้าสำหรับไฟล์ระดับกลาง / ขนาดเล็ก นอกจากนี้คุณสามารถทดสอบเวลาการเข้าถึงได้อย่างชัดเจนยิ่งขึ้นด้วยการสร้างรูปขนาดย่อที่มีขนาดและเวลาต่าง ๆ มากมายใช้เวลานานเท่าใด คำสั่งตัวอย่าง: "time gdal_translate -outsize <thumbnail thumbnail> -of GTiff <ไฟล์ภาพบีบอัด> <ไฟล์ภาพย่อ>"
R Thiede

1
ขอบคุณ! ฉันพับสรุปเป็นคำตอบเองดังนั้นจึงมีอยู่ในตัวเองมากกว่า (ดูลิงก์แก้ไขที่ด้านล่างซ้ายของแต่ละคำตอบ / คำถาม)
แมตต์วิลคี

@Realiede มีข้อกังวลที่ถูกต้อง: ตอนนี้ดูเหมือนว่าลิงค์ไปยังบล็อกไม่ถูกต้องอีกต่อไป?
Matifou

@RThiede ลิงก์ของคุณตายแล้วคุณสามารถให้ลิงค์ใหม่ได้หรือไม่
Majid Hojati

6

สำหรับการดำเนินการอ่าน / เขียนคุณสามารถทดสอบความเร็วของการดำเนินการเหล่านั้นโดยใช้ system.time () นี่คือผลลัพธ์บางส่วนจากการโหลดไฟล์ DEM ใน R (แพคเกจ Raster) ที่แปลเป็นสี่รูปแบบ (ASCII, IMG และ TIF โดยไม่มีการบีบอัดและยุบ) ตัวอย่างเช่นบนแรสเตอร์ ~ 26MB:

> system.time(dem <- raster("~/workspace/TEMP/kideporegion.img"))
 user  system elapsed 
 0.154   0.002   0.157 

'ผ่านไป' ให้เวลาทั้งหมด (วินาที) สำหรับการดำเนินการ ดำเนินการแต่ละครั้ง 10 ครั้งและดูเวลาที่ผ่านไปโดยเฉลี่ย:

              mean   diff
ASC         0.2237 0.3317
IMG         0.1544 0.0318
tif-Deflate 0.1510 0.0099
tif-none    0.1495 0.0000
tif-pack    0.1513 0.0118

TIFF ที่ไม่มีการบีบอัดเป็นวิธีที่เร็วที่สุด ... ตามด้วย Deflate (ช้าลง 0.1%) และ TIFF-Packbits (ช้ากว่า 1.8%), IMG (ช้าลง 3.2%) และ ASC (33% ช้ากว่า) (นี่คือบน Macbook Pro 2.4 GHz พร้อม SSD การทำงานของดิสก์รวดเร็ว)

นี่เป็นเพียงการโหลดไฟล์ไม่ใช่จัดการกับมัน


4

บางทีมันอาจไม่ใช่คำถามที่รูปแบบภาพแรสเตอร์มีเกณฑ์มาตรฐานการเปิดที่ดีกว่า - แต่รูปแบบภาพแรสเตอร์ใดเป็นรูปแบบแหล่งภาพแรสเตอร์ที่มีประสิทธิภาพมากที่สุดสำหรับการเปิดและอ่านเป็นอินพุตในอาเรย์ตัวเลขอาร์ รูปแบบเอาต์พุตที่มีประสิทธิภาพมากที่สุดจาก R คืออะไรสมมติว่าคุณกำลังส่งผลลัพธ์กลับไปที่ raster

ไม่ว่าจะด้วยวิธีใดถ้าคุณจะทำงานกับ raster ใน R คุณจะใช้แพ็คเกจ rgdalและR ncdfเพื่อเสริมสิ่งที่มีอยู่ในแพ็คเกจraster ด้วยการพึ่งพาหลักในคำสั่งgdalwarp จำเป็นต้องหารูปแบบการอ้างอิงที่นั่นเพื่อเลือกแรสเตอร์ของคุณ คุณจะได้รับความคุ้มครองที่ยุติธรรมบน SO และฟอรัม OSGEO และ R / บล็อก / วิกิที่หลากหลาย

แต่เนื่องจากนี่เป็นฟอรัม GIS ที่การใช้ Python อยู่ในตำแหน่งที่สัมพันธ์กันฉันจะทราบว่ามีข้อดีในการทำงานกับข้อมูลแรสเตอร์ใน Python numpy array ที่มีการพึ่งพาไลบรารี gdal สำหรับการโหลดแรสเตอร์การแปลงและการส่งออก บางคนพบว่าการจัดการหน่วยความจำและโครงสร้างรหัสใน Python เป็นที่นิยมมากกว่า R เนทีฟ - ดูที่RPy2หรือPypeRเพราะอาจเหมาะสมสำหรับการวิเคราะห์ของคุณ


สำหรับการจัดการข้อมูล netCDF (แหล่งภาพแรสเตอร์หรืออย่างอื่น) ใน R นี่คือลิงค์ไปยัง R CRAN สองแพ็คเกจที่โฮสต์โฮสต์ netCDF คือ ncdf4 - cran.r-project.org/web/packages/ncdf4/index.html และ RNetCDF - cran r-project.org/web/packages/RNetCDF/index.html
V Stuart Foote

4

คำถามใหญ่คือคุณจะอ่านแรสเตอร์ทั้งหมดจากไฟล์ไปยังหน่วยความจำก่อนที่จะประมวลผลหรือว่าไฟล์มีขนาดใหญ่จนคุณจะประมวลผลแบบเพิ่มหน่วยหรือประมวลผลบางส่วนของไฟล์โดยรวม

หากคุณจะโหลดทั้งหมดลงในหน่วยความจำคุณจะทำการเข้าถึงตามลำดับเป็นส่วนใหญ่และรูปแบบที่เร็วที่สุดจะเป็น tossup ระหว่างที่เก็บข้อมูลแบบธรรมดาและแบบบีบอัด (ขึ้นอยู่กับสิ่งต่าง ๆ เช่นความเร็ว CPU ของคุณเทียบกับดิสก์) รูปแบบไฟล์ไบนารีใด ๆ ที่อาจจะค่อนข้างใกล้เคียง (ASCII จะช้ากว่า)

หากคุณต้องการประมวลผลชุดย่อยของไฟล์ที่มีขนาดใหญ่มากรูปแบบที่จัดกลุ่มชุดย่อยที่คุณต้องการใกล้กันอาจเร็วกว่าเช่นกระเบื้องหรือรูปแบบที่สามารถคำนวณออฟเซ็ตได้ บางครั้งวิธีที่ไม่มีการบีบอัดมาที่นี่เพราะอาจเป็นเรื่องยากที่จะคำนวณว่าส่วนใดของภาพอยู่ในไฟล์โดยเฉพาะอย่างยิ่งถ้าคุณต้องการเพียงส่วนหนึ่งของแถวที่มีขนาดใหญ่มาก แต่การบีบอัดสามารถทำได้ในรูปแบบละเอียด รูปแบบการเข้าถึง

ขออภัยคุณอาจต้องทำการวัดประสิทธิภาพโดยขึ้นอยู่กับรูปแบบการเข้าถึงของคุณแทนที่จะได้ขนาดที่เหมาะกับทุกคน อาจขึ้นอยู่กับรูปแบบไฟล์และปัจจัยข้างต้น แต่ขึ้นกับไดรเวอร์สำหรับรูปแบบนั้นและซอฟต์แวร์ของคุณ


2

วิธีที่คุณคิดเกี่ยวกับปัญหาเหล่านี้คือวิธีที่แอปพลิเคชันของคุณเข้าถึงไฟล์ของคุณและวิธีที่ข้อมูลถูกวางในไฟล์ของคุณ แนวคิดคือถ้าคุณสามารถเข้าถึงข้อมูลของคุณตามลำดับมันจะมีประสิทธิภาพมากกว่าถ้าคุณเข้าถึงแบบสุ่ม

GeoTIFF เป็นชุดของ "ภาพ" หรืออาร์เรย์แบบ 2 มิติ NetCDF เป็นแหล่งเก็บข้อมูลทั่วไปสำหรับอาร์เรย์หลายมิติ แต่ถ้าคุณเก็บอาร์เรย์ในวิธีเดียวกันใน netCDF เหมือนกับที่อยู่ใน GeoTIFF คุณจะได้รับประสิทธิภาพเดียวกันไม่มากก็น้อย

หนึ่งสามารถจัดเรียงข้อมูลใน netCDF ดังนั้นในหลักการสามารถปรับให้เหมาะสมกับรูปแบบการอ่านของคุณ ฉันเดาว่าแอพพลิเคชั่น GIS ส่วนใหญ่นั้นได้รับการปรับให้เหมาะกับเลย์เอาต์ GeoTIFF 2D ดังนั้นจึงไม่ได้รับประโยชน์อะไรมากมายจากการจัดเรียงใหม่

ในที่สุด Id บอกว่ามันสำคัญเฉพาะเมื่อคุณมีไฟล์ขนาดใหญ่มากอย่างน้อยสิบเมกะไบต์


+1 สำหรับจุดที่การเข้าถึงแบบสุ่มหรืออ่านตำแหน่งโดยพลการนั้นแตกต่างจากลำดับที่ตามลำดับหลังจากที่อื่นจนกว่าจะอ่านไฟล์ทั้งหมด ฉันอาจอยู่นอกฐาน แต่ฉันคิดว่า Geotiff ยังรองรับการจัดเก็บแบบเรียงต่อกันและการเข้าถึงโดยพลการมันเป็นไปได้ว่าโดยแถบ / แถวเป็นสิ่งที่พบได้บ่อยและได้รับการสนับสนุนอย่างกว้างขวาง นอกจากนี้ทุกวันนี้ "ไฟล์ที่มีขนาดใหญ่มาก" ใน GIS มักจะอยู่ในช่วงหลาย GB ;-)
matt wilkie

2

ฉันอ่านสองสามหน้าเกี่ยวกับเรื่องนี้เมื่อหลายปีก่อนและตั้งแต่นั้นใช้ tiff กับการบีบอัด packbits ปูด้วยส่วนหัว geotiff และมีความสุข

บทความของทีม arcpad

วิกิพีเดีย

แต่หลังจากอ่านต่อไปนี้ฉันจะพิจารณาอีกครั้งและอาจใช้ความหลากหลายแบบยุบ

เว็บไซต์ Arcpad


2

แพ็คเกจจำนวนมากใช้ GDAL ภายใต้ประทุนเช่น rgdal, QGIS, GRASS เป็นต้นหากฉันใช้แพ็คเกจเหล่านี้ฉันจะคิดถึงการแปลงภาพเป็น vrt ฉันมักจะเห็นคำแนะนำว่าเมื่อคุณจำเป็นต้องใช้คำสั่ง GDAL สองคำสั่งไฟล์กลางควรเป็นไฟล์ vrt เพราะค่าใช้จ่ายในการอ่านน้อยมาก (เช่นhttp://www.perrygeo.com/lazy-raster-processing -with-gdal-vrts.html ) ดูเหมือนว่าเวิร์กโฟลว์ของคุณคือ: แปลงหนึ่งครั้งและอ่านหลาย ๆ ครั้ง บางที vrt ก็น่าจะเหมาะสมแล้ว

[แก้ไข: ปรับปรุงลิงค์]

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.