Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?

Tại sao bạn muốn biết thêm về các cách lưu trữ và truy cập hình ảnh khác nhau trong Python? . Ngay cả khi bạn đang sử dụng Thư viện hình ảnh Python (PIL) để vẽ trên vài trăm bức ảnh, bạn vẫn không cần. Lưu trữ hình ảnh trên đĩa, dưới dạng tệp

$ pip install lmdb
0 hoặc
$ pip install lmdb
1, vừa phù hợp vừa phù hợp

Tuy nhiên, số lượng hình ảnh cần thiết cho một tác vụ nhất định ngày càng lớn hơn. Các thuật toán như mạng thần kinh tích chập, còn được gọi là convnets hoặc CNN, có thể xử lý các tập dữ liệu hình ảnh khổng lồ và thậm chí học hỏi từ chúng. Nếu quan tâm, bạn có thể đọc thêm về cách sử dụng convnets để xếp hạng ảnh tự chụp hoặc để phân tích cảm tính

ImageNet là một cơ sở dữ liệu hình ảnh công cộng nổi tiếng được kết hợp để đào tạo các mô hình về các nhiệm vụ như phân loại, phát hiện và phân đoạn đối tượng và nó bao gồm hơn 14 triệu hình ảnh

Hãy nghĩ xem sẽ mất bao lâu để tải tất cả chúng vào bộ nhớ để đào tạo, theo đợt, có thể hàng trăm hoặc hàng nghìn lần. Hãy tiếp tục đọc và bạn sẽ tin rằng sẽ mất khá nhiều thời gian—ít nhất là đủ lâu để rời khỏi máy tính của bạn và làm nhiều việc khác trong khi bạn ước mình đã làm việc tại Google hoặc NVIDIA

Trong hướng dẫn này, bạn sẽ tìm hiểu về

  • Lưu trữ hình ảnh trên đĩa dưới dạng tệp
    $ pip install lmdb
    
    0
  • Lưu trữ hình ảnh trong cơ sở dữ liệu ánh xạ bộ nhớ sét (LMDB)
  • Lưu trữ hình ảnh ở định dạng dữ liệu phân cấp (HDF5)

Bạn cũng sẽ khám phá những điều sau đây

  • Tại sao các phương pháp lưu trữ thay thế đáng được xem xét
  • Sự khác biệt về hiệu suất là gì khi bạn đang đọc và viết các hình ảnh đơn lẻ
  • Sự khác biệt về hiệu suất là gì khi bạn đọc và viết nhiều hình ảnh
  • Ba phương pháp so sánh như thế nào về việc sử dụng đĩa

Nếu không có phương pháp lưu trữ nào rung chuông, đừng lo lắng. Đối với bài viết này, tất cả những gì bạn cần là một nền tảng khá vững chắc về Python và hiểu biết cơ bản về hình ảnh (rằng chúng thực sự bao gồm các mảng số đa chiều) và bộ nhớ tương đối, chẳng hạn như sự khác biệt giữa 10MB và 10GB

Bắt đầu nào

Tiền thưởng miễn phí. Nhấp vào đây để nhận Hướng dẫn nhỏ về các ví dụ về OpenCV và Nhận dạng khuôn mặt Python cho bạn thấy các ví dụ mã thực tế về các kỹ thuật thị giác máy tính Python trong thế giới thực

Thành lập

Bạn sẽ cần một bộ dữ liệu hình ảnh để thử nghiệm, cũng như một vài gói Python

Loại bỏ các quảng cáo

Một bộ dữ liệu để chơi với

Chúng tôi sẽ sử dụng bộ dữ liệu hình ảnh của Viện nghiên cứu nâng cao Canada, hay còn gọi là CIFAR-10, bao gồm 60.000 hình ảnh màu 32x32 pixel thuộc các lớp đối tượng khác nhau, chẳng hạn như chó, mèo và máy bay. Về mặt tương đối, CIFAR không phải là tập dữ liệu quá lớn, nhưng nếu chúng tôi sử dụng tập dữ liệu TinyImages đầy đủ thì bạn sẽ cần khoảng 400GB dung lượng đĩa trống, đây có thể là một yếu tố hạn chế

Tín dụng cho bộ dữ liệu như được mô tả trong chương 3 của báo cáo công nghệ này là của Alex Krizhevsky, Vinod Nair và Geoffrey Hinton

Nếu bạn muốn làm theo các ví dụ mã trong bài viết này, bạn có thể tải xuống CIFAR-10 tại đây, chọn phiên bản Python. Bạn sẽ hy sinh 163 MB dung lượng ổ đĩa

Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?
Hình ảnh. Một. Krizhevsky

Khi bạn tải xuống và giải nén thư mục, bạn sẽ phát hiện ra rằng các tệp này không phải là tệp hình ảnh mà con người có thể đọc được. Chúng thực sự đã được đánh số thứ tự và lưu theo lô bằng cách sử dụng cPickle

Mặc dù chúng tôi sẽ không xem xét

$ pip install lmdb
3 hoặc
$ pip install lmdb
4 trong bài viết này, ngoài việc trích xuất tập dữ liệu CIFAR, điều đáng nói là mô-đun Python
$ pip install lmdb
3 có lợi thế chính là có thể tuần tự hóa bất kỳ đối tượng Python nào mà không cần thêm bất kỳ mã hoặc chuyển đổi nào từ phía bạn. Nó cũng có một nhược điểm nghiêm trọng tiềm ẩn là gây rủi ro bảo mật và không đối phó tốt khi xử lý lượng dữ liệu rất lớn

Đoạn mã sau giải nén từng tệp trong số năm tệp bó và tải tất cả các hình ảnh vào một mảng NumPy

import numpy as np
import pickle
from pathlib import Path

# Path to the unzipped CIFAR data
data_dir = Path("data/cifar-10-batches-py/")

# Unpickle function provided by the CIFAR hosts
def unpickle(file):
    with open(file, "rb") as fo:
        dict = pickle.load(fo, encoding="bytes")
    return dict

images, labels = [], []
for batch in data_dir.glob("data_batch_*"):
    batch_data = unpickle(batch)
    for i, flat_im in enumerate(batch_data[b"data"]):
        im_channels = []
        # Each image is flattened, with channels in order of R, G, B
        for j in range(3):
            im_channels.append(
                flat_im[j * 1024 : (j + 1) * 1024].reshape((32, 32))
            )
        # Reconstruct the original image
        images.append(np.dstack((im_channels)))
        # Save the label
        labels.append(batch_data[b"labels"][i])

print("Loaded CIFAR-10 training set:")
print(f" - np.shape(images)     {np.shape(images)}")
print(f" - np.shape(labels)     {np.shape(labels)}")

Tất cả các hình ảnh hiện có trong RAM ở biến

$ pip install lmdb
6, với siêu dữ liệu tương ứng của chúng ở biến
$ pip install lmdb
7 và sẵn sàng để bạn thao tác. Tiếp theo, bạn có thể cài đặt các gói Python mà bạn sẽ sử dụng cho ba phương pháp

Ghi chú. Khối mã cuối cùng đó đã sử dụng chuỗi f. Bạn có thể đọc thêm về chúng trong Chuỗi f của Python 3. Cú pháp định dạng chuỗi được cải thiện (Hướng dẫn)

Thiết lập để lưu trữ hình ảnh trên đĩa

Bạn sẽ cần thiết lập môi trường của mình cho phương pháp lưu và truy cập những hình ảnh này từ đĩa mặc định. Bài viết này sẽ giả sử bạn có Python 3. x được cài đặt trên hệ thống của bạn và sẽ sử dụng

$ pip install lmdb
8 để xử lý hình ảnh

$ pip install lmdb
0

Ngoài ra, nếu thích, bạn có thể cài đặt nó bằng Anaconda

$ pip install lmdb
1

Ghi chú.

$ pip install lmdb
9 là phiên bản gốc của Thư viện hình ảnh Python, không còn được duy trì và không tương thích với Python 3. x. Nếu bạn đã cài đặt
$ pip install lmdb
9 trước đó, hãy nhớ gỡ cài đặt nó trước khi cài đặt
$ pip install lmdb
8, vì chúng không thể tồn tại cùng nhau

Bây giờ bạn đã sẵn sàng để lưu trữ và đọc hình ảnh từ đĩa

Bắt đầu với LMDB

LMDB, đôi khi được gọi là “Cơ sở dữ liệu Lightning”, viết tắt của Lightning Memory-Mapped Database vì nó nhanh và sử dụng các tệp ánh xạ bộ nhớ. Đó là kho lưu trữ khóa-giá trị, không phải cơ sở dữ liệu quan hệ

Về mặt triển khai, LMDB là một cây B+, về cơ bản có nghĩa là nó là một cấu trúc biểu đồ dạng cây được lưu trữ trong bộ nhớ trong đó mỗi phần tử khóa-giá trị là một nút và các nút có thể có nhiều nút con. Các nút trên cùng cấp độ được liên kết với nhau để truyền tải nhanh

Quan trọng là, các thành phần chính của cây B+ được đặt tương ứng với kích thước trang của hệ điều hành máy chủ, tối đa hóa hiệu quả khi truy cập bất kỳ cặp khóa-giá trị nào trong cơ sở dữ liệu. Do hiệu suất cao của LMDB phụ thuộc rất nhiều vào điểm cụ thể này, nên hiệu quả của LMDB đã được chứng minh là phụ thuộc vào hệ thống tệp cơ bản và việc triển khai hệ thống đó

Một lý do quan trọng khác cho hiệu quả của LMDB là nó được ánh xạ bộ nhớ. Điều này có nghĩa là nó trả về các con trỏ trực tiếp tới địa chỉ bộ nhớ của cả khóa và giá trị mà không cần sao chép bất kỳ thứ gì trong bộ nhớ như hầu hết các cơ sở dữ liệu khác đều làm

Những ai muốn tìm hiểu sâu hơn một chút về chi tiết triển khai bên trong của cây B+ có thể xem bài viết này về cây B+ và sau đó chơi với hình ảnh trực quan về việc chèn nút này

Nếu cây B+ không làm bạn quan tâm, đừng lo lắng. Bạn không cần biết nhiều về triển khai nội bộ của họ để sử dụng LMDB. Chúng tôi sẽ sử dụng liên kết Python cho thư viện LMDB C, có thể được cài đặt qua pip

$ pip install lmdb

Bạn cũng có tùy chọn cài đặt qua Anaconda

$ pip install lmdb
6

Kiểm tra xem bạn có thể

$ pip install lmdb
62 từ trình bao Python không và bạn đã sẵn sàng

Loại bỏ các quảng cáo

Bắt đầu với HDF5

HDF5 là viết tắt của Hierarchical Data Format, một định dạng tệp được gọi là HDF4 hoặc HDF5. Chúng ta không cần lo lắng về HDF4, vì HDF5 là phiên bản được bảo trì hiện tại

Thật thú vị, HDF có nguồn gốc từ Trung tâm ứng dụng siêu máy tính quốc gia, dưới dạng định dạng dữ liệu khoa học nhỏ gọn, di động. Nếu bạn đang thắc mắc liệu nó có được sử dụng rộng rãi hay không, hãy xem lời giới thiệu của NASA về HDF5 từ dự án Dữ liệu Trái đất của họ

Các tệp HDF bao gồm hai loại đối tượng

  1. Bộ dữ liệu
  2. Các nhóm

Bộ dữ liệu là các mảng nhiều chiều và các nhóm bao gồm các bộ dữ liệu hoặc các nhóm khác. Mảng đa chiều có kích thước và loại bất kỳ có thể được lưu trữ dưới dạng tập dữ liệu, nhưng kích thước và loại phải thống nhất trong tập dữ liệu. Mỗi bộ dữ liệu phải chứa một mảng N chiều đồng nhất. Điều đó nói rằng, bởi vì các nhóm và bộ dữ liệu có thể được lồng vào nhau, bạn vẫn có thể nhận được sự không đồng nhất mà bạn có thể cần

$ pip install lmdb
8

Cũng như các thư viện khác, bạn có thể cài đặt luân phiên qua Anaconda

$ pip install lmdb
9

Nếu bạn có thể

$ pip install lmdb
63 từ trình bao Python, thì mọi thứ đã được thiết lập đúng cách

Lưu trữ một hình ảnh duy nhất

Bây giờ bạn đã có cái nhìn tổng quan về các phương pháp, hãy đi sâu vào và xem xét so sánh định lượng về các nhiệm vụ cơ bản mà chúng ta quan tâm. mất bao lâu để đọc và ghi tệp cũng như dung lượng bộ nhớ đĩa sẽ được sử dụng. Đây cũng sẽ là phần giới thiệu cơ bản về cách thức hoạt động của các phương thức, với các ví dụ mã về cách sử dụng chúng.

Khi tôi đề cập đến "tệp", tôi thường có nghĩa là rất nhiều trong số chúng. Tuy nhiên, điều quan trọng là phải phân biệt vì một số phương pháp có thể được tối ưu hóa cho các hoạt động và số lượng tệp khác nhau

Với mục đích thử nghiệm, chúng tôi có thể so sánh hiệu suất giữa các số lượng tệp khác nhau, theo hệ số 10 từ một hình ảnh đến 100.000 hình ảnh. Vì năm lô CIFAR-10 của chúng tôi có thể thêm tới 50.000 hình ảnh nên chúng tôi có thể sử dụng mỗi hình ảnh hai lần để có được 100.000 hình ảnh

Để chuẩn bị cho các thử nghiệm, bạn sẽ muốn tạo một thư mục cho từng phương pháp, thư mục này sẽ chứa tất cả các tệp hoặc hình ảnh cơ sở dữ liệu và lưu các đường dẫn đến các thư mục đó trong các biến

$ pip install lmdb
1

$ pip install lmdb
64 không tự động tạo các thư mục cho bạn trừ khi bạn yêu cầu cụ thể

$ pip install lmdb
3

Bây giờ, bạn có thể chuyển sang chạy các thử nghiệm thực tế, với các ví dụ về mã về cách thực hiện các tác vụ cơ bản bằng ba phương pháp khác nhau. Chúng ta có thể sử dụng mô-đun

$ pip install lmdb
65, được bao gồm trong thư viện chuẩn của Python, để tính thời gian cho các thử nghiệm

Mặc dù mục đích chính của bài viết này không phải là tìm hiểu các API của các gói Python khác nhau, nhưng sẽ rất hữu ích nếu bạn hiểu cách chúng có thể được triển khai. Chúng tôi sẽ xem xét các nguyên tắc chung cùng với tất cả mã được sử dụng để tiến hành các thử nghiệm lưu trữ

Loại bỏ các quảng cáo

Lưu trữ vào đĩa

Đầu vào của chúng tôi cho thử nghiệm này là một hình ảnh duy nhất

$ pip install lmdb
66, hiện có trong bộ nhớ dưới dạng một mảng NumPy. Trước tiên, bạn muốn lưu nó vào đĩa dưới dạng ảnh
$ pip install lmdb
0 và đặt tên cho ảnh bằng ID ảnh duy nhất
$ pip install lmdb
68. Điều này có thể được thực hiện bằng cách sử dụng gói
$ pip install lmdb
8 mà bạn đã cài đặt trước đó

$ pip install lmdb
9

Điều này lưu hình ảnh. Trong tất cả các ứng dụng thực tế, bạn cũng quan tâm đến siêu dữ liệu được đính kèm với hình ảnh, mà trong bộ dữ liệu ví dụ của chúng tôi là nhãn hình ảnh. Khi bạn đang lưu trữ hình ảnh vào đĩa, có một số tùy chọn để lưu siêu dữ liệu

Một giải pháp là mã hóa các nhãn thành tên hình ảnh. Điều này có lợi thế là không yêu cầu bất kỳ tệp bổ sung nào

Tuy nhiên, nó cũng có nhược điểm lớn là buộc bạn phải xử lý tất cả các tệp bất cứ khi nào bạn làm bất cứ điều gì với nhãn. Lưu trữ các nhãn trong một tệp riêng biệt cho phép bạn chơi xung quanh với các nhãn một mình mà không phải tải hình ảnh. Ở trên, tôi đã lưu trữ các nhãn trong một tệp

$ pip install lmdb
80 riêng biệt cho thử nghiệm này

Bây giờ, hãy chuyển sang thực hiện chính xác nhiệm vụ tương tự với LMDB

Lưu trữ vào LMDB

Đầu tiên, LMDB là một hệ thống lưu trữ khóa-giá trị trong đó mỗi mục nhập được lưu dưới dạng một mảng byte, vì vậy, trong trường hợp của chúng tôi, các khóa sẽ là mã định danh duy nhất cho mỗi hình ảnh và giá trị sẽ là chính hình ảnh đó. Cả khóa và giá trị đều phải là chuỗi, do đó, cách sử dụng phổ biến là tuần tự hóa giá trị dưới dạng chuỗi, sau đó bỏ tuần tự hóa giá trị đó khi đọc lại

Bạn có thể sử dụng

$ pip install lmdb
3 để tuần tự hóa. Bất kỳ đối tượng Python nào cũng có thể được tuần tự hóa, vì vậy bạn cũng có thể đưa siêu dữ liệu hình ảnh vào cơ sở dữ liệu. Điều này giúp bạn tránh rắc rối khi đính kèm dữ liệu meta trở lại dữ liệu hình ảnh khi chúng tôi tải tập dữ liệu từ đĩa

Bạn có thể tạo một lớp Python cơ bản cho hình ảnh và dữ liệu meta của nó

$ pip install lmdb
00

Thứ hai, vì LMDB được ánh xạ bộ nhớ, các cơ sở dữ liệu mới cần biết chúng dự kiến ​​sẽ sử dụng bao nhiêu bộ nhớ. Điều này tương đối đơn giản trong trường hợp của chúng ta, nhưng nó có thể là một vấn đề lớn trong các trường hợp khác, mà bạn sẽ thấy sâu hơn trong phần sau. LMDB gọi biến này là

$ pip install lmdb
82

Cuối cùng, thao tác đọc và ghi với LMDB được thực hiện trong

$ pip install lmdb
83. Bạn có thể coi chúng tương tự như cơ sở dữ liệu truyền thống, bao gồm một nhóm các thao tác trên cơ sở dữ liệu. Điều này có vẻ phức tạp hơn nhiều so với phiên bản đĩa, nhưng hãy chờ và tiếp tục đọc

Với ba điểm đó, hãy xem mã để lưu một hình ảnh vào LMDB

$ pip install lmdb
01

Ghi chú. Bạn nên tính toán số byte chính xác mà mỗi cặp khóa-giá trị sẽ chiếm

Với tập dữ liệu hình ảnh có kích thước khác nhau, đây sẽ là giá trị gần đúng, nhưng bạn có thể sử dụng

$ pip install lmdb
84 để có được giá trị gần đúng. Hãy nhớ rằng
$ pip install lmdb
85 sẽ chỉ trả về kích thước của một định nghĩa lớp, là 1056, không phải kích thước của một đối tượng được khởi tạo

Hàm cũng sẽ không thể tính toán đầy đủ các mục, danh sách hoặc đối tượng lồng nhau có chứa tham chiếu đến các đối tượng khác

Ngoài ra, bạn có thể sử dụng

$ pip install lmdb
86 để tiết kiệm cho bạn một số tính toán bằng cách xác định kích thước chính xác của đối tượng

Bây giờ bạn đã sẵn sàng để lưu hình ảnh vào LMDB. Cuối cùng, hãy xem phương pháp cuối cùng, HDF5

Lưu trữ với HDF5

Hãy nhớ rằng một tệp HDF5 có thể chứa nhiều tập dữ liệu. Trong trường hợp khá tầm thường này, bạn có thể tạo hai bộ dữ liệu, một cho hình ảnh và một cho siêu dữ liệu của nó

$ pip install lmdb
02

$ pip install lmdb
87 chỉ định loại dữ liệu sẽ được lưu trữ trong tập dữ liệu, trong trường hợp này là số nguyên 8 bit không dấu. Bạn có thể xem danh sách đầy đủ các kiểu dữ liệu được xác định trước của HDF tại đây

Ghi chú. Việc lựa chọn kiểu dữ liệu sẽ ảnh hưởng mạnh đến thời gian chạy và yêu cầu lưu trữ của HDF5, vì vậy tốt nhất bạn nên chọn các yêu cầu tối thiểu của mình

Bây giờ chúng ta đã xem xét ba phương pháp lưu một hình ảnh, hãy chuyển sang bước tiếp theo

Loại bỏ các quảng cáo

Các thử nghiệm để lưu trữ một hình ảnh

Bây giờ bạn có thể đặt cả ba chức năng để lưu một hình ảnh vào từ điển, có thể được gọi sau này trong quá trình thử nghiệm thời gian

$ pip install lmdb
03

Cuối cùng, mọi thứ đã sẵn sàng để tiến hành thí nghiệm hẹn giờ. Hãy thử lưu hình ảnh đầu tiên từ CIFAR và nhãn tương ứng của nó và lưu trữ nó theo ba cách khác nhau

$ pip install lmdb
04

Ghi chú. Trong khi tìm hiểu về LMDB, bạn có thể thấy lỗi

$ pip install lmdb
88. Điều quan trọng cần lưu ý là LMDB không ghi đè lên các giá trị có sẵn, ngay cả khi chúng có cùng khóa

Điều này góp phần làm cho thời gian ghi nhanh, nhưng điều đó cũng có nghĩa là nếu bạn lưu trữ một hình ảnh nhiều lần trong cùng một tệp LMDB, thì bạn sẽ sử dụng hết kích thước bản đồ. Nếu bạn chạy một chức năng lưu trữ, trước tiên hãy nhớ xóa mọi tệp LMDB có sẵn

Hãy nhớ rằng chúng tôi quan tâm đến thời gian chạy, được hiển thị ở đây tính bằng giây và cả mức sử dụng bộ nhớ

Phương pháp Lưu một ảnh + Đĩa MetaMemory1. 915 ms8 KLMDB1. 203 ms32 KHDF58. 243 ms8 K

Có hai điều rút ra ở đây

  1. Tất cả các phương pháp đều nhanh chóng
  2. Về mặt sử dụng đĩa, LMDB sử dụng nhiều hơn

Rõ ràng, mặc dù LMDB dẫn đầu về hiệu suất một chút, chúng tôi vẫn chưa thuyết phục được ai tại sao không chỉ lưu trữ hình ảnh trên đĩa. Xét cho cùng, đó là định dạng con người có thể đọc được và bạn có thể mở và xem chúng từ bất kỳ trình duyệt hệ thống tệp nào. Chà, đã đến lúc xem nhiều hình ảnh hơn…

Lưu trữ nhiều hình ảnh

Bạn đã thấy mã để sử dụng các phương pháp lưu trữ khác nhau để lưu một hình ảnh, vì vậy bây giờ chúng ta cần điều chỉnh mã để lưu nhiều hình ảnh và sau đó chạy thử nghiệm theo thời gian

Điều chỉnh mã cho nhiều hình ảnh

Lưu nhiều hình ảnh dưới dạng tệp

$ pip install lmdb
0 cũng đơn giản như gọi
$ pip install lmdb
90 nhiều lần. Nhưng điều này không đúng với LMDB hoặc HDF5, vì bạn không muốn có một tệp cơ sở dữ liệu khác cho mỗi hình ảnh. Thay vào đó, bạn muốn đặt tất cả các hình ảnh vào một hoặc nhiều tệp

Bạn sẽ cần thay đổi mã một chút và tạo ba chức năng mới chấp nhận nhiều hình ảnh,

$ pip install lmdb
91,
$ pip install lmdb
92 và
$ pip install lmdb
93

$ pip install lmdb
05

Vì vậy, bạn có thể lưu trữ nhiều tệp vào đĩa, phương thức tệp hình ảnh đã được thay đổi để lặp qua từng hình ảnh trong danh sách. Đối với LMDB, cũng cần có một vòng lặp vì chúng tôi đang tạo một đối tượng

$ pip install lmdb
94 cho mỗi hình ảnh và siêu dữ liệu của nó

Điều chỉnh nhỏ nhất là với phương pháp HDF5. Trên thực tế, hầu như không có sự điều chỉnh nào cả. Các tệp HFD5 không có giới hạn về kích thước tệp ngoài các giới hạn bên ngoài hoặc kích thước tập dữ liệu, vì vậy tất cả các hình ảnh được nhồi vào một tập dữ liệu duy nhất, giống như trước đây

Tiếp theo, bạn sẽ cần chuẩn bị tập dữ liệu cho các thử nghiệm bằng cách tăng kích thước của tập dữ liệu đó

Loại bỏ các quảng cáo

Chuẩn bị bộ dữ liệu

Trước khi chạy lại thử nghiệm, trước tiên hãy nhân đôi kích thước tập dữ liệu của chúng tôi để chúng tôi có thể thử nghiệm với tối đa 100.000 hình ảnh

$ pip install lmdb
06

Bây giờ đã có đủ hình ảnh, đã đến lúc thử nghiệm

Thử nghiệm lưu trữ nhiều hình ảnh

Như bạn đã làm với việc đọc nhiều hình ảnh, bạn có thể tạo một từ điển xử lý tất cả các chức năng với

$ pip install lmdb
95 và chạy thử nghiệm

$ pip install lmdb
07

Nếu bạn đang theo dõi và tự chạy mã, bạn sẽ cần hồi hộp ngồi lại một lúc và đợi 111.110 hình ảnh được lưu trữ ba lần mỗi hình vào đĩa của bạn, ở ba định dạng khác nhau. Bạn cũng sẽ cần nói lời tạm biệt với khoảng 2 GB dung lượng ổ đĩa

Bây giờ là khoảnh khắc của sự thật. Tất cả việc lưu trữ đó mất bao lâu?

Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?
Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?

Biểu đồ đầu tiên hiển thị thời gian lưu trữ bình thường, chưa được điều chỉnh, làm nổi bật sự khác biệt lớn giữa lưu trữ vào tệp

$ pip install lmdb
0 và LMDB hoặc HDF5

Biểu đồ thứ hai hiển thị

$ pip install lmdb
97 của thời gian, nhấn mạnh rằng HDF5 bắt đầu chậm hơn LMDB, nhưng với số lượng hình ảnh lớn hơn, sẽ xuất hiện sớm hơn một chút

Mặc dù kết quả chính xác có thể khác nhau tùy thuộc vào máy của bạn, đây là lý do tại sao LMDB và HDF5 đáng để suy nghĩ. Đây là mã đã tạo biểu đồ trên

$ pip install lmdb
08

Bây giờ chúng ta hãy tiếp tục đọc lại các hình ảnh

Đọc một hình ảnh duy nhất

Đầu tiên, hãy xem xét trường hợp đọc một hình ảnh trở lại thành một mảng cho từng phương thức trong ba phương thức

Đọc từ đĩa

Trong ba phương pháp, LMDB yêu cầu nhiều công việc nhất khi đọc các tệp hình ảnh ra khỏi bộ nhớ, do bước tuần tự hóa. Hãy xem qua các chức năng này để đọc một hình ảnh cho từng định dạng trong số ba định dạng lưu trữ

Đầu tiên, đọc một hình ảnh và meta của nó từ tệp

$ pip install lmdb
0 và
$ pip install lmdb
80

$ pip install lmdb
09

Loại bỏ các quảng cáo

Đọc từ LMDB

Tiếp theo, đọc cùng một hình ảnh và meta từ LMDB bằng cách mở môi trường và bắt đầu giao dịch đọc

$ pip install lmdb
10

Dưới đây là một vài điểm không phải về đoạn mã trên

  • Dòng 13. Cờ
    $ pip install lmdb
    
    10 chỉ định rằng không được phép ghi trên tệp LMDB cho đến khi giao dịch kết thúc. Trong biệt ngữ cơ sở dữ liệu, nó tương đương với việc khóa đọc
  • Dòng 20. Để truy xuất đối tượng CIFAR_Image, bạn cần đảo ngược các bước mà chúng tôi đã thực hiện để chọn nó khi viết nó. Đây là nơi mà
    $ pip install lmdb
    
    11 của đối tượng hữu ích

Điều này kết thúc việc đọc lại hình ảnh từ LMDB. Cuối cùng, bạn sẽ muốn làm điều tương tự với HDF5

Đọc từ HDF5

Đọc từ HDF5 trông rất giống với quá trình viết. Đây là mã để mở và đọc tệp HDF5 và phân tích cú pháp cùng một hình ảnh và meta

$ pip install lmdb
11

Lưu ý rằng bạn truy cập vào các bộ dữ liệu khác nhau trong tệp bằng cách lập chỉ mục đối tượng

$ pip install lmdb
12 bằng cách sử dụng tên bộ dữ liệu trước dấu gạch chéo về phía trước
$ pip install lmdb
13. Như trước đây, bạn có thể tạo một từ điển chứa tất cả các chức năng đọc

$ pip install lmdb
12

Với từ điển này đã được chuẩn bị, bạn đã sẵn sàng để chạy thử nghiệm

Thử nghiệm để đọc một hình ảnh

Bạn có thể mong đợi rằng thử nghiệm đọc một hình ảnh sẽ có kết quả hơi tầm thường, nhưng đây là mã thử nghiệm

$ pip install lmdb
13

Dưới đây là kết quả của thử nghiệm đọc một hình ảnh

MethodRead Single Image + MetaDisk1. 61970 msLMDB4. 52063 msHDF51. 98036 ms

Đọc các tệp

$ pip install lmdb
0 và
$ pip install lmdb
80 trực tiếp từ đĩa nhanh hơn một chút, nhưng cả ba phương pháp đều hoạt động nhanh chóng. Các thí nghiệm chúng ta sẽ làm tiếp theo thú vị hơn nhiều

Đọc nhiều hình ảnh

Bây giờ bạn có thể điều chỉnh mã để đọc nhiều hình ảnh cùng một lúc. Đây có thể là hành động bạn sẽ thực hiện thường xuyên nhất, vì vậy hiệu suất thời gian chạy là điều cần thiết

Loại bỏ các quảng cáo

Điều chỉnh mã cho nhiều hình ảnh

Mở rộng các hàm trên, bạn có thể tạo các hàm với

$ pip install lmdb
16, dùng cho các thí nghiệm tiếp theo. Giống như trước đây, thật thú vị khi so sánh hiệu suất khi đọc số lượng hình ảnh khác nhau, được lặp lại trong mã bên dưới để tham khảo

$ pip install lmdb
14

Với các chức năng đọc được lưu trữ trong từ điển cũng như các chức năng viết, bạn đã sẵn sàng cho thử nghiệm

Thử nghiệm để đọc nhiều hình ảnh

Bây giờ bạn có thể chạy thử nghiệm để đọc nhiều hình ảnh

$ pip install lmdb
15

Như chúng tôi đã làm trước đây, bạn có thể vẽ biểu đồ kết quả thử nghiệm đã đọc

Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?
Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?

Biểu đồ trên cùng hiển thị thời gian đọc bình thường, chưa được điều chỉnh, cho thấy sự khác biệt lớn giữa việc đọc từ tệp

$ pip install lmdb
0 và LMDB hoặc HDF5

Ngược lại, biểu đồ ở phía dưới hiển thị

$ pip install lmdb
97 của thời gian, làm nổi bật sự khác biệt tương đối với ít hình ảnh hơn. Cụ thể, chúng ta có thể thấy HDF5 khởi đầu phía sau như thế nào, nhưng với nhiều hình ảnh hơn, HDF5 trở nên nhanh hơn LMDB một cách nhất quán một chút

Viết thời gian đọcHiển thị/Ẩn

Sử dụng chức năng vẽ đồ thị tương tự như đối với thời gian ghi, chúng tôi có những điều sau đây

$ pip install lmdb
16

Trong thực tế, thời gian viết thường ít quan trọng hơn thời gian đọc. Hãy tưởng tượng rằng bạn đang đào tạo một mạng lưới thần kinh sâu về hình ảnh và chỉ một nửa toàn bộ tập dữ liệu hình ảnh của bạn phù hợp với RAM cùng một lúc. Mỗi kỷ nguyên đào tạo mạng yêu cầu toàn bộ tập dữ liệu và mô hình cần vài trăm kỷ nguyên để hội tụ. Về cơ bản, bạn sẽ đọc một nửa tập dữ liệu vào bộ nhớ mỗi kỷ nguyên

Có một số thủ thuật mà mọi người thực hiện, chẳng hạn như đào tạo các kỷ nguyên giả để làm cho điều này tốt hơn một chút, nhưng bạn hiểu ý

Bây giờ, hãy nhìn lại vào biểu đồ đã đọc ở trên. Sự khác biệt đột ngột giữa thời gian đọc 40 giây và 4 giây là sự khác biệt giữa việc đợi sáu giờ để mô hình của bạn đào tạo hoặc bốn mươi phút

Nếu chúng ta xem thời gian đọc và ghi trên cùng một biểu đồ, thì chúng ta có kết quả như sau

Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?

Viết thời gian đọc và ghiHiển thị/Ẩn

Bạn có thể vẽ tất cả thời gian đọc và ghi trên một biểu đồ bằng cách sử dụng cùng chức năng vẽ đồ thị

$ pip install lmdb
17

Khi bạn đang lưu trữ hình ảnh dưới dạng tệp

$ pip install lmdb
0, sẽ có sự khác biệt lớn giữa thời gian ghi và đọc. Tuy nhiên, với LMDB và HDF5, sự khác biệt ít rõ rệt hơn nhiều. Nhìn chung, ngay cả khi thời gian đọc quan trọng hơn thời gian ghi, thì vẫn có lý lẽ mạnh mẽ để lưu trữ hình ảnh bằng LMDB hoặc HDF5

Bây giờ bạn đã thấy những lợi ích về hiệu suất của LMDB và HDF5, hãy xem xét một chỉ số quan trọng khác. sử dụng đĩa

Loại bỏ các quảng cáo

Xem xét việc sử dụng đĩa

Tốc độ không phải là thước đo hiệu suất duy nhất mà bạn có thể quan tâm. Chúng tôi đã xử lý các tập dữ liệu rất lớn, vì vậy dung lượng ổ đĩa cũng là một mối quan tâm rất hợp lệ và phù hợp

Giả sử bạn có tập dữ liệu hình ảnh là 3TB. Có lẽ, bạn đã có chúng trên đĩa ở đâu đó, không giống như ví dụ CIFAR của chúng tôi, vì vậy bằng cách sử dụng một phương pháp lưu trữ thay thế, về cơ bản, bạn đang tạo một bản sao của chúng, bản sao này cũng phải được lưu trữ. Làm như vậy sẽ mang lại cho bạn những lợi ích to lớn về hiệu suất khi bạn sử dụng hình ảnh, nhưng bạn sẽ cần đảm bảo rằng mình có đủ dung lượng đĩa

Các phương pháp lưu trữ khác nhau sử dụng bao nhiêu dung lượng đĩa?

Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?

Tạo sơ đồ vạch để sử dụng dung lượng ổ đĩaHiển thị/Ẩn

Tôi đã sử dụng lệnh Linux

$ pip install lmdb
30 để tính toán mức sử dụng đĩa trên hệ thống của mình. Phương pháp này có một số giá trị gần đúng do làm tròn, nhưng đây là so sánh chung

$ pip install lmdb
18

Cả HDF5 và LMDB đều chiếm nhiều dung lượng ổ đĩa hơn nếu bạn lưu trữ bằng cách sử dụng ảnh

$ pip install lmdb
0 bình thường. Điều quan trọng cần lưu ý là cả việc sử dụng và hiệu suất của đĩa LMDB và HDF5 đều phụ thuộc rất nhiều vào nhiều yếu tố khác nhau, bao gồm cả hệ điều hành và quan trọng hơn là kích thước của dữ liệu bạn lưu trữ

LMDB đạt được hiệu quả từ bộ nhớ đệm và tận dụng kích thước trang của hệ điều hành. Bạn không cần phải hiểu hoạt động bên trong của nó, nhưng lưu ý rằng với hình ảnh lớn hơn, bạn sẽ sử dụng đĩa nhiều hơn đáng kể với LMDB, vì hình ảnh sẽ không vừa với các trang lá của LMDB, vị trí lưu trữ thông thường trong cây và . Thanh LMDB trong biểu đồ trên sẽ bắn ra khỏi biểu đồ

Hình ảnh pixel 32x32x3 của chúng tôi tương đối nhỏ so với hình ảnh trung bình mà bạn có thể sử dụng và chúng cho phép hiệu suất LMDB tối ưu

Mặc dù chúng tôi sẽ không khám phá nó ở đây bằng thực nghiệm, nhưng theo kinh nghiệm của riêng tôi với hình ảnh 256x256x3 hoặc 512x512x3 pixel, HDF5 thường hiệu quả hơn một chút về mặt sử dụng đĩa so với LMDB. Đây là một sự chuyển tiếp tốt sang phần cuối cùng, một cuộc thảo luận định tính về sự khác biệt giữa các phương pháp

Thảo luận

Có các tính năng phân biệt khác của LMDB và HDF5 đáng để biết và điều quan trọng là phải thảo luận ngắn gọn về một số lời chỉ trích của cả hai phương pháp. Một số liên kết được bao gồm cùng với cuộc thảo luận nếu bạn muốn tìm hiểu thêm

Truy cập song song

Một so sánh quan trọng mà chúng tôi đã không kiểm tra trong các thử nghiệm ở trên là đọc và ghi đồng thời. Thông thường, với các tập dữ liệu lớn như vậy, bạn có thể muốn tăng tốc hoạt động của mình thông qua song song hóa

Trong phần lớn các trường hợp, bạn sẽ không muốn đọc các phần của cùng một hình ảnh cùng một lúc mà bạn sẽ muốn đọc nhiều hình ảnh cùng một lúc. Với định nghĩa về đồng thời này, việc lưu trữ vào đĩa dưới dạng tệp

$ pip install lmdb
0 thực sự cho phép đồng thời hoàn toàn. Không có gì ngăn cản bạn đọc nhiều hình ảnh cùng một lúc từ các chủ đề khác nhau hoặc ghi nhiều tệp cùng một lúc, miễn là các tên hình ảnh khác nhau

Còn LMDB thì sao? . Bạn có thể đọc thêm về điều đó tại trang web công nghệ LMDB

Nhiều ứng dụng có thể truy cập cùng một cơ sở dữ liệu LMDB cùng một lúc và nhiều luồng từ cùng một quy trình cũng có thể đồng thời truy cập LMDB để đọc. Điều này cho phép thời gian đọc nhanh hơn. nếu bạn chia tất cả CIFAR thành mười bộ, thì bạn có thể thiết lập mười quy trình để mỗi lần đọc trong một bộ và nó sẽ chia thời gian tải cho mười

HDF5 cũng cung cấp I/O song song, cho phép đọc và ghi đồng thời. Tuy nhiên, khi triển khai, khóa ghi được giữ và quyền truy cập là tuần tự, trừ khi bạn có hệ thống tệp song song

Có hai tùy chọn chính nếu bạn đang làm việc trên một hệ thống như vậy, sẽ được thảo luận sâu hơn trong bài viết này của Nhóm HDF về IO song song. Nó có thể trở nên khá phức tạp và tùy chọn đơn giản nhất là chia tập dữ liệu của bạn thành nhiều tệp HDF5 một cách thông minh, sao cho mỗi quy trình có thể xử lý một tệp

$ pip install lmdb
33 độc lập với các tệp khác

Tài liệu

Nếu bạn Google

$ pip install lmdb
34, ít nhất là ở Vương quốc Anh, kết quả tìm kiếm thứ ba là IMDb, Cơ sở dữ liệu phim trên Internet. Đó không phải là những gì bạn đang tìm kiếm

Trên thực tế, có một nguồn tài liệu chính về ràng buộc Python của LMDB, được lưu trữ trên Read the Docs LMDB. Trong khi gói Python thậm chí còn chưa đạt phiên bản > 0. 94, nó được sử dụng khá rộng rãi và được coi là ổn định

Đối với bản thân công nghệ LMDB, có nhiều tài liệu chi tiết hơn tại trang web công nghệ LMDB, bạn có thể cảm thấy hơi giống như học phép tính ở lớp hai, trừ khi bạn bắt đầu từ trang Bắt đầu của họ

Đối với HDF5, có tài liệu rất rõ ràng tại trang tài liệu h5py, cũng như một bài đăng trên blog hữu ích của Christopher Lovell, đây là một tổng quan tuyệt vời về cách sử dụng gói

$ pip install lmdb
35. Cuốn sách O'Reilly, Python và HDF5 cũng là một cách hay để bắt đầu

Mặc dù không phải là tài liệu mà có lẽ người mới bắt đầu sẽ đánh giá cao, nhưng cả LMDB và HDF5 đều có cộng đồng người dùng lớn, do đó, tìm kiếm sâu hơn trên Google thường mang lại kết quả hữu ích

Loại bỏ các quảng cáo

Một cái nhìn phê phán hơn về việc thực hiện

Không có điều không tưởng trong các hệ thống lưu trữ và cả LMDB và HDF5 đều có những cạm bẫy

Một điểm quan trọng cần hiểu về LMDB là dữ liệu mới được ghi mà không ghi đè hoặc di chuyển dữ liệu hiện có. Đây là một quyết định thiết kế cho phép đọc cực nhanh mà bạn đã chứng kiến ​​trong các thử nghiệm của chúng tôi, đồng thời đảm bảo tính toàn vẹn và độ tin cậy của dữ liệu mà không cần lưu giữ thêm nhật ký giao dịch

Tuy nhiên, hãy nhớ rằng bạn cần xác định tham số

$ pip install lmdb
82 để cấp phát bộ nhớ trước khi ghi vào cơ sở dữ liệu mới? . Giả sử bạn đã tạo cơ sở dữ liệu LMDB và mọi thứ đều tuyệt vời. Bạn đã kiên nhẫn chờ đợi tập dữ liệu khổng lồ của mình được đóng gói vào LMDB

Sau đó, ở cuối dòng, bạn nhớ rằng bạn cần thêm dữ liệu mới. Ngay cả với bộ đệm bạn đã chỉ định trên

$ pip install lmdb
82 của mình, bạn có thể dễ dàng thấy lỗi
$ pip install lmdb
38. Trừ khi bạn muốn viết lại toàn bộ cơ sở dữ liệu của mình, với
$ pip install lmdb
82 đã cập nhật, bạn sẽ phải lưu trữ dữ liệu mới đó trong một tệp LMDB riêng biệt. Mặc dù một giao dịch có thể mở rộng trên nhiều tệp LMDB, nhưng việc có nhiều tệp vẫn có thể gây khó khăn

Ngoài ra, một số hệ thống có các hạn chế về dung lượng bộ nhớ có thể được yêu cầu cùng một lúc. Theo kinh nghiệm của riêng tôi, khi làm việc với các hệ thống điện toán hiệu năng cao (HPC), điều này tỏ ra vô cùng khó chịu và thường khiến tôi thích HDF5 hơn LMDB

Với cả LMDB và HDF5, chỉ có mục được yêu cầu được đọc vào bộ nhớ cùng một lúc. Với LMDB, từng cặp khóa-đơn vị được đọc vào bộ nhớ, trong khi với HDF5, đối tượng

$ pip install lmdb
90 có thể được truy cập giống như một mảng Python, với chỉ mục
$ pip install lmdb
91, phạm vi,
$ pip install lmdb
92 và cách ghép nối khác
$ pip install lmdb
93

Do cách hệ thống được tối ưu hóa và tùy thuộc vào hệ điều hành của bạn, thứ tự bạn truy cập các mục có thể ảnh hưởng đến hiệu suất

Theo kinh nghiệm của tôi, nói chung đúng là đối với LMDB, bạn có thể có hiệu suất tốt hơn khi truy cập các mục tuần tự theo khóa (các cặp khóa-giá trị được lưu trong bộ nhớ được sắp xếp theo thứ tự chữ và số theo khóa) và đối với HDF5, truy cập phạm vi lớn sẽ hoạt động tốt hơn đọc

$ pip install lmdb
19

Nếu bạn đang cân nhắc lựa chọn định dạng lưu trữ tệp để viết phần mềm của mình, sẽ thật thiếu sót nếu không đề cập đến Di chuyển khỏi HDF5 của Cyrille Rossant về những cạm bẫy của HDF5 và phản hồi của Konrad Hinsen về HDF5 và tương lai của quản lý dữ liệu, trong đó . Lưu ý rằng tập dữ liệu tương đối nhỏ hơn vẫn có kích thước vài GB

Tích hợp với các thư viện khác

Nếu bạn đang xử lý các tập dữ liệu thực sự lớn, thì rất có khả năng bạn sẽ làm được điều gì đó quan trọng với chúng. Thật đáng để xem xét các thư viện học sâu và loại tích hợp nào với LMDB và HDF5

Trước hết, tất cả các thư viện đều hỗ trợ đọc hình ảnh từ đĩa dưới dạng tệp

$ pip install lmdb
0, miễn là bạn chuyển đổi chúng thành mảng NumPy có định dạng mong muốn. Điều này đúng với tất cả các phương pháp và chúng ta đã thấy ở trên rằng việc đọc ảnh dưới dạng mảng tương đối đơn giản.

Dưới đây là một số thư viện học sâu phổ biến nhất và sự tích hợp LMDB và HDF5 của chúng

  • Caffe có tích hợp LMDB ổn định, được hỗ trợ tốt và nó xử lý bước đọc một cách rõ ràng. Lớp LMDB cũng có thể dễ dàng được thay thế bằng cơ sở dữ liệu HDF5

  • Máy ảnh sử dụng định dạng HDF5 để lưu và khôi phục mô hình. Điều này ngụ ý rằng TensorFlow cũng có thể

  • TensorFlow có lớp tích hợp sẵn

    $ pip install lmdb
    
    95 cung cấp giao diện để đọc dữ liệu đầu vào từ tệp LMDB và có thể tạo các trình vòng lặp và thang đo theo lô. TensorFlow không có lớp dựng sẵn cho HDF5, nhưng có thể viết một lớp kế thừa từ lớp
    $ pip install lmdb
    
    96. Cá nhân tôi sử dụng hoàn toàn một lớp tùy chỉnh được thiết kế để truy cập đọc tối ưu dựa trên cách tôi cấu trúc các tệp HDF5 của mình

  • Theano vốn không hỗ trợ bất kỳ định dạng tệp hoặc cơ sở dữ liệu cụ thể nào, nhưng như đã nêu trước đây, có thể sử dụng bất kỳ thứ gì miễn là nó được đọc dưới dạng mảng N chiều

Mặc dù còn lâu mới toàn diện, nhưng điều này hy vọng mang đến cho bạn cảm nhận về sự tích hợp LMDB/HDF5 của một số thư viện deep learning chính

Một vài hiểu biết cá nhân về lưu trữ hình ảnh trong Python

Trong công việc hàng ngày của mình, phân tích hàng terabyte hình ảnh y tế, tôi sử dụng cả LMDB và HDF5, và đã học được rằng, với bất kỳ phương pháp lưu trữ nào, việc suy nghĩ trước là rất quan trọng

Thông thường, các mô hình cần được đào tạo bằng cách sử dụng xác thực chéo k-fold, bao gồm việc chia toàn bộ tập dữ liệu thành k bộ (k thường là 10) và k mô hình được đào tạo, mỗi mô hình có một bộ k khác nhau được sử dụng làm bộ kiểm tra. Điều này đảm bảo rằng mô hình không khớp quá mức với tập dữ liệu, hay nói cách khác, không thể đưa ra dự đoán tốt trên dữ liệu không nhìn thấy

Một cách tiêu chuẩn để tạo tập hợp k là đặt một biểu diễn bằng nhau cho từng loại dữ liệu được biểu thị trong tập dữ liệu trong mỗi tập hợp k. Do đó, việc lưu từng bộ k vào bộ dữ liệu HDF5 riêng biệt sẽ tối đa hóa hiệu quả. Đôi khi, một tập hợp k đơn lẻ không thể được tải vào bộ nhớ cùng một lúc, do đó, ngay cả việc sắp xếp thứ tự dữ liệu trong một tập dữ liệu cũng cần phải suy nghĩ trước

Với LMDB, tôi cũng cẩn thận lên kế hoạch trước khi tạo (các) cơ sở dữ liệu. Có một vài câu hỏi hay đáng để hỏi trước khi bạn lưu hình ảnh

  • Làm cách nào tôi có thể lưu hình ảnh sao cho hầu hết các lần đọc sẽ diễn ra tuần tự?
  • Chìa khóa tốt là gì?
  • Làm cách nào tôi có thể tính toán một
    $ pip install lmdb
    
    82 tốt, dự đoán những thay đổi tiềm năng trong tương lai trong tập dữ liệu?
  • Một giao dịch có thể lớn đến mức nào và các giao dịch nên được chia nhỏ như thế nào?

Bất kể phương thức lưu trữ là gì, khi bạn đang xử lý các bộ dữ liệu hình ảnh lớn, một kế hoạch nhỏ sẽ giúp bạn đi một chặng đường dài

Loại bỏ các quảng cáo

Sự kết luận

Bạn đã làm đến cùng. Bây giờ bạn đã có một cái nhìn bao quát về một chủ đề lớn

Trong bài viết này, bạn đã được giới thiệu ba cách lưu trữ và truy cập nhiều hình ảnh trong Python và có lẽ bạn đã có cơ hội chơi với một số cách trong số đó. Tất cả mã cho bài viết này nằm trong sổ ghi chép Jupyter tại đây hoặc tập lệnh Python tại đây. Bạn tự chịu rủi ro vì một vài GB dung lượng ổ đĩa của bạn sẽ bị chiếm dụng bởi những hình vuông nhỏ của ô tô, thuyền, v.v.

Bạn đã thấy bằng chứng về cách các phương pháp lưu trữ khác nhau có thể ảnh hưởng đáng kể đến thời gian đọc và ghi, cũng như một số ưu và nhược điểm của ba phương pháp được xem xét trong bài viết này. Mặc dù lưu trữ hình ảnh dưới dạng tệp

$ pip install lmdb
0 có thể là trực quan nhất, nhưng có những lợi ích hiệu suất lớn khi xem xét các phương pháp như HDF5 hoặc LMDB

Vui lòng thảo luận trong phần nhận xét về các phương pháp lưu trữ tuyệt vời không được đề cập trong bài viết này, chẳng hạn như LevelDB, Feather, TileDB, Badger, BoltDB hoặc bất kỳ thứ gì khác. Không có phương pháp lưu trữ hoàn hảo và phương pháp tốt nhất phụ thuộc vào trường hợp sử dụng và tập dữ liệu cụ thể của bạn

Đọc thêm

Dưới đây là một số tài liệu tham khảo liên quan đến ba phương pháp được đề cập trong bài viết này

  • Liên kết Python cho LMDB
  • tài liệu LMDB. Bắt đầu
  • Liên kết Python cho HDF5 (h5py)
  • Tập đoàn HDF5
  • “Python và HDF5” từ O'Reilly
  • Cái gối

Bạn cũng có thể đánh giá cao “Phân tích các hệ thống lưu trữ hình ảnh để đào tạo mạng lưới thần kinh sâu có thể mở rộng” của Lim, Young và Patton. Bài báo đó bao gồm các thử nghiệm tương tự như các thử nghiệm trong bài viết này, nhưng ở quy mô lớn hơn nhiều, xem xét bộ đệm lạnh và ấm cũng như các yếu tố khác

Đánh dấu là đã hoàn thành

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?

Gửi cho tôi thủ thuật Python »

Về đá Rebecca

Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?
Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?

Rebecca là nghiên cứu sinh tiến sĩ về thị giác máy tính và trí tuệ nhân tạo áp dụng cho hình ảnh y tế. Cô say mê giảng dạy

» Thông tin thêm về Rebecca


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?

Aldren

Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?

Geir Arne

Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?

Joanna

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Làm cách nào để lấy tất cả hình ảnh trong thư mục trong python?

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi