工作记录

服务器上安装dnndk


dnndk工具要求cuda9.0+cudnn7.0.5

xlinx板子推导yolov3

  1. 训练出yolov3.weights
  2. 把yolov3.cfg/yolov3.weights放到0_model_darknet
  3. bash 0_convert.sh
    这一步会生成caffe模型.
  4. 测试模型转换的效果
    这一步做不做意义不大. 因为我们训练用的darknet和xlinx提供的版本不一致,前处理可能不一样.导致用a版本训练的模型用b版本推导的时候结果错误严重.

    做的话,要改0_test_darknet.sh脚本.或者不改脚本把5_file_for_test/coco.data改掉.

这里测试用的是xlinx提供的darknet. 训练用的darknet是alexyab版本的. 在图像的前处理上有一定差别. alexyab用了opencv.原版的没有使用. 所以对应不同的数据集,不同的的resize方式影响大小可能不同.


测试caffe模型的脚本也要改.

  1. 对caffe模型做量化 fp32-->int8
    做量化的时候要提供一些校准图片.
#coding=utf-8
import random
import os
import shutil

def get_random_imgnames(dir,num):
    """
    从目录dir下随机选出num张图片
    """
    all_imgs = []
    for img_name in os.listdir(dir):
        if not img_name.endswith(".jpg"):
            continue
        
        #full_name = "{}/{}".format(dir,img_name)
        all_imgs.append(img_name)
    
    choosen_imgs = random.sample(all_imgs,num)
    #print(choosen_imgs)
    
    return choosen_imgs

def copy_imgs(choosen_imgs,dir1,dir2):
    """
    把dir1内的img拷贝到dir2
    """
    for img in choosen_imgs:
        src = "{}/{}".format(dir1,img)
        dst = "{}/{}".format(dir2,img)
        
        shutil.copyfile(src,dst)
    
def test(dir,num,dir2):
    """
    从dir内选出num张图片,拷贝到dir2内.
    """
    imgs = get_random_imgnames(dir,num)
    copy_imgs(imgs,dir,dir2)
    
    ##生成cal
    f = open("calib.txt","w")
    for img in os.listdir(dir2):
        f.writelines("{} 1\n".format(dir2,img))
    f.close()
    
def main():
    """
    生成xlinx模型转换fp32-->int8时所需要的校准文件.
    """
    test("/home/train/disk/sc/data2/LISA_BDD_APOLLO/",100,"/home/train/disk/sc/XLINX/darknet2caffe/docs/Darknet-Caffe-Conversion/example_common_obj/5_file_for_test/calib_data") 
    
main()

生成校准文件calib.txt.拷贝到5_file_for_test目录下.

把第三部生成的caffe32的v3.prototxt和v3.caffemodel拷贝到目录2_model_for_quantize下.并修改v3.prototxt

这里xlinx查找图片是把root_folder + source里的名字拼在一起的. 注意source里的内容是图像名字,不需要全路径了. root_folder注意结尾要有/

这一步做完后会生成int8的caffe模型.

  1. 把模型编译成elf
    3_model_after_quantize$ vi deploy.prototxt


ultra96对应的dpu=2304FA net_name随便取.

这一步之后就会生成dpu_yolo.elf在目录4_model_elf下


ultra96环境搭建

opencv3.3安装

dnndk v3.0


只支持3个版本的opencv.

debian仓库的opencv版本是3.2
https://packages.debian.org/search?searchon=sourcenames&keywords=opencv

卸载掉系统自带的opencv3.2

apt-get autoremove libopencv-dev python-opencv

opencv3.3.1安装参考:
https://gist.github.com/danigosa/367b8a8cbc8d883df80c5c071423e4b2

######################################
# INSTALL OPENCV ON UBUNTU OR DEBIAN #
######################################

# 1. KEEP UBUNTU OR DEBIAN UP TO DATE

sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt-get -y autoremove


# 2. INSTALL THE DEPENDENCIES

# Build tools:
sudo apt-get install -y build-essential cmake

# GUI (if you want to use GTK instead of Qt, replace 'qt5-default' with 'libgtkglext1-dev' and remove '-DWITH_QT=ON' option in CMake):
sudo apt-get install -y qt5-default libvtk6-dev

# Media I/O:
sudo apt-get install -y zlib1g-dev libjpeg-dev libwebp-dev libpng-dev libtiff5-dev libjasper-dev libopenexr-dev libgdal-dev

# Video I/O:
sudo apt-get install -y libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev yasm libopencore-amrnb-dev libopencore-amrwb-dev libv4l-dev libxine2-dev

# Parallelism and linear algebra libraries:
sudo apt-get install -y libtbb-dev libeigen3-dev

# Python:
sudo apt-get install -y python-dev python-tk python-numpy python3-dev python3-tk python3-numpy

# Java:
sudo apt-get install -y ant default-jdk

# Documentation:
sudo apt-get install -y doxygen


# 3. INSTALL THE LIBRARY (YOU CAN CHANGE '3.3.1' FOR THE LAST STABLE VERSION)

sudo apt-get install -y unzip wget
wget https://github.com/opencv/opencv/archive/3.3.1.zip
unzip 3.3.1.zip
rm 3.3.1.zip
mv opencv-3.3.1 OpenCV
cd OpenCV
mkdir build
cd build
cmake -DWITH_QT=ON -DWITH_OPENGL=ON -DFORCE_VTK=ON -DWITH_TBB=ON -DWITH_GDAL=ON -DWITH_XINE=ON -DBUILD_EXAMPLES=ON -DENABLE_PRECOMPILED_HEADERS=OFF ..
make -j4
sudo make install
sudo ldconfig

出错:

参考https://stackoverflow.com/questions/46884682/error-in-building-opencv-with-ffmpeg

#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020

在编译python模块的时候各种问题,下面的方案不确定ok不ok.
编译cv2.cpp出错const char* to char*的话就按照编译器提示把源码改掉.

最后

dnndk v3.0安装

ros安装

http://wiki.ros.org/melodic/Installation/Source

Traceback (most recent call last):
  File "/opt/ros/melodic/bin/catkin_make", line 13, in <module>
    from catkin.terminal_color import disable_ANSI_colors, fmt
  File "/opt/ros/melodic/lib/python2.7/dist-packages/catkin/terminal_color.py", line 2, in <module>
    from catkin_pkg.terminal_color import *  # noqa
ImportError: No module named terminal_color

apt install --reinstall python-catkin-pkg python-catkin-pkg-modules

rosdep install --from-paths src --ignore-src --rosdistro melodic -y --os=debian:buster

posted @   core!  阅读(523)  评论(6编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示