没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
FCN模型的网络与VGG16类似,之后后边将全连接层换成了卷基层,具体的网络结构与细节可以去看论文: https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf 下边详细讲一下用Pytorch对FCN的实现: 本文参考了https://zhuanlan.zhihu.com/p/32506912 但是修改了部分代码,加上了很多新的注释,并将代码更新到Pytorch1.x 首先是读取图像 #使用的VOC数据目录 voc_root = '/media/cyq/CU/Ubuntu system files/VOCdevkit/VO
资源推荐
资源详情
资源评论
FCN模型实现模型实现-Pytorch+预训练预训练VGG16
FCN模型的网络与VGG16类似,之后后边将全连接层换成了卷基层,具体的网络结构与细节可以去看论文:
https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf
下边详细讲一下用Pytorch对FCN的实现:
本文参考了https://zhuanlan.zhihu.com/p/32506912 但是修改了部分代码,加上了很多新的注释,并将代码更新到Pytorch1.x
首先是读取图像首先是读取图像
#使用的VOC数据目录
voc_root = '/media/cyq/CU/Ubuntu system files/VOCdevkit/VOC2012'
#此函数用来读取图像和标签的名字
def read_images(root=voc_root, train=True):
txt_fname = root + '/ImageSets/Segmentation/' + ('train.txt' if train else 'val.txt')
with open(txt_fname, 'r') as f:
images = f.read().split()
data = [os.path.join(root, 'JPEGImages', i+'.jpg') for i in images] label = [os.path.join(root, 'SegmentationClass', i+'.png') for i
in images] return data, label
对输入图像做出裁剪,使图像大小一致,方便训练对输入图像做出裁剪,使图像大小一致,方便训练
#这里对图像和标签都截取对应的部分
def rand_crop(data, label, height, width):
'''
data is PIL.Image object
label is PIL.Image object
'''
x = random.uniform(0,data.size[0]-width)
x = int(x)
y = random.uniform(0,data.size[1]-height)
y = int(y)
box = (x,y,x+width,y+height)
data = data.crop(box)
label = label.crop(box)
return data, label
label图像与标签的映射图像与标签的映射
#21个类
classes = ['background','aeroplane','bicycle','bird','boat',
'bottle','bus','car','cat','chair','cow','diningtable',
'dog','horse','motorbike','person','potted plant',
'sheep','sofa','train','tv/monitor']
# 每个类对应的RGB值
colormap = [[0,0,0],[128,0,0],[0,128,0], [128,128,0], [0,0,128],
[128,0,128],[0,128,128],[128,128,128],[64,0,0],[192,0,0],
[64,128,0],[192,128,0],[64,0,128],[192,0,128],
[64,128,128],[192,128,128],[0,64,0],[128,64,0],
[0,192,0],[128,192,0],[0,64,128]]
#下边就是将label中每种颜色映射成0-20的数字
cm2lbl = np.zeros(256**3) # 每个像素点有 0 ~ 255 的选择,RGB 三个通道
for i,cm in enumerate(colormap):
cm2lbl[(cm[0]*256+cm[1])*256+cm[2]] = i # 建立索引
def image2label(im):
data = np.array(im, dtype='int32')
idx = (data[:, :, 0] * 256 + data[:, :, 1]) * 256 + data[:, :, 2] return np.array(cm2lbl[idx], dtype='int64') # 根据索引得到 label 矩阵
数据集制作数据集制作
def img_transforms(im, label, crop_size):
im, label = rand_crop(im, label, *crop_size)
im_tfs = tfs.Compose([
tfs.ToTensor(),
tfs.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
资源评论
weixin_38725625
- 粉丝: 3
- 资源: 919
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功