Exemple #1
0
 def put(self, cmd_list):  #上传
     filename = cmd_list[1]
     self.conn.send(b'ok')
     obj = self.conn.recv(4)
     header_size = struct.unpack('i', obj)[0]  # 获取报头长度
     header_bytes = self.conn.recv(header_size)  # 报头字节
     header_json = header_bytes.decode('utf-8')  # 报头字符串
     header_dict = json.loads(header_json)  # 报头字典
     total_size = header_dict['total_size']  # 数据总长度
     filename = header_dict['filename']
     config = self._get_config()
     quota_size = int(config[cmd_list[2]]['quota']) * 1024 * 1024
     root_dir = os.path.join(os.path.join(settings.BASE_DIR, 'share'),
                             str(config[cmd_list[2]]['home_dir']))
     current_home_size = self._get_dir_size(root_dir)
     if current_home_size + total_size < quota_size:
         self.conn.send('ok'.encode(self.coding))
         with open('{}\{}'.format(self.current_dir, filename), 'wb') as f:
             # print(total_size)
             recv_size = 0
             while recv_size < total_size:  # 循环获取数据,直到完成
                 res = self.conn.recv(1024)
                 f.write(res)
                 recv_size += len(res)
                 # print('总大小:{}   已下载:{}'.format(total_size, recv_size))
         new_file_md5 = self._get_md5('{}\{}'.format(
             self.current_dir, filename))
         if new_file_md5 == header_dict['md5']:
             self.conn.send(new_file_md5.encode(self.coding))
             logger.logger('{} put file {} successful'.format(
                 cmd_list[2], filename))
         else:
             self.conn.send('not'.encode(self.coding))
     else:
         self.conn.send('not'.encode(self.coding))
Exemple #2
0
 def get(self,cmd_list):        #下载
     filename = cmd_list[1]
     file_list = os.listdir( self.current_dir)
     for i in file_list:
         if not os.path.isfile(os.path.join( self.current_dir, i)):
             file_list.pop(file_list.index(i))
     if filename not in file_list:
         header_dict = {
             'filename': filename,
             'file_list': file_list,
         }  # 生成报头
         header_json = json.dumps(header_dict)  # 将报头转成字符串
         header_bytes = header_json.encode('utf-8')  # 将报头转成字节
         self.conn.send(struct.pack('i', len(header_bytes)))
         self.conn.send(header_bytes)
         self.conn.send('file not exists'.encode(self.coding))
         return
     header_dict = {
         'username':cmd_list[2],
         'total_size':os.path.getsize('{}\{}'.format( self.current_dir,filename)),
         'filename':filename,
         'md5':self._get_md5('{}\{}'.format( self.current_dir,filename)),
         'file_list':file_list,
     }    #生成报头
     header_json = json.dumps(header_dict)                     #将报头转成字符串
     header_bytes = header_json.encode('utf-8')              #将报头转成字节
     self.conn.send(struct.pack('i',len(header_bytes)))
     self.conn.send(header_bytes)
     with open('{}\{}'.format( self.current_dir,filename),'rb') as f:
         for i in f:
             self.conn.send(i)
     logger.logger('{} get file {} successful'.format(cmd_list[2],filename))
Exemple #3
0
def main(args):
    device = torch.device('cuda:{}'.format(args.device)) \
        if args.cuda else torch.device('cpu')

    model = EfficientDet.from_pretrained(args.model).to(device) \
        if args.pretrained else EfficientDet.from_name(args.model).to(device)

    if args.mode == 'trainval':
        logger("Model's trainable parameters: {}".format(
            count_parameters(model)))

        loader = get_loader(path=cfg.TRAIN_SET,
                            annotations=cfg.TRAIN_ANNOTATIONS,
                            batch_size=cfg.BATCH_SIZE)

        optimizer, scheduler, criterion, ema_decay = build_tools(model)
        writer = setup_writer(args.experiment, args)
        best_score = -1

        for epoch in range(cfg.NUM_EPOCHS):
            model, optimizer, scheduler, writer = \
                train(model, optimizer, loader, scheduler,
                      criterion, ema_decay, device, writer)

            if epoch > cfg.VAL_DELAY and \
                    (epoch + 1) % cfg.VAL_INTERVAL == 0:
                ema_decay.assign(model)
                model, writer, best_score = \
                    validate(model, device, writer,
                             cfg.MODEL.SAVE_PATH, best_score=best_score)
                ema_decay.resume(model)

    elif args.mode == 'eval':
        validate(model, device)
Exemple #4
0
 def put_money(self):  #交学费
     if self.tuition == False:
         money = self.grade[0].course[0].price
         print('未交学费,您的课程{},需要{}'.format(self.grade[0].course[0].name,
                                         money))
         self.tuition = True
         print('学费缴纳成功')
         logger.logger('{} successful tuition fee'.format(self.name))
     else:
         print('已交学费')
Exemple #5
0
    def from_pretrained(name):
        """ Interface for pre-trained model """
        cfg.MODEL.choose_model(name)

        model_to_return = EfficientDet(name)

        if not cfg.MODEL.WEIGHTS.exists():
            logger('Downloading pre-trained {}...'.format(cfg.MODEL.NAME))
            download_model_weights(name, cfg.MODEL.WEIGHTS)

        model_to_return._load_weights(cfg.MODEL.WEIGHTS)
        return model_to_return
Exemple #6
0
    def create_grade(self):  #创建班级
        teacher_list = []
        with open(settings.GRADE_FILE, 'rb') as f:
            grade_dict = pickle.loads(f.read())
        with open(settings.COURSE_FILE, 'rb') as f:
            course_dict = pickle.loads(f.read())
        with open(settings.USER_FILE, 'rb') as f:
            user_dict = pickle.loads(f.read())
        with open(settings.SCHOOL_FILE, 'rb') as f:
            school_list = pickle.loads(f.read())
        for i in school_list:
            print(school_list.index(i), i.area)
        area_num = input('请输入创建班级的校区序号').strip()
        if area_num.isdigit() and int(area_num) in range(len(school_list)):
            area = school_list[int(area_num)]
        else:
            print('无效的输入')
        grade_name = input('输入班级名:').strip()
        area.show_course()
        grade_course = input('关联课程:').strip()
        if grade_course not in course_dict:
            print('无此课程')
            return

        for i in user_dict:
            if user_dict[i]['role'] == 'teacher':
                if user_dict[i]['username_obj'].school[0].area == area.area:
                    # print(user_dict[i]['username_obj'].school[0].area,area.area)
                    teacher_list.append(i)
        if teacher_list:
            print('本校区讲师:')
            for i in teacher_list:
                print(i)
        else:
            print('本校区暂无讲师,请先创建讲师')
            return
        grade_teacher = input('关联讲师:').strip()
        if grade_teacher not in user_dict:
            print('无此讲师')
            return
        grade_obj = course.grade(grade_name)
        grade_obj.course.append(course_dict[grade_course])
        grade_obj.teacher.append(user_dict[grade_teacher]['username_obj'])
        # area.grade.append(grade_obj)
        school_list[int(area_num)].grade.append(grade_obj)
        grade_dict[grade_name] = grade_obj
        print('创建班级{}成功'.format(grade_name))
        logger.logger('{} successful create class {}'.format(
            self.name, grade_name))
        with open(settings.SCHOOL_FILE, 'wb') as f:
            f.write(pickle.dumps(school_list))
        with open(settings.GRADE_FILE, 'wb') as f:
            f.write(pickle.dumps(grade_dict))
Exemple #7
0
    def from_name(name):
        """ Interface for model prepared to train on COCO """
        cfg.MODEL.choose_model(name)

        model_to_return = EfficientDet(name)

        if not cfg.MODEL.BACKBONE_WEIGHTS.exists():
            logger('Downloading backbone {}...'.format(cfg.MODEL.BACKBONE))
            download_model_weights(cfg.MODEL.BACKBONE, cfg.MODEL.BACKBONE_WEIGHTS)

        model_to_return._load_backbone(cfg.MODEL.BACKBONE_WEIGHTS)
        model_to_return._initialize_weights()
        return model_to_return
Exemple #8
0
def main(args):
    device = torch.device('cuda:{}'.format(args.device)) \
        if args.cuda else torch.device('cpu')

    model = EfficientDet.from_pretrained(args.model).to(device) \
        if args.pretrained else EfficientDet.from_name(args.model).to(device)

    if args.mode == 'trainval':
        logger("Model's trainable parameters: {}".format(
            count_parameters(model)))

        loader = get_loader(path=cfg.TRAIN_SET,
                            annotations=cfg.TRAIN_ANNOTATIONS,
                            batch_size=cfg.BATCH_SIZE)

        optimizer, scheduler, criterion, ema_decay = build_tools(model)
        writer = setup_writer(args.experiment, args)
        best_score = -1

        for epoch in range(cfg.NUM_EPOCHS):
            model, optimizer, scheduler, writer = \
                train(model, optimizer, loader, scheduler,
                      criterion, ema_decay, device, writer)

            if epoch > cfg.VAL_DELAY and \
                    (epoch + 1) % cfg.VAL_INTERVAL == 0:
                ema_decay.assign(model)
                model, writer, best_score = \
                    validate(model, device, writer,
                             cfg.MODEL.SAVE_PATH, best_score=best_score)
                ema_decay.resume(model)

    elif args.mode == 'eval':
        model.eval()
        #model.to(memory_format=torch.channels_last)
        with torch.no_grad():
            model = torch.jit.script(model)
            #model = torch.utils.mobile_optimizer.optimize_for_mobile(model)
            #model(torch.randn((1,3,896,896)))
        import sys, time
        #N = 16
        #t =- time.time()
        #with torch.no_grad():
        #    for _ in range(N):
        #        model(torch.randn((1,3,896,896)))
        #t += time.time()
        #print(t/N)
        #sys.exit(0)
        import pdb
        pdb.set_trace()
        validate(model, device)
Exemple #9
0
 def get_msg(self):  #查看个人信息
     print('所在校区:{}'.format(self.school[0].area))
     course_list = []
     with open(settings.GRADE_FILE, 'rb') as f:
         grade_dict = pickle.loads(f.read())
     for i in grade_dict:
         if grade_dict[i].teacher[0].name == self.name:
             course_list.append(i)
     if course_list:
         print('所带班级:')
         for i in course_list:
             print(i)
     else:
         print('所带班级:无')
     logger.logger('{} view personal information'.format(self.name))
Exemple #10
0
 def select_grade(self):  #选择上课班级
     course_list = []
     with open(settings.GRADE_FILE, 'rb') as f:
         grade_dict = pickle.loads(f.read())
     print('以下为您所教的班级')
     for i in grade_dict:
         if grade_dict[i].teacher[0].name == self.name:
             course_list.append(i)
             print(i)
     choose = input('选择您要上课的班级:').strip()
     if choose in course_list:
         print('您选择了{}班,去上课吧'.format(choose))
         logger.logger('{} choose class {}'.format(self.name, choose))
     else:
         print('这不是您教的班级或无此班级')
Exemple #11
0
    def put(self, cmd):
        if len(cmd.split()) != 2:
            print('参数个数不正确')
            return
        file_list = os.listdir(settings.DOWNLOAD_DIR)
        for i in file_list:
            if not os.path.isfile(os.path.join(settings.DOWNLOAD_DIR, i)):
                file_list.pop(file_list.index(i))
        if cmd.split()[1] not in file_list:
            print('此文件不存在')
            return
        self.client.send(cmd.encode('utf-8'))
        self.client.recv(1024)
        filename = cmd.split()[1]
        header_dict = {
            'total_size':
            os.path.getsize('{}\{}'.format(settings.DOWNLOAD_DIR, filename)),
            'filename':
            filename,
            'md5':
            self.get_md5('{}\{}'.format(settings.DOWNLOAD_DIR, filename)),
        }  # 生成报头
        total_size = header_dict['total_size']
        header_json = json.dumps(header_dict)  # 将报头转成字符串
        header_bytes = header_json.encode('utf-8')  # 将报头转成字节
        self.client.send(struct.pack('i', len(header_bytes)))
        self.client.send(header_bytes)
        progress = self._progress_bar()
        progress.__next__()
        judge_quota = self.client.recv(1024).decode(self.coding)
        if judge_quota == 'ok':
            with open('{}\{}'.format(settings.DOWNLOAD_DIR, filename),
                      'rb') as f:
                send_size = 0
                for i in f:
                    self.client.send(i)
                    send_size += len(i)
                    current_percent = send_size / total_size * 100
                    progress.send(current_percent)

            res = self.client.recv(1024).decode(self.coding)
            if res == 'not': print('上传文件损坏')
            else:
                print('\n')
                print('传输完整:{}'.format(res))
                logger.logger('put file {} successful'.format(filename))
        else:
            print('空间不足,无法上传')
Exemple #12
0
 def _login(self):        #登陆
     config = self._get_config()
     try:
         user_info_bytes = self.conn.recv(1024)
     except ConnectionResetError:
         return
     if user_info_bytes:
         user_info = json.loads(user_info_bytes.decode(self.coding))
         username = user_info['username']
         password = user_info['password']
         if username in config.sections() and password == config[username]['password']:
             self.conn.send(username.encode(self.coding))
             user_dict = {'username':username,'quota':config[username]['quota']}
             logger.logger('{} login successful'.format(username))
             return user_dict
         else:self.conn.send('not'.encode(self.coding))
Exemple #13
0
 def get_msg(self):  #获取个人信息
     if len(self.school) != 0 and len(self.grade) != 0:
         print('所在校区:{}'.format(self.school[0]))
         print('所选课程:{}'.format(self.grade[0].course[0].name))
         print('所在班级:{}'.format(self.grade[0].name))
         if self.tuition == False:
             print('学费状态:未交学费')
         else:
             print('学费状态:已交学费')
         if self.fraction:
             print('课程成绩:{}'.format(self.fraction))
         else:
             print('课程成绩:您还没有成绩')
         logger.logger('{} view personal information'.format(self.name))
     else:
         print('您还未注册')
Exemple #14
0
 def login(self):
     for i in range(3):
         username = input('input your username:'******'input your password:'******'用户名或密码不能为空')
             continue
         m = hashlib.md5(password.encode(self.coding))
         user_info = {'username':username,'password':m.hexdigest()}
         user_info_json = json.dumps(user_info)
         user_info_bytes = user_info_json.encode(self.coding)
         self.client.send(user_info_bytes)
         res = self.client.recv(1024).decode(self.coding)
         if res == 'not':
             print('用户名密码错误')
             continue
         else:
             logger.logger('{} login successful'.format(username))
             return res
Exemple #15
0
    def get(self, cmd):
        if len(cmd.split()) != 2:
            print('参数个数不正确')
            return
        self.client.send(cmd.encode('utf-8'))
        obj = self.client.recv(4)
        header_size = struct.unpack('i', obj)[0]  #获取报头长度
        header_bytes = self.client.recv(header_size)  #报头字节
        header_json = header_bytes.decode('utf-8')  #报头字符串
        header_dict = json.loads(header_json)  #报头字典

        filename = header_dict['filename']
        if filename not in header_dict['file_list']:
            data = self.client.recv(1024)
            print(data.decode(self.coding))
        else:
            # self.shelve_obj[]
            total_size = header_dict['total_size']  # 数据总长度
            progress = self._progress_bar()
            progress.__next__()
            with open('{}\{}'.format(settings.DOWNLOAD_DIR, filename),
                      'wb') as f:
                # print(total_size)
                recv_size = 0
                while recv_size < total_size:  #循环获取数据,直到完成
                    res = self.client.recv(1024)
                    f.write(res)
                    recv_size += len(res)
                    current_percent = recv_size / total_size * 100
                    progress.send(current_percent)

            new_file_md5 = self.get_md5('{}\{}'.format(settings.DOWNLOAD_DIR,
                                                       filename))
            if new_file_md5 == header_dict['md5']:
                print('\n')
                print('传输完整:{}'.format(new_file_md5))
                logger.logger('get file {} successful'.format(filename))
            else:
                print('传输过程中有数据丢失')
Exemple #16
0
 def registered(self):  #注册
     if len(self.school) == 0 and len(self.grade) == 0:
         with open(settings.SCHOOL_FILE, 'rb') as f:
             school_list = pickle.loads(f.read())
         for i in school_list:
             print(school_list.index(i), i.area)
         select = input('选择您要报名的校区序号:').strip()
         if select.isdigit() and int(select) in range(len(school_list)):
             self.school.append(i.area)
             for k in school_list[int(select)].grade:
                 print(school_list[int(select)].grade.index(k), k.name)
             select1 = input('选择您要报名的班级序号:').strip()
             if select.isdigit() and int(select) in range(len(school_list)):
                 self.grade.append(
                     school_list[int(select)].grade[int(select1)])
         else:
             print('无效的输入')
         # print(self.school, self.grade)
         print('注册成功')
         logger.logger('{} successful regist'.format(self.name))
     else:
         print('您已注册过,请勿重复注册')
Exemple #17
0
 def view_student(self):  #查看班级学员
     course_list = []
     with open(settings.GRADE_FILE, 'rb') as f:
         grade_dict = pickle.loads(f.read())
     with open(settings.USER_FILE, 'rb') as f:
         user_dict = pickle.loads(f.read())
     print('以下为您所教的班级')
     for i in grade_dict:
         if grade_dict[i].teacher[0].name == self.name:
             print(i)
             course_list.append(i)
     choose = input('选择您要查看的班级:').strip()
     if choose in course_list:
         print('班级{}有以下学员:'.format(choose))
         for i in user_dict:
             if user_dict[i]['role'] == 'student':
                 if user_dict[i]['username_obj'].grade[0].name == choose:
                     print(i)
         logger.logger('{} view class {} students'.format(
             self.name, choose))
     else:
         print('这不是您教的班级或无此班级')
Exemple #18
0
 def update_fraction(self):  #修改学员成绩
     course_list = []
     student_list = []
     with open(settings.GRADE_FILE, 'rb') as f:
         grade_dict = pickle.loads(f.read())
     with open(settings.USER_FILE, 'rb') as f:
         user_dict = pickle.loads(f.read())
     print('以下为您所教的班级')
     for i in grade_dict:
         if grade_dict[i].teacher[0].name == self.name:
             print(i)
             course_list.append(i)
     choose = input('选择您要查看的班级:').strip()
     if choose in course_list:
         print('班级{}有以下学员:'.format(choose))
         for i in user_dict:
             if user_dict[i]['role'] == 'student':
                 if user_dict[i]['username_obj'].grade[0].name == choose:
                     print(i)
                     student_list.append(i)
     else:
         print('这不是您教的班级或无此班级')
     choose1 = input('选择您要修改成绩的学员:').strip()
     if choose1 in student_list:
         choose2 = input('输入学员分数:').strip()
         if choose2.isdigit(): choose2 = int(choose2)
         user_dict[choose1]['username_obj'].fraction = choose2
         # print(user_dict[choose1]['username_obj'].fraction,choose2)
         # print(user_dict['student4']['username_obj'].fraction)
         with open(settings.USER_FILE, 'wb') as f:
             f.write(pickle.dumps(user_dict))
         logger.logger('{} Modify student {} performance'.format(
             self.name, choose1))
         print('修改成绩成功')
     else:
         print('无此学员或不是本班学员')
def main():
    context = zmq.Context()
    server = context.socket(zmq.REP)
    server.bind("tcp://*:5555")

    for cycles in itertools.count():
        request = server.recv()

        # Simulate various problems, after a few cycles
        if cycles > 3 and randint(0, 3) == 0:
            logger(Fore.BLUE + Back.WHITE + "Simulating a crash" +
                   Style.RESET_ALL)
            break
        elif cycles > 3 and randint(0, 3) == 0:
            logger(Fore.BLUE + Back.WHITE + "Simulating CPU overload" +
                   Style.RESET_ALL)
            time.sleep(2)

        logger(Fore.BLUE + Back.WHITE + f"Normal request {request}" +
               Style.RESET_ALL)
        time.sleep(1)  # Do some heavy work
        server.send(request)
Exemple #20
0
 def _load_backbone(self, path):
     self.backbone.model.load_state_dict(torch.load(path), strict=False)
     logger('Loaded backbone checkpoint {}'.format(path))
Exemple #21
0
 def _load_weights(self, path):
     self.load_state_dict(torch.load(path))
     logger('Loaded checkpoint {}'.format(path))
Exemple #22
0
def validate(model, device, writer=None, save_filename=None, best_score=0.0):
    """ COCO VAL2017 """
    model.eval()
    wrapper = DetectionWrapper(model, device)

    coco_gt = COCO(cfg.VAL_ANNOTATIONS)
    image_ids = coco_gt.getImgIds()

    batch_paths = []
    batch_ids = []

    processed_img_ids = []
    results = []

    with torch.no_grad():
        for idx, image_id in tqdm(enumerate(image_ids)):
            image_info = coco_gt.loadImgs(image_id)[0]
            image_path = cfg.VAL_SET / image_info['file_name']

            batch_paths.append(image_path)
            batch_ids.append(image_id)

            if (idx + 1) % cfg.BATCH_SIZE == 0:
                output = wrapper(batch_paths, batch_ids)
                for batch_out in output:
                    for det in batch_out:
                        image_id = int(det[0])
                        score = float(det[5])
                        coco_det = {
                            'image_id': image_id,
                            'bbox': det[1:5].tolist(),
                            'score': score,
                            'category_id': int(det[6]),
                        }
                        processed_img_ids.append(image_id)
                        results.append(coco_det)

                batch_paths = []
                batch_ids = []

    json.dump(results, open(cfg.COCO_RESULTS, 'w'), indent=4)

    coco_pred = coco_gt.loadRes(str(cfg.COCO_RESULTS))

    coco_eval = COCOeval(coco_gt, coco_pred, 'bbox')
    coco_eval.params.imgIds = image_ids
    coco_eval.evaluate()
    coco_eval.accumulate()
    coco_eval.summarize()

    if save_filename is not None and best_score < coco_eval.stats[0]:
        logger('Saving model weights with score: {}'.format(
            coco_eval.stats[0]))
        torch.save(model.state_dict(), cfg.WEIGHTS_PATH / save_filename)
        best_score = coco_eval.stats[0]

    if writer is not None:
        writer.add_scalar("Eval/mAP", coco_eval.stats[0], writer.eval_step)
        writer.eval_step += 1

    return model, writer, best_score
Exemple #23
0
import pytest
import pandas as pd

import os
from pathlib import Path
import logging

from log import logger
from config import config
from utils import helper as hp
from utils import parser

logger = logger.logger(__name__,logging.DEBUG)

# root package

PACKAGE_ROOT = Path().resolve()

logger.info(f'Root path: {PACKAGE_ROOT}')

PACKAGE_ROOT_DATA = os.path.join(PACKAGE_ROOT,'data')

logger.info(f'Data path: {PACKAGE_ROOT_DATA}')

"""
Test Objective:

1. Test file and its path in config file
2. Unit test for the helper functions
3. Unit test for parser functions
Exemple #24
0
# -*- coding: utf-8 -*-
from log.logger import logger
log = logger()

from task.task_auto import task_auto
auto = task_auto()