import argparse
import os
from collections import OrderedDict
from glob import glob
import albumentations
import pandas as pd
import torch
import torch.backends.cudnn as cudnn
import torch.nn as nn
import torch.optim as optim
import yaml
from albumentations import Flip
from albumentations.augmentations import transforms
from albumentations.core.composition import Compose, OneOf
from sklearn.model_selection import train_test_split
from torch.optim import lr_scheduler
from tqdm import tqdm
import archs
import losses
from dataset import Dataset
from metrics import iou_score
from utils import AverageMeter, str2bool
ARCH_NAMES = archs.__all__
LOSS_NAMES = losses.__all__
LOSS_NAMES.append('BCEWithLogitsLoss')
"""
指定参数:
--dataset dsb2018_96
--arch NestedUNet
"""
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument('--name', default=None,
help='model name: (default: arch+timestamp)')
parser.add_argument('--epochs', default=100, type=int, metavar='N',
help='number of total epochs to run')
parser.add_argument('-b', '--batch_size', default=8, type=int,
metavar='N', help='mini-batch size (default: 16)')
# model
parser.add_argument('--arch', '-a', metavar='ARCH', default='NestedUNet',
choices=ARCH_NAMES,
help='model architecture: ' +
' | '.join(ARCH_NAMES) +
' (default: NestedUNet)')
parser.add_argument('--deep_supervision', default=False, type=str2bool)
parser.add_argument('--input_channels', default=3, type=int,
help='input channels')
parser.add_argument('--num_classes', default=1, type=int,
help='number of classes')
parser.add_argument('--input_w', default=96, type=int,
help='image width')
parser.add_argument('--input_h', default=96, type=int,
help='image height')
# loss
parser.add_argument('--loss', default='BCEDiceLoss',
choices=LOSS_NAMES,
help='loss: ' +
' | '.join(LOSS_NAMES) +
' (default: BCEDiceLoss)')
# dataset
parser.add_argument('--dataset', default='dsb2018_96',
help='dataset name')
parser.add_argument('--img_ext', default='.png',
help='image file extension')
parser.add_argument('--mask_ext', default='.png',
help='mask file extension')
# optimizer
parser.add_argument('--optimizer', default='SGD',
choices=['Adam', 'SGD'],
help='loss: ' +
' | '.join(['Adam', 'SGD']) +
' (default: Adam)')
parser.add_argument('--lr', '--learning_rate', default=1e-3, type=float,
metavar='LR', help='initial learning rate')
parser.add_argument('--momentum', default=0.9, type=float,
help='momentum')
parser.add_argument('--weight_decay', default=1e-4, type=float,
help='weight decay')
parser.add_argument('--nesterov', default=False, type=str2bool,
help='nesterov')
# scheduler
parser.add_argument('--scheduler', default='CosineAnnealingLR',
choices=['CosineAnnealingLR', 'ReduceLROnPlateau', 'MultiStepLR', 'ConstantLR'])
parser.add_argument('--min_lr', default=1e-5, type=float,
help='minimum learning rate')
parser.add_argument('--factor', default=0.1, type=float)
parser.add_argument('--patience', default=2, type=int)
parser.add_argument('--milestones', default='1,2', type=str)
parser.add_argument('--gamma', default=2/3, type=float)
parser.add_argument('--early_stopping', default=-1, type=int,
metavar='N', help='early stopping (default: -1)')
parser.add_argument('--num_workers', default=0, type=int)
config = parser.parse_args()
return config
def train(config, train_loader, model, criterion, optimizer,device="mps"):
avg_meters = {'loss': AverageMeter(),
'iou': AverageMeter()}
model.train()
pbar = tqdm(total=len(train_loader))
for input, target, _ in train_loader:
input = input.to(device)
target = target.to(device)
# compute output
if config['deep_supervision']:
outputs = model(input)
loss = 0
for output in outputs:
loss += criterion(output, target)
loss /= len(outputs)
iou = iou_score(outputs[-1], target)
else:
output = model(input)
loss = criterion(output, target)
iou = iou_score(output, target)
# compute gradient and do optimizing step
optimizer.zero_grad()
loss.backward()
optimizer.step()
avg_meters['loss'].update(loss.item(), input.size(0))
avg_meters['iou'].update(iou, input.size(0))
postfix = OrderedDict([
('loss', avg_meters['loss'].avg),
('iou', avg_meters['iou'].avg),
])
pbar.set_postfix(postfix)
pbar.update(1)
pbar.close()
return OrderedDict([('loss', avg_meters['loss'].avg),
('iou', avg_meters['iou'].avg)])
def validate(config, val_loader, model, criterion,device="mps"):
avg_meters = {'loss': AverageMeter(),
'iou': AverageMeter()}
# switch to evaluate mode
model.eval()
with torch.no_grad():
pbar = tqdm(total=len(val_loader))
for input, target, _ in val_loader:
input = input.to(device)
target = target.to(device)
# compute output
if config['deep_supervision']:
outputs = model(input)
loss = 0
for output in outputs:
loss += criterion(output, target)
loss /= len(outputs)
iou = iou_score(outputs[-1], target)
else:
output = model(input)
loss = criterion(output, target)
iou = iou_score(output, target)
avg_meters['loss'].update(loss.item(), input.size(0))
avg_meters['iou'].update(iou, input.size(0))
postfix = OrderedDict([
('loss', avg_meters['loss'].avg),
('iou', avg_meters['iou'].avg),
])
pbar.set_postfix(postfix)
pbar.update(1)
pbar.close()
return OrderedDict([('loss', avg_meters['loss'].avg),
('iou', avg_meters['iou'].avg)])
def main():
config = vars(parse_args())
if config['name'] is None:
if config['deep_supervision']:
config['name'] = '%s_%s_wDS' % (config['dataset'], config['arch'])
else:
config['name'] = '%s_%s_woDS' % (config['dataset'], config['arch'])
os.makedirs('models/%s' % config['name'], exist_ok=True)
print('-' * 20)
for key in config:
print('%s: %s' % (key, config[key]))
print('-' * 20)
with open('models/%s/config.yml' % config['name'], 'w') as f:
yaml.dump(config, f)
# define loss function (criterion)
if config['loss'] == 'BCEWithLogitsLoss':
criterion = nn.BCEWithLogitsLoss().cuda()#WithLogits 就是先将输出结果经过sigmoid再交叉熵
else:
criterion = losses.__dict__[config['loss']]().cuda()
cudnn.benchmark = True
# create model
print("=> creating model %s" % config['arch'])
model = archs.__dict__[config['arch']](config['num_classes'],
config['input_channels'],
config['deep_supervision'])
if torch.backends.mps.is_available():
没有合适的资源?快使用搜索试试~ 我知道了~
用于图像分割的代码源码
共2002个文件
png:1981个
py:9个
zip:5个
需积分: 2 0 下载量 42 浏览量
2024-04-21
11:02:22
上传
评论
收藏 430.78MB ZIP 举报
温馨提示
unet++实现代码参考源码
资源推荐
资源详情
资源评论
收起资源包目录
用于图像分割的代码源码 (2002个子文件)
.DS_Store 6KB
.DS_Store 6KB
.gitkeep 1B
c0f172831b8017c769ff0e80f85b096ac939e79de3d524e0826fbb95221365da.png 146KB
442c4eb0185698fe7d148c108a46f74abd399aecda2f4f22981a1671cd95dd7d.png 112KB
64eeef16fdc4e26523d27bfa71a1d38d2cb2e4fa116c0d0ea56b1322f806f0b9.png 53KB
2ab91a4408860ae8339689ed9f87aa9359de1bdd4ca5c2eab7fff7724dbd6707.png 48KB
3852c7e45bd885b9537e276861ab50b99bb42f0f8e717d2f88174c62862ca3ff.png 46KB
243443ae303cc09cfbea85bfd22b0c4f026342f3dfc3aa1076f27867910d025b.png 45KB
76c44d1addac92a65f1331f2d93f4e3b130bd4e538a6e5239c3ac1f4c403608a.png 42KB
03398329ced0c23b9ac3fac84dd53a87d9ffe4d9d10f1b5fe8df8fac12380776.png 38KB
fec226e45f49ab81ab71e0eaa1248ba09b56a328338dce93a43f4044eababed5.png 38KB
6fb82031f7fc5f4fa6e0bc2ef3421db19036b5c2cdd2725009ab465d66d61d72.png 36KB
358e47eaa1e9222252793fe0fb8c77028d4e0d4360b95a07c9fe6df6a2066556.png 35KB
4a424e0cb845cf6fd4d9fe62875552c7b89a4e0276cf16ebf46babe4656a794e.png 34KB
2817299fd3b88670e86a9db5651ba24333c299d1d41e5491aabfcd95aee84174.png 34KB
5b2ccfb94dedf2ec8797c0404fc324888e35ab903c41bb26f070552033ca8e6c.png 32KB
c620631271a56407d6d69fa1a69451ca99c50dcc30e29db04cf6fb7cacbde8cb.png 31KB
309ba76b12ecb5ce28b99f3445b2b5dc54c0564c3c0e24c17e4c89a94a5d0535.png 29KB
5d75a63972ef643efd7c42f20668b167f2af43635d6263962d84e62e7609ab51.png 22KB
06350c7cc618be442c15706db7a68e91f313758d224de4608f9b960106d4f9ca.png 22KB
4590d7d47f521df62f3bcb0bf74d1bca861d94ade614d8afc912d1009d607b94.png 21KB
0ea221716cf13710214dcd331a61cea48308c3940df1d28cfc7fd817c83714e1.png 21KB
79fe419488ba98494e3baa35c6fef9662eda1efe325d0ab0ac002f5383245d96.png 21KB
ef3ef194e5657fda708ecbd3eb6530286ed2ba23c88efb9f1715298975c73548.png 21KB
b214800de5ed4cc558f44d569495970f93c8c047f8e464c51d4bd5c276118423.png 21KB
0c2550a23b8a0f29a7575de8c61690d3c31bc897dd5ba66caec201d201a278c2.png 21KB
7f55678298adb736987d9fb5d1d2daefb08fe5bf4d81b2380bedf9449f79cc38.png 21KB
00ae65c1c6631ae6f2be1a449902976e6eb8483bf6b0740d00530220832c6d3e.png 21KB
eb1df8ed879d04b36980b0958a0e8fc446ad08c0bdcf3b5f42e3db023187c7e5.png 21KB
94519eb45cbe1573252623b7ea06a8b43c19c930f5c9b685edb639d0db719ab0.png 21KB
610f32e2d9d270d740aec501dcf0c89595e4e623468ad43272adab90520a8f96.png 21KB
c0f172831b8017c769ff0e80f85b096ac939e79de3d524e0826fbb95221365da.png 21KB
0e4c2e2780de7ec4312f0efcd86b07c3738d21df30bb4643659962b4da5505a3.png 20KB
e414b54f2036bcab61b9c0a966f65adf4b169097c13c740e03d6292ac076258c.png 20KB
718751b439c05bdd589f04fcef321a86be3ecb35292a435138e295e05eb2e771.png 20KB
0121d6759c5adb290c8e828fc882f37dfaf3663ec885c663859948c154a443ed.png 20KB
353ab00e964f71aa720385223a9078b770b7e3efaf5be0f66e670981f68fe606.png 20KB
ea94ba4b01d1bd5f7768d10e0ac547743791033df545c71fcec442d0cb5cb5e7.png 20KB
337b6eed0726f07531cd467cd62b6676c31a8c9e716bdbc49433986c022252cf.png 20KB
4e92129f4e8066d6f560d6022cd343a2245939aa49d8b06cddbd9bfc7e7eeb0e.png 20KB
07fb37aafa6626608af90c1e18f6a743f29b6b233d2e427dcd1102df6a916cf5.png 20KB
420f43d21dbaba42bf8c0995b3a2c85537876d594433770c6c6f3d6b779ec15f.png 20KB
7f34dfccd1bc2e2466ee3d6f74ff05821a0e5404e9cf2c9568da26b59f7afda5.png 20KB
aa58ba4512955771b4f9b459cb4e6a8adb71d11cd6cae662ec2df31d688a5fe0.png 20KB
c304a1fdf3bca2f4b4580d2cac59942e2224a7678001bf5ed9d9852f57708932.png 20KB
9bb6e39d5f4415bc7554842ee5d1280403a602f2ba56122b87f453a62d37c06e.png 20KB
947c0d94c8213ac7aaa41c4efc95d854246550298259cf1bb489654d0e969050.png 19KB
7773ac91af61ed041701b7c3b649598e3707cf04c0577f464fd31be687f538fe.png 19KB
f952cc65376009cfad8249e53b9b2c0daaa3553e897096337d143c625c2df886.png 19KB
13f2bec0a24c70345372febb14c4352877b1b6c1b01896246048e83c345c0914.png 19KB
2dd3356f2dcf470aec4003800744dfec6490e75d88011e1d835f4f3d60f88e7a.png 19KB
a7f6194ddbeaefb1da571226a97785d09ccafc5893ce3c77078d2040bccfcb77.png 19KB
5afb7932e9c7328f4fb1d7a8166a3699d6cdc5192b93758a75e9956f1513c5a3.png 19KB
a31deaf0ac279d5f34fb2eca80cc2abce6ef30bd64e7aca40efe4b2ba8e9ad3d.png 19KB
ed5be4b63e9506ad64660dd92a098ffcc0325195298c13c815a73773f1efc279.png 19KB
1631352dbafb8a90f11219fffd3bea368a30bc3bad3bbe0e84e19bd720df4945.png 19KB
bb61fc17daf8bdd4e16fdcf50137a8d7762bec486ede9249d92e511fcb693676.png 19KB
a4c44fc5f5bf213e2be6091ccaed49d8bf039d78f6fbd9c4d7b7428cfcb2eda4.png 19KB
4d14a3629b6af6de86d850be236b833a7bfcbf6d8665fd73c6dc339e06c14607.png 19KB
4193474b2f1c72f735b13633b219d9cabdd43c21d9c2bb4dfc4809f104ba4c06.png 19KB
a5fe0b7412dd152c41f7afc34ffdf276d4261b6942fa6d36803648e90f2cfc06.png 19KB
45f059cf21d85ecfce0eb93260516f1e2443d210e9a52f9ae2271d604aa3fcc5.png 19KB
547ef286ee5f4e5dce533e982e6992ada67b7d727fdd3cfa6576f24c631a7ae6.png 19KB
8f27ebc74164eddfe989a98a754dcf5a9c85ef599a1321de24bcf097df1814ca.png 19KB
57bd029b19c1b382bef9db3ac14f13ea85e36a6053b92e46caedee95c05847ab.png 19KB
15039b3acccc4257a1a442646a89b6e596b5eb4531637e6d8fa1c43203722c99.png 19KB
6c67b78e8164801059375ed9a607f61e67a7ae347e92e36a7f20514224541d56.png 19KB
87ea72894f6534b28e740cc34cf5c9eb75d0d8902687fce5fcc08a92e9f41386.png 19KB
52a6b8ae4c8e0a8a07a31b8e3f401d8811bf1942969c198e51dfcbd98520aa60.png 19KB
19f0653c33982a416feed56e5d1ce6849fd83314fd19dfa1c5b23c6b66e9868a.png 19KB
8efed2e62c919e6d70a2ab548b1a33014877fe8a23f177ef25a9dee25ffe8842.png 18KB
0402a81e75262469925ea893b6706183832e85324f7b1e08e634129f5d522cdd.png 18KB
ebc18868864ad075548cc1784f4f9a237bb98335f9645ee727dac8332a3e3716.png 18KB
6ab24e7e1f6c9fdd371c5edae1bbb20abeeb976811f8ab2375880b4483860f4d.png 18KB
7b38c9173ebe69b4c6ba7e703c0c27f39305d9b2910f46405993d2ea7a963b80.png 18KB
2c61fdcb36fd1b2944895af6204279e9f6c164ba894198b40c8b7a3c9bf500ea.png 18KB
853a4c67900c411abd04467f7bc7813d3c58a5f565c8b0807e13c6e6dea21344.png 18KB
33a5b0ff232b425796ee6a9dd5b516ff9aad54ca723b4ec490bf5cd9b2e2a731.png 18KB
a0325cb7aa59e9c0a75e64ba26855d8032c46161aa4bca0c01bac5e4a836485e.png 18KB
65c8527c16a016191118e8adc3d307fe3a73d37cbe05597a95aebd75daf8d051.png 18KB
f7e5dcfc9c93183c668c5a4ab028d5faad54fb54298711f2caae0508aa978300.png 18KB
cbca32daaae36a872a11da4eaff65d1068ff3f154eedc9d3fc0c214a4e5d32bd.png 18KB
af6b6173c59450bc76b2cc461cf233921fbfdb6feb8dd6da03a0d44193221fd0.png 18KB
a90401357d50e1376354ae6e5f56a2e4dff3fdb5a4e8d50316673b2b8f1f293b.png 18KB
2e2d29fc44444a85049b162eb359a523dec108ccd5bd75022b25547491abf0c7.png 18KB
7798ca1ddb3133563e290c36228bc8f8f3c9f224e096f442ef0653856662d121.png 18KB
1b44d22643830cd4f23c9deadb0bd499fb392fb2cd9526d81547d93077d983df.png 18KB
708eb41a3fc8f2b6cd1f529cdf38dc4ad5d5f00ad30bdcba92884f37ff78d614.png 18KB
c0152b1a260e71f9823d17f4fbb4bf7020d5dce62b4a12b3099c1c8e52a1c43a.png 18KB
709e094e39629a9ca21e187f007b331074694e443db40289447c1111f7e267e7.png 18KB
4e07a653352b30bb95b60ebc6c57afbc7215716224af731c51ff8d430788cd40.png 18KB
6d327ab4f0e3604fa6e9b8041c7e6db86ab809890d886c691f6e59c9168b7fbe.png 18KB
c1afe66cd139f996fd984f5f2622903730ec2f1192d90608154f07f7ef6cdb4b.png 18KB
1ec74a26e772966df764e063f1391109a60d803cff9d15680093641ed691bf72.png 17KB
9fb32aba1c2fd53273dca9abefac944ba747f578da82dfaa1249f332a2324944.png 17KB
a7f767ca9770b160f234780e172aeb35a50830ba10dc49c526f4712451abe1d2.png 17KB
442c4eb0185698fe7d148c108a46f74abd399aecda2f4f22981a1671cd95dd7d.png 17KB
e49fc2b4f1f39d481a6525225ab3f688be5c87f56884456ad54c953315efae83.png 17KB
55f98f43c152aa0dc8bea513f8ba558cc57494b81ae4ee816977816e79629c50.png 17KB
共 2002 条
- 1
- 2
- 3
- 4
- 5
- 6
- 21
资源评论
小陈phd
- 粉丝: 1686
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功