TFRecord là một định dạng nhị phân để mã hoá hiệu quả các chuỗi dài của tf.Example protos. TensorFlow có thể dễ dàng tải các tệp TFRecord thông qua gói tf.data như mô tả tại đây và tại đây.
Trang này mô tả cách Earth Engine chuyển đổi giữa định dạng ee.FeatureCollection hoặc ee.Image và định dạng TFRecord.
Đang xuất dữ liệu sang TFRecord
Bạn có thể xuất bảng (ee.FeatureCollection) hoặc hình ảnh (ee.Image)
sang tệp TFRecord trong Google Drive hoặc Cloud Storage. Cấu hình của quá trình xuất phụ thuộc vào nội dung bạn đang xuất như mô tả bên dưới. Tất cả các số được xuất từ Earth Engine sang TFRecord đều được chuyển đổi sang kiểu số thực.
Đang xuất bảng
Khi xuất ee.FeatureCollection sang tệp TFRecord, có mối tương quan 1:1 giữa mỗi ee.Feature trong bảng và mỗi tf.train.Example (tức là mỗi bản ghi) trong tệp TFRecord. Mỗi thuộc tính của ee.Feature được mã hoá dưới dạng tf.train.Feature với danh sách số thực tương ứng với số hoặc ee.Array được lưu trữ trong thuộc tính. Nếu xuất một bảng có mảng trong các thuộc tính, bạn cần cho TensorFlow biết hình dạng của mảng khi đọc. Bảng được xuất sang tệp TFRecord sẽ luôn được nén bằng kiểu nén GZIP. Bạn luôn nhận được chính xác một tệp TFRecord cho mỗi lần xuất.
Ví dụ sau đây minh hoạ cách phân tích cú pháp dữ liệu từ một bảng thuộc tính vô hướng đã xuất ("B2",...,"B7", "landcover"). Lưu ý rằng phương diện của danh sách số thực là [1] và loại là tf.float32:
Python
dataset = tf.data.TFRecordDataset(exportedFilePath) featuresDict = { 'B2': tf.io.FixedLenFeature(shape=[1], dtype=tf.float32), 'B3': tf.io.FixedLenFeature(shape=[1], dtype=tf.float32), 'B4': tf.io.FixedLenFeature(shape=[1], dtype=tf.float32), 'B5': tf.io.FixedLenFeature(shape=[1], dtype=tf.float32), 'B6': tf.io.FixedLenFeature(shape=[1], dtype=tf.float32), 'B7': tf.io.FixedLenFeature(shape=[1], dtype=tf.float32), 'landcover': tf.io.FixedLenFeature(shape=[1], dtype=tf.float32) } parsedDataset = dataset.map(lambda example: tf.io.parse_single_example(example, featuresDict))
Lưu ý rằng ví dụ này minh hoạ việc đọc các đối tượng vô hướng (tức là shape=[1]).
Nếu đang xuất mảng 2D hoặc 3D (ví dụ: các bản vá hình ảnh), thì bạn sẽ chỉ định
hình dạng của các bản vá tại thời điểm phân tích cú pháp, ví dụ: shape=[16, 16] cho một bản vá
pixel 16x16.
Đang xuất hình ảnh
Khi bạn xuất hình ảnh, dữ liệu sẽ được sắp xếp theo kênh, chiều cao, chiều rộng (CHW). Dữ liệu xuất có thể được chia thành nhiều tệp TFRecord, trong đó mỗi tệp chứa một hoặc nhiều bản vá có kích thước patchSize do người dùng chỉ định trong quá trình xuất. Kích thước của tệp tính bằng byte do người dùng chỉ định trong tham số maxFileSize.
Có mối tương quan 1:1 giữa mỗi bản vá và mỗi tf.train.Example trong tệp TFRecord thu được. Mỗi dải của hình ảnh được lưu trữ dưới dạng một tf.train.Feature riêng biệt trong mỗi tf.train.Example, trong đó độ dài của danh sách số thực được lưu trữ trong mỗi đối tượng là chiều rộng * chiều cao của bản vá. Bạn có thể chia danh sách phẳng thành nhiều pixel riêng lẻ như trong ví dụ này.
Hoặc bạn có thể khôi phục hình dạng của bản vá đã xuất như trong ví dụ này.
Để giúp giảm hiệu ứng biên, các bản vá được xuất có thể chồng chéo lên nhau. Cụ thể, bạn có thể chỉ định một kernelSize để tạo ra các ô có kích thước:
[patchSize[0] + kernelSize[0], patchSize[1] + kernelSize[1]]
Mỗi ô xếp chồng lên các ô liền kề [kernelSize[0]/2, kernelSize[1]/2]. Do đó, một hạt nhân có kích thước kernelSize nằm ở giữa một pixel cạnh của một bản vá có kích thước patchSize chứa dữ liệu hoàn toàn hợp lệ. Cách sắp xếp không gian của các mảng trong không gian được minh hoạ trong Hình 1, trong đó Kích thước khoảng đệm tương ứng với phần hạt nhân chồng lên hình ảnh liền kề:
kernelSize/2.
formatOptions
Các tham số patchSize, maxFileSize và kernelSize được truyền đến lệnh gọi ee.Export (JavaScript) hoặc ee.batch.Export (Python) thông qua từ điển formatOptions, trong đó khoá là tên của các tham số bổ sung được truyền đến Export. Các formatOptions có thể có cho một hình ảnh được xuất sang định dạng TFRecord là:
| Thuộc tính | Mô tả | Loại |
|---|---|---|
patchDimensions |
Kích thước được xếp kề nhau trên khu vực xuất, bao phủ chính xác từng pixel trong hộp giới hạn một lần (ngoại trừ trường hợp kích thước bản vá không chia đều hộp giới hạn, trong trường hợp đó, các ô biên dọc theo các cạnh x/y lớn nhất sẽ bị loại bỏ). Kích thước phải lớn hơn 0. | Array<int>[2]. |
kernelSize |
Nếu được chỉ định, các ô sẽ được lưu vào vùng đệm theo kích thước lề cả theo hướng dương và âm, dẫn đến sự chồng chéo giữa các bản vá lân cận. Nếu được chỉ định, bạn phải cung cấp hai phương diện (tương ứng là X và Y). | Array<int>[2]. Mặc định: [1, 1] |
compressed |
Nếu đúng, hãy nén các tệp .tfrecord bằng gzip và thêm hậu tố ".gz" | Boolean. Mặc định: true |
maxFileSize |
Kích thước tối đa (tính bằng byte) cho một tệp .tfrecord đã xuất (trước khi nén). Kích thước tệp nhỏ hơn sẽ dẫn đến việc phân đoạn nhiều hơn (và do đó, có nhiều tệp đầu ra hơn). | Số nguyên. Mặc định: 1 GiB |
defaultValue |
Giá trị được đặt trong mỗi dải của một pixel bị che một phần hoặc hoàn toàn, và giá trị được đặt ở mỗi giá trị trong một đối tượng 3D đầu ra được tạo từ một dải mảng, trong đó độ dài mảng tại pixel nguồn nhỏ hơn độ sâu của giá trị đối tượng (tức là giá trị tại chỉ mục 3 của một pixel mảng có độ dài 2 trong một dải mảng có độ sâu đối tượng tương ứng là 3). Phần phân số bị loại bỏ đối với các dải kiểu số nguyên và được kẹp vào dải của kiểu dải. Giá trị mặc định là: 0 | Số nguyên. Mặc định: 0 |
tensorDepths |
Ánh xạ từ tên của các dải mảng đầu vào đến độ sâu của các tensor 3D mà chúng tạo ra. Mảng sẽ bị cắt bớt hoặc được đệm bằng các giá trị mặc định để phù hợp với hình dạng đã chỉ định. Mỗi dải mảng phải có một mục nhập tương ứng. | Array<int>[]. Mặc định: [] |
sequenceData |
Nếu đúng, mỗi pixel sẽ được xuất dưới dạng SequenceExample liên kết các dải vô hướng với bối cảnh và các dải mảng với các chuỗi của ví dụ. SequenceExamples được xuất theo thứ tự pixel chính theo hàng trong mỗi bản vá, sau đó theo thứ tự chính theo hàng của bản vá khu vực trong chuỗi tệp. | Boolean. Mặc định: false |
collapseBands |
Nếu đúng, tất cả các dải sẽ được kết hợp thành một tensor 3D duy nhất, lấy tên của dải đầu tiên trong hình ảnh. Tất cả các dải tần đều được nâng cấp thành byte, int64, sau đó là số thực theo thứ tự đó, tuỳ thuộc vào loại xa nhất trong chuỗi đó trong tất cả các dải tần. Bạn có thể sử dụng các dải mảng miễn là bạn chỉ định tensor_depths. | Boolean. Mặc định: false |
maskedThreshold |
Tỷ lệ tối đa cho phép của các pixel bị che trong một bản vá. Các bản vá vượt quá mức cho phép này sẽ bị loại bỏ thay vì được ghi vào tệp. Nếu trường này được đặt thành bất kỳ giá trị nào khác ngoài 1, thì tệp phụ JSON sẽ không được tạo. Giá trị mặc định là 1. | Số thực dấu phẩy động. Mặc định: 1 |
Tệp "mixer" TFRecord
Khi bạn xuất sang TFRecord, Earth Engine sẽ tạo một tệp phụ trợ cùng với các tệp TFRecord của bạn, gọi là "mixer". Đây là một tệp JSON đơn giản dùng để xác định cách sắp xếp không gian của các mảng (tức là tham chiếu địa lý). Bạn cần có tệp này để tải thông tin dự đoán về hình ảnh lên như mô tả trong phần tiếp theo.
Đang xuất chuỗi thời gian
Hỗ trợ xuất hình ảnh sang cả Examples và SequenceExamples. Khi bạn xuất sang
Examples, vùng xuất sẽ được cắt thành các bản vá và các bản vá đó được xuất theo
thứ tự hàng chính sang một số tệp .tfrecord, trong đó mỗi dải có tính năng riêng
(trừ phi bạn chỉ định collapseBands). Khi bạn xuất sang SequenceExamples,
một SequenceExample trên mỗi pixel sẽ được xuất, trong đó các SequenceExample đó theo thứ tự hàng chính
trong một bản vá, sau đó theo thứ tự hàng chính của các bản vá trong vùng xuất ban đầu
(nếu bạn không chắc chắn, hãy luôn giả định rằng mọi thứ sẽ theo thứ tự hàng chính ở một mức độ nào đó).
Lưu ý: mọi dải vô hướng của hình ảnh sẽ được đóng gói vào ngữ cảnh của SequenceExample,
trong khi các dải mảng sẽ trở thành dữ liệu chuỗi thực tế.
Dây đeo Array
Bạn có thể xuất các dải mảng khi xuất hình ảnh sang định dạng TFRecord. Việc xuất các dải mảng cung cấp một phương tiện để điền vào "FeatureLists" của SequenceExamples và một cách để tạo tensor 3D khi xuất sang Examples thông thường. Để biết thông tin về cách quản lý độ dài/độ sâu của dải mảng, hãy xem collapseBands và/hoặc tensorDepths trong bảng ở trên. Lưu ý: việc sử dụng collapseBands và xuất sang SequenceExamples (vì vậy, việc đặt tham số sequenceData) sẽ dẫn đến việc tất cả các dải tần được thu gọn thành một chuỗi thời gian duy nhất cho mỗi pixel.
Tải TFRecord lên Earth Engine
Bạn có thể tải bảng (chỉ dòng lệnh) và hình ảnh lên Earth Engine dưới dạng tệp TFRecord. Đối với bảng, mối quan hệ 1:1 được mô tả trước đó áp dụng theo hướng ngược lại (tức là tf.train.Example -> ee.Feature).
Đang tải hình ảnh lên
Nếu bạn tạo thông tin dự đoán về hình ảnh đã xuất, hãy cung cấp bộ trộn khi bạn tải thông tin dự đoán lên (dưới dạng tệp TFRecord) để lấy hình ảnh được tham chiếu địa lý. Xin lưu ý rằng phần chồng chéo của các bản vá (Kích thước khoảng đệm trong Hình 1) sẽ bị loại bỏ để tạo ra phạm vi phủ sóng liền kề của khu vực được xuất. Các kết quả dự đoán phải được sắp xếp dưới dạng một trình tự tf.train.Example có cùng số lượng và thứ tự như các ví dụ về hình ảnh mà bạn đã xuất ban đầu (ngay cả giữa một số lượng tệp tuỳ ý).