所有参数和权重都不变的情况下,使用编译后的darknet进行目标检测发现有时候检测到三个框,有时候检测到两个框。错误原因在数据预处理部分,该函数return前后的值是会发生变化的,解决方法是数据预处理部分不要单独作为一个函数返回值。把该部分和前面的函数做整合即可。
我return后数值会变的函数如下:
def prepare_batch(self, images, network, channels=3):
width = darknet.network_width(network)
height = darknet.network_height(network)
darknet_images = []
for image in images:
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image_resized = cv2.resize(image_rgb, (width, height),
interpolation=cv2.INTER_LINEAR)
custom_image = image_resized.transpose(2, 0, 1)
darknet_images.append(custom_image)
batch_array = np.concatenate(darknet_images, axis=0)
batch_array = np.ascontiguousarray(batch_array.flat, dtype=np.float32)/255.0
darknet_images = batch_array.ctypes.data_as(darknet.POINTER(darknet.c_float))
dark_date = darknet.IMAGE(width, height, channels, darknet_images)
return dark_date
TIPS:小心使用编译后的函数,有时候函数的返回值会发生变化。