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
Este archivo maneja el nivel más bajo de lectura y escritura de datos.