RK3399 pro用darknet框架训练单尺度yolov3

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/McEason/article/details/102648644

训练部分

主要参考这两个网站的内容:
1.ToyBrick社区
2.yolov3官网

首先按照网站1的训练自己的数据教程在网站2下载并编译Darknet,然后剩的一直按照网站教程来,一直到
在这里插入图片描述
其中15表示提取的卷积层层数,因为我的需求是只有一个yolo层,所以我把yolov3的cfg文件的第一个yolo层之后的层都删掉了,然后这个参数修改为82,如果有其他的需求,可以按照上面那行程序输出的内容取相应的卷积层,yolov3的卷积层如下图:
在这里插入图片描述
训练的配置由yolov3的cfg决定:
在这里插入图片描述
训练的时候如果显示memory不足,那么就要修改batch和subdivisions,我是都改成了4。
max_batches控制epoch多少次。
剩下的按照社区教程来就ok。

rknn文件转换

第一步,执行rknn_transform_416x416.py,生成rknn文件,这个没有问题。
第二部,执行rknn_camera_416x416.py,其中有些地方需要改动:
1.程序上边的class相关内容:

GRID0 = 13
GRID1 = 26
GRID2 = 52
LISTSIZE = 8 // num_class + 5
SPAN = 3
NUM_CLS = 3
MAX_BOXES = 500
OBJ_THRESH = 0.5
NMS_THRESH = 0.6

CLASSES = ("person", "bicycle", "car")

2.inference之后,数据维度变了,要修改一下:

if __name__ == '__main__':
    rknn = load_model()
    font = cv2.FONT_HERSHEY_SIMPLEX;
    capture = cv2.VideoCapture("data/3.mp4")
    #capture = cv2.VideoCapture(0)
    accum_time = 0
    curr_fps = 0
    prev_time = timer()
    fps = 0
    try:
        while(True):
            ret, frame = capture.read()
            if ret == True:
                image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                image = cv2.resize(image, (416, 416))

                testtime=timer()
                out_boxes = rknn.inference(inputs=[image]) //只有一个输出值
                testtime2=timer()
                print("rknn use time {}", testtime2-testtime)
                out_boxes = np.array(out_boxes) //list没有reshape,所以要转换成array
                out_boxes = out_boxes.reshape(SPAN, LISTSIZE, GRID0, GRID0) //剩的没有的out_boxes的相关操作都删除了

                input_data = []
                input_data.append(np.transpose(out_boxes, (2, 3, 0, 1)))
            
            
                testtime=timer()
                boxes, classes, scores = yolov3_post_process(input_data)
                testtime2=timer()
                print("process use time: {}", testtime2-testtime)           
                testtime=timer()
                if boxes is not None:
                    draw(frame, boxes, scores, classes)
                curr_time = timer()
                exec_time = curr_time - prev_time                
                accum_time += exec_time
                fps += 1
                if True:
                    print("fps",fps/exec_time) //改写了一下计算fps的方式
                    
                testtime2=timer()
                print("show image use time: {}", testtime2-testtime)
    except KeyboardInterrupt:
        cv2.destroyAllWindows()
        capture.release()
        rknn.release()

最后吐槽:rknn3399 pro调试起来是真费劲,init_environment 之后要15分钟,大大影响了调试速度。

猜你喜欢

转载自blog.csdn.net/McEason/article/details/102648644