При глубоком обучении разрешение изображения слишком велико, что приводит к переполнению памяти.
При глубоком обучении разрешение изображения слишком велико, что приводит к переполнению памяти. Поэтому я хочу разделить изображение на небольшие части и экспортировать информацию аннотаций в формате JSON в текстовый файл. А аннотационная информация каждого txt соответствует каждому обрезанному небольшому изображению. Как мне это сделать?
1 ответ
У меня была такая же проблема с моим Ram при работе с большими изображениями. По моему опыту, постарайтесь найти золотую середину в размере выборки, чтобы не превышать минимальный размер файла в 4 КБ и разместить на изображении целое число образцов, чтобы получить наилучший результат. На ваш вопрос, это зависит от того, как вы хотите отформатировать свой json, если вы используете cv2, вы можете просто сделать это следующим образом:
import cv2
import numpy as np
import json
def split_image(image_path, output_folder, grid_size):
# Load the image
image = cv2.imread(image_path,flags= cv2.IMREAD_COLOR)
# !!Swap Color space because cv2 uses BGR color space wehen reading colors!!
image = cv2.cvtColor(image , cv2.COLOR_BGR2RGB)
# Get dimensions
height, width, color = image.shape
# Calculate grid size based on the number of rows and columns
rows, cols = grid_size
grid_height = height // rows
grid_width = width // cols
for r in range(rows):
for c in range(cols):
# Crop the image to create small pieces
start_y = r * grid_height
end_y = start_y + grid_height
start_x = c * grid_width
end_x = start_x + grid_width
cropped_image = image[start_y:end_y, start_x:end_x]
# Process each cropped image, annotate, and gather annotation information
annotation_info = {
"file_name": f"cropped_{r}_{c}.jpg", # Update file name as needed
"image_size": (grid_width, grid_height), # Update image size accordingly
"annotations": [
# Your annotation details for this cropped image here
# You may need to use a dedicated annotation tool or manually
]
}
# Save the cropped image
cv2.imwrite(f"{output_folder}/cropped_{r}_{c}.jpg", cropped_image)
# Save annotation information to a JSON file
with open(f"{output_folder}/annotation_{r}_{c}.json", "w") as json_file:
json.dump(annotation_info, json_file)
# Example usage:
image_path = "path/to/your/image.jpg"
output_folder = "output_folder"
grid_size = (3, 3) # Split image into a 3x3 grid (you can adjust as needed)
split_image(image_path, output_folder, grid_size)
Аннотация к информации должна соответствовать вашему использованию, поэтому это всего лишь пример! вам нужно найти нужную информацию и ввести ее, если нужно. Обратите внимание, что лучше всего использовать специальный инструмент для аннотаций. Для доступа к вашей информации используйтеjson.load("Filename")
и используемые инструменты для ваших аннотаций. Надеюсь, это поможет, потому что из вашего вопроса о деталях не так уж много информации.