Yolo v4 (Darknet) Mac M2 安装与运行

Yolo v4 (Darknet) Mac M2 安装与运行

源代码(有官方教程,大家有兴趣也可直接去里面看部署流程):AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet )

环境安装

brew

Homebrew — The Missing Package Manager for macOS (or Linux)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

PyTorch

由于是 Mac,这里的PyTorchCPU版本

pip3 install torch torchvision torchaudio

安装慢的话可以尝试添加镜像

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch torchvision torchaudio 

OpenCV

brew install opencv

如果以上命令报错,可以尝试先upgrade一下brew,命令如下:

brew upgrade

或者一些版本相对旧brew也可以尝试

brew install opencv@2

Darknet 部署

git clone https://github.com/AlexeyAB/darknet
cd darknet
mkdir build_release
cd build_release
cmake .. -DENABLE_CUDA=OFF
cmake --build . --target install --parallel 8

Weights下载:yolov4.weights,复制到darknet即可

测试运行

darknet项目目录下,终端运行

./darknet detector test ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4.weights data/dog.jpg -i 0 -thresh 0.25

终端输出类似

 GPU isn't used 
 OpenCV version: 4.11.0
mini_batch = 1, batch = 8, time_steps = 1, train = 0 
   layer   filters  size/strd(dil)      input                output
   0 conv     32       3 x 3/ 1    608 x 608 x   3 ->  608 x 608 x  32 0.639 BF
   1 conv     64       3 x 3/ 2    608 x 608 x  32 ->  304 x 304 x  64 3.407 BF
   2 conv     64       1 x 1/ 1    304 x 304 x  64 ->  304 x 304 x  64 0.757 BF
   3 route  1 		                           ->  304 x 304 x  64 
   4 conv     64       1 x 1/ 1    304 x 304 x  64 ->  304 x 304 x  64 0.757 BF
   5 conv     32       1 x 1/ 1    304 x 304 x  64 ->  304 x 304 x  32 0.379 BF
   6 conv     64       3 x 3/ 1    304 x 304 x  32 ->  304 x 304 x  64 3.407 BF
   7 Shortcut Layer: 4,  wt = 0, wn = 0, outputs: 304 x 304 x  64 0.006 BF
   8 conv     64       1 x 1/ 1    304 x 304 x  64 ->  304 x 304 x  64 0.757 BF
   9 route  8 2 	                           ->  304 x 304 x 128 
  10 conv     64       1 x 1/ 1    304 x 304 x 128 ->  304 x 304 x  64 1.514 BF
  11 conv    128       3 x 3/ 2    304 x 304 x  64 ->  152 x 152 x 128 3.407 BF
  12 conv     64       1 x 1/ 1    152 x 152 x 128 ->  152 x 152 x  64 0.379 BF
  13 route  11 		                           ->  152 x 152 x 128 
  14 conv     64       1 x 1/ 1    152 x 152 x 128 ->  152 x 152 x  64 0.379 BF
  15 conv     64       1 x 1/ 1    152 x 152 x  64 ->  152 x 152 x  64 0.189 BF
  16 conv     64       3 x 3/ 1    152 x 152 x  64 ->  152 x 152 x  64 1.703 BF
  17 Shortcut Layer: 14,  wt = 0, wn = 0, outputs: 152 x 152 x  64 0.001 BF
  18 conv     64       1 x 1/ 1    152 x 152 x  64 ->  152 x 152 x  64 0.189 BF
  19 conv     64       3 x 3/ 1    152 x 152 x  64 ->  152 x 152 x  64 1.703 BF

	....

并弹出预测图像

预测图像

部署成功!!

可能遇到的问题

opencv.pc

当使用brew install opencv可能会出现这个问题

解决方法:

  • 进入文件夹/opt/homebrew/Cellar/opencv/[opencv版本号]/lib/pkgconfig
  • 重命名文件夹内的文件为opencv.pc

OpenCV 4.x+ requires enabled C++11 support

解决方法:

  • 打开项目文件下的Makefile

  • 修改Makefile内容

# 删除原来 CPP=.... 的内容, 替换为下面这一句
CPP=g++ -std=c++11

./src/image_opencv.cpp:12:1: fatal error: unknown type name IplImage

解决方法:

  • 修改项目文件下的src/image_opencv.cpp,建议备份一下
#ifdef OPENCV

#include "stdio.h"
#include "stdlib.h"
#include "opencv2/opencv.hpp"
#include "image.h"

using namespace cv;

extern "C" {
/*IplImage *image_to_ipl(image im)
{
    int x,y,c;
    IplImage *disp = cvCreateImage(cvSize(im.w,im.h), IPL_DEPTH_8U, im.c);
    int step = disp->widthStep;
    for(y = 0; y < im.h; ++y){
        for(x = 0; x < im.w; ++x){
            for(c= 0; c < im.c; ++c){
                float val = im.data[c*im.h*im.w + y*im.w + x];
                disp->imageData[y*step + x*im.c + c] = (unsigned char)(val*255);
            }
        }
    }
    return disp;
}

image ipl_to_image(IplImage* src)
{
    int h = src->height;
    int w = src->width;
    int c = src->nChannels;
    image im = make_image(w, h, c);
    unsigned char *data = (unsigned char *)src->imageData;
    int step = src->widthStep;
    int i, j, k;
    for(i = 0; i < h; ++i){
        for(k= 0; k < c; ++k){
            for(j = 0; j < w; ++j){
                im.data[k*w*h + i*w + j] = data[i*step + j*c + k]/255.;
            }
        }
    }
    return im;
}*/

Mat image_to_mat(image im)
{
    image copy = copy_image(im);
    constrain_image(copy);
    if(im.c == 3) rgbgr_image(copy);
    int x, y, c;
    Mat m = Mat(Size(im.w, im.h), CV_8UC(im.c));
    int step = m.step;
    for (y = 0; y < im.h; ++y) {
        for (x = 0; x < im.w; ++x) {
            for (c = 0; c < im.c; ++c) {
                float val = copy.data[c*im.h*im.w + y * im.w + x];
                m.data[y*step + x * im.c + c] = (unsigned char)(val * 255);
            }
        }
    }
/*    IplImage *ipl = image_to_ipl(copy);
    Mat m = cvarrToMat(ipl, true);
    cvReleaseImage(&ipl);*/
    free_image(copy);
    return m;
}

image mat_to_image(Mat m)
{
/*    IplImage ipl = m;
    image im = ipl_to_image(&ipl);
    rgbgr_image(im);*/
    int h = m.rows;
    int w = m.cols;
    int c = m.channels();
    image im = make_image(w, h, c);
    unsigned char *data = (unsigned char *)m.data;
    int step = m.step;
    int i, j, k;
    for (i = 0; i < h; ++i) {
        for (k = 0; k < c; ++k) {
            for (j = 0; j < w; ++j) {
                im.data[k*w*h + i * w + j] = data[i*step + j * c + k] / 255.;
            }
        }
    }
    if (im.c == 3) rgbgr_image(im);

    return im;
}

void *open_video_stream(const char *f, int c, int w, int h, int fps)
{
    VideoCapture *cap;
    if(f) cap = new VideoCapture(f);
    else cap = new VideoCapture(c);
    if(!cap->isOpened()) return 0;
    if(w) cap->set(CAP_PROP_FRAME_WIDTH, w);
    if(h) cap->set(CAP_PROP_FRAME_HEIGHT, w);
    if(fps) cap->set(CAP_PROP_FPS, w);
    return (void *) cap;
}

image get_image_from_stream(void *p)
{
    VideoCapture *cap = (VideoCapture *)p;
    Mat m;
    *cap >> m;
    if(m.empty()) return make_empty_image(0,0,0);
    return mat_to_image(m);
}

image load_image_cv(char *filename, int channels)
{
    int flag = -1;
    if (channels == 0) flag = -1;
    else if (channels == 1) flag = 0;
    else if (channels == 3) flag = 1;
    else {
        fprintf(stderr, "OpenCV can't force load with %d channels\n", channels);
    }
    Mat m;
    m = imread(filename, flag);
    if(!m.data){
        fprintf(stderr, "Cannot load image \"%s\"\n", filename);
        char buff[256];
        sprintf(buff, "echo %s >> bad.list", filename);
        system(buff);
        return make_image(10,10,3);
        //exit(0);
    }
    image im = mat_to_image(m);
    return im;
}

int show_image_cv(image im, const char* name, int ms)
{
    Mat m = image_to_mat(im);
    imshow(name, m);
    int c = waitKey(ms);
    if (c != -1) c = c%256;
    return c;
}

void make_window(char *name, int w, int h, int fullscreen)
{
    namedWindow(name, WINDOW_NORMAL);
    if (fullscreen) {
        setWindowProperty(name, WND_PROP_FULLSCREEN, WINDOW_FULLSCREEN);
    } else {
        resizeWindow(name, w, h);
        if(strcmp(name, "Demo") == 0) moveWindow(name, 0, 0);
    }
}

}

#endif

参考链接

安装darknet 依赖 opencv4时报错的解决方法

<think>好的,用户想在Mac M2安装运行YOLO框架,我需要一步步来解答。首先,我得确认YOLO的不同版本,比如YOLOv5或YOLOv8,它们通常基于PyTorch。所以安装PyTorch是关键,不过要注意M2芯片是ARM架构,可能需要使用Miniconda来管理环境,避免依赖问题。 用户提到Mac安装Miniconda,引用[^1]里提到可以用.pkg包或者.sh文件安装,应该推荐用pkg更简单。然后创建虚拟环境,比如用Python 3.8或3.9版本,这样能隔离依赖。 接下来安装PyTorch,PyTorch现在支持M1/M2芯片的加速版本,应该引导用户去官网获取适合的安装命令,可能用conda或者pip。然后安装YOLO的库,比如ultralytics的YOLOv8,可能直接用pip安装。 验证安装部分,需要确保PyTorch能检测到MPS(Metal Performance Shaders),这样才能用GPU加速。如果用户的环境没问题,运行示例代码应该可以调用MPS。 可能的问题包括依赖冲突,这时候建议用虚拟环境;还有如果用户没有安装Xcode命令行工具,可能需要先安装。此外,数据集的路径和模型文件是否存在也是常见问题,要提醒用户注意路径正确。 最后,生成相关问题,比如性能优化、实时检测的应用,或者其他框架的对比,这样能帮助用户进一步探索。</think>### 如何在 Mac M2安装运行 YOLO 框架 #### 1. 安装 Miniconda(推荐) 在 Mac M2 上使用 Python 环境管理工具(如 Miniconda)可以避免依赖冲突[^1]: ```bash # 下载 Miniconda(选择适用于 Apple Silicon 的版本) wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh # 安装 sh Miniconda3-latest-MacOSX-arm64.sh # 创建虚拟环境 conda create -n yolo_env python=3.8 conda activate yolo_env ``` #### 2. 安装 PyTorch(支持 M1/M2 芯片) YOLO 框架通常依赖 PyTorch。使用以下命令安装适配 Apple Silicon 的 PyTorch: ```bash pip install torch torchvision torchaudio ``` #### 3. 安装 YOLO 库(以 Ultralytics YOLOv8 为例) ```bash pip install ultralytics ``` #### 4. 验证安装 ```python import torch from ultralytics import YOLO # 检查 GPU 加速是否生效(应输出 True) print(torch.backends.mps.is_available()) # 运行示例检测 model = YOLO("yolov8n.pt") # 加载预训练模型 results = model.predict(source="path/to/image.jpg", save=True, device="mps") # 使用 MPS 加速 ``` #### 常见问题排查 - **依赖冲突**:始终在虚拟环境中操作 - **MPS 未启用**:确保 macOS ≥ 12.3 且已安装 Xcode 命令行工具 - **模型下载失败**:手动下载权重文件并指定本地路径 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值