torch/lib/libgomp-d22c30c5.so.1:无法在静态 TLS 块中分配内存

Sac*_*ust 5 python torch nvidia-jetson-nano oserror yolov5

我在我的jetson nano上安装了YoloV5。当出现此错误时,我想执行我的对象检测代码: python3.8/site-packages/torch/lib/libgomp-d22c30c5.so.1: 无法在静态 TLS 块中分配内存。

为了解决这个问题,我尝试将其放入 bashrc 中:

导出 LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1

没用

你还有别的想法吗?

这是我的代码:

import cv2
import numpy as np
from elements.yolo import OBJ_DETECTION

Object_classes = ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
            'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
            'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
            'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
            'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
            'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
            'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
            'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
            'hair drier', 'toothbrush' ]

Object_colors = list(np.random.rand(80,3)*255)
Object_detector = OBJ_DETECTION('weights/yolov5s.pt', Object_classes)

def gstreamer_pipeline(
    capture_width=1280,
    capture_height=720,
    display_width=1280,
    display_height=720,
    framerate=60,
    flip_method=0,
    ):
    return (
        "nvarguscamerasrc ! "
        "video/x-raw(memory:NVMM), "
        "width=(int)%d, height=(int)%d, "
        "format=(string)NV12, framerate=(fraction)%d/1 ! "
        "nvvidconv flip-method=%d ! "
        "video/x-raw, width=(int)%d, height=(int)%d, format=(string)BGRx ! "
        "videoconvert ! "
        "video/x-raw, format=(string)BGR ! appsink"
        % (
        capture_width,
        capture_height,
        framerate,
        flip_method,
        display_width,
        display_height,
      )
    )



print(gstreamer_pipeline(flip_method=0))
cap = cv2.VideoCapture(gstreamer_pipeline(flip_method=0), cv2.CAP_GSTREAMER)
if cap.isOpened():
    window_handle = cv2.namedWindow("CSI Camera", cv2.WINDOW_AUTOSIZE)

    while cv2.getWindowProperty("CSI Camera", 0) >= 0:
        ret, frame = cap.read()
        if ret:
        
            objs = Object_detector.detect(frame)

        
            for obj in objs:
           
                label = obj['label']
                score = obj['score']
                [(xmin,ymin),(xmax,ymax)] = obj['bbox']
                color = Object_colors[Object_classes.index(label)]
                frame = cv2.rectangle(frame, (xmin,ymin), (xmax,ymax), color, 2)   
                frame = cv2.putText(frame, f'{label} ({str(score)})', (xmin,ymin), cv2.FONT_HERSHEY_SIMPLEX , 0.75, color, 1, cv2.LINE_AA)

                cv2.imshow("CSI Camera", frame)
           keyCode = cv2.waitKey(30)
           if keyCode == ord('q'):
                break
cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

else: print("无法打开相机")

小智 8

export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1 不太可能解决您的问题。
因为您的问题发生在python3.8/site-packages/torch/lib/libgomp-d22c30c5.so.1.
因此所需的环境变量设置如下。

export LD_PRELOAD=<parent path to python3.8>/python3.8/site-packages/torch/lib/libgomp-d22c30c5.so.1
Run Code Online (Sandbox Code Playgroud)

我确信目录有父路径python3.8。您应该找到它并将其插入到上面的命令中。
如何找到它: 如何找到我的 Python site-packages 目录的位置?

默认情况下,它将是/usr/lib. 在这种情况下,所需的命令是

export LD_PRELOAD=/usr/lib/python3.8/site-packages/torch/lib/libgomp-d22c30c5.so.1
Run Code Online (Sandbox Code Playgroud)