论文笔记(五) C-MIL: Continuation Multiple Instance Learning for Weakly Supervised Object Detection

论文笔记(五) C-MIL: Continuation Multiple Instance Learning for Weakly Supervised Object Detection

这是cvpr2019的oral,还是一篇基于弱监督的目标检测论文。
关于弱监督目标检测的定义在上一篇笔记中已经讲过了 传送门 。与上一篇论文中要缓解的问题一样,即弱监督的损失局部极小问题,但是这篇论文的处理方法更为理论化,而不是对模型架构进行调整。

introduction

问题定义

B B B表示图片的集合, B i B_i Bi表示第 i i i张图片。 y = 1 , − 1 y={1, -1} y=1,1 y i ∈ y y_i\in y yiy表示 B i B_i Bi中是否包含样本。 j ∈ 1 , 2 , . . . , N j\in {1,2,...,N} j1,2,...,N,N表示目标的数量 B i , j B_{i,j} Bi,j y i , j y_{i,j} yi,j表示图片 B i B_i Bi中的目标和目标的标签, w w w表示网络所需要训练的参数。

局部极小问题

在上一篇论文中是从模型架构的角度来缓解这个问题,所以一笔带过了。而在这篇论文中,作者是从优化的角度来缓解此问题。
MIL网络中,一般分为两部分,即一个选择器和一个检测器,选择器负责将所有候选框分为正样本和负样本,是一个二分类问题,损失函数采用的是hinge loss
F f ( B , w ) = max ⁡ ( 0 , 1 − y i max ⁡ i f ( B i , j , w f ) ) F_f(B,w)=\max(0, 1-y_i\max_if(B_{i,j},w_f)) Ff(B,w)=max(0,1yi

当遇到 'input is not valid Modified UTF - 8: illegal continuation byte' 错误,这通常是因为输入的字符序列不符合 Modified UTF - 8 编码规则,Regular UTF - 8 合法的编码序列在 Modified UTF - 8 可能被视为非法的 [^2]。以下是一些可能的解决办法: #### 1. 检查数据源 确保输入的数据是合法的 UTF - 8 编码。数据可能在传输或存储过程中被损坏。例如,如果数据来自文件,可使用文本编辑器检查文件编码是否为 UTF - 8,或者使用工具验证文件的编码。 #### 2. 过滤非法字符 在处理数据前,对输入数据进行过滤,移除非法的 UTF - 8 字节序列。以下是一个 Java 示例代码,用于过滤非法 UTF - 8 字符: ```java import java.nio.charset.StandardCharsets; import java.util.regex.Pattern; public class UTF8Filter { private static final Pattern INVALID_UTF8 = Pattern.compile("[^\u0000-\uD7FF\uE000-\uFFFF]"); public static String filterInvalidUTF8(String input) { return INVALID_UTF8.matcher(input).replaceAll(""); } public static void main(String[] args) { String input = "包含非法 UTF - 8 字符的字符串"; String filtered = filterInvalidUTF8(input); System.out.println(filtered); } } ``` #### 3. 处理文件遍历问题 若在文件遍历过程中出现此错误,如 `file.listFiles` 方法调用时出错,可对文件路径和文件名进行编码转换或过滤。示例代码如下: ```java import java.io.File; import java.io.FilenameFilter; public class EssFileFilter implements FilenameFilter { private String[] types; public EssFileFilter(String[] types) { this.types = types; } @Override public boolean accept(File dir, String name) { try { // 过滤文件名中的非法字符 String filteredName = UTF8Filter.filterInvalidUTF8(name); for (String type : types) { if (filteredName.endsWith(type)) { return true; } } } catch (Exception e) { e.printStackTrace(); } return false; } } ``` #### 4. 检查 JNI 调用 在使用 JNI 调用时,确保传递给 JNI 函数的字符串是合法的 Modified UTF - 8 编码。若可能,在 Java 端对字符串进行预处理,确保传递合法字符串给 JNI 层。 #### 5. 编码转换 尝试将数据从其他编码转换为 UTF - 8。例如,若数据原本是 GBK 编码,可使用以下 Java 代码进行转换: ```java import java.nio.charset.Charset; public class EncodingConverter { public static String convertToUTF8(String input, String originalEncoding) { byte[] bytes = input.getBytes(Charset.forName(originalEncoding)); return new String(bytes, StandardCharsets.UTF_8); } public static void main(String[] args) { String input = "原始字符串"; String converted = convertToUTF8(input, "GBK"); System.out.println(converted); } } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值