我正在研究一个非常稀疏的数据集,其中包含预测6个类的要点.我尝试过使用很多模型和架构,但问题仍然存在.
当我开始训练时,训练的acc将慢慢开始增加,并且损失将减少,因为验证将完全相反.
我真的试图处理过度拟合,我根本不能相信这就是这个问题.
在VGG16上转学:
为了处理过度拟合,我在Keras中使用了大量增强,在p = 0.5的256密集层之后使用了丢失.
使用VGG16-ish架构创建自己的CNN:
意识到我可能有太多的免费参数:
毫无例外,所有培训课程都是这样的: 培训和验证损失+准确性
最后提到的架构如下所示:
reg = 0.0001
model = Sequential()
model.add(Conv2D(8, (3, 3), input_shape=input_shape, padding='same',
kernel_regularizer=regularizers.l2(reg)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.7))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(16, (3, 3), input_shape=input_shape, padding='same',
kernel_regularizer=regularizers.l2(reg)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.7))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(16, kernel_regularizer=regularizers.l2(reg)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(6))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='SGD',metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)
并且数据由Keras中的生成器增强,并加载了flow_from_directory:
train_datagen = ImageDataGenerator(rotation_range=10,
width_shift_range=0.05,
height_shift_range=0.05,
shear_range=0.05,
zoom_range=0.05,
rescale=1/255.,
fill_mode='nearest',
channel_shift_range=0.2*255)
train_generator …Run Code Online (Sandbox Code Playgroud) 我们有一个通过 USB3 连接到 Raspberry Pi 4 的相机。该相机只能提供 RAW 图像 [2056x1542x3],我们可以以大约 30 FPS 的速度读取该图像。在 Raspberry Pi 4 上,我们需要将这些图像保存到磁盘 - 由于 SD 卡的空间和写入速度,无论如何保存 RAW 图像(10 MB/张)实际上都是不可行的。相反,我们想要压缩这些图像,然后尽快保存它们。
我们当前的解决方案类似于以下代码片段:
def save_image(frame,filename):
cv2.imwrite(filename,frame)
...
(ret, frame) = cam.get_next_frame()
if ret == IS_SUCCESS:
timestamp = get_timestamp()
filename = conf["cv_image_folder"] + timestamp + ".jpg"
save_thread = threading.Thread(target=save_image, args=(frame,filename,))
save_thread.start()
Run Code Online (Sandbox Code Playgroud)
libjpeg-turboOpenCV 使用所有可能的硬件标志进行编译,以实现加速计算。在大约 5 或 6 FPS 时,Raspberry Pi 4 使用全部 4 个内核的大约 100%。对于非线程配置也是如此。我们手动设置相机的帧速率并监视生成的线程数量(大约为 5-6 FPS 时的 3-4 个并发线程)。我们选择 JPEG(尽管它是有损的),因为 PNG 或 TIFF 压缩需要更长的时间来计算。
有什么办法可以改善这一点吗?
对 ROS 相当陌生,但一直无法找到这些信息。
我们正在构建一个仪器,我们需要在 100Mbit 的有限电缆上通过网络传输大量数据流。最好我们需要传输 RAW 图像(每张约 10MB),或者我们可以进行一些无损压缩,每张大约 5MB。
这对于具有本机图像主题的 ROS 来说完全没问题,还是像 ZeroMQ 这样的单独协议更适合这项任务?ROS 在大数据流上有哪些限制?
希望有知识的人能花点时间分享一些经验。
谢谢!