2015-04-09 17 views
12

Tôi đang cố gắng hiểu cách dữ liệu được diễn giải trong Caffe. Cho rằng tôi đã lấy một cái nhìn tại các Minst Tutorial Nhìn vào định nghĩa dữ liệu đầu vào:Caffe: Hiểu cơ sở hạ tầng lmdb dự kiến ​​cho các đốm màu

layers { 
    name: "mnist" 
    type: DATA 
    data_param { 
    source: "mnist_train_lmdb" 
    backend: LMDB 
    batch_size: 64 
    scale: 0.00390625 
    } 
    top: "data" 
    top: "label" 
} 

bây giờ tôi đã nhìn mnist_train_lmdb và lấy một trong những mục (hiển thị trong hex):

0801101C181C229006 
00000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000 
00000000000054B99F973C2400000000000000000000000000000000 
000000000000DEFEFEFEFEF1C6C6C6C6C6C6C6C6AA34000000000000 
00000000000043724872A3E3FEE1FEFEFEFAE5FEFE8C000000000000 
000000000000000000000011420E4343433B15ECFE6A000000000000 
00000000000000000000000000000000000053FDD112000000000000 
000000000000000000000000000000000016E9FF5300000000000000 
000000000000000000000000000000000081FEEE2C00000000000000 
000000000000000000000000000000003BF9FE3E0000000000000000 
0000000000000000000000000000000085FEBB050000000000000000 
00000000000000000000000000000009CDF83A000000000000000000 
0000000000000000000000000000007EFEB600000000000000000000 
00000000000000000000000000004BFBF03900000000000000000000 
0000000000000000000000000013DDFEA60000000000000000000000 
00000000000000000000000003CBFEDB230000000000000000000000 
00000000000000000000000026FEFE4D000000000000000000000000 
00000000000000000000001FE0FE7301000000000000000000000000 
000000000000000000000085FEFE3400000000000000000000000000 
000000000000000000003DF2FEFE3400000000000000000000000000 
0000000000000000000079FEFEDB2800000000000000000000000000 
0000000000000000000079FECF120000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000 
2807 

(tôi đã thêm các ngắt dòng ở đây để có thể thấy được '7' chữ số.)

Bây giờ câu hỏi của tôi là, nơi định dạng này được mô tả? Hoặc đặt một cách khác nhau, nơi được xác định rằng 36 byte đầu tiên là một số loại tiêu đề và 8 byte cuối cùng có một số thư tương ứng?

Tôi sẽ làm cách nào để xây dựng dữ liệu của riêng mình? Không Blob Tutorial cũng không phải Layers Definition cung cấp nhiều thông tin về các định dạng được yêu cầu. Ý định của tôi không sử dụng dữ liệu hình ảnh, nhưng chuỗi thời gian

Cảm ơn!

Trả lời

15

Tôi nhận ra rằng bộ đệm giao thức phải được phát tại đây. Vì vậy, tôi đã cố gắng deserialize nó chống lại một số các loại được xác định trong caffe.proto.

Datum có vẻ là hoàn toàn phù hợp:

{Caffe.Datum} 
    Channels: 1 
    Data: {byte[784]} 
    Encoded: false 
    FloatData: Count = 0 
    Height: 28 
    Label: 7 
    Width: 28 

Vì vậy, câu trả lời đơn giản là: Đó là một đại diện tuần tự của một 'Datum' gõ dụ như định nghĩa mỗi caffe.proto

Btw . từ tiếng Anh không phải là ngôn ngữ mẹ đẻ của tôi, tôi đã phải đầu tiên nhận ra rằng "Datum" là một hình thức duy nhất của "dữ liệu"

Khi nói đến việc sử dụng dữ liệu của riêng bạn, nó có cấu trúc như sau:

Các kích thước blob thông thường cho dữ liệu là số N x kênh K. chiều cao x chiều rộng H x W. Bộ nhớ Blob là hàng chính trong bố cục sao cho kích thước /bên phải cuối cùng thay đổi nhanh nhất. Ví dụ: giá trị tại chỉ mục (n, k, h, w) nằm trên thực tế tại chỉ mục ((n * K + k) * H + h) * W + w.

Xem Blobs, Layers, and Nets: anatomy of a Caffe model để tham khảo

+2

"Datum" = một mảnh riêng biệt của dữ liệu - giống như một trường hợp – Raffael

+0

Bạn có quản lý để tạo ra một tập tin LMDB trong một chương trình C++? Không chắc chắn nếu tôi hiểu câu hỏi của bạn. – user3728501

+0

Tôi đã sử dụng C# không phải C++, nhưng có sau khi sự hiểu biết ở trên nó đã được khá dễ dàng để kết nối nó với LMDB – Sam7

2

tôi có thể cố gắng trả lời câu hỏi thứ hai của bạn. Vì Caffe chỉ lấy dữ liệu trong một loạt các định dạng được chọn như lmdb, hdf5, vv, tốt nhất là chuyển đổi (hoặc tạo ra - trong trường hợp dữ liệu tổng hợp) dữ liệu của bạn thành các định dạng này. Các liên kết sau đây có thể giúp bạn trong việc này. Nếu bạn gặp sự cố với import hdf5 bằng Python, bạn có thể tham khảo trang this.

Creating an LMDB file in Python

Writing an HDF5 file in Python

HDF5 more examples

Các vấn đề liên quan