Red de conocimiento informático - Material del sitio web - Cómo modificar el código fuente de caffe

Cómo modificar el código fuente de caffe

En primer lugar, utilizando el software "Understanding", puede ver fácilmente la estructura de directorios del código fuente de caffe, como se muestra a continuación.

Puedes notar que hay un directorio "Herramientas" en el código fuente de Caffe, que contiene algunas herramientas útiles, como "compute_image_mean.cpp", "convert_imageset.cpp", etc., entre las cuales " convert_imageset.cpp" opera directamente archivos de texto como se muestra en el siguiente código. Entonces la función "ReadImageToDatum" se convertirá en un gran avance.

1 // convert_imageset.cpp, línea 129-2 for (int line_id = 0; line_id lt;lines.size(); line_id) {3 if (!ReadImageToDatum(root_folder lines[line_id]. first , 4 líneas[line_id].segundo, resize_height, resize_width, is_color, amp; datum)) {5 6 }7 // .. .8 }

Definido en io.cpp La función ReadImageToDatum; completa la conversión de datos de imagen a un tipo de Datum que puede ser procesado por caffe. La mayoría de las modificaciones principales a los archivos se concentran en la capa de datos, que se cambia a una sola etiqueta que admite múltiples etiquetas. Para la detección de vehículos, las modificaciones a caffe son las siguientes:

caffe.proto

Cambie el opcional a repetido para que la variable etiqueta etiqueta sea una matriz, es decir, se apoyado. De lo contrario, no existirá dicho atributo Datum.label_size().

data_layer.hpp

Se cambió líneas_ de protegida a pública para que se puedan usar punteros posteriores para acceder directamente a los datos de líneas_, que contienen el nombre de la imagen y su información de etiqueta correspondiente. Consulte test_det_net.cpp

data_layer.cpp

Modifique top_label para que pueda guardar la información de múltiples etiquetas de la imagen.

image_data_layer.cpp

Lea la ruta y la información de la etiqueta de la imagen del archivo de texto y modifique la etiqueta int original a std::lt;vectorgt;vec_label. Al mismo tiempo, se debe prestar especial atención a no olvidar solicitar el espacio de almacenamiento correspondiente (*top)[1]-.gt; Reshape(this-gt;...), de lo contrario se producirá un error cuando inicializando la red.

memory_data_layer.cpp

Aunque no se utiliza en aplicaciones reales, también se modifica porque está relacionado con la capa de datos más baja.

convert_imageset.cpp

Este programa utiliza la forma de empaquetar datos de imágenes y una base de datos. La base de datos predeterminada es leafldb

io.hpp

io.cpp

Este archivo maneja el nivel más bajo de lectura y escritura de datos.